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

下载本文档

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

文档简介

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

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

3、以完成自我任务的成就感。但是,对 于程序设计而言,学习 C 的步伐不应该停留于此。我们最终的目的应该是掌握 开发大型综合程序的方法, 即遵循软件工程的开发步骤和结构化程序设计思想, 用C语言开发出解决复杂问题的大型综合程序。可是对于多数学生来说,学习 了 C语言后,除了应付各种考试之外,别无它用,对 Turbo C语言丰富的函数 知之甚少,加上DOS境所限,因而对C语言兴趣不大,也感到C语言比较难 以掌握。本实训就是为了让学生在学完 C语言后进一步了解C语言的知识,掌握C 语言在软件开发方面的使用方法,希望通过此次实训,不仅能提高学生学习 C 语言的兴趣,更为今后学习其它专业知识及开发程序打下

4、坚实的基础。本指导书中有些内容借鉴了互联网上相关程序的设计思想,在此对相关者 表示衷心的感谢。由于时间、经验及水平的原因,不当、不足之处,请大家提出宝贵意见。编者桂林电子科技大学信息科技学院学生成绩管理系统本题目设计目的是训练学生的基本编程能力,了解管理学生成绩信息系统 的设计开发流程,熟悉 C语言的文件各种基本实现和操作。本程序中涉及结构 体、文件读写、宏等方面的知识。通过本程序的训练和制作,使学生能对C语言的文件操作等方面有一个更深刻的了解,掌握利用结构体存储实现对学生成 绩管理的原理,为进一步开发出高质量的管理信息系统以及之后的其他编程方 面知识的学习和理解打下坚实的基础。1、问题定义创

5、建一个学生成绩管理系统。假设系统中每个学生记录只包括学号、姓名、平时成绩、期末成绩、总评成绩、总分、平均分、名次等信息。程序的运行效果如上图图所示,选择 任意菜单后,实现相应功能。具体结构体设定请见以后。程序初始主界面截图如下::辜舉爲零怎数统计系统*率差 绩成绩羣分 :择 总询询选 羣查查生生需囲 I记学号子列文你 单入辜姓出入 菜 输 1JZXI 咛 4 5 &17 claD 罪在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段, 完成系统设计和系统实现的任务。2、系统设计2. 1总体设计本管理系统的程序主要由 C语言编写,考虑到各方面的维护和需求实现考 虑,程序代码总体上采用

6、模块化编程方式设计以及编写。即将一个大的功能需 求分作几个小模块来配合实现,为了降低添加和维护功能和需求的成本和时间。 尽量不依赖于C语言全局变量而是通过函数调用之间的参数来传递数据。以下是本管理系统的功能模块:2. 2函数预览1)主函数int (ndin()调用其他不同功能2)主菜单函数int Nenu(void)输出显示界面3)新建信息函数1 (手写输入)手动输入学生的成绩信息,包括学号、姓名、平时成绩、总评成绩4)新建信息函数2 (文件输入)uoid Read_data1(STU stu ,int n,int a pint b)通过文件导入学生成绩信息5)计算成绩函数U*1 kT 心ki

7、i g”去髯1F uoid Total markfSTU stu ,int n,int a Pint b)计算学生试卷分数的总评成绩6)查询成绩函数1 (按学号)uoid SortbynumfSTU stu ,int n)按学号查询学生试卷的总评成绩文案大全实用标准文档7)查询成绩函数2 (按姓名)uoid Sortbyname(STU stu,int n)按学号查询学生试卷的总评成绩8)计算成绩函数1 (计算总成绩的及格率和优秀率)void Count_pass(STU 5tu,int n)计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学生人数9)计算成绩函数2 (计算总成绩的平均分

8、和标准差)uoid Count_auerage(STU stdfint n)计算学生总评成绩的平均分和标准差10)输出成绩函数uoid Shov dtd(STU stuJ Bint n)输出全班学生的所有成绩,包括学号、姓名、总评成绩11)导出成绩函数uoid Write_data(STU stiu ,int n)*将学生所有成绩的列表导出到文本 score.txt中3、系统实现3. 1功能模快(附代码)1)主函数int mai n()STU stuSIZE;i? t n,a,b;char Ch = Men u();int oh Switch (ch)prin tf(tt*n)prin tf(

9、case*1:欢迎使用* n);示,学数统计系统prin旳怜ntf学生输a ri n+f/+* 矣* 余* scan f(%d, &n);冇(n =%d);, SIZE);*n);while (1) printf(请输入学生平时成绩与期末成绩所占总评成绩的的比例 满分 100 分):n);(用整数表案大全scan f(%d%d,&a,& b);printf(以下有两种输入试卷分数的方式:n*1.手动输入试卷分数t2.从student.txt文件中导入试卷分数 *n);scan f(%d, &oh);实用标准文档文案大全1) 输入限定2)主菜单函数率差s绩SI* ss 魚询平 录主查查生生需 &

10、子号p列凭 单入辜姓出I2.I3.I4.I5.I6.I7.IS.IIL/*函数功能:显示菜单并获得用户键盘输入的选项*/int Me nu( void)int itemSelected;prin tf(n【菜单】n);printf(1.输入记录 n);printf(2计算学生总评成绩n”);printf(3.按学号查询成绩n”);printf(4.按姓名查询成绩n”);prin tf(5 计算学生及格率和优秀率n);prin tf(6 计算学生平均分和标准差n);printf(7.成绩列表 n);printf(8.导出文件 n);printf(0.退出 n”); printf(请输入你的选择:

11、);sca nf(%d, & itemSelected); /* 读入用户输入 */ return itemSelected;nfe=100):303)限定功能模块開書生丄时成护耶丰血責所占已评碍责的的比例(用整淳厂 附期引:限定(或者说确定)学生的人数和总评成绩的计算方式printf(” 请输入学生人数 n(n=%d):, SIZE);scan f(%d, &n);printf(”请输入学生平时成绩与期末成绩所占总评成绩的的比例(用整数表 示,满分100分):n);scan f(%d%d,&a, &b);4)新建成绩函数1 (手动输入)5kAA_冃青心土八u绷门人口江一丄ULM :Z生平时成

12、绩与期京成绩所占总评成绩的的比例(用整数表示,满分 100/T):右歹从航udant. tact文件中导入试卷分数*羊号、姓各 平时成绩和期末成绩(逗号隔开厂 位,23, 56级.33, 67/*函数功能:手动输入分数*/void Read_data(STU stu,int n,int a,int b)int i=0;printf(”请输入学生的学号、姓名、平时成绩和期末成绩(逗号隔开):n);for(i=0;i n ;i+)scanf(%ld,%s, %d, %d,&stui.num,&,&stui.score0,&stui.score1); stui.score2=stu

13、i.score0*a/100+stui.score1*b/100;5)新建成绩函数2 (文件输入)生|n(n=100):26备入学生平時成绩与期末觸所占总评虑责的的比例(.用挈数靑示.满分100分):賈的studentX文件中导入试卷分数祥*/*函数功能:从文本 student.txt中导入试卷分数*/姓姓姓姓姓姓姓姓姓姓姓姓一绩 黑d入你的选择吃1651500101 1651500102 1651500103 1651500104 1651500105 1651500106 1651500107 1651500108 1651500109 1651500110 1651500111 1651

14、500112ABCDEFGHI75402& 612 S - * 8void Read_data1(STU stu,int n,int a,int b)int i;FILE *fp;if(fp=fope n(stude nt.txt,r)=NULL)printf(打开文件 student.txt 失败! n);exit(0);for(i=0;!feof(fp);i+)fsca nf(fp,%ld, &stui. nu m);fsca nf(fp,%s,stui. name);fsca nf(fp,%d, &stui.score0);fsca nf(fp,%d, &stui.score1);fcl

15、ose(fp);for(i=0;i n; i+)stui.score2=stui.score0*a/100+stui.score1*b/100; 6) 计算成绩及输出函数实用标准文档M/*函数功能:计算学生试卷分数的总评成绩*/void Total_mark(STU stu,int n,int a,int b)int i;for(i=0;i n;i+)stui.score2=stui.score0*a/100+stui.score1*b/100;printf( 学 生 :ldt 姓 名:%st总 评 成绩:%dn,stui. nu m,stui. name,stui.score2);7) 查询

16、成绩函数1 (按学号)查杳至生+ 号盍盂兰成濒瞬分 忌询询及平率差生姓:3学 00 esla 选找00 的查15 你要65 趙岀入入门 咖号 r.&0.请華 号:1651500108:H 平时W;100期末成绩:76忌评成绩:11/*函数功能:按学号查询学生试卷的总评成绩*/void Sortby nu m(STU stu,i nt n)int nu mber,i;、安fpr(r=0;,iil输入要查找的学生学号:”); 文案大全Sea nf(%d,&n umber);for(i=0Sni+m=number)printf(学号:%ldt姓名:%st平时成绩:%dt期末成绩:%dt总评成实用标准

17、文档8)查询成绩函数2 (按姓名)55期末脑萨:34忌评成绩:5平时成绩=绩 黑耳禹询及平查生生陕 1记学号wfs于引 星.n-.-r 炷 1234567 8名:B 姓名 生址 :4学 2 番10 选找00 -的沓15 你要65 男入:1文案大全/*函数功能:按姓名查询学生试卷的总评成绩*/void Sortby name(STU stu,i nt n)char n amed10;int i;printf(”请输入要查找的学生姓名:”);sca nf(%s, named);for(i=0;i n ;i+)if(strcmp( named,stui. name)=0)printf(学号:%ldt

18、姓名:%st平时成绩:%dt期末成绩: %dt总评成绩:%dn,stui. nu m,stui. name,stui.score0,stui.score1,stui.score2);return;printf(抱歉,没有找到! n”);实用标准文档9)计算成绩函数1 (计算总成绩的及格率和优秀率)- o o O :o O 中O.0. 玄$ 7:0糞 厂良爲 数绩绩 人成成 格m评评621:/*函数功能:计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学生人数*/void Cou nt_pass(STU stu,i nt n)int i,pass_num,t4;float passrate

19、;memset(t,0,sizeof(t);for(i=0;i n ;i+)if(stui.score260) t0+;else if(stui.score2=75) t1+;else if(stui.score2=85) t2+;else if(stui.score2=100) t3+;pass_ num=t1+t2+t3;passrate=(float)(t1+t2+t3)/n;printf(及格人数:dn,pass_num);printf(优:%dt 良:%dt 中:%dt 差:%dn,t3,t2,t1,t0);printf(总评成绩及格率:%.2fn,passrate);printf(

20、总评成绩优秀率:%.2fn,(float)t3/n);10)计算成绩函数2 (计算总成绩的平均分和标准差)绩咸绩w-分 总询询及平 羣查查牛生乘I记学号41于列文 : 菜幫输评I.5.&7.8.o.i 忌465,6: f选均6D n i - t - 1忌评成绩标准差:/*函数功能:计算学生总评成绩的平均分和标准差*/文案大全void Coun t_average(STU stu,i nt n)int i;double sum=0,aver,temp=0,sta ndard;11)输出成绩函数姓姓姓雄姓姐姓姓姓舛姓舞姓姐姓姐姓60馬430135653100254S987284312

21、2484394941224r:7r:49r:2F:5MO/*函数功能:输出全班学生的所有成绩*/void Show_data(STU stu,int n)int i;for(i=0;i n ;i+)12)导出成绩函数(学 号:ldt姓 名:st平时成绩:dt期 末成绩:dt总 评 成绩:%dn,stui. nu m,stui. name,stui.score0,stui.score1,stui.score2); 实用标准文档lH-;bd5tl0.00aod中旳 盂:0.002brl-p-1EL- -I h.l毘擾b.!?-li请理选A 的辅 你音以下备琐分别肾応举号 再5巧帕MLA36595D

22、C1O2B165O01C3C龙5i冈叫恥D165I50DHO&E同5侦叽枕F3659&DO1C7G】騎IS如1帼H儼帧叽赠I1651500110Jies 1540111K第51帥饷12L165I5CQ113I1500114N】出胎0刨匹0165I50QI11&F5150011?Q36595DO11ER165I5C&1191S用5 i网0耳0T165154)012!D1651500122V65l&O0t23I1651500124X戯倾恫25T365I&D0L26Z55135&5:1QO鸚72 叫3122 蛋 曲94站1224B35E72聲冋已2542768833 西31肉別厨4975记33632

23、17494943T73如2575 4 fl nt 6 b 1 2 5574I/*函数功能:将学生所有成绩的列表导出到文本score .txt中*/void Write_data(STU stu,i nt n)FILE *fp;int i;if(fp=fope n( score.txt,w)=NULL)printf(打开文件失败!n);exit(0);fprintf(fp,以下各项分别对应学号、姓名、平时成绩、期末成绩和总评成绩:n);for(i=0;i n ;i+)fprin tf(fp,%ldt%st%dt%dt%dn,stui. nu m,stui. name,stui.score0,st

24、ui.score1,stui.score2);fclose (fp);3、系统实现3. 1全部实现代码#in clude #in clude #in clude #in clude #in clude #define SIZE 100typedef struct studentlong num; char name10; int score3;STU;int Menu(void);void Read_data(STU stu,int n,int a,int b); void Read_data1(STU stu,int n,int a,int b); void Total_mark(STU s

25、tu,int n,int a,int b); void Sortbynum(STU stu,int n);void Sortbyname(STU stu,int n);void Count_pass(STU stu,int n);void Count_average(STU stu,int n);void Show_data(STU stu,int n);void Write_data(STU stu,int n);int main()STU stuSIZE;int n,a,b;char ch;int oh;小 “;r4 *n);printf(ttt*欢迎使用 * n);printf(ttt*

26、学生试卷分数统计系统 * n);小 “;r4 *n);while (1)ch = Menu(); switch (ch)case 1:printf( 请输入学生人数 n(n=%d):, SIZE);scanf(%d, &n);printf( 请输入学生平时成绩与期末成绩所占总评成绩的的比例(用整数表示,满分 100 分) :n);scanf(%d%d,&a,&b);printf( 以下有两种输入试卷分数的方式: n*1. 手动输入试卷分数 t2. 从 student.txt 文件中导入试卷分数 *n);scanf(%d,&oh);switch (oh)*n);*n);case 1:Read_d

27、ata(stu,n,a,b);break;case 2:Read_data1(stu,n,a,b);break;default:printf( 输入菜单序号错误 !); break;case 2:Total_mark(stu,n,a,b);break;case 3:Sortbynum(stu,n);break;case 4:Sortbyname(stu,n);break;case 5: Count_pass(stu,n);break;case 6: Count_average(stu,n);break;case 7:Show_data(stu,n);break;case 8:Write_dat

28、a(stu,n);break; case 0:*printf(ttt*感谢使用 * n);printf(ttt*学生试卷分数统计系统printf(tt*n);exit(0);default:printf( 输入菜单序号错误 !); return 0;/* 函数功能:显示菜单并获得用户键盘输入的选项 */ int Menu(void) int itemSelected;printf(n 【菜单】 n);printf(1. 输入记录 n);printf(2. 计算学生总评成绩 n);printf(3. 按学号查询成绩 n);printf(4. 按姓名查询成绩 n);printf(5. 计算学生及格

29、率和优秀率 n);printf(6. 计算学生平均分和标准差 n);printf(7. 成绩列表 n);printf(8. 导出文件 n);printf(0. 退出 n);printf( 请输入你的选择 :);scanf(%d, &itemSelected); /* 读入用户输入 */ return itemSelected;/* 函数功能:手动输入分数 */void Read_data(STU stu,int n,int a,int b)int i=0;printf( 请输入学生的学号、 姓名、平时成绩和期末成绩 (逗 号隔开): n);for(i=0;in;i+)scanf(%ld ,%s

30、,%d, %d,&stui.num,&,&st ui.score0,&stui.score1);stui.score2=stui.score0*a/100+stui.score1*b/100;/* 函数功能:从文本 student.txt 中导入试卷分数 */void Read_data1(STU stu,int n,int a,int b)int i;FILE *fp;if(fp=fopen(student.txt,r)=NULL)printf( 打开文件 student.txt 失败! n);exit(0);for(i=0;!feof(fp);i+)fscanf(fp,%

31、ld,&stui.num);fscanf(fp,%s,);fscanf(fp,%d,&stui.score0);fscanf(fp,%d,&stui.score1);fclose(fp);for(i=0;in;i+)stui.score2=stui.score0*a/100+stui.score1*b/100;/* 函数功能:计算学生试卷分数的总评成绩 */void Total_mark(STU stu,int n,int a,int b)int i;for(i=0;in;i+)stui.score2=stui.score0*a/100+stui.score1*b/100;p

32、rintf( 学生 :%ldt 姓名 :%st 总评成绩:dn,stui. nu m,stui. name,stui.score2);/* 函数功能:按学号查询学生试卷的总评成绩 */void Sortbynum(STU stu,int n)int number,i;printf( 请输入要查找的学生学号 :);scanf(%d,&number);for(i=0;in;i+)if(stui.num=number)printf( 学号:%ldt姓名:%st平时成绩:%dt期末成绩:%dt总评成绩:%dn,stui. nu m,stui. name,stui.score0,stui.score1,

33、stui.score2);return;printf( 抱歉, 没有找到! n);/* 函数功能:按姓名查询学生试卷的总评成绩 */void Sortbyname(STU stu,int n)char named10;int i;printf( 请输入要查找的学生姓名: ); scanf(%s,named);for(i=0;in;i+)if(strcmp(named,)=0)printf( 学号:ldt姓名:st平时成绩:dt期末成 绩: %dt 总评成绩 :%dn,stui.num,,stui.score0,stui.score1,stui.score2)

34、;return;printf(抱歉, 没有找到! n);/* 函数功能:计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学 生人数 */void Count_pass(STU stu,int n)int i,pass_num,t4;float passrate;memset(t,0,sizeof(t); for(i=0;in;i+)if(stui.score260) t0+;else if(stui.score2=75) t1+;else if(stui.score2=85) t2+;else if(stui.score2=100) t3+; pass_num=t1+t2+t3; pas

35、srate=(float)(t1+t2+t3)/n;printf( 及格人数: %dn,pass_num);printf(”优:dt 良:dt 中:dt差:dn,t3,t2,t1,t0);printf(总评成绩及格率: %.2fn,passrate);printf(总评成绩优秀率: %.2fn,(float)t3/n);/* 函数功能:计算学生总评成绩的平均分和标准差 */void Count_average(STU stu,int n)int i;double sum=0,aver,temp=0,standard;for(i=0;in;i+)sum=stui.score2+sum;aver=

36、(float)sum/n;for(i=0;in;i+)temp=(stui.score2-aver)*(stui.score2-aver)+temp;standard=sqrt(temp/n);printf( 总评成绩平均分: %.2ft 总评成绩标准差: %.2lfn,aver,standard);/* 函数功能:输出全班学生的所有成绩 */void Show_data(STU stu,int n)int i;for(i=0;in;i+)printf(学号:%ldt姓名:%st平时成绩:%dt期末成绩:%dt总评成绩:dn,stui. nu m,stui. name,stui.score0,

37、stui.score1,stu i.score2);/* 函数功能:将学生所有成绩的列表导出到文本 score.txt 中 */void Write_data(STU stu,int n)FILE *fp;int i;if(fp=fopen(score.txt,w)=NULL)printf( 打开文件失败! n);exit(0);fprintf(fp, 以下各项分别对应学号、姓名、平时成绩、期末成绩和总评成绩 :n);for(i=0;in;i+)fprintf(fp,%ldt%st%dt%dt%dn,stui.num,,stui.score0,stui.score1,stui

38、.score2);fclose (fp);4、系统维护 经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用 户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一 般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改; 为满足新的需求而对程序作必要的改进等等,一个好的程序不仅是通过好的编 程技术实现,还要通过好的编程风格和设计方式来达到最低成本的代码维护和 新需求的实现。41 调试和测试 一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错 误,因此要对程序进行认真仔细的测试与调试。通常情况下语法错误造成的编译错误可以在运行时期前解决修改, 比如多重 指针的解除引用赋值造成的编译错误可以通过添加对应的括号来实现等。但一 些错误比如说逻辑错误和运行时错误就得等到程序运行时检查或者崩溃时候才 能知晓,比如空指针引用和浮点变量存储除法结果但忘记整数除法的例外情况。 但捕捉这种错误也可以通过一定的方法能在使用前排除。测试可按模块测试、组装测试和确认测试的步骤进行。(1)模块测试就是分别对各模块进行测试的过程。在编写一个模块后应立 即对其进行测试,因为这时对模块记忆深刻,而且单个模块相对较小,所以容易构造测试数据,能方便地检查和改正错

温馨提示

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

评论

0/150

提交评论