C语言课程设计报告模板.docx
《C语言课程设计报告模板.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告模板.docx(22页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告模板
中国地质大学(武汉)
课程设计报告
题目c语言程序设计
姓名
学号
专业统计学
所在院系经济管理学院
指导老师江俊君
日期2016/6/11
目录
目录3
1.课程论文题目4
2.程序设计思路5
3.功能模块图6
4.数据结构设计7
5.算法设计8
6.程序代码9
7.程序运行结果10
8.编程中遇到的困难及解决方法11
9.总结心得及良好建议12
10.致谢13
1.课程论文题目
职工信息管理系统
内容:
[要求]
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
功能:
实现简单的职工工资信息管理,职工工资的基本信息包括编号、姓名、基本工资、奖金、工资总额等
1.系统以菜单方式工作。
2.职工信息录入功能(职工信息用文件保存)。
3.职工信息浏览功能。
4.职工信息查询功能。
查询方式。
(1)按学历查询。
(2)按工号查询。
2.程序设计思路
(1)需求分析
系统要以菜单方式工作,因而根据题目要求,提供键盘式选择菜单实现功能选择,职工信息采用文件保存,所以应提供文件的输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、等操作;要实现职工信息的查询,则要提供查找功能(包括按学历查询和按工号查询两种查询方式);要实现职工信息的删除、修改,则要提供文件记录的删除、修改功能。
(2)总体设计
根据上面的需求分析,可以将这个系统设计分为以下模块:
职工信息输入模块、职工信息浏览模块、职工信息查询模块、职工信息删除与修改模块
(3)数据信息
建立职工信息结构体,结构体成员包括工号、姓名、性别、年龄、学历、工资、住址和电话。
Structemployee
{
charnum[20];
charname[8];
charsex[10];
charage[10];
charxueli[30];
charwanges[10];
chartel[15];
charaddr[50];
}em[N]
3.功能模块图
录入模块
菜单
浏览模块
学历查询
工号查询
查询模块
4.数据结构设计
建立职工信息结构体,结构体成员包括工号、姓名、性别、年龄、学历、工资、住址和电话。
Structemployee
{
charnum[20];//工号
charname[30];//姓名
charsex[10];//性别
charage[10];//年龄
charxueli[30];//学历
charwanges[10];//工资
chartel[15];//电话
charaddr[50];住址
}em[N]
5.算法设计
1.输入模块:
输入职工的工号、姓名以及其它的一些职工的相关信息,通过自己定义的voidappend()函数来实现。
2.浏览模块:
浏览所有职工的相关信息,通过自己定义的voiddisplay()函数来实现。
3.按职工号查询模块:
可以按职工号来查询职工的相关信息,通过自己定义的voidsearch_num()函数来实现。
8.按职工的的学历查询模块:
可以按职工的学历来查询职工的相关信息,通过自己定义的voidsearch_xuelil函数来实现。
4.退出模块:
退出职工信息管理系统,通过头文件windows.h中的exit(0)函数来实现。
1.录入模块
voidappend()
{
inti,n;
FILE*fp;
fp=fopen("employee_list","wb");//俩一起定义fp
printf("请输入职工个数\n");
scanf("%d",&n);
for(i=0;i{
printf("请输入职工号:
");
scanf("%d",&em[i].num);printf("请输入姓名:
");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女m--男):
");
scanf("%s",&em[i].sex);
printf("请输入年龄:
");
scanf("%s",&em[i].age);
printf("请输入学历:
");
scanf("%s",em[i].xueli);
printf("请输入工资:
");
scanf("%s",&em[i].wanges);
printf("请输入住址:
");
scanf("%s",em[i].addr);
printf("请输入电话:
");
scanf("%s",em[i].tel);
printf("\n");
}
save(n);
}
2.浏览模块
voiddisplay()
{
inti;intm=load();
printf("职工号\t姓名\t\t性别\t\t年龄\n");
printf("学历\t\t工资\t\t住址\t\t电话\n");
for(i=0;i{
printf("%d\t",em[i].num);
printf("%s\t",em[i].name);
printf("%s\t",em[i].sex);
printf("%s\t",em[i].age);
printf("%s\t",em[i].xueli);
printf("%s\t",em[i].wanges);
printf("%s\t",em[i].addr);
printf("%s\t",em[i].tel);
printf("\n");
}
}
2.查询模块
voidsearch()
{
inta;
printf("\n按职工号查询请按1\n按学历查询请按2\n返回主菜单请按3\n");
scanf("%d",&a);
switch(a)
{
case1:
printf("按职工号查询\n");search_num();break;
case2:
printf("按学历查询\n");search_xueli();break;
case3:
main();break;
default:
printf("您输入有误,请重新选择!
\n");break;
}
}
(1)按工号查询
voidsearch_num()
{
intnum,i,t;intm=load();//使m=文件输入的个数
printf("请输入要查找的职工号:
\n");
scanf("%d",&num);
for(i=0;iif(num==em[i].num)
{
printf("\n已找到此人,其记录为:
\n");
printf("职工号\t姓名\t\t性别\t\t年龄\n");
printf("学历\t\t工资\t\t住址\t\t电话\n");
printf("%d\t",em[i].num);
printf("%s\t",em[i].name);
printf("%s\t",em[i].sex);
printf("%s\t",em[i].age);
printf("%s\t",em[i].xueli);
printf("%s\t",em[i].wanges);
printf("%s\t",em[i].addr);
printf("%s\t",em[i].tel);
printf("\n");
break;
}
if(i==m)//因为i=0,i=m就超了
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询职工号请按2\n");
scanf("%d",&t);
switch(t)
{
case1:
search();break;
case2:
search_num();break;
default:
break;
}
}
(2)按学历查找
voidsearch_xueli()
{
charxueli[30];
inti,t;intm=load();
printf("请输入要查找的学历:
\n");
scanf("%s",xueli);
for(i=0;iif(strcmp(em[i].xueli,xueli)==0)
{
printf("\n已找到,其记录为:
\n");
printf("职工号\t姓名\t\t性别\t\t年龄\n");
printf("学历\t\t工资\t\t住址\t\t电话\n");
printf("%d\t",em[i].num);
printf("%s\t",em[i].name);
printf("%s\t",em[i].sex);
printf("%s\t",em[i].age);
printf("%s\t",em[i].xueli);
printf("%s\t",em[i].wanges);
printf("%s\t",em[i].addr);
printf("%s\t",em[i].tel);
printf("\n");
}
if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询学历请按2\n");
scanf("%d",&t);
switch(t)
{
case1:
search();break;
case2:
search_xueli();break;
default:
break;
}
}
6.程序代码
#include
#include//包括exit(0),无需定义
#include
#include
#defineN100//可以随便改人数
voidappend();//录入
voiddisplay();//浏览
voidsearch();//查询
voidsearch_num();//工号
voidsearch_xueli();//学历
voidsave(int);//声明一个形参
structemployee//定义结构体数组全局变量
{
intnum;//在search_numfor的if中不行
charname[30];//省事
charsex[10];
charage[10];
charxueli[30];
charwanges[10];
chartel[15];
charaddr[50];
}em[N];
voidmain()
{
intn;
n=1;
while(n)//用一个循环使之能够返回
{
printf("************职工信息管理系统************\n");
printf("1.录入职工信息\n");
printf("2.浏览职工信息\n");
printf("3.查询职工信息\n");
printf("4.退出\n");
printf("请按功能序号:
\n");
scanf("%d",&n);
switch(n)
{
case1:
append();break;
case2:
display();break;
case3:
search();break;
case4:
exit(0);n=0;break;
default:
printf("输入错误指令\n");
}
}
printf("\n按任意键继续\n");
getch();
}
voidappend()
{
inti,n;
FILE*fp;
fp=fopen("employee_list","wb");//俩一起定义fp
printf("请输入职工个数\n");
scanf("%d",&n);
for(i=0;i{
printf("请输入职工号:
");
scanf("%d",&em[i].num);
printf("请输入姓名:
");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女m--男):
");
scanf("%s",&em[i].sex);
printf("请输入年龄:
");
scanf("%s",&em[i].age);
printf("请输入学历:
");
scanf("%s",em[i].xueli);
printf("请输入工资:
");
scanf("%s",&em[i].wanges);
printf("请输入住址:
");
scanf("%s",em[i].addr);
printf("请输入电话:
");
scanf("%s",em[i].tel);
printf("\n");
}
save(n);
}
voidsave(intn)//save函数save了多少个
{
FILE*fp;
inti;
if((fp=fopen("employee_list","wb"))==NULL)//能否以写的形式打开,wb2进制
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;iif(fwrite(&em[i],sizeof(structemployee),1,fp)!
=1)//
printf("filewriteerror\n");
fclose(fp);
}
intload()//数出录入的个数
{
FILE*fp;
inti;
if((fp=fopen("employee_list","rb"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;!
feof(fp);i++)//feof检查文件是否结束,结束时返回非零值
fread(&em[i],sizeof(structemployee),1,fp);//以二进制向文件读写数据,地址,字节,读多少个数据,文件指针
fclose(fp);
return(i);
}
voiddisplay()
{
inti;intm=load();
printf("职工号\t姓名\t\t性别\t\t年龄\n");
printf("学历\t\t工资\t\t住址\t\t电话\n");
for(i=0;i{
printf("%d\t",em[i].num);
printf("%s\t",em[i].name);
printf("%s\t",em[i].sex);
printf("%s\t",em[i].age);
printf("%s\t",em[i].xueli);
printf("%s\t",em[i].wanges);
printf("%s\t",em[i].addr);
printf("%s\t",em[i].tel);
printf("\n");
}
}
voidsearch()
{
inta;
printf("\n按职工号查询请按1\n按学历查询请按2\n返回主菜单请按3\n");
scanf("%d",&a);
switch(a)
{
case1:
printf("按职工号查询\n");search_num();break;
case2:
printf("按学历查询\n");search_xueli();break;
case3:
main();break;
default:
printf("您输入有误,请重新选择!
\n");break;
}
}
voidsearch_num()
{
intnum,i,t;intm=load();//使m=文件输入的个数
printf("请输入要查找的职工号:
\n");
scanf("%d",&num);
for(i=0;iif(num==em[i].num)
{
printf("\n已找到此人,其记录为:
\n");
printf("职工号\t姓名\t\t性别\t\t年龄\n");
printf("学历\t\t工资\t\t住址\t\t电话\n");
printf("%d\t",em[i].num);
printf("%s\t",em[i].name);
printf("%s\t",em[i].sex);
printf("%s\t",em[i].age);
printf("%s\t",em[i].xueli);
printf("%s\t",em[i].wanges);
printf("%s\t",em[i].addr);
printf("%s\t",em[i].tel);
printf("\n");
break;
}
if(i==m)//因为i=0,i=m就超了
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询职工号请按2\n");
scanf("%d",&t);
switch(t)
{
case1:
search();break;
case2:
search_num();break;
default:
break;
}
}
voidsearch_xueli()
{
charxueli[30];
inti,t;intm=load();
printf("请输入要查找的学历:
\n");
scanf("%s",xueli);
for(i=0;iif(strcmp(em[i].xueli,xueli)==0)
{
printf("\n已找到,其记录为:
\n");
printf("职工号\t姓名\t\t性别\t\t年龄\n");
printf("学历\t\t工资\t\t住址\t\t电话\n");
printf("%d\t",em[i].num);
printf("%s\t",em[i].name);
printf("%s\t",em[i].sex);
printf("%s\t",em[i].age);
printf("%s\t",em[i].xueli);
printf("%s\t",em[i].wanges);
printf("%s\t",em[i].addr);
printf("%s\t",em[i].tel);
printf("\n");
}
if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询学历请按2\n");
scanf("%d",&t);
switch(t)
{
case1:
search();break;
case2:
search_xueli();break;
default:
break;
}
}
7.程序运行结果
1.运行程序菜单模块初始化,如图
1.按1进入职工信息录入模块,输入职工信息工号007,姓名007,性别M,年龄30,学历zhongguodizhidaxue,工资9999,住址beiqu21d电话888888如图
2.在输入完N个数据后,按2进入职工信息浏览模块,看到信息
3.按3进入职工查询模块,如图
按1进入按职工号查询模块,输入007查询,如图
按2进入学历查询模块,输入zhongguodizhidaxue,如图
按1返回查询函数,按4退出,如图
8.编程中遇到的困难及解决方法
这一次老师让我们从第8题和第21题中选,瞄了两眼,决定选职工信息管理第8题,没想到这么难弄,足足用了两周时间才搞定。
上机好几次之后,遇到一些小问题需要解决而我又不太熟悉的就去查书、上网或者问同学。
其中以查书居多。
比如对于结构体和全局、局部变量,总是会出现数据没用的现象,问同学后发现把结构体放在主函数前作全局变量,就没事了。
还有在数组的比较就是strcmp(a,b)中发自现只有两个a、b一样类型时才有用。
其中有一些特别简单的问题,比如函数中没有返回值,类型就只能是空(void)的等。
最重要的是对文件这个类型的认识。
因为对其极其不熟悉,所以可以说我是自己自学了一遍对于文件的读写,写文件时几乎从书上照搬了过来,并且常出错,如fwrite()写进文件中括号里各项的输入,最后在上网查阅后得以找到解决方法。
不过最终完成了这次编程。
9.总结心得及建议
上机实习需要有一定的C语言基础,其是学习程序设计语言必不可少的实践环节,某些东西必须通过上机才能发现,比如对知识点的掌握程度,一个不小心就会出现一串令人崩溃的error。
等
课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用C语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。
10.致谢
此次课程设计的完成是在我们的课任老师江俊君老师的细心指导下进行的。
老师上课教授了我们大量的知识,并且每次上课都会进行演示,以求让我们更加熟悉c语言。
此外,在每次设计遇到问题时老师不辞辛苦的讲解使得我的设计才能顺利进行。
修改程序的整个过程中,花费了江老师很多的宝贵时间和精力,在此向老师表示衷心地感谢!