


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计课程设计报告设计题目:学生考勤系统设计专业微电子科学与工程班级微电131学生赵杨怡指导教师年学期设计任务:C语言课程设计任务书10题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性力U、学亏、日期、下次、出勤情况等信息。本系统可以模拟考勤过程、记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。要求:1、用C语言实现程序设计;2、利用结构体进行相关信息处理;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。平时成绩:验收答辩成绩:设计报告成绩:总评成绩:指导教师
2、:一、总体设计1.程序的总体设计确定界面,使用户可选择操作项目(录入,修改,查询,评分)。录入功能:使用结构体,要求用户输入姓名、性别、学号、日期、节次、当前出勤情况等信息,并写入文件。修改功能:使用户输入学号,姓名其中一项可以修改考勤其信息。对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。查询模块:使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。评分模块:系统根据总的应道考勤数按照百分制,求出每个学生的分数,并输出到屏幕数据结构学生
3、信息用结构体记录,包括姓名(字符数组)、性别(字符型)、日期(年月日三个字符数组)、节次(整型)、出情况(整型)函数原型声明voidmain()/主函数voidinput();/录入数据函数voidchange();/修改数据函数voidsearch();/查询数据函数voidevaluate();/计算总评函数、详细设计1.main()函数voidmain()voidinput();/voidchange();/voidsearch();/voidevaluate();/charitem;system("color34”);printf("口口n");print
4、f(" n");printf("管理系统*');printf(" n");printf("n");录入数据函数修改数据函数查询数据函数计算总评函数.。学生考勤.BY朱胜佳printf(".n");printf("口n");printf(".n");printf("1.学生信息及考勤情况录入、);printf(".n");printf("2.学生信息及考勤情况修改、);printf(".n");pri
5、ntf("3.学生信息及考勤情况查询、);printf("n");printf("4.学生考勤总评分数查询n");printf("n");printf("口n");/用户界面请选择您需要的操作n");printf("n");printf("scanf("%c",&item);switch(item)(case'1':input();break;case'2':change();break;case'
6、3':search();break;case'4':evaluate();break;实现功能选择流程图:开始2.input()函数voidinput()inti,j=0,jx=1;printf("*学生基本信息录入*n");*if(fp=fopen("date.txt","w")=NULL)(printf(-文件打开失败n");exit(0);输入信息循环输入确认循环for(i=0;jx=1;i+)/(for(;j=0;)/getchar();printf(-清输入第d个学生的姓名",i+
7、1);gets();printf(-清输入第d个学生的学号",i+1);gets(stui.number);printf(-清输入第d个学生的性别(男:m女:f)",i+1);stui.sex=getchar();printf(-清输入第d个学生的生日(格式:年月日广,i+1);scanf("%d%d%d",&stui.year,&stui.month,&stui.day);printf(-清输入第外学生的当前考勤次数",i+1);scanf("%d",&stui.kq);p
8、rintf(-您输入的信息为姓名%s学号%s性别c生日%d年%d月%d日n0重输1确认",,stui.number,stui.sex,stui.year,stui.month,stui.day);scanf("%d",&j);/输入确认j=0;if(fwrite(&stui,sizeof(structstudent),1,fp)!=1)printf(-文件写入错误n");/写入文件printf(-是否继续输入下一个学生信息0终止1继续n");scanf("%d",&jx);/继续输入
9、选择fclose(fp);printf("0返回主菜单n");getchar();a=getchar();getchar();if(a='0')main();/返回主菜单流程图:开始输入jx值选择是否继续结束3.change()函数voidchange()inti=0,j=0,sway,t,x;charname10,number10;printf("*改*5);if(fp=fopen("date.txt","r")=NULL)件内容读入内存printf(-文件打开失败n");exit(0);for(
10、i=0;feof(fp)=0;i+)fread(&stui,sizeof(structstudent),1,fp);/读取文件内容fclose(fp);printf("选择查找方式scanf("%d",&sway);/*/if(sway=1)printf(-清输入需要修改学生的姓名/printf("i=%d",i);scanf("%s",name);for(j=0;t!=0;j+)t=strcmp(,name);if(j=i)/学生考勤修将文/按照姓名查找");关闭文件按照学号查找
11、");名查找开始t=0;printf(-未找到您所查询的数据,清重新输入n");if(j<i)/查询成功printf("您查找的学生信息如下n姓名%s学号%s性别c生日%d年%d月%d日当前考勤次数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);printf(-是否修改该生考勤信息0否1是");/选择是否修改考勤输入选择变量值scanf("%d'',&x);/if(x=1)pr
12、intf(-清输入新的考勤值");输入scanf("%d",&stuj-1.kq);/新的考勤值if(fp=fopen("date.txt","w")=NULL)以只写方式打开文件printf("exit(0);for(j=0;j<i;j+)if(fwrite(&stuj,sizeof(structstudent),1,fp)!=1)printf("写入错误n");/写入文件fclose(fp);/printf("是否继续修改其他学生考勤0否scanf("
13、;%d'',&x);if(x=1)change();文件打开失败n");关闭文件/是");文件/*/*/if(sway=2)printf(-清输入需要修改学生的学号");/printf("i=%d'',i);scanf("%s",number);for(j=0;t!=0;j+)t=strcmp(stuj.number,number);(t=0;printf(-未找到您所查询的数据,清重新输入n");if(j<i)/查询成功(printf("您查找的学生信息如下n姓名%s
14、学号%s性别c生日%d年%d月%d日当前考勤次数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);printf(-是否修改该生考勤信息0否1是");/选择是否修改考勤scanf("%d",&x);/输入选择变量值if(x=1)(printf(-清输入新的考勤值");scanf("%d",&stuj-1.kq);/输入新的考勤值if(fp=fopen("date.txt&qu
15、ot;,"w")=NULL)/以只写方式打开文件(printf(-文件打开失败n");exit(0);for(j=0;j<i;j+)if(fwrite(&stuj,sizeof(structstudent),1,fp)!=1)printf("文件写入错误n");/写入文件fclose(fp);/关闭文件printf(-是否继续修改其他学生考勤0否1是");scanf("%d'',&x);if(x=1)change();按照学号查找结束/*/*printf("0返回主菜单n&qu
16、ot;);getchar();a=getchar();getchar();if(a='0')main();输入sway值选择查找方式4.search()函数voidsearch()(inti=0,j=0,sway,t,x;charname10,number10;学生信息查询printf("*5);/if(fp=fopen("date.txt”,"r")=NULL)文件内容读入内存(printf("文件打开失败n");exit(0);for(i=0;feof(fp)=0;i+)fread(&stui,sizeof
17、(structstudent),1,fp);/读取文件内容fclose(fp);/关闭文件printf("选择查找方式1按照姓名查找2按照学号查找");scanf("%d",&sway);*按照姓名查找开始*/if(sway=1)(printf(-清输入需要修改学生的姓名");/printf("i=%d'',i);scanf("%s",name);for(j=0;t!=0;j+)(t=strcmp(,name);if(j=i)(t=0;printf(-未找到您所查询的数据,
18、清重新输入n");if(j<i)/查询成功(printf("您查找的学生信息如下n姓名%s学号%s性%c生日%d年%d月%d日当前考勤次%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);printf(-是否继续查询其他学生信息0否1是");scanf("%d'',&x);if(x=1)search();按照姓名查找结束/*/*按照学号查找开始*/*if(sway=2)(printf(-清输
19、入需要修改学生的学号");/printf("i=%d",i);scanf("%s",number);for(j=0;t!=0;j+)(t=strcmp(stuj.number,number);if(j=i)t=0;printf(-未找到您所查询的数据,清重新输入n");if(j<i)printf("别c生日/查询成功您查找的学生信息如下n姓名%s学号%d年%d月%d日当前考%s勤数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.mont
20、h,stuj-1.day,stuj-1.kq);printf(-是否继续查询其他学生信息0否1是");scanf("%d'',&x);if(x=1)search();按照学号查找/*printf("0返回主菜单n");getchar();a=getchar();getchar();if(a='0')main();流程图:5.evaluate()函数voidevaluate()(inti=0,j=0,sway,t,x;floatscore;charname10,number10;printf("*n&quo
21、t;);if(kqcs=0)(printf("清输入应到考勤总数);scanf("%f",&kqcs);if(fp=fopen("date.txt”,"r")=NULL)读入内存(printf("文件打开失败n");学生考勤分数计算/请输入应到考勤总数/将文件内容exit(0);for(i=0;feof(fp)=0;i+)fread(&stui,sizeof(structstudent),1,fp);/读取文件内容fclose(fp);printf("选择查找方式scanf("%
22、d",&sway);/*/1按照姓名查找2按照姓关闭文件按照学号查找");名查找开*/if(sway=1)printf("清输入需要修改学生的姓名");/printf("i=%d",i);scanf("%s”,name);for(j=0;t!=0;j+)t=strcmp(,name);if(j=i)t=0;printf("未找到您所查询的数据,清重新输入n");if(j<i)printf("别c生日/查询成功您查找的学生信息如下n姓名%s学号%s%d年%d月%d日
23、当前考勤数%dn”,,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);score=(stuj-1.kq)/kqcs*100;printf("该生当前考勤分数为5.2f",score);printf("是否继续计算其他学生考勤分数0否1是");scanf("%d",&x);if(x=1)evaluate();/*/按照姓名查找结/*按照学号查找开始/*if(sway=2)(printf(-清输入需要修改学生的学号
24、");/printf("i=%d",i);scanf("%s",number);for(j=0;t!=0;j+)(t=strcmp(stuj.number,number);if(j=i)(t=0;printf(-未找到您所查询的数据,清重新输入n");if(j<i)/查询成功(printf("您查找的学生信息如下n姓名%s学号%s性别c生日%d年%d月%d日当前考勤次数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj
25、-1.day,stuj-1.kq);score=(stuj-1.kq)/kqcs*100;printf("该生当前考勤分数为5.2f",score);printf("是否继续计算其他学生考勤分数0否1是");scanf("%d'',&x);if(x=1)evaluate();按照学号查找结束/*/*printf("0返回主菜单n");getchar();a=getchar();getchar();if(a='0')main();流程图:开始输入应到考勤/次数kqcs值三、测试及调试(测
26、试方案、存在的问题及解决方法)测试方案:按照每个函数功能进行测试,在做完每个函数对其进行测试,主函数测试,先将所有需要的功能模块函数设置为空,每个函数用一个printf语句来测试主函数。1. 存在问题:开始将生日定义为字符数组,当用scanf来输入年月日时,年月日之间用空格分隔,但在输出时发现年月日出现错误。分析原因:用scanf输入年月日时,系统会把用来分隔的空格当做字符读入。解决方法:将年月日定义为整型,这样就可以用scanf输入,用空格隔开。2. 存在问题2:在查找数据时,需要先将所有数据读入一个结构体数组,在读取后未关闭文件,执行查找时查找不到相关信息。分析原因:再利用for循环读取全
27、部文件内容后,文件指针将会移至文件末尾,这样再执行查找时就会从文件末尾开始,显然不符合要求,所以会出现错误。解决方法:在读取完数据后先关闭文件,在查找时再次打开文件,这时文件指针就会指向文件开头。3. 存在问题3:再多个使用getchar或者gets输入的时候,会出现直接跳过输入的情况。分析原因:在使用getchar或者gets输入的时候,系统会将前一步用来确认执行的回车当成字符读入,导致跳过该步输入。解决方法:再getchar或者gets前面加上getchar()语句,读掉回车,下面的getchar或者gets就可以正常输入。四、小结通过编写该程序,熟悉了C语言的基本语法,选择,循环等结构,
28、深入练习了函数的调用方法,和文件的读写方法,熟悉了结构体的使用,更加深化了面向过程语言思想,和一些基本算法。通过对程序的后期调试,熟悉了C常见错误,锻炼了思维的严密性,和完备性。通过对程序的注释和画流程图,形成了一套自己编程的风格,和活晰地思路,使思维更加条理化,活晰化。附件:主要源程序代码(需打印)#include<stdio.h>#include<string.h>#include<stdlib.h>FILE*fp;定义文件chara;返回选择变量floatkqcs=0;应到考勤次数变量structstudentcharname10;charnumber
29、11;charsex;intyear;intmonth;intday;定义储存学生信息的结构体intkq;stu100;数组主函数开*始*voidmain()voidinput();voidchange();录入数据函数修改数据函数voidsearch();voidevaluate();charitem;system("color34");printf("查询数据函数计算总评函数口n");printf(".n");printf("O学生考勤管理系统en");printf(".n");printf
30、("BY朱胜佳n");printf(".n");printf("n");printf(".n");printf("1.学生信息及考勤情况录入n");printf(".n");printf("2.学生信息及考勤情况修改n");printf(".n");printf("3.学生信息及考勤情况查询n");printf("n");printf("4.学生考勤总评分数查询n");prin
31、tf("n");printf("n");用户界面printf("n");printf("请选择您需要的操作n");scanf("%c”,&item);switch(item)(case'1':input();break;case'2':change();break;case'3':search();break;case'4':evaluate();break;*数结束*实现功能选择/*容开始*voidrecord()(inti,j=0
32、,jx=1;printf("*5);if(fp=fopen("date.txt","w")=NULL)(printf(-文件打开失败n");exit(0);for(i=0;jx=1;i+)(for(;j=0;)(getchar();printf(-清输入第%d个学生的姓名",i+1);gets();printf(-清输入第%d个学生的学号",i+1);gets(stui.number);printf(-清输入第d个学生的性别(男:m女:f)",i+1);stui.sex=getchar(
33、);printf(-清输入第d个学生的生日(格式:年月日广,i+1);scanf(''%d%d%d",&stui.year,&stui.month,&stui.day);printf(-清输入第%d个学生的当前考勤次数scanf("%d",&stui.kq);printf(-您输入的信息为姓名%s学号年%d月%d日n0重",,stui.number,stui.sex,stui.year,stui.month,stui.day);scanf("%d",&j);输入
34、确认j=0;录入数据函数内学生基本信息录输入信息循环输入确认循环IIII%s性别c生日输1确%d认if(fwrite(&stui,sizeof(structstudent),1,fp)!=1)printf("文件写入错误n");写入文件printf(-是否继续输入下一个学生信息0终止1继续n");scanf("%d'',&jx);fclose(fp);printf("0返回主菜单n");getchar();a=getchar();getchar();if(a='0')main();继续输
35、入选择/返回主菜单*容结束*录入数据函数内/*容开始*修改数据函数内voidchange()inti=0,j=0,sway,t,x;charname10,number10;printf("*5);if(fp=fopen("date.txt","r")=NULL)入内存学生考勤修改将文件内容读printf(-文件打开失败n");exit(0);for(i=0;feof(fp)=0;i+)读取文件内容fread(&stui,sizeof(structstudent),1,fp);fclose(fp);关闭文件printf(&quo
36、t;选择查找方式1按照姓名查找2按照学号查找");scanf("%d",&sway);/*按照姓名查找开始*/if(sway=1)printf(-清输入需要修改学生的姓名");/printf("i=%d",i);scanf("%s",name);for(j=0;t!=0;j+)t=strcmp(,name);if(j=i)(t=0;printf(-未找到您所查询的数据,清重新输入n");if(j<i)查询成功(printf("您查找的学生信息如下n姓名%s学号%s
37、性别%c生日%d年%d月%d日当前考勤次数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);printf(-是否修改该生考勤信息0否1是");选择是否修改考勤scanf("%d",&x);输入选择变量值if(x=1)(printf(-清输入新的考勤值");scanf("%d",&stuj-1.kq);输入新的考勤值if(fp=fopen("date.txt",&q
38、uot;w")=NULL)以只写方式打开文件(printf(-文件打开失败n");exit(0);for(j=0;j<i;j+)if(fwrite(&stuj,sizeof(structstudent),1,fp)!=1)printf("文件写入错误n");写入文件fclose(fp);关闭文件0否1是");照姓名查找结束照学号查找开始printf("是否继续修改其他学生考勤scanf("%d'',&x);if(x=1)change();/*按*/*按*/if(sway=2)(print
39、f(-请输入需要修改学生的学号");/printf("i=%d'',i);scanf("%s",number);for(j=0;t!=0;j+)(t=strcmp(stuj.number,number);if(j=i)(t=0;printf(-未找到您所查询的数据,清重新输入n");查询成功if(j<i)(%d月%d日当前考勤次printf("您查找的学生信息如下n姓名%s学号%s性别%c生日%d数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year
40、,stuj-1.month,stuj-1.day,stuj-1.kq);printf(-是否修改该生考勤信息0否1是");选择是否修改考勤输入选择变量值scanf("%d'',&x);if(x=1)(printf(-清输入新的考勤值");输入新的考勤值以只写方式打开文scanf("%d",&stuj-1.kq);if(fp=fopen("date.txt","w")=NULL)(printf(-文件打开失败n");exit(0);for(j=0;j<i;j+
41、)if(fwrite(&stuj,sizeof(structstudent),1,fp)!=1)printf("文件写入错误n");写入文件fclose(fp);关闭文件printf(-是否继续修改其他学生考勤0否1是");scanf("%d'',&x);if(x=1)change();按照学号查找结束/*/printf("0返回主菜单n");getchar();a=getchar();getchar();if(a='0')main();修改数据函数内查询数据函数内*容结束*/*容开始*
42、voidsearch()(inti=0,j=0,sway,t,x;charname10,number10;printf("*n");if(fp=fopen("date.txt”,"r")=NULL)入内存学生信息查询将文件内容读(printf("文件打开失败n");exit(0);student),1,fp);for(i=0;feof(fp)=0;i+)fread(&stui,sizeof(struct读取文件内容fclose(fp);关闭文件printf("选择查找方式1按照姓名查找2按照学号查找&quo
43、t;);scanf("%d",&sway);按照姓名查找开/*/*if(sway=1)(printf("清输入需要修改学生的姓名");/printf("i=%d",i);scanf("%s",name);for(j=0;t!=0;j+)(t=strcmp(,name);if(j=i)(t=0;printf("未找到您所查询的数据,清重新输入n");if(j<i)查询成功printf("您查找的学生信息如下n姓名%s学号%s性别%c生日%d年%d月%d日当
44、前考勤次数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stujprintf("是否继续查询其他学生信息0否scanf("%d'',&x);if(x=1)search();/*按*/照姓-1.day,stuj-1.kq);1是");名查按学昭八、/*找结束if(sway=2)");printf(-清输入需要修改学生的学号/printf("i=%d'',i);scanf("%s",numbe
45、r);for(j=0;t!=0;j+)t=strcmp(stuj.number,number);if(j=i)t=0;printf(-未找到您所查询的数据,清重新输入n");查询成功if(j<i)printf("您查找的学生信息如下n姓名%s学号%s%d%d月%d日性别当前考%c勤数%dn",,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);printf(-是否继续查询其他学生信息0否1是");scanf("%d'',&x);if(x=1)search();按照学号查找结束/*/printf("0返回主菜单n");a=getchar();getchar();if(a='0')main();/*容结束*查询数据函数内/*数内容*计算考勤分数函始voidevaluate()inti=0,j=0,swa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基建工程进度控制措施
- 雨季大型活动安全保障措施
- 教育培训各模块协调措施
- 环保产业私募基金投资认购与绿色技术创新合作协议
- 小学阶段看图写话练习技巧及范文
- 离异父母探视期间儿童安全责任协议
- 科技馆运营维护与科普教育活动策划与执行协议
- 新能源产品出口管制合规性审查与市场拓展服务协议
- 人教版四年级数学下学期考试复习计划
- 2025年PP-R再生料项目申请报告模范
- 拆除工程施工安全培训
- 《一本书读懂Web3.0区块链、NFT、元宇宙和DAO》读书笔记
- 工厂管理工作流程
- 项目管理班子人员岗位职责及分工
- 稻谷加工砻谷及砻下物分离
- 物联网技术及在油气生产中的应用(2015石油论坛)
- 数独六宫格练习题
- 人工智能在招聘中的应用
- 电子产品与辐射危害
- 柔性电子器件应用
- (完整版)病例演讲比赛PPT模板
评论
0/150
提交评论