C语言综合实验设计报告C语言成绩管理系统班级:************任课教师:********实验老师:********小组成员:姓名:********姓名:********姓名:********一、实验目的开发一个c语言成绩管理系统来统计分析大家的c语言学习情况。
本程序主要实现对大家的学号,姓名,c语言平时成绩、实验成绩、期末考试成绩,综合评价的成绩。
以及通过求平均分,方差,标准差来对大家的学习情况进行分析总结。
二、设计分工说明组长:**********组员:******组员:*******本程序开发过程,小组成员分工如下:录入学生成绩的数据结构和名称由全体组员共同商讨确定;学生成绩的录入和显示在屏幕上的模块由组员***完成;学生成绩的方差的计算和排序模块由组员***完成;学生成绩的保存函数设计和主调用函数的模块的设计由组员***完成。
三、问题概述要实现这样一个学生成绩信息管理系统,程序的开发中应该涉及到以下的内容:1、编写一个统一的函数来调用各功能函数;2、处理新增学生信息的操作;3、显示输出全部记录的信息;4、计算学生成绩的平均值、方差和标准差的函数设计;5、根据学生记录的某一属性对记录排序;6、对所录入的信息的保存函数设计;同时,还应有合适的数据变量和结构参与各功能的运算。
四、问题分析由于信息管理系统中的数据通常是不确定的多条记录,并且我们小组成员的能力有限,所以只是选择了管理一个班级(数据有限)的程序设计。
程序设计中主要是采用了结构体的数据形式,主函数调用,文件的写入,以及子函数配合的组合设计。
主要录入了本班学生的学号、姓名、平时成绩、实验成绩、期末成绩等。
其中由于我们学校的学号比较长(由15位),因此用双精度实数类型(double)类型,但在输出的时候控制称“15.0lf”的形式输出;姓名为字符型(char);平时成绩、实验成绩、期末成绩等都是单精度实数类型(float)。
由于信息管理这类系统,数据通常是不确定多条记录,故本系统应采用链表的结构来维持整个数据集,同时,根据题目要求,学生成绩信息包含学号、姓名、班级、计算机、专业英语、总分等属性,各属性中,学号为整型,姓名和班级为字符串,计算机、专业英语和总分应为浮点型,对一个学生记录应设置一个结构体,同时学生记录链表应包含这样的结构体,以及指向下一条记录的指针。
为了便于各功能模块对整个链表的操作,链表的头指针要定义为全局变量。
下面具体分析各功能模块操作:新建录入函数实际上就是一个for循环和标准输入输出函数的组合,现要求输入人数,然后就是标准输入输出进行数据的输入。
最后再综合算一下总评成绩。
完成数据的输入。
显示信息函数实际就是for语句和标准输出函数的结合,完成对刚才录入数据的显示输出。
计算平均值、方差和标准差函数实际就是根据输入的数据运用一些数学公式进行计算,求出所需要的数据,来完成对大家的成绩分析。
排序函数实际上就是根据学生的总评成绩,运用冒泡排序法进行降序排序。
保存数据函数实际就是运用文件的写入函数来实现的。
主函数就是设计一个选择菜单,让操作者进行一系列的操作。
但是菜单设计要人性化,体现人文关怀,让大家都可以看得懂用的爽。
五、功能模块描述及N-S图1、信息录入函数(新建函数)函数名为void newstu()2、信息全部显示函数函数名为void showall()3、平均值、方差、标准差计算函数函数名为void calculate()4、降序排序函数函数名为void sort()5、数据保存函数函数名为void save()6、主函数函数名为void main()各模块N-S图如下:计算成绩平均值,方差N-S图主函数N-S图:六、程序执行结果如下:1、菜单显示:2、输入成绩模块测试:3、信息全部显示测试4、计算出平均成绩、均方差测试5、输出成绩与排名测试因为本程序设计的是30个人的成绩统计,而此时我们只是保证输入3个人的。
所以下面会出现空信息。
由于水平有限,设计的不尽如人意,敬请原谅,谢谢。
7、将结果保存到文件里测试保存成功读取数据8、退出系统七、附录本实验的原程序如下:#include<stdio.h>#include<string.h>#include<math.h>#define S3 "***************欢迎使用本c语言成绩管理系统***************" struct student{double num;char name[20];float pingshi;float shiyan;float kaoshi;double zongping;}stu[30];void main(){void newstu();void showall();void calculate();void sort();void save();int n;while(n!=6){ printf("\n\n%s\n\n",S3);printf("%15s***工学院机械7班c语言成绩管理系统***\n\n"," ");printf("%15s1:输入该班学生大学c语言成绩记录\n"," ");printf("%15s2:显示所有成绩记录\n"," ");printf("%15s3:计算并输出平均成绩,均方差\n"," ");printf("%15s4:输出成绩与排名\n"," ");printf("%15s5:结果存入文件“成绩.txt”中\n"," ");printf("%15s6:退出系统\n"," ");printf("输入选项代码:");scanf("%d",&n);if(n!=1&&n!=2&&n!=3&&n!=4&&n!=5&&n!=6)printf("对不起!您的输入有误,请重新输入:");elseswitch(n){case 1:newstu();break;case 2:showall();break;case 3:calculate();break;case 4:sort();break;case 5:save();break;case 6:printf("\n*******************谢谢使用!*******************\n");break;break;}}getchar();}/* 子函数*/void newstu() /* 输入一个班的学生记录*/{int i,n;printf("请输入您要保存记录的人数:");scanf("%d",&n);if(n>30)printf(“对不起,您的输入有误,请重新输入”);else{for(i=0;i<n;i++){printf("请输入学号姓名平时成绩实验成绩考试成绩:");scanf("%lf%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].pingshi,&stu[i].shiyan,&stu[i].kaoshi);}for(i=0;i<n;i++)stu[i].zongping=0.1*stu[i].pingshi+0.3*stu[i].shiyan+0.6*stu[i].kaoshi;}}void showall()/* 显示所有记录*/{int i,n;printf("请输入您要保存记录的人数:");scanf("%d",&n);printf("学号姓名平时成绩实验成绩考试成绩总评成绩\n");for(i=0;i<n;i++)printf("%-18.0lf%-13s%-14.2f%-14.2f%-14.2f%-14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].s hiyan,stu[i].kaoshi,stu[i].zongping);}void calculate()/* 求出全班平均成绩,显示均方差*/{int a[30]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};int i,n;double total=0,pfc=0,bzc=0;double ave;printf("请输入您要保存记录的人数:");scanf("%d",&n);for(i=0;i<n;i++){total=total+stu[i].zongping;}ave=total/n;printf("总评平均成绩是%f\n",ave);for(i=0;i<n;i++){pfc=pow((stu[i].zongping-ave),2)/n;}bzc=sqrt(pfc);printf("\n平方差是%f\n",pfc);printf("\n标准差是%f\n",bzc);}void sort()/*输出成绩与排名*/{int a[30]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};int i,j,temp;for(j=0;j<29;j++){for(i=0;i<29-j;i++)if(stu[a[i]].zongping<stu[a[i+1]].zongping){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}}printf("顺序为:\n");printf("学号姓名总评成绩\n");for(i=0;i<30;i++)printf("%15.0lf%10s%15.2f\n",stu[a[i]].num,stu[a[i]].name,stu[a[i]].zongping);printf("\n");}void save()/*将数据保存到成绩.txt文件中*/{int i;FILE *fp;fp=fopen("成绩.txt","w");fprintf(fp,"学号姓名平时成绩实验成绩考试成绩总评成绩\n");for(i=0;i<29;i++)fprintf(fp,"%15.0lf%14s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].sh iyan,stu[i].kaoshi,stu[i].zongping);printf("System pause...\n");printf("Please wait...\n");printf("\n\n*******************恭喜,保存完成!*******************\n\n");}。