C语言课程设计实验报告.docx
- 文档编号:10909290
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:43
- 大小:942.97KB
C语言课程设计实验报告.docx
《C语言课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告.docx(43页珍藏版)》请在冰豆网上搜索。
C语言课程设计实验报告
课程设计
课程名称程序设计课程设计
设计题目高校在职职工管理软件
班级及班级代码
专业
指导教师:
学号:
姓名:
提交日期:
姓名课程设计成绩
评语:
评价内容
不及格
及格
中
良
优
表达精练,格式准确,基本无错别字
内容完整,思路清晰,结构严谨,设计科学,可操作性强
程序能完成课程设计任务书所规定的任务,功能完善,
独立分析和解决问题能力较好。
代码简洁,算法清晰,可读性强
无抄袭现象且课程设计报告体会深刻
指导教师(签名)
年月日
1系统功能要求(需求分析):
采用结构体数组或文件形式存储职工的信息,每个职工应包含如下几方面的信息:
职工号、姓名、性别、所属二级单位、所学专业、职称、月工资,电话号码。
软件由主函数(含欢迎界面)和下列6个功能模块组成:
(1)减少一个职工(需指定要删除职工的职工号);
(2)增加一个职工号(需输入要增加职工号的所有信息);(3)查找一个职工号的信息(需指定职工号或电话号码);(4)统计指定二级单位的职工人数、工资总额;(5)按职工的工资多少对职工排序(6)退出程序的运行。
(正文宋体4号,行距固定为20英镑)
2系统总体(概要)设计思想
(1)开发及设计的总体思想
高校在职职工管理软件设计算法说明:
STEP1预处理,定义结构体
STEP2进入欢迎界面
STEP3选择某一种功能
STEP4根据提示输入一个字母
STEP5对于输入的字母编辑关于删除、增加、排序、查找、统计功能的函数
STEP6如果输入的字母表示退出,退出系统
(2)
系体模块结构图
(3)系统文件及函数组成、功能(参考P154的表12-1)
源文件
函数名及其成分
功能
workers.c
main
总控函数
库函数及函数原型声明
引用库函数及函数
常数
提供常数
add_disp.c
showTable
输出表头
display
显示所有职工信息函数
addRecord
在当前表的末尾增加新的信息
handle_menu.c
handle_menu
菜单处理函数
menu_select.c
menu_select
菜单选择函数
quit
结束运行,退出
que_remv.c
findRecord
查找指定记录函数
showTable
打印查询到的职工信息
removeRecord
删除记录函数
copyRecord
将src指向的一条记录复制给dest指向的记录
save_load.c
saveRecords
文件存储操作函数
loadRecords
文件读取操作函数
sort_tongji.c
Tongji
统计职工资料
showTable
打印统计二级单位的职工人数和工资总额
sortInfo
职工信息排序函数
workers.h
常数
提供常数
结构声明
职工信息结构
库函数及函数原型声明
引用库函数及函数
3系统详细设计
(1)函数的描述
a.本程序总共有8个文件:
workers.h
workers.c
add_disp.c
sav_load.c
que_remv.c
sort_tongji.c
handle_menu.c
menu_select.c
b.所涉及到的函数如下:
(1).菜单处理函数
函数原型:
voidhandle_menu(void);//菜单处理
功能:
处理选择的菜单命令
参数:
void
返回值:
void
工作方式:
根据命令,调用相应函数
要求:
给出结束信息
(2).菜单选择函数
函数原型:
intmenu_select(void);//菜单选择
功能:
接受用户选择的命令代码
参数:
void
返回值:
int
工作方式:
返回命令代码的整数值
要求:
只允许选择规定键,如果输入不合要求,则提醒用户重新输入
(3).删除记录函数
函数原型:
voidremoveRecord(void);//删除指定的记录
功能:
删除内存数组内存数组中的指定记录
参数:
void
返回值:
void
工作方式:
根据给定的关键字,查找符合的记录并删除之。
要求:
将后面的记录前移,同时改变名次并给出相关信息
(4).增加信息函数
函数原型:
voidaddRecord(void);//在表尾追加职工信息
功能:
增加记录
参数:
void
返回值:
void
工作方式:
从尾部开始逐个追加记录
要求:
将新的记录追加在记录尾部,并对记录进行计数
(5).显示所有学生信息函数
函数原型:
voiddisplay(void);//显示信息
功能:
显示内存里的记录信息
参数:
void
返回值:
void
工作方式:
从头部开始逐个显示记录内容
要求:
报告是否有记录及记录条数和内容
(6).查询指定职工信息函数
函数原型:
voidqueryInfo(void);//查询指定的职工信息
功能:
将一个文件的内容追加到另一个文件的尾部
参数:
void
返回值:
void
工作方式:
可以按照职工号或电话号码来查询
要求:
打印查询到的学生的信息或给出相关信息。
(7).对职工信息进行排序
函数原型:
voidsort(void);//对职工进行排序
功能:
对职工信息进行排序
参数:
void
返回值:
void
工作方式:
按职工工资多少对职工进行排序
要求:
打印排序结果
(8).统计二级单位人数和工资总额
函数原型:
voidtongji(void);//统计函数
功能:
统计二级单位人数和工资总额
参数:
void
返回值:
void
工作方式:
指定二级单位,然后再进行统计
要求:
统计后打印
(9).文件存储操作函数
函数原型:
intsaveRecords(void);//文件存储
功能:
将记录存入默认文件wor_info或者指定文件
参数:
void
返回值:
成功0,失败-1
工作方式:
数组records被保存至指定文件
要求:
报告是否有记录可存,是否能正常建立或打开文件,根据要求执行存入操作并报告存入记录的条数
(10).文件读取操作函数
函数原型:
intloadRecords(void);//文件读取
功能:
默认文件wor_info或者指定文件的记录取入内存
参数:
void
返回值:
成功0,失败-1
工作方式:
records为从指定文件中读取出的记录
要求:
报告是否有记录可存,是否能够正常打开文件,是否覆盖已有记录以及读取记录的条数
(11).结束程序运行函数
函数原型:
voidquit(void);//结束运行
功能:
结束程序运行
参数:
void
返回值:
void
工作方式:
根据要求决定在退出前是否将修改的记录存入文件
要求:
结束运行之前,询问是否对修改的记录进行存储
(12).输出表头函数
函数原型:
voidshowTable(void);//输出表头
功能:
输出表头信息
参数:
void
返回值:
void
工作方式:
输出一行表头信息
要求:
输出一行表头信息
(13).查找指定记录函数原型
函数原型:
intfindRecord(char*target,inttargetType,intfrom);
功能:
查找指定的记录
参数:
char*target欲查找记录的某一项及target相同;
inttargetType通过什么来查找;
intfrom从第from个记录开始查找
返回值:
int(找到的记录的序号),若找不到则返回-1
工作方式:
根据给定的关键字,查找符合记录的序号
要求:
找不到则返回-1
(2)主要函数流程图(2个以上,可参考材P148的写法)
addRecordquit
(3)编码(附后)
4系统测试
内容包括:
程序调试情况(8幅以上测试结果截图);
5、总结:
本人C语言程序设计基础较差,因此,在写这个程序的时候遇到了诸多困难,多亏同学的帮忙我的程序才可以成功地运行,真的是自己之前不够刻苦,用功,写代码这种东西还是要多练,多做题才能有收获,在写那个登陆账号和密码的函数的时候,我调试了好久都没发现错误,最后。
在同学的帮助下,成功发现是数组那里除了问题,居然少打了个中括号。
所以本人数组和指针方面的知识点欠缺,还需要多多练习。
虽然这份程序是参考学生成绩那份来找灵感的,还是出现了好多错误,最大的收货就是看到程序成功运行的那一刻。
6结束语
感谢李惠坤同学和林柔佳同学热心帮助。
参考文献
[1]谭浩强,C程序设计(第二版),北京:
清华大学出版社,2001.1(左对齐,宋体,五号)
[2]陈朔鹰,C语言程序设计习题集,北京:
人民邮电出版社,2003.6
7附录(代码)
#include
#include
//#include
#include
#include
#defineINITIAL_SIZE100//数组初始大小
#defineINCR_SIZE50//数组每次增加的大小
structworkers_info
{//每个职工包含的信息
charnum[10];//职工号
charname[10];//姓名
charsex[3];//性别
charpost[10];//所属二级单位
charmajor[10];//所学专业
charjobname[10];//职称
floatsalary;//月工资
charphonenum[11];//电话号码
}wk[10];
typedefstructworkers_infoWrkInfo;
externintnumWrks;//记录职工数
externWrkInfo*records;//记录职工信息的数组
externcharsavedTag;//信息是否已保存的标志,0为已保存,1为未保存
externintarraySize;//数组大小
voidhandle_menu(void);//菜单处理
intmenu_select(void);//菜单选择
voidremoveRecord(void);//删除指定的记录
voidaddRecord(void);//在表尾追加职工信息
voiddisplay(void);//显示信息
voidqueryInfo(void);//查询指定的职工信息
voidsortInfo(void);//对职工进行排序
voidTongji(void);//统计函数
intsaveRecords(void);//文件存储
intloadRecords(void);//文件读取
voidquit(void);//结束运行
voidshowTable(void);//输出表头
intfindRecord(char*target,inttargetType,intfrom);//char*target欲查找记录的某一项及target相同;inttargetType通过什么来查找;intfrom从第from个记录开始查找
#include"workers.h"
/*************************
*初始化
*************************/
intnumWrks=0;//记录的职工数
WrkInfo*records=NULL;//记录职工信息的数据
charsavedTag=0;//信息是否已保存的标志,1为未保存,0为保存
intarraySize;//数组大小
/*********************
*主函数
********************/
voidmain()
{
//初始化数组
chara[20]="14251102104",b[20]="0808",str[20];
records=(WrkInfo*)malloc(sizeof(WrkInfo)*INITIAL_SIZE);
system("color5A");
if(records==NULL)
{
printf("memoryfail!
");
exit(-1);
}
arraySize=INITIAL_SIZE;//
printf("\n");
printf("\t**********************************\n");
printf("\t*这是一个*\n");
printf("\t*高校在职职工简单管理程序*\n");
printf("\t*可以对职工信息进行管理*\n");
printf("\t*欢迎使用管理程序*\n");
printf("\t**********************************\n");
printf("\n");
printf("\n");
printf("请输入用户名<14251102104>和密码<0808>");
while
(1){
scanf("%s",str);
if(!
strcmp(str,a)){
scanf("%s",str);
if(!
strcmp(str,b)){
printf("登陆成功");
handle_menu();
}
elseprintf("登陆失败");
}
}
}
voidcopyRecord(WrkInfo*src,WrkInfo*dest);
/*********************
*菜单处理函数
********************/
#include"workers.h"
voidhandle_menu(void)
{
for(;;){
switch(menu_select())
{
case1:
removeRecord();
break;
case2:
addRecord();
break;
case3:
queryInfo();
break;
case4:
Tongji();
break;
case5:
sortInfo();
break;
case6:
display();
break;
case7:
saveRecords();
break;
case8:
loadRecords();
break;
case9:
quit();
}
}
}
#include"workers.h"
/*********************
*菜单选择函数menu_select
********************/
intmenu_select()
{
chars[2];
intcn=0;
printf("\n");
printf("\t1.删除职工信息\n");
printf("\t2.增加职工信息\n");
printf("\t3.查询职工信息\n");
printf("\t4.统计职工信息\n");
printf("\t5.对职工信息进行排序\n");
printf("\t6.显示职工信息\n");
printf("\t7.保存学生信息至记录文件\n");
printf("\t8.从记录文件读取学生信息\n");
printf("\t9.结束运行\n");
printf("\n\t左边数字对应功能选择,请选1-9:
\n\n");
for(;;)
{
gets(s);
cn=atoi(s);
if(cn<1||cn>9)printf("\n\t输入错误,重选1-9:
\n\n");
elsebreak;
}
returncn;
}
/*********************
*结束运行,退出
*参数void
********************/
voidquit(void)
{
charstr[5];
if(savedTag==1)
{
printf("是否保存原来的记录?
(Y/n)");
gets(str);
if(str[0]!
='n'&&str[0]!
='N')
saveRecords();
}
free(records);
exit(0);
}
#include"workers.h"
/*********************
*输出表头
********************/
voidshowTable(void)
{
printf("职工号\t姓名\t性别\t所属二级单位\t所学专业\t职称\t月工资\t电话号码\n");
}
/*********************
*显示所有职工信息函数
********************/
voiddisplay(void)
{
inti;
if(numWrks==0)
{
printf("没有可供显示的记录!
");
return;
}
showTable();
for(i=0;i { //打印职工信息 printf("%s\t%s\t%s\t%s\t",records[i].num,records[i].name,records[i].sex,records[i].post,records[i].major); printf("%s\t%s\t%f\t%s\t",records[i].jobname,records[i].salary,records[i].phonenum); //打印满10个记录后停下来 if(i%9==0&&i! =0) { printf("输入任一字符后继续...\n"); getch(); printf("\n\n"); showTable(); } } } /**************************************** *在当前表的末尾增加新的信息结果: *records中将记录的信息,如果数组 *大小不够,会重新申请数组空间 ****************************************/ voidaddRecord(void) { //records=realloc(records,(arraySize+INCR_SIZE)*sizeof(WrkInfo)); charstr[10]; intj; floatmark,sum; if(numWrks==0) printf("原来没有记录,现在建立新表\n"); else printf("下面在当前表的末尾增加新的信息\n"); while (1)//()中为1表示无条件反复循环 { printf("您将要添加一组信息,确定吗? (Y/n)"); gets(str); if(str[0]=='n'||str[0]=='N')//不再添加新的信息 break; if(numWrks>=arraySize)//现在的数组空间不足,需要重新申请空间 { records=realloc(records,(arraySize+INCR_SIZE)*sizeof(WrkInfo));//新空间大小变为(arraySize+INCR_SIZE)记录大小,即在原来基础上增加INCR_SIZE个记录大小 if(records==NULL) { printf("memoryfailed! "); exit(-1); } arraySize=arraySize+INCR_SIZE;//arraySize修改为新空间可保存的记录数 } printf("请输入职工号: "); gets(records[numWrks].num); printf("请输入姓名: "); gets(records[numWrks].name); printf("请输入性别(0为女,1为男): "); gets(str); if(str[0]=='0') strcpy(records[numWrks].sex,"女"); else strcpy(records[numWrks].sex,"男"); printf("请输入所属二级单位: "); gets(records[numWrks].post); printf("请输入所学专业: "); gets(records[numWrks].major); printf("请输入职称: "); gets(records[numWrks].jobname); printf("请输入月工资: "); gets(str); records[numWrks].salary=(float)atof(str); printf("请输入电话号码: "); gets(records[numWrks].phonenum); numWrks++; } printf("现在一共有%d条信息\n",numWrks); savedTag=1; }#include"workers.h" /********************************************* *查找指定记录函数 *参数: target: 欲查找记录的某一项及target相同 *targetType: 表明通过那一项来查找,0为学号,1为姓名,2为名次 *from: 从第from个记录开始找 *返回: 找到的记录的序号,若找不到则返回-1 *********************************************/ intfindRecord(char*target,inttargetType,intfrom) { inti; for(i=from;i<=numWrks;i++) { if((targetType==0&&strcmp(target,records[i].num)==0)||(targetType==1&&strcmp(target,records[i].name)==0)||(targetType==2&&strcmp(target,records[i].post)==0)) returni; } return-1; } voidqueryInfo(void) { charstr[5]; chartarget[20]; inttype;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)