版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计课程设计扌艮告设计题目:学生考勤系统设计专 业微电子科学与工程班级 微电 1 3 1学 生 赵杨怡指导教师年 学期设计任务:C语言课程设计任务书1 0题LI:学生考勤系统设计功能:学生考勤系统应包含各班学生得全部信息O每个学生就是一条记录, 包括姓名、性别、学号、日期、节次、出勤情况等信息。本系统可以模拟考 勤过程、记录考勤结果,并能在课程结束后按照设定得考勤评分标准自动给 出每个学生得考勤分数。要求:1、用C语言实现程序设计;2、利用结构体进行相关仁息处理;3、系统得各个功能模块要求用函数得形式实现:4、界面友好(良好得人机交互),程序加必要得注释。平时成绩:验收答辩成绩:设计
2、报告成绩:总评成绩:指导教师:一、总体设计1. 程序得总体设计确定界面,使用户可选择操作项目(录入,修改,查询,评分)。录入功能:使用结构体,要求用户输入姓名、性别、学号、日期、 节次、当前出勤情况等信息,并写入文件。修改功能:使用户输入学号,姓名其中一项可以修改考勤其信 息。对于修改功能得实现,就是先将所有文件内容读入到内存中,然 后修改考勤值,最后再重新覆盖写入文件。查询模块:使用字符串比较函数,利用循环找到对应结构体数 组元素,然后输出需要信息。对于查询功能得实现,同修改,就是先将 所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。评分模块:系统根据总得应道考勤数按照百分制,
3、求出每个 学生得分数,并输出到屏幕。2、数据结构学生信息用结构体记录,包括姓名(字符数组)、性别(字符 型)、日期(年月日三个字符数组)、节次(整型)、出情况(整型)。/主函数3、函数原型声明v o i d ma i n ()void i n put () ;/录入数据函数v oi d change() ;/修改数据函数void search ();/ /查询数据函数woid eva 1 uate();/计算总评函数二、详细设计1、ma i n()函数vo i d main()to id in p ut ();/录入数据函数Woid cha n ge():/修改数据函数vo i d sea r
4、 ch ();/查询数据函数void eva luat e ();/计算总评函数char item:s y stem (color 3 40;p r i nt f (”n)t哪r i ntf C n);o pri n tf(O学生考勤管理系统6 pr i ntf ( );print f (”oby朱胜佳 n);bpr i n t f( H n9;o printf C”);p r i ntfC nu );pri ntf( HO1、学生信息及考勤情况录入O n ”);o op r i n t f (n);op r i n tf (“O2、学生信息及考勤情况修改 p rintfC n);r i n
5、tf ( H及考勤情况查询):printf ( n ”);pri n tf (”评分数查询n“);p r i ntf(n);p r intf CprintfCn );pr intf(scanf ( n % c& item);sw i tch( i tem)c ase I:c a se 2Onzz);O3、学生信息4、学生考勤总O/用户界面请选择您需要得操作n ” );in p ut () ;b r e a k ; c ha n ge ();bre a k;Q case 3: s earch () ; b r eak; cas e z 4 : e v a lua t e () ;b r eak;
6、/实现功0能选择流程图:2、 i n p u t()函数void i npu t ()int i, j = 0 , jx=l;pr in t f (” * * k * 火* * * 水* 学 生 基本信 i f ( f p =fopen( ” d a t e、txt, w)二二NULL)opr intfC文件打开失败n);e x i t(0);fo r (i=0; jx=l;i卄)/输入信息循环 for(; j =0 ;)/输入确认循环g e t c h ar (); o printfr请输入第(1个学生得姓名 i+1);8gets(stui、n a me):o printfr请输入第4个学生
7、得学号”、i+1);age ts(stui、number):printf (“请输入第01个学生得性别(男:m女:f) , i+1); stu i 、se x = g e tchar ();pri ntf (”请输入第d个学生得生日(格式:年 月 日)Ji + 1);06 s canf (%d%d%d , &stui、ye a r, &stui、month, & s t u i 、 day);P r i n tf(”请输入第d个学生得当前考勤次数 ”、i+ 1);8sc a nf ( u %d/z, &stu i k q);哪rin t f (您输入得信息为姓名s学号 s性别c生 日 %d 年
8、d 月 y ear, stui、month, stui、 day);0 s c anf C%d,z, &j) ;/ / 输入确认0j 二o;if (fwr i t e ( & s t u i, siz e of (st ruet s tu dent) ,l,fp)!=l) Pr intfC文件写入错误rf); 写入文件。printfC就是否继续输入下一个学生信息0终止1继续n);8sc a n f (”d, &jx);/ / 继续输入选择f clo s e(fp);pr i n tf(”O返回主菜单n);g e tchar ();a=ge t cha r ();g e tchar ();nf
9、( a=,0, ) main() ;/返回主菜单流程图:开始vo i d c h a nge () int i = 0, j = 0, swa y , t , x;char nameT 1 0, n u mber10.;Sprint f (”* 夫* *学 生考 勤修 改* * * * * * * * *n);if ( ( f p=fo p en(date、t x t r ) ) = = N U L L) /将文件内容读入内存print f C文件打开失败rT);e x it(0);0of o r (i=0; f eof (fp) = =0; i+) fr e ad (&stui, sizeo
10、f (st rue t st u dent) , 1, fp) ;/读取文件内容旺c 1 o se( f p);/ /关闭文件pr i n tfC选择查找方式1按照姓名查找 2按照学号查 找“);d s ca nf(%d sway);/* * * * * * *水* *按照姓名查找开始 * * * 次 * * * */ /if ( s way=l)oprintf (”请输入需要修改学生得姓名“);”/ p ri n tf(i=%d, i );o scanf(” %s,z, name);gfor (j =0;t!=0; j+)。t =strcmp (st u j、nam e , name) ;0
11、o if (j=i)Qt =0;0 sprint f(未找到您所查询得数据,请重新输入n);。 8i f(j i)查询成功。printff您查找得学生信息如下n姓名 s学号s性别%c生日%d%d月 mo nth, s tuj- 1 、day, stujl、kq);pr i ntff就是否修改该生考勤信息0否 1 就是);/选择就是否修改考勤8 s c anf C%d ,&x) ;/输入选择变量值心 i f (x=l)3。printf( ”请输入新得考勤值);Msca n f (%d, &stujT、kq) ;/ / 输入新得考勤值oif(f p = f ope n ( dat e、tx t ”
12、,w)=NULL)/以只写方式打开文件0 0 8printf (文件打开失败n );exit (0);for(j=0;j n u mbe r , n u mber);if (j=i)。print f (未找到您所查询得数据,请重新输入);。 町虹f (j day, stu j- 1 、k q );printf (就是否修改该生考勤信息0否 1就是。;/选择就是否修改考勤8 scan f (%d : &x) ;/输入选择变量值6 if (x= 1 )odd a prin tff请输入新得考勤值“);8 sea n f C% d & st ujT、kq) ;/输入新得考勤值0i f( ( fp=f
13、op e nCdate、t x t ”, w ) ) =NU L L)/以只写方式打开文件00。printfC文件打开失败 n);oexit (0);f o r(j= 0 ; ji; j+) i f (fwr i te仗 s t u j , sizeof(str uct stu d ent), 1, fp) !=1) printf (,z 文件写 入错误 n );/ /写入文件f c los e (fp);/ /关闭文件g0printff就是否继续修改其她学生考勤0否1就是“); scanf&x);町 f (x=l) c h ang e ();8 /法 * * *按照学号查找结束*材材* *
14、* * * */printf(M 0返回主菜单n);g e tchar ();a=ge t char ();X=l?Y4. search ()函数vo i d sea r ch () i nt i二0, j =0, swa y , t, x; ch a r name 1 0,number10J;printf (”* 次 * * 水*学 生 信 息 查询* * * * * * * * * *n H );if (fp= f op e n(,date、txt ,r ) )=NU L L)/将文件内容读入内存printfr文件打开失败n ”);e x i t (0);吐 o r ( i = 0 ; f
15、 eof ( f p) = = 0; i +) fr e ad(&stuil, s i zeof (struc t s t u d ent), 1, f p) ;/读取文件内容f c lo s e (fp);/关闭文件opri ntf(“选择查找方式1按照姓名查找 2按照学号查找 ”);Qscanf (%d, &s w a y );o / * * * 細* * *火* *水按照姓名查找开始* * * * *夫 * * */i f (sway=l)printf ( 请输入需要修改学生得姓名“);/ / prin t f (z,i=%d i);scanfname);旺or (j=0; t !=0;
16、j+)t = strcm p(stuj、n am e , name) ; Alf(j=i)。DO t =0;8 o p rint f (未找到您所查询得数据,请重新输入 n ”);aif(j n a me, name); o i f(j=i)0 at = 0;wprintfL未找到您所查询得数据,请重新输入n);。if (j 2f, s c ore);町哪rint f (“就是否继续计算其她学生考勤分数0否 1就是“); scanf (/z%d ,&x);a i f (x 二二 1) e v a lu a te();0V* * * * * * * * * *按照姓名查找结束水*火* * * *
17、 * * * * */0/火* *火水*水*水水* *按从負学号查找于F始水* -k * * * * * 次 * * * / / i f (sw a y=2)。printf(“请输入需要修改学生得学号“);/printf(” i=%d, i );sc a nf (” %sz,, num b e r );fo r (j=O;t!=O;j+)t = strcmp(s tujj n um b er, number)严 if (j= i )a8 t 二0;b print f(未找到您所查询得数据,请重新输入);町。Mf(ji)/查询成功。gprintf (”您查找得学生信息如下n姓名s学号 s性 别c
18、生日d年4月d日当前考勤次数%dn,z, Stuj-1K na me, s t u j- 1 J、number, stu j T、s ex, stuj- 1 J、year, stuj-l、 month, s tuj- 1 、day, s tuj- 1 、k q );s core= (stu j - 1 、k q ) / k qc s *100;a print f (该生当前考勤分数为5、2 f H , sco r e);。print f (”就是否继续计算其她学生考勤分数0否 1就 是”);o s c anf (”d, &x);if (x= 1 ) e valuate();00 V* * *
19、按照学号查找结束 * * * * * * * * * * * * */pr i n t f CO返回主菜单n);Qg etch a r ();a二getchar ();ge t c h a r ();辻(a=, O ) main ();流程图:测试方案:按照每个函数功能进行测试,在做完每个函数对其进行测 试,主函数测试,先将所有需要得功能模块函数设置为空,每个函数用一个printf语句来测试主函数。1. 存在问题:开始将生日定义为字符数组,当用scanf来输入年月日时,年月日之间用空格分隔,但在输出时发现年月日出现错误。分析原因:用scanf输入年月日时,系统会把用来分隔得空格当做字符读入。
20、解决方法:将年月日定义为整型,这样就可以用s c anf输入,用空格隔开。2. 存在问题2 :在查找数据时,需要先将所有数据读入一个结构体数组,在读取后未关闭文件,执行查找时查找不到相关信息。分析原因:再利用f or循环读取全部文件内容后,文件指针将会移至文件 末尾,这样再执行查找时就会从文件末尾开始,显然不符合要求,所以会出 现错误。解决方法:在读取完数据后先关闭文件,在查找时再次打开文件,这时文件指 针就会指向文件开头。3. 存在问题3:再多个使用get char或者呂e t s输入得时候,会出现直接跳 过输入得情况。分析原因:在使用getch a r或者gets输入得时候,系统会将前一步
21、用来确认 执行得回车当成字符读入,导致跳过该步输入。解决方法:再getc h a r或者gets前面加上get c h a r ()语句,读掉回车, 下面得ge t char或者gets就可以正常输入。四、小结通过编写该程序,熟悉了 C语言得基本语法,选择,循环等结构,深入练习 了函数得调用方法,与文件得读写方法,熟悉了结构体得使用,更加深化了面向通右对匾序得后亦调试,熟矗了 C常见错误,锻炼了思维得严密性,与完备 性。通过对程序得注释与画流程图,形成了 一套自己编程得风格,与清晰地思 路,使思维更加条理化,清晰化。附件:主要源程序代码(需打印)#i n c lu d e# i ncludev
22、str i n g h #inclu d e hFILE *fp;定义文件char a;/返回选择变量float k q cs= 0 ;/ /应到考勤次数变量struct s t udent char namel 0 ;char numberl 1;c h ar sex;in t year;i nt m o n t h;in t day; int k q ;/定义储存学生信)stu100;息得结构体数组/ / * * * * * * * * * * * Is 函 数 开 女台 * * * * *v o id ma i n()录入数据函数修改数据函数查询数据函数/计算总评函数v oid in p
23、 ut();void c h a nge ();void sea r c h (); void e v aluate ();cha rite m;sy s t em(nco 1 or 3 4M); p r intfC n”);0prin t f( H勤管理系统On”2pri n t f (”n”);0pri n tf (n”);dprintf(n”);ddprintf (printf(HO 学 生 考 BY朱胜佳6 P r i n t f ( n);p r int f (H及考勤情况录入n”);O1.学生信息n ” );dpr i ntf(Hp rintf(n勤情况修改On”);回p r in
24、 t f (”2、学生信息及考W);pr i n tf(H息及考勤情况查询n”);Qp rint f (H3、学生信o dprin t f(H勤总评分数查询60pr i nt f (OnH);4、学生考 n ” ); a p rin t f(npr i ntf(”n ); pri n tf(s canf(%c u,&it e m); swit c h( i tem)/用户界面请选择您需要得操作nj;T: i n put(); b r e a k;c ha n ge();break;丁 : s earch(); break;41 evaluat e (); bre a k ;casecase 2
25、:ca s ecase功能选择/ / * * * * * 次* * * * * * 夫 * * * * * * * * * * * * * * * * 1 函 数 结 束 * * 火* * * * * * * * * * * * */ / /* * * * * * * * * * * 夫 *录入数 据函数内容开始* * * * 水* * * * 水* * * * *实现v o id rec o r d () int i, j =0jx= 1 ;p r i ntf ( H * * * 次 * 次* * 次* * * 次 *学生基本信 息 录 入* * * * 水* * * * * * 水* 岸)
26、;i f( (fp二f o pen(” da t e、t x t n , M w11) =NULL)printf (文件打开失败nH);exit (0);for (i=0; j x=l; i+)矗入信息循环for(;j=0;)/输入确认循环get c h a r();pri n if(请输入第d个学生得姓名“,i +1);gets(stui nam e );p r intf(“请输入第 d个学生得学号“,i+ 1 );g ets( s t u i 、numb er);print f (“请输入第d个学生得性别(男:m女:f) ”,i+1);s tui、sex=get c ha r ();pri
27、n t f (请输入第小个学生得生日(格式:年 月 日)”,i+1); sc a nf(” d%d%d,&stui、y ear, & s t u i、month, &stu i、 d ay);P rintf (请输入第d个学生得当前考勤次数”,i+1);scan f (”d”,&st u i、kq);P r i ntf(”您输入得信息为姓名 s学号s性别 %c生 日 %d 年(1 月! B n 0 重输 1 确认”,stui、name, s t u i 、nu mb e r , st u i、sex, s tui、y ea r ,stu i 、m o n t h,stu i、d a y); s
28、canf (”d”,&j);输入确认j= o;i f ( f w r ite(& s t u i,size o f(s t ru c t s t ude n t ), 1, f p)! = 1) p ri n tf(”文件写入错误n );写入文件pr i n t f( 就是否继续输入下一个学生信息0终止1继续n”);scanfCd&jx);/ 继续输入选择f c 1 o s e (fp);prin t f (-0返回主菜单n);g e tchar();a=getch a r();ge t char();if (a=,0,) m a i n ();/返回主菜单I / /* 夫 * * * 夫*
29、录入数据函数内容结束* * * * *林夫*枠 * * * * * * * 水* */* * * * * 夫 * * * * * * * 修 改数据函数内容开女台* *夫*水*水* * * * * * * * 水* * *void change ()i n t i= 0 J=0, s way, t , x; c h a r n a me 10, n umbe r 10;* * * 水* * * * * * * * 学printf(n考勤 修改* 水* * * * * * * * * * *nH);if( f p=f o pen (”date. txtH;rrn)=NULL)/将文件内容读入内存
30、pr i nt f ( n文件打开失败W); exit (0); f or(i= 0 ;feof ( f p )= = 0; i+) fr e a d (&stui,siz e of (stru c t stu d ent),l, f p);/读取文件内容f c 1 o s e(f p );/ /关闭文件P rintfC选择查找方式1按照姓名查找 2 按照学号查找“);scan f (” %d&sw a y);/* * *按照姓名查找开始* *水 * 水* * 水* * */if(sw a y=l)P r intf(”请输入需要修改学生得姓名J;/ Apri n t f(”i=%dj i );
31、s c a n f (” s, n a me);for(j=0; t!= 0 ; j+)t=str c mp(st u j、n a me,name);if(j= i )t=o;pr i ntf(-未找到您所查询得数据,请重新输入 n-);if(jvi)查询成功printfC您查找得学生信息如下n姓名%s学号s性别%c 生日%(1年 kq);p r i n t f( H就是否修改该生考勤信息0否1就是”);/选择就是否修改考勤scanf (H%d H,&x);输入选择变量值i f(x=l)print f(“请输入新得考勤值”);s canf( ir %dn, & smjl、kq) ;/输入新得考
32、勤值i f (fp= f open (“dats tx t H ,W)=NULL)以只写方式打开文件print f (文件打开失败nJ;e x i t(0);for(j=0; jvi;j+) if( f w r ite(&stuj,si z eof(stru c t student), lfp)! =1) P rin t f(”文件写入错误n“);/写入文件fc 1 o s e(fp);关闭文件printf(”就是否继续修改其她学生考勤0否 1就是”); scanf(n%d 11,&x);if(x= = 1) c ha ng e();/ * * * * * * 火 * * * 按照姓名查找结束
33、* * * * * * * * */ / /* * * * * * * * * 按照学号查找开始 * * * * * * * *水* * * * * * / if(sway=2)pr i ntf(-请输入需要修改学生得学号*);/ printf(Hi=%d Ji);scanf( r %s”,n iimbe r );for (j=0; t !=0;j+) t=strcmp( s tuj numbe r ,n u mb e r);if( j =i) t=0;pri n tf(”未找到您所查询得数据,请重新输入n)i f(jvi)查询成功print f(您查找得学生信息如下n姓名%s学号s性别%c
34、生日 %d 4%d 月 dT 当前考勤次数 %dn“,stuj 1 、name,stu j-1、 number,st u j - 1 、sex,st u j- 1 y e ar,stu jl、mon t h , stuj 1、 d ay,stu j-l kq);printf (-就是否修改该生考勤信息0否 1就是”);/选择就是否修改考勤scanfC% d “,&x);输入选择变量值i f(x=l)P rintfC1请输入新得考勤值J;scanf C%cT,&st u j-l kq);输入新得考勤值i f (fp=fopen (Hda t e、txt Hw”)=NULL)/ / 以只写方式打开
35、文件printf(”文件打开失败);e x it(O);1for(j=0; j i;j+) i f(fwrite(&stuj, s i zeof(stru c t student), fp)!=l) print f (”文件写入错误n”);/写入文件fclose (fp );/关闭文件)printfC1就是否继续修改其她学生考勤0否 1就是scan f(”cT,&x);if (x= 1) ch a ng e ();1*/*法*次* * * * * * *按照学号查找结束* *水 * * * */printf(” 0返回主菜单nn);g e tchar(); a =getchar(); g et
36、 c h a r();i f(a=z 0 *) main();)/* * 夫 * * * * * * * * 水* * * * 次* * * *|i 改数据函数内容结束*水* * * *夫 *水* * * * * * * */* * * * * * * * * * * * * * * * * 水* * *查询数据函数内容开始* * * * * * * * * * * 火* * * 夫k *v oid s ea r ch()* * * 水* * * * 次 * nam e , n ame);if(j = =Dt=0;P r intf(未找到您所查询得数据,请重新输入n“);查询成功pri ntf
37、 (“您查找得学生信息如下n 姓名 s学号 %s 性别c生日d年4月d日当前考勤次数%dn u , Stuj-1 nam e , stuj-l L number, s tuj 1 sex ,stu j 1、ye a r,stuj 1 month, stu j-1、d a y,stu j 1、k q );printf (”就是否继续查询其她学生信息0否 】就是”);scan f (”d”,&x);if (x=l) s earch();/ * * *按照学号查找结束* m * * * Hk *按照姓名查找结束* *水* * * * */* * * 按照学号查找开女台 * *水* * */i f (s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘孜职业学院《理解当代中国英语读写》2023-2024学年第一学期期末试卷
- 甘肃政法大学《制药工艺学》2023-2024学年第一学期期末试卷
- 《赤壁赋公开课》课件
- 《疫的概念与功能》课件
- 三年级数学上册六采摘节-混合运算乘加减混合运算说课稿青岛版六三制
- 三年级科学上册第1单元水3水结冰了教案1教科版
- 安全亮眼看世界课件
- 《汽车实习报告》课件
- 2021年卫生系统招聘(预防医学)考试题库
- 洗脑培训课件
- 职工心理健康知识手册
- 11396-国家开放大学2023年春期末统一考试《药事管理与法规(本)》答案
- 工程量自动计算表格新
- 天津市四校2022-2023学年高二上学期期末联考数学试题(原卷版)
- 新时期学校德育工作的思路与方法
- 全国优质课一等奖人教部编版小学四年级下册道德与法治《说话要算数》公开课课件(内嵌视频)
- 四年级上册道德与法治全册知识点汇总
- 分布式计算安全与隐私保护
- 客情关系的有效维护
- 《班主任工作》教学大纲
- 新版出口报关单模板
评论
0/150
提交评论