C语言实训报告—学生成绩管理系统文件实现_第1页
C语言实训报告—学生成绩管理系统文件实现_第2页
C语言实训报告—学生成绩管理系统文件实现_第3页
C语言实训报告—学生成绩管理系统文件实现_第4页
C语言实训报告—学生成绩管理系统文件实现_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语言程序设计题实物臂心告院系:专业:姓名:学号:指导教师: 日期:2017年9月9日目录1问题定义12系统设计12. 1总体设计13. 2函数预览23系统实现34. 1功能模块33. 2全部代码124系统维护194. 1调试和测试195归纳总结195. 1开发经验206. 2实训中遇到的问题及解决方法207. 3设计中的不足之处208. 4 感想和心得体会206参考资料20前言课程设计环节是应用型本科院校非常重要的一个教学环节,是学完一门课 后应用本课知识及以前的知识积累而进行的综合性、开放性的训练。通过课程 设计,不仅能够使学生得到系统的技能训练,巩固和加强所学得专业理论知识, 而且能够培

2、养学生工程意识、创新能力、团队精神等综合素质,培养学生的设 计能力和解决实际问题的能力。C语言由于其强大的功能,丰富的表达能力,高效的代码,良好的移植性和 灵活性,自1972年问世以来,经久不衰,即使现在出现了面向对象的程序设计 方法和开发工具,但它仍然是人们学习程序设计的首选语言,用它训练和提高 编程技术,以及开发应用程序等。我们通过C语言程序设计这门课程的学习,已经能编写解决小问题的程 序,对程序的开发也有了初步的认识,还掌握了 C语言的基本语法,这一过程 确确实实令我们感到欣喜,有点计算机可以完成自我任务的成就感。但是,对 于程序设计而言,学习C的步伐不应该停留于此。我们最终的目的应该是

3、掌握 开发大型综合程序的方法,即遵循软件工程的开发步骤和结构化程序设计思想, 用C语言开发出解决复杂问题的大型综合程序。可是对于多数学生来说,学习 了 C语言后,除了应付各种考试之外,别无它用,对TurboC语言丰富的函数知 之甚少,加上DOS环境所限,因而对C语言兴趣不大,也感到C语言比较难以 掌握。本实训就是为了让学生在学完C语言后进一步了解C语言的知识,掌握C 语言在软件开发方面的使用方法,希望通过此次实训,不仅能提高学生学习C 语言的兴趣,更为今后学习其它专业知识及开发程序打下坚实的基础。本指导书中有些内容借鉴了互联网上相关程序的设计思想,在此对相关者 表示衷心的感谢。由于时间、经验及

4、水平的原因,不当、不足之处,请大家提出宝贵意见。编者桂林18和秋大号信息科技等优学生成绩管理系统本题目设计目的是训练学生的基本编程能力,了解管理学生成绩信息系统 的设计开发流程,熟悉C语言的文件各种基本实现和操作。本程序中涉及结构 体、文件读写、宏等方面的知识。通过本程序的训练和制作,使学生能对C语 言的文件操作等方面有一个更深刻的了解,掌握利用结构体存储实现对学生成 绩管理的原理,为进一步开发出高质量的管理信息系统以及之后的其他编程方 面知识的学习和理解打下坚实的基础。i问题定义创建一个学生成绩管理系统。假设系统中每个学生记录只包 括学号、姓名、平时成绩、期末成绩、总评成绩、总分、平均分、名

5、次等信息。程序的运行效果如上图图所示,选择任意菜单后, 实现相应功能。具体结构体设定请见以后。程序初始主界面截图如下:在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段, 完成系统设计和系统实现的任务。2、系统设计2. 1总体设计本管理系统的程序主要由C语言编写,考虑到各方面的维护和需求实现考虑,程序代码总体上采用模块化编程方式设计以n”、右厂个大的功能需求分作几个小模块来配介实现,"上任低添加不货 新建功能上的成木和时间。尽量不依赖于C语言全局变量而是通过函数调用. 以下是本管理系统的功能模块:专递数据。主功能菜单查询功能2. 2函数预览1)主函数调用其他不同功能输出功

6、能2)主菜单函数输出显示界面3)新建信息函数1 (手写输入)手动输入学生的成绩信息,包括学号、姓名、平时成绩、总评成 绩4)新建信息函数2 (文件输入)通过文件导入学生成绩信息5)计算成绩函数计算学生试卷分数的总评成绩6)查询成绩函数1 (按学号)按学号查询学生试卷的总评成绩7)查询成绩函数2 (按姓名)按学号查询学生试卷的总评成绩8)计算成绩函数1 (计算总成绩的及格率和优秀率)计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学 生人数9)计算成绩函数2 (计算总成绩的平均分和标准差) 计算学生总评成绩的平均分和标准差10)输出成绩函数输出全班学生的所有成绩,包括学号、姓名、总评成绩1

7、1)导出成绩函数将学生所有成绩的列表导出到文本score. txt中(ch=Menu ();switch(ch)(easel:printf (请输入学生人数 n (n<=%d) :,SIZE);scanf (%d”, &n);printf (请输入学生平时成绩与期末成绩所占总评成绩的的比例(用整数表示,满分100分):n);/*函数功能:显示菜单并获得用户键盘输入的选项*/intMenu(void) intitemSelected;printf (n【菜单】n);printf (,zl.输入记录n);printf (2,计算学生总评成绩n);printf C3,按学号查询成绩n)

8、;printf C4.按姓名查询成绩n);printf (5.计算学生及格率和优秀率n);UI ,case2:后抑/、干土八、缪3=1UU) : N请瑞人季生平时成绩与期末成绩所占总评成绩的的比例(用整数表示,满分100分): 30鬻嚼翻澹簿的数Student, txt文件中导入试卷分数*1请输入学生的竽号、姓名、平时成绩和期末成绩(逗号隔开):1651500101,位,23,561651500102,缀,33,67/*函数功能:手动输入分数*/1c11 J / c HPT T J F T 1 J j 1 /*函数功能:从文本student, txt中导入试卷分数*/ voidRead_dat

9、al(STUstu, intn, inta, intb)(inti;FILE*fp;if (fp=f open (''student. txt,r)=NULL)(printf (打开文件 student, txt 失败! n);/*函数功能:计算学生试卷分数的总评成绩*/*函数功能:按学号查询学生试卷的总评成绩*/for (i=0;i<n;i+)(if (stui. num=number)(printf (学号:ldt姓名:%st平时成绩如dt期末 成 绩 :%dt 总 评 成期末成绩:34 忌评成绩:5十差秀准名:B 你要6 单人慧于姓复暴出出人人力一绩 和和 绩率分总

10、及平 oi查杳不 I记学直姓名士生姓 :笑2 蓄10 选战00 的查15菜按731翦号 ILZI3.I4,I5.I6,-I7.&10.请子/*函数功能:按姓名查询学生试卷的总评成绩*/voidSortbvname(STUstu1. intn)/*函数功能:计算全班学生总评成绩的及格率和优秀率, 并按优良中差输出学生人数*/*函数功能:计算学生总评成绩的平均分和标准差*/voidCount_average(STUstu, intn)inti;doublesum=0, aver, temp=0, standard;for(i=0;i<n;i+)(sum=stui. score2+su

11、m;if (stui. score2<60)t0+;elseif(stui. score2<=75)t1+;elseif(stuFil. score2<=85)t2+;842559912 责责责责责责责责主用 成成成成成成成成成 评评评评评评评评评 总&&总总&&B总9 5 8 3 3 1 9 9 4 7 18 6 3 7 4-4- 责责责责责责责责音 £2 : Sr4Sr4 W4B ST42 ; ST4b夕一 成成成成成成成成成 nii4 1 2 CO 3 4 4 2 4 832449912 责责责责责责责责主用 成成成成成成成成成

12、 寸寸寸寸寸寸 m rr m m m m rr m m 平平平丰平平平平mnopqrcotu 在爸爸爸等爸爸爸七 姓姓姓姓姓姓姓姓全 3 4-567890 1111111 24k一 OOOOOOOO o o o o o o O 07 5 5 5 5 5 5 5 5俞 1X 1x 1x 1x 1x 1x 1x 5 5 5 5 5 5 5 5手 <0 6 <0 <0 <0 6 <0 工 E 1111111 开 卑弓0000号01-/*函数功能:输出全班学生的所有成绩*/ voidShow_data(STUstu, intn)12)导出成绩函数S434254276S88

13、9763158口收49751883633174949437736435名 35543o1356s?1ck2548%72ws122阴43见 311224玄58693572需穗财应汴1651500102B峋 500103C1661500104D1(61500105I1661500106r歧go?c1661500108M1651500109111500110J16515O0H1X15150011211651500113IK615O0114N166160011501651500116P1150011?q1651500118K1(61500119S16615001201l«15O0121u16

14、61500122V1651500123f1glM0124X1651500125T1(6150012621:.3行委X3t杵g aMiei rtiwi «*vi 用oxr不差豆-fl洵记5U.疗法百文 你干,学拄 InrHA.拿3日晰: :全:全 法接裔法卷 人询匍儿¥入«/.卑 1记»号石鱼口学列S你B/*函数功能:将学生所有成绩的列表导出到文本score, txt中*/voidWrite_data(STUstu ,intn)(FILE*fp;inti;if (fp=fopen("score. txt, w)=NULL)(printf (打开文

15、件失败! n);exit (0):voidSortbyname(STUstu, intn);voidCount_pass(STUstu, intn);voidCount-average(STUstu, intn);voidShow_data(STUstu L, intn);voidWritejata(STUstu , intn);intmain () STUstuSIZE; intn, a, b; charch;intoh;printf (tt*n);printf (ttt*欢迎使用*n);printf (ttt*学生试卷分数统计系统*n);printf (tt*n);while(1)(ch=

16、Menu ();switch(ch)(easel:printf (请输入学生人数n(水或d)SIZE);scanf (/d, &n);printf (请输入学生平时成绩与期末成绩所占总评成绩的的比例(用整数表示,满分100分):n); scanf ("%d%d”, &a, &b);printf (以下有两种输入试卷分数的方式:n*L手 动输入试卷分数t2.从student, txt文件中导入试卷分数*n);scanf(/d, &oh);switch(oh)easel:Read_data (stu, n, a, b); break;case2:Read_

17、datal (stu, n, a, b);break;default: printf (输入菜单序号错误! );)break;case2:Total_mark(stu, n, a, b);break;case3:Sortbynum(stu, n);break;case4:Sortbyname(stu, n);break;case5:Count_pass(stu, n);break;case6:Count_average(stu, n);break;case?:Show_data(stu, n);break;case8: Write_data (stu, n); break;caseO:*n);

18、printf (ttt*感谢使用*n);printf (ttt*学生试卷分数统计系统*n);printf(tt*n);exit (0);default : printf (输入菜单序号错误! );)returnO;)/*函数功能:显示菜单并获得用户键盘输入的选项*/intMenu(void) intitemSelected;printfCn【菜单】n);printf (,zl.输入记录n);printf (2.计算学生总评成绩n);printfC3.按学号查询成绩n);printf (,z4.按姓名查询成绩n);printf (5.计算学生及格率和优秀率n); printfC6.计算学生平均分

19、和标准差n); printf (,z7.成绩列表n);printf (S.导出文件n);printf ("0.退出 n");printf (请输入你的选择:);scanf (飞d,&itemSelected) ;/*读入用户输入*/ returnitemSelected;)/*函数功能:手动输入分数*/voidRead_data(STUstu, intn, inta, intb)inti=0;printf(请输入学生的学号、姓名、平时成绩和期末成绩(逗 号隔开):n);for(i=0;i<n;i+) scanf (飞Id, %s, %d, %d, &s

20、tui. num, &stui. name, &st ui. score0, &stui. score 1);stui. score2=stui. score0*a/100+stui. score Fl *b/100;)/*函数功能:从文本student, txt中导入试卷分数*/voidRead_datal(STUstu, intn, inta,intb)( .inti;FILE*fp;if (fp=f open ("student. txt,r)=NULL)(printf (打开文件 student. txt 失败! n);exit (0);)for(i=

21、0;!feof(fp);i+)(fscanf (fp,&stui. num);fscanf(fp, stui. name);fscanf (fp,,%d,, &stui. score 0);fscanf (fp,,%d,, &stui. score 1);)fclose (fp);for(i=0;i<n;i+)stui. score2=stui. score0*a/100+stui. score Fl *b/100;)/*函数功能:计算学生试卷分数的总评成绩*/voidTotal_mark(STUstu, intn, inta,intb)1 inti;for(i=

22、0;i<n;i+)(stui. score2=stui. score0*a/100+stui. score Fl *b/100;printf (学生:%ldt姓名:%st总评成 绩:%dn,stui. num, stui. name, stui. score );)/*函数功能:按学号查询学生试卷的总评成绩*/voidSortbynum(STUstu, intn) (intnumber, i;printf (请输入要查找的学生学号:);scanf (飞d, &number);for(i=0;i<n;i+)(if (stui. num二二number)(printf (学号:

23、%ldt姓名:%st平时成绩:男dt期末成 绩由dt总评成绩:/dn,stui. num, stui. name, stui. score 0, stui. score 1, stu i. score );return;)printf (抱歉,没有找到! n);)/*函数功能:按姓名查询学生试卷的总评成绩*/voidSortbyname(STUstu, intn) (charnamed10;inti;printf(请输入要查找的学生姓名:);scanf (/s, named);for(i=0;i<n;i+)(if (strcmp(named, stui. name) =0)(printf

24、 (学号:%ldt姓名:%st平时成绩:%dt期末成 绩:/dt总评成绩:/dn,stui. num, stui. name, stui. score 0, stui. score 1, stu i. score );return;)printf (抱歉,没有找到! n);)/*函数功能:计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学 生人数*/voidCount_pass(STUstu, intn) (inti,pass_num, t4;floatpassrate;memset(t, 0, sizeof(t);for(i=0;i<n;i+)(if (stui. score2&

25、lt;60) t 0+;elseif(stuiL score2<=75)telseif(stui. score2<=85)t2+;elseif (stui. score2<=100)t3+;pass,_num=tl+t2+t 3;passrate=(float)(tl+t2+t3)/n;printf (及格人数:%dn,z, pass_num);printf ("优:%dt 良:%dt 中:%dt差:%dn,式3,t,;printf (总评成绩及格率:%. 2fn", passrate);printf (总评成绩优秀率:%. 2fn,/, (float)

26、t3/n);)/*函数功能:计算学生总评成绩的平均分和标准差*/ voidCount_average(STUstu, intn) inti;doublesum=0, aver, temp=0, standard;for(i=0;i<n;i+)(sum=stui. score2+sum;)aver= (float)sum/n;for(i=0;i<n;i+)(temp=(stui. score2-aver)*(stui. score2-aver) +temp;)standard=sqrt(temp/n);printf (总评成绩平均分:虬2ft总评成绩标准差:%. 21fn”, ave

27、r, standard);)/*函数功能:输出全班学生的所有成绩*/voidShow_data(STUstu, intn)( .inti;for(i=0;i<n;i+)(printf (学号:%ldt姓名:%st平时成绩:%dt期末成绩由dt总评成绩:/dn,stui. num, stui. name, stui. score 0, stui. score 1, stu i. score );)/*函数功能:将学生所有成绩的列表导出到文本score, txt中*/ voidWrite_data(STUstu, intn)1 FILE*fp;inti;if (fp=fopen("

28、score, txt", w")=NULL)(printf (打开文件失败! n);exit (0);)fprintf(fp, 以下各项分别对应学号、姓名、平时成绩、期末成绩和总评成绩:n);for(i=0;i<n;i+) fprintf (fp, /z%ldt%st%dt%dt%dn,/, stui. num, , stui. score0, stui. scoreEl, stui. score2);)fclose (fp);)4、系统维护经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用 户使用,但是在软件的使用过程中还会面临更加漫

29、长的工作,即软件维护。一 般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改; 为满足新的需求而对程序作必要的改进等等,一个好的程序不仅是通过好的编 程技术实现,还要通过好的编程风格和设计方式来达到最低成本的代码维护和 新需求的实现。4. 1调试和测试一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚 至成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错 误,因此要对程序进行认真仔细的测试与调试。通常情况下语法错误造成的编译错误可以在运行时期前解决修改,比如多重 指针的解除引用赋值造成的编译错误可以通过添加对应的括号来实现等。但一 些错误比如说逻

30、辑错误和运行时错误就得等到程序运行时检查或者崩溃时候才 能知晓,比如空指针引用和浮点变量存储除法结果但忘记整数除法的例外情况。 但捕捉这种错误也可以通过一定的方法能在使用前排除。测试可按模块测试、组装测试和确认测试的步骤进行。(1)模块测试就是分别对各模块进行测试的过程。在编写一个模块后应立即对其进行测试,因为这时对模块记忆深刻,而且单个模块相对较小,所以容 易构造测试数据,能方便地检查和改正错误。(2)组装测试就是把所有模块(应该是通过模块测试的模块)按预先制定 的计划逐步组装和测试的过程。一般情况下,各模块之间要相互传递数据和控 制信息,因此组装测试的主要任务是发现模块接口中的错误。(3)确认测试是最后一个步骤,一般在将软件交付用户之前,应确认软件 是否确实满足用户的要求,通常使用接近实际的用例进行测试。5、归纳总结5. 1开发经验通过对本项目的开发,体会到要掌握以下几点内容。 大程序的设计风格。按“自顶向下,逐步细化,模块化”的方法进行程 序设计。在设计功能的时候还要考虑合适的算法,也要注意功能之间的 依赖,必要时将重复实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论