C语言课程设计任务书
本课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,做出设计报告。
学生选题说明
一、设计要求:
可自己选定一题目。模块化程序设计,必须上机调试通过,程序完成后,交书面课程设计报告一份,字体要工整清晰,(不可打印)
《课程设计报告》格式要求,包含以下信息:
一、 程序题目
二、 程序的功能说明
三、 心得体会
四、 源代码(代码要加注释)
二、检查要求:
打分标准:
1、根据程序运行结果;
2、根据《C语言课程设计报告》,学生能对自己的程序面对教师提问并能熟练地解释清楚
以上缺一不可,否则不能到得相应学分
三、设计题目
1、职工信息管理系统设计
1. 目的:
(1)要求学生熟练掌握C语言的基本知识和编程技能;
(2)基本掌握结构化程序设计的基本思路和方法;
2. 要求
基本要求:
(1)试设计一个职工信息管理系统,使之能提供以下功能:
(2)系统以菜单方式工作
(3)职工信息录入功能(职工信息用文件保存)——输入
(4)职工信息浏览功能——输出
(5)查询或排序功能:(至少一种查询方式)——算法,按工资查询,按学历查询等
(6)系统进入画面(静态或动画)
(7)职工信息删除功能
(8)职工信息修改功能
3.创新要求
在基本要求达到后,可进行创新设计,如对菜单进行美化。
4、信息描述
职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。
5、功能描述
1)录入职工信息并保存
2)显示所有职工信息(以一定的格式)
3)查询职工信息(以一种或多种方式)
4)修改职工信息并保存
5)删除职工信息
2、设计一个多功能计算软件
实现功能:
1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果。结果可以作为下一个运算的第一运算数。按‘C’清屏,按‘R’返回 菜单。
例如:输入:2
+
5
输出:7
2)实现单运算符表达式计算的功能。输入的操作数可以包含整数或浮点数。输入表达式如下:
例如:输入:2+5
输出:7
3、 学生成绩管理系统
1) 具备对成绩的管理功能(添加、删除、排序)
2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等)
3) 具备按学号、姓名、或课程名查询成绩的功能。
备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。可以用能表示学生成绩的结构体数组存储数据。
4、 设计一个通讯录管理软件。
实现功能:
1) 通讯录编辑
(添加、删除)。
2) 按不同的项进行查找。
3) 对已存在的通讯录按不同的项排序。
4) 将通讯录写入文件
5) 从文件读入通讯录
备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。
5、图书管理系统设计
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,系统以菜单方式,使之能提供以下功能:
1)图书信息录入功能(图书信息用文件保存)2)图书信息浏览功能3)查询和排序功能,按书名查询和按作者名查询或价格等查询4)图书信息的删除与修改5)统计功能
6、做一个背单词的小程序
程序一菜单方式工作,字典使用文本文件存放就可以了。使之能提供以下功能:
添加新词;2)支持顺序测验和随机测验;3)记录没背过的词;4)查找单词的汉语或英语意思(输入中文查对应的英语意思,输入英文查对应汉语意思)
7、电脑报价
电脑各部件的信息包括:部件名、价格、分类号、型号、厂商、报价时间等。试设计一电脑报价系统,系统以菜单方式工作,使之能提供以下功能:1)添加电脑各部件的信息功能(用文件保存)2)查询功能,按类型、价格等查询3)生成报价单;4)电脑各部件的信息的删除与修改
8、宾馆客房管理
宾馆的客房信息包括:客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间、预付费用等信息。试设计一宾馆客房管理系统,系统以菜单方式工作,使之能提供以下功能:1)客房信息的录入功能2)客人入住登记3)客人退房结算4)客房信息浏览功能,浏览全部客房信息5)客房信息查询:查询空房间情况、按姓名或房间号查询6)客房信息的删除、修改功能
9、小游戏设计
扫雷、贪吃蛇,五子棋等
附录1:一个显示菜单的主函数
main()
{
int x0,y0;
char a;
while(1)
{
textbackground(1);
textcolor(14);
clrscr();
a=0,x0=30,y0=3;
gotoxy(x0+1,y0); puts("系 统 主 菜 单");
gotoxy(x0,y0+=3);puts("1: 打开或建立文件");
gotoxy(x0,y0+=2);puts("2: 录 入 数 据");
gotoxy(x0,y0+=2);puts("3: 删 除 数 据");
gotoxy(x0,y0+=2);puts("4: 数 据 查 询");
gotoxy(x0,y0+=2);puts("5: 退 出 系 统");
gotoxy(x0-10,y0+=3);printf("请输入数字选择: ");
a=bioskey(0)%256;
switch(a)
{
case '1':openfile(); break;
case '2':inputdata();break;
case '3':deletedata();break;
case '4':finddata(); break;
case '5':closefile(); exit(0);
default: ;
}
}
}
附录2:相关函数
以下函数的原型都在conio.h中。
1、window函数:
原型:void window (int left, in
t top, int right, int bottom);
原型在conio.h中。
功能:创建矩形字符文本窗口。其左上角的坐标由left,top表示;右下角的坐标由right, bottom表示。
注意:一旦该函数调用成功,所有定位坐标都是相对于窗口,而非相对于屏幕。
2、clrscr函数
原型:void clrscr(void);
功能:清除当前字符窗口,将光标定位在左上角(1,1)处。
3、textbackground函数
原型:void textbackground(int newcolor);
功能:设置字符屏幕的背景颜色为newcolor。
4、textcolor函数
原型:void textcolor(int newcolor);
功能:设置字符屏幕下的字符颜色为newcolor。
颜色的枚举说明如下:
enum COLORS {
BLACK, /* dark colors */
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY, /* light colors */
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE
};
5、gotoxy函数
原型:void gotoxy(int x, int y);
功能:将字符屏幕的光标移动到x,y所指定的位置。如果其中有一个坐标值无效,则光标不移动。
6、gettext函数
原型:int gettext(int left, int top, int right, int bottom,void *buf);
功能:将左上角的坐标为(left,top),右下角的坐标为(right,bottom)矩形上的字符拷贝到由buf所指向的内存。
注意:
(1)坐标是屏幕绝对坐标,不是窗口的相对坐标。
(2)保存屏幕上一个区域所需要的内存数量可按照公式:rows?columns?2
原因是屏幕上每个字符要求两字节的存储单元,一个字节存放字符本身,另一个字节存放该字符的属性(显示属性)。
7、puttext函数
原型:int puttext(int left, int top, int right, int bottom,void * buf);
功能:将原来由gettext函数存储到buf所指向的内存中的字符拷贝到左上角的坐标为(left,top),右下角的坐标为(right,bottom)的矩形区域中。
注意:坐标是屏幕绝对坐标,不是窗口的相对坐标。
8、bioskey函数
原型:int bioskey(int cmd);
该函数原型在bios.h中。
功能:bioskey完成直接键盘操作。cmd的值决定执行什么操作。
如果cmd的值是0,bioskey返回下一个在键盘上键入的值(它将等待到按下下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个“普通键”时,它的低8位数存放着该字符的ASCII码。对于“特殊键”,低8位为0。特殊键包括箭头键,功能键,shift,Alt键等。高8位存放该键的扫描码。
当cmd的值是1时,bioskey查询是否已经按下一个键。当按下时,它返回它返回非0值;否则返回0。
例如:
while(bioskey(1)==0); /* 查询是否已经按下一个键,没有按,继续查询。*/
{
key=bioskey(0); /* 获取键入的键值*/
key=key&0xff?0:key>>8; /* 获取键入的键值*/
if(key==45) exit(0); /* 按Alt+x或
Alt+X,退出*/
if(key==30); /*按 Alt+a或alt+A */
…
}
…
附录3:详细设计说明书的编写提示(参考件)
F.1程序系统的结构
用一系列图表列出本程序系统内的每个程序(包括每个模块和子程序)的名称、标识符和它们之间 的层次结构关系。
F.2程序1(标识符)的设计说明
从本章开始,逐个地给出各个层次中的每个程序的设计考虑。以下给出的提纲是针对一般情况的。 对于一个具体的模块,尤其是层次比较低的模块或子程序,其很多条目的内容往往与它所隶属的上一层 模块的对应条目的内容相同,在这种情况下,只要简单地说明这一点即可。
F.2.1程序描述
给出对该程序的简要描述,主要说明安排设计本程序的目的意义,并且,还要说明本程序的特点(如 是否有返回值?等)。
F.2.2功能
说明该程序应具有的功能,可采用输入一处理一输出的形式。
F.2.3性能
说明对该程序的全部性能要求,包括对精度、灵活性和时间特性的要求。
F.2.4输人项
给出对每一个输入项的特性,包括名称、标识、数据的类型和格式、数据值的有效范围、输入的方式。 数量和频度、输入媒体(例如键盘,文件等)、输入数据的来源和安全保密条件等等。
F.2.5输出项
给出对每一个输出项的特性,包括名称、标识、数据的类型和格式,数据值的有效范围,输出的形式、 数量和频度,输出(例如显示器,文件等)、对输出图形及符号的说明、安全保密条件等等。
F.2.6算法
详细说明本程序所选用的算法,具体的计算公式和计算步骤。
F.2.7流程逻辑
用图表(例如流程图、判定表等)辅以必要的说明来表示本程序的逻辑流程。
F.2.8接口
用图的形式说明本程序所隶属的上一层模块及隶属于本程序的下一层模块、子程序,说明参数赋值和调用方式,说明与本程序相直接关联的数据结构(结构体等)。
F.2.9存储分配
根据需要,说明本程序的存储分配。
F.2.10注释设计
说明准备在本程序中安排的注释,如:
a. 加在模块首部的注释;
b. 加在各分枝点处的注释; 对各变量的功能、范围、缺省条件等所加的注释;
d. 对使用的逻辑所加的注释等等。
F.2.11限制条件
说明本程序运行中所受到的限制条件。
F.2.12测试计划
说明对本程序进行单体测试的计划,包括对测试的技术要求、输入数据、预期结果等。
F.2.13尚未解决的问题
说明在本程序的设计中尚未解决而设计者认为在软件完成之前应解决的问题。
F.3程序2(标识符)的设计说明
用类似F.3的方式,说明第2个程序乃至第N个程序的设计考虑。
例子:职工信息管理系统
需求分析
编写目的:
通过对用户需求进行调查分析,写出需求分析文档作为项目设计的基本准则要求,以及作为系统分析员进行系统分析和测试人员进行测试时的手册
需求概述:
设计一个职工信息管理系统,使之能提供以下功能:
1) 录入职工信息并保存
2) 显示所有职工信息
3) 查询职工信息
4) 修改职工信息并保存
5) 删除职工信息
需求说明:
职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,并且要求职工号不重复;
录入的职工信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作;
职工信息的显式要求有一定的规范格式;
对职工信息应能够分别按工资及按学历两种方式进行,要求能返回所有符合条件的职工的信息;
对职工信息的修改应逐个地进行,一个职工信息的更改不应影响其他的职工记录;
所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况
总体设计
编写目的:
根据需求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案并写出书面文档总体设计说明书,为下一步进行详细设计做准备。
总体设计:
1. 该系统可以按功能进行模块划分,其模块图如下:
系统模块图
其中:
信息输入模块完成职工信息的输入功能,输入信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等;
信息浏览模块完成已录入职工信息的显示;
信息查询模块完成职工信息的查询,查询时对应有按工资查询和按学历查询两种方式;
信息修改模块完成职工信息的修改功能;
信息删除模块完成职工信息的删除功能;
菜单选择模块完成用户命令的接收,此模块也是职工信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能;
2. 数据结构
本系统中主要的数据结构就是职工的信息,包含职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,在处理过程中各项可以作为一个职工的不同属性来进行处理
3. 程序流程
系统的执行应从功能菜单的选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如下:
程序流程图
详细设计
编写目的:
根据项目概要设计说明书,在项目概要设计的
基础之上,对系统进行详细设计,以便下一步进行程序编码工作。
详细设计:
对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下:
① 信息输入模块:
打开职工信息文件;
while ( 继续输入 )
{
读入职工信息;
将读入信息添加到职工信息文件中;
提示是否继续输入;
}
关闭职工信息文件;
② 信息浏览模块:
打开职工信息文件;
while ( 不到文件结束 )
{
从文件中顺序读出一个职工的信息;
按指定格式输出该职工的信息;
}
关闭职工信息文件;
③ 信息查询模块:
while ( 仍继续查询 )
{
if( 按工资查询 )
{
读入查询的职工工资条件;
打开职工信息文件;
while( 不到文件结束 )
{
顺序读出一个职工的信息;
if( 该职工信息的工资符合条件 ) 输出该职工的信息;
}
关闭职工信息文件;
提示共有几条符合条件的记录;
}
else
if ( 按学历查询 )
{
读入学历查询的条件;
打开职工信息文件;
while( 不到文件结束 )
{
顺序读出一个职工的信息;
if( 该职工信息的学历符合条件 ) 输出该职工的信息;
}
关闭职工信息文件;
提示符合条件的记录数;
}
else 提示输入不合适;
提示是否继续查询;
}
④ 信息修改模块:
while( 继续修改 )
{
从给出信息文件中所有的记录情况;
提示并读入待修改的记录的职工的职工号;
打开职工信息文件;
查找并读出该职工的信息到一个中间变量中;
提示并读入要针对该职工的哪个属性进行修改;
根据用户的选择提示并读入所要修改属性的新值;
在该职工的中间变量中修改刚刚读入的属性值;
提示是否确定要进行修改;
如果用户确定则将中间变量重新写回到原职工信息文件中;
关闭职工信息文件;
}
⑤ 信息删除模块:
while( 继续删除 )
{
显示所有职工的信息;
提示并读入待删除的职工的职工号;
打开职工信息文件;
查找是否有符合条件的职工记录;
if( 有符合条件的记录)
{
提示是否确认该删除操作;
if (用户确认此操作)
{
创建一个新的临时文件;
打开原信息文件;
while( 原信息文件中记录未读完 )
{
读出原信息文件中的下一条记录;
if( 此条记录不是待删除记录) 写入临时文件中去;
}
关闭原信息文件;
关闭临时文件;
读方式打开临时文件;
写方式重建与原信息文件同名的新信息文件;
将临时文件中的内容写入到新信息文件中去;
关闭新信息文件;
关闭临时文件;
删除临时文件;
}
}
else 提示没有符合条件的记录存在;
}
⑥ 菜单选择
模块:
给出信息提示;
清屏;
绘制菜单(包含输入、显示、查询、修改、删除、退出);
提示菜单选择并读入到变量;
根据读入变量的值调用不同的模块函数;
数据结构:
性别: enum Sex{ male, female };
学历 :enum Education{ high, junior, college, master, doctor};
日期 :struct Date
{ int year;
int month;
int day;
};
职工信息:struct Info
{
char num[5]; /* 职工号 */
char name[8]; /* 姓名 */
enum Sex sex; /* 性别 */
struct Date birthday; /* 出生年月*/
enum Education education; /* 学历 */
char duty[8]; /* 职务 */
double wage; /* 工资 */
char addr[12]; /* 地址 */
char phone[8]; /* 电话 */
};