C语言课程设计报告.docx
- 文档编号:3489896
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:52
- 大小:692.01KB
C语言课程设计报告.docx
《C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告.docx(52页珍藏版)》请在冰点文库上搜索。
C语言课程设计报告
HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGY
C语言程序设计
课程设计报告
课设题目:
职工管理程序
专业:
电子信息工程(汽车电子)
班级:
电信152
姓名:
魏明煌
成绩:
完成日期:
2016.7.3
指导教师:
向振涛
一.课程设计目的与要求
1.1目的
1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2)通过课程设计,进一步掌握C语言中重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。
5)通过课程设计,加强了自己的程序分析能力。
1.2要求
1)遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。
2)运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。
3)学会利用数组,结构体、链表进行相关信息表示。
4)功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述
5)各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。
6)所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。
7)界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。
8)程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。
9)学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。
10)掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。
11)C语言课程设计报告的内容反应实际设计过程,且符合格式要求。
1.3任务描述
已知职工信息包括:
职工号、职工姓名、工作部门、职称、入厂时间、工资。
设计一程序,完成以下功能:
●
(1)能从键盘输入职工的信息。
●
(2)给定职工号,显示职工的信息。
●(3)给定工作部门,显示该部门的职工信息。
●(4)给定职工号,修改职工的信息。
●(5)给定职工号,删除职工信息。
提示:
(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。
(2)职工信息应该包含职工号、姓名、工作部门、职称、入厂时间、工资。
(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4)应用程序运行后在屏幕上显示一个菜单。
用户可以根据需求,选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
程序根据用户输入的信息完成相应的处理,实现要求的功能。
(5)能对输入的数据进行简单的校验,例如,入厂时间必须是合法的日期格式,职工号是唯一的(一个职工号对应一个职工的职工信息)。
(6)在程序完成处理后,要清楚地给出程序的处理结果。
例如,在给定职工号删除职工信息时,如果该职工不存在,要提示没能删除,如果删除成功要提示删除成功。
(7)使用结构体表示职工信息,一个结点保存一条职工信息。
1.4运行环境
1)WindowsXP/7系统
2)VC++6.0编译环境
1.5开发工具
C语言
二.系统设计
2.1系统流程设计
本系统的功能模块如图1所示,主要有以下模块:
2.2系统模块设计
1)系统欢迎界面:
显示欢迎界面,并提示是否导入职工信息。
2)主菜单界面:
构造函数voidmenu(),实现系统主菜单的显示。
3)创建职工信息链表:
构造函数voidcreat(),实现新建职工的信息。
4)根据职工号显示信息:
构造函数voidnumber(),实现查询指定职工号的职工信息
5)根据工作部门显示信息:
构造函数voidpart(),实现查询指定部门的职工的信息。
6)根据职工号修改信息:
构造函数voidmodify(),实现对指定职工号信息的修改。
7)根据职工号删除信息:
构造函数voiddel(),实现对指定职工号信息的删除。
8)显示全部职工的信息:
构造函数voiddisplay(),实现显示全部职工信息。
9)显示职工的平均工资:
构造函数voidAveWage(),实现显示职工的平均工资。
10)插入职工的信息:
构造函数voidinsert(),在指定位置插入职工的信息
11)从文件中读入职工信息:
构造函数read(),在指定文件中读入职工信息
12)保存职工的信息:
构造函数voidsave(),保存职工信息
13)退出系统:
构造函数voidexit0()用于退出程序。
2.3.详细设计
(1)数据结构设计
根据系统要求,系统中需要保存的数据信息,其结构如下:
数据项名称
数据项系统表示
数据类型
数据长度
备注
职工号
number
字符串
20
姓名
name
字符串
10
工作部门
part
字符串
40
职称
job
字符串
20
入厂日期
time
字符串
15
工资
wage
整形
为了能实现不受限制的增加职工信息,采用链表的结构保存职工信息,在增加职工的基本信息时,创建一个职工信息的节点,将其插入到链表中,示意图如下。
职工信息1职工信息2职工信息3职工信息4
为此,声明一个类型为structstaff的结构体,其成员为职工各项基本信息。
然后通过对指针、链表、文件等数据结构的操作,实现对职工信息的录入,存盘,查询,浏览,删除,修改等一系列操作。
其中,结构体定义如下:
typedefstructstaff
{
charnum[20];
charname[10];
charpart[40];
charjob[20];
chartime[15];
intwage;
structstaff*next;
}STA;
(2)模块接口设计
1)所有函数模块声明如下:
2)intgetindex(char*num);
3)voidmenu();
4)voidcreat();
5)voidnumber();
6)voidpart();
7)voidmodify();
8)voiddel();
9)voidfreelist();
10)voidAveWage();
11)intcode();
12)voidfirst();
13)voiddisplay();
14)voidread();
15)voidinsert();
16)voidsave();
2)主要模块的实现
系统以主函数voidmain()为入口,首先显示欢迎界面。
然后调用voidmenu()函数,进入主菜单界面。
系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。
(3)主要模块的流程图:
1)主菜单函数:
图1主函数流程序
2)新建职工信息
图2信息建立流程图
2)
信息查询函数:
4)修改职工信息流程图
5)信息删除函数:
图5信息删除流程图
6)文件导入信息流程图
三.程序测试与运行结果
3.1程序测试
(1)各模块分别调试过程及结果
建立职工信息:
运行程序选择0进入新建职工信息界面,按提示输入一条职工基本信息,再回到主菜单,选择5显示所有职工信息,看到有刚建立的职工信息说明该模块功能可以实现。
查询职工信息:
运行程序进入主菜单,选择1,输入一职工号,显示出该职工信息。
部门查询职工信息:
运行程序进入主菜单,选择2,输入部门信息,结果显示该部门所有职工信息,结果与实际一致。
修改职工信息:
运行程序进入主菜单,选择3,输入需要修改职工号,重新按提示输入职工信息,再回到主菜单,选择5显示所有职工信息,看到有刚修改的职工信息。
删除职工信息:
运行程序进入主菜单,选择4,输入需要删除的职工号,再选择5,显示结果无刚才所删除的职工信息。
显示职工的平均工资:
运行程序进入主菜单,选择6,显示结果为平均工资。
插入职工信息:
运行程序进入主菜单,选择8,输入需要插入的职工号,再选择5,显示结果有刚才插入的职工信息。
从文件导入信息:
首先在外部磁盘上建立以文本文件建立几条职工记录,运行主菜单,选择7,显示信息成功导入,返回主菜单,再选择5后,有职工信息显示出来说明导入成功。
保存职工记录:
运行程序进入主菜单,选择0新建职工记录后,选择9保存,再查看指定路径文件,结果显示该职工的记录。
退出系统:
运行程序进入主菜单,选择10,按任意键后成功退出。
(2)集成调试过程及结果。
运行程序进入主菜单,依次选择各功能,结果能正常运行。
(3)功能调试过程及结果
3.2欢迎界面:
3.3主菜单界面
输入选择,进入相应的功能。
3.4职工信息录入界面:
3.5职工号查询职工信息:
从键盘中输入要查询的职工号,显示该职工的信息。
3.6职工部门查询界面:
从键盘中输入要查询的职工部门,显示该职工的信息。
3.7修改职工信息界面:
从键盘中输入要修改的职工号,重新输入职工信息。
3.8删除职工信息界面:
从键盘中输入要删除的职工号,删除该职工记录。
3.9显示所有职工信息界面:
4.0退出界面:
四.课程设计总结
4.1.问题与不足
1)详细设计中存在的问题和分析
2)功能不是很齐全,难以满足各种要求。
3)代码编制中存在的问题和分析
4)调试和测试中存在的问题和分析
4.2.建议
建议以后的课设中老师辅导的时间能增加一些,另外题目应多一些,且难易适中。
4.3.心得体会
经过这次课设,我的编程能力有了很大提高,c语言基础知识的掌握更加牢固。
同时,了解了软件开发的基本流程和思路,深刻体会到模块化的编程思想是多么重要,这次课设是综合应用c语言知识分析问题解决问题的过程,在这个过程中,我遇到了很多问题,发现了很多不足,这对我以后继续学习编程乃至其它课程都有借鉴意义,因为不管学习什么,思路和方法永远是最重要的。
总之,我认为课程设计是一门非常好的课程,它把理论和实践相结合,给了我们一次应用所学知识分析问题解决问题的机会,这对提高我们的能力是非常重要的。
五.程序源代码:
#include
#include
#include
typedefstructstaff/*定义一个结构体*/
{
charnum[20];/*职工号姓名部门职称入厂时间*/
charname[10];
charpart[40];
charjob[20];
chartime[15];
intwage;
structstaff*next;
}STA;
STAhead,*p;/*定义头结点*/
STA*findpart(char*part,intm);
STA*findnode(char*num);
intgetindex(char*num);
voidmenu();
voidcreat();
voidnumber();
voidpart();
voidmodify();
voiddel();
voidfreelist();
voidAveWage();
intcode();
voidfirst();
voiddisplay();
voidread();
voidinsert();
voidsave();
intmain()//★★★★★★★★★★★主函数★★★★★★★★★★★★
{
intselect,m,i;
system("color20");//屏幕颜色
first();
while
(1)
{
m=code();
if(m==0)
{
printf("你已成功登陆.....\n");
for(i=0;i<20000;i++)
for(m=0;m<20000;m++);
break;
}
}
head.next=NULL;
while
(1)
{
menu();
printf("\t请输入您的选择(0~10):
");
end:
scanf("%d",&select);
fflush(stdin);//清除键盘缓冲区
switch(select)
{
case0:
creat();break;
case1:
number();break;
case2:
part();break;
case3:
modify();break;
case4:
del();break;
case5:
display();break;
case6:
AveWage();break;
case7:
read();break;
case8:
insert();break;
case9:
save();break;
case10:
freelist();
system("cls");
printf("\n\t★★★★★★感★谢★使★用★★★★★★\n");
printf("\t★★\n");
printf("\t★祝您:
★\n");
printf("\t★★生活顺心★万事如意★★\n");
printf("\t★★\n");
printf("\t★★★★★★★职工管理系统★★★★★★\n\n");
exit(0);
default:
{
printf("\t★★★★输入错误,请重新输入(0~10):
");
gotoend;
}
}
printf("\n");
system("pause");//暂停屏幕显示
}
return0;
}
voidmenu()//★★★★★★★★★★★目录函数★★★★★★★★★★★★
{
system("cls");
printf("\n\t★★★★职工管理菜单★★★★\n\n");
printf("\t★\t0.创建职工信息链表\t\t★\n\n");
printf("\t★\t1.根据职工号显示信息\t\t★\n\n");
printf("\t★\t2.根据工作部门显示信息\t\t★\n\n");
printf("\t★\t3.根据职工号修改信息\t\t★\n\n");
printf("\t★\t4.根据职工号删除信息\t\t★\n\n");
printf("\t★\t5.显示全部职工的信息\t\t★\n\n");
printf("\t★\t6.显示职工的平均工资\t\t★\n\n");
printf("\t★\t7.从文件中读入职工信息\t\t★\n\n");
printf("\t★\t8.插入职工的信息\t\t★\n\n");
printf("\t★\t9.保存职工的信息\t\t★\n\n");
printf("\t★\t10.退出\t\t\t★\n\n");
printf("\t★★★★★★★★★★★\n\n");
}
voidcreat()//★★★★★★★★★★★创建链表函数★★★★★★★★★★★★
{
inti,m,j=0;
charc;
STA*p,*tail;
if(head.next!
=NULL)
{
printf("职工链表成功创建!
");
return;
}
end1:
tail=&head;
printf("\n");
system("cls");
printf("\t★★请输入职工的人数:
\t");
scanf("%d",&m);
system("pause");
system("cls");
printf("\n★★★★★★★★★请输入职工的信息★★★★★★★\n");
printf("\n");
for(i=0;i { p=(STA*)malloc(sizeof(STA)); if(p==NULL) { printf("内存分配失败! \n"); return; } printf("\t职工号: \t\t\t"); scanf("%s",p->num); printf("\t姓名: \t\t\t"); scanf("%s",p->name); printf("\t工作部门: \t\t"); scanf("%s",p->part); printf("\t职称: \t\t\t"); scanf("%s",p->job); printf("\t入厂时间(2015.11.20): \t"); scanf("%s",p->time); printf("\t工资(整数): \t\t"); scanf("%d",&p->wage); printf("\n"); tail->next=p; p->next=NULL; tail=p; } tail=&head; p=tail->next; tail=p->next; for(i=0;i { for(j=0;j { if(strcmp(p->num,tail->num)==0) gotoend; tail=tail->next; } p=p->next; tail=p->next; } system("cls"); printf("\n★★★★★★★★★★已成功保存★★★★★★★★★\n"); if(j<0)//因为j不可能小于0,只有职工号相同时才执行以下操作 { end: printf("\t★★★★★★★★★★★★★★★★★★\n"); printf("\t★★★★★★\n"); printf("\t★★★有相同职工号★★★\n"); printf("\t★★★★★★\n"); printf("\t★★★保存失败★★★\n"); printf("\t★★★★★★\n"); printf("\t★★★请*重*新*输*入★★★\n"); printf("\t★★★★★★\n"); printf("\t★★★★★★★★★★★★★★★★★★\n\n"); free(p); fflush(stdin); printf("\t★★★是否继续(Y/N)? \t"); scanf("%c",&c); if(c=='Y'||c=='y') { system("pause"); gotoend1; } else {system("cls"); printf("\n\t★★★★★★感★谢★使★用★★★★★★\n"); printf("\t★★\n"); printf("\t★祝您: ★\n"); printf("\t★★生活顺心★万事如意★★\n"); printf("\t★★\n"); printf("\t★★★★★★★职工管理系统★★★★★★\n\n"); exit(0); } } return; } voidnumber()//★★★★★★★★★根据职工号显示职工信息函数★★★★★★★★★★ { charnum[20]; if(head.next==NULL) { printf("\n★★未创建职工链表★★\n"); return; } system("cls"); printf("★★请输入要查找的职工号: \t"); gets(num); system("cls"); printf("\n"); p=findnode(num); if(p==NULL) printf("★★★★★★★该职工信息不存在★★★★★★\n"); else { system("cls"); printf("\n★★★★★★★该职工的信息为★★★★★★★\n"); printf("\n"); printf("\t★职工号: \t%s\n\n",p->num); printf("\t★姓名: \t\t%s\n\n",p->name); printf("\t★工作部门: \t%s\n\n",p->part); printf("\t★职称: \t\t%s\n\n",p->job); printf("\t★入厂时间: \t%s\n\n",p->time); printf("\t★工资: \t\t%d\n\n",p->wage); } return; } voidpart()//★★★★★★★★★根据职工部门显示职工信息函数★★★★★★★★★ { inta=-10,m=0; charpart[40]; if(head.next==NULL) { printf("\n★★未创建职工信息链表★★"); return; } system("cls"); printf("★★请输入要查找的部门: \t"); gets(part); system("cls"); p=findpart(part,m); if(a>0) { end: p=p->next; p=findpart(part,m);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告