成绩管理系统V60.docx
- 文档编号:7801105
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:25
- 大小:224.56KB
成绩管理系统V60.docx
《成绩管理系统V60.docx》由会员分享,可在线阅读,更多相关《成绩管理系统V60.docx(25页珍藏版)》请在冰豆网上搜索。
成绩管理系统V60
HarbinInstituteofTechnology
C语言实验大作业
课程名称:
C语言程序设计
报告类型:
程序设计报告
实验题目:
学生成绩管理系统v6.0
实验类型:
(综合设计型/创新研究型)
所在院系:
航天学院电子信息类
学生类别:
本科生
指导教师:
郭萍
学生姓名:
王福海
班级和学号:
电子信息五班1162100527
实验时间:
2017.5.20
成绩评定:
哈尔滨工业大学
1实验目的
将教材中所包含的内容系统化考察,考察一维、二维数组,函数的调用,排序、查找、统计分析等常用算法,指针,动态数组以及结构体的应用。
2实验内容和要求
1.实验内容
学生成绩管理系统V6.0。
某班有最多不超过30人(具体人数由键盘输入)参加最多不超过六门的考试(具体门数由键盘输入),定义结构体类型,用结构体数组作函数参数,编程实现学生成绩的管理。
2.实验要求
采用自顶向下、逐步求精的模块化设计思想设计小型数据库管理系统,对学生成绩进行管理。
要求按系统的需求分析、系统设计(总体设计、各个模块的设计)、系统实现(各个模块的实现)、系统测试等过程组织报告内容,说明采用了什么数据结构和算法,遇到哪些问题,这些问题是如何解决的,本设计的亮点和难点在哪里,实验结果如何,有哪些收获和学习体会。
3.系统功能需求分析
本系统主要实现下面的功能:
(1)录入每个学生的学号和考试成绩;
(2)计算每门课程的总分和平均分;
(3)计算每个学生的总分和平均分;
(4)按成绩由高到低排出名次表;
(5)按成绩由低到高排出名次表;
(6)按学号由小到大排出成绩表;
(7)按姓名字典的排序排出成绩表;
(8)按学号查询学生排名及其考试成绩;
(9)按姓名查询学生排名及其考试成绩;
(10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;
(11)输出每个学生学号姓名各科成绩及每门考试的总分平均分;
(12)将每个学生信息写入文件;
(13)从文件中读取每个学生信息并显示;
4.实验环境
采用win10操作系统,使用软件Dev-c++。
3系统设计
1.系统功能模块划分
2.主要算法
排序:
进行学生成绩的排序从而出现排名表
查找:
通过多种方式如学号,姓名查找特定学生的成绩
3.数据结构
退出
用户输入指令
4.各模块(函数)的功能和接口设计:
序号
函数名
函数功能
函数参数
1
Menu
显示菜单获得输入的选项
无
2
Readscore
录入学生信息
STUstu[],m,n
3
Aversumofeverystudent
计算每个学生总成绩平均值
STUstu[],m,n
4
Aversumofeverycourse
计算每门课程总成绩平均成绩
STUstu[],m,n
5
Sortbyscore
按成绩排序
STUstu[],m,n
6
Ascending
升序
floata,b
7
Descending
降序
floata,b
8
Assortbynum
按学号排序
STUstu[],m,n
9
Sortbyname
按姓名排序
STUstu[],m,n
10
Searchbynum
按学号查询学生信息
STUstu[],m,n
11
Searchbyname
按姓名查询学生信息
STUstu[],m,n
12
StatisticAnlysis(STUstu[],intn,intm)
分析学生成绩五个分数段所占百分比
STUstu[],m,n
13
PrintScore
打印输出学生成绩
STUstu[],m,n
14
WritetoFile
写入程序D盘student.txt
STUstu[],m,n
15
ReadfromFile
读取文件
STUstu[],m,n
4系统实现
1.系统的总流程图:
显示菜单——>输入用户的选择——>根据用户的输入选择不同的操作
case1:
Readscore(stu,n,m);
break;
case2:
Aversumofeverystudent(stu,n,m);
break;
case3:
Aversumofeverycourse(stu,n,m);
break;
case4:
Sortbyscore(stu,n,m,Descending);
printf("\n成绩降序排序\n");
Printscore(stu,n,m);
break;
case5:
Sortbyscore(stu,n,m,Ascending);
printf("\n成绩升序排序\n");
Printscore(stu,n,m);
break;
case6:
Assortbynum(stu,n,m);
printf("\n学号升序排序\n");
Printscore(stu,n,m);
break;
case7:
Sortbyname(stu,n,m);
printf("\n姓名升序排序\n");
Printscore(stu,n,m);
break;
case8:
Searchbynum(stu,n,m);
break;
case9:
Searchbyname(stu,n,m);
break;
case10:
StatisticAnlysis(stu,n,m);
break;
case11:
Printscore(stu,n,m);
break;
case12:
Writetofile(stu,n,m);
break;
case13:
Readfromfile(stu,&n,&m);
break;
case0:
printf("Endofprogram!
\n");
exit(0);
2.程序的全部源代码:
1#include
2#include
3#include
4typedefstructstudent
5{
6longnum;
7charname[10];
8floatscore[6];
9floatsum;
10floataver;
11}STU;
12intMenu(void);
13voidReadScore(STUstu[],intn,intm);
14voidAverSumofEveryStudent(STUstu[],intn,intm);
15voidAverSumofEveryCourse(STUstu[],intn,intm);
16voidSortbyScore(STUstu[],intn,intm,int(*compare)(floata,floatb));
17intAscending(floata,floatb);
18intDescending(floata,floatb);
19voidSwapFloat(float*x,float*y);
20voidSwapLong(long*x,long*y);
21voidSwapChar(charx[],chary[]);
22voidAsSortbyNum(STUstu[],intn,intm);
23voidSortbyName(STUstu[],intn,intm);
24voidSearchbyNum(STUstu[],intn,intm);
25voidSearchbyName(STUstu[],intn,intm);
26voidStatisticAnalysis(STUstu[],intn,intm);
27voidPrintScore(STUstu[],intn,intm);
28voidWritetoFile(STUstu[],intn,intm);
29voidReadfromFile(STUstu[],int*n,int*m);
30intmain()
31{
32charch;
33intn=0,m=0;
34
35STUstu[30];
36
37printf("Inputstudentnumber:
(lessthan30)\n");
38scanf("%d",&n);
39
40printf("Inputcoursenumber:
(lessthan6)\n");
41scanf("%d",&m);
42
43while
(1)
44{
45ch=Menu();
46switch(ch)
47{
48case1:
ReadScore(stu,n,m);
49break;
50case2:
AverSumofEveryCourse(stu,n,m);
51break;
52case3:
AverSumofEveryStudent(stu,n,m);
53break;
54case4:
SortbyScore(stu,n,m,Descending);
55printf("\nSortindescendingorderbyscore:
\n");
56PrintScore(stu,n,m);
57break;
58case5:
SortbyScore(stu,n,m,Ascending);
59printf("\nSortinascendingorderbyscore:
\n");
60PrintScore(stu,n,m);
61break;
62case6:
AsSortbyNum(stu,n,m);
63printf("\nSortinascendingorderbynumber:
\n");
64PrintScore(stu,n,m);
65break;
66case7:
SortbyName(stu,n,m);
67printf("\nSortindictionaryorderbyname:
\n");
68PrintScore(stu,n,m);
69break;
70case8:
SearchbyNum(stu,n,m);
71break;
72case9:
SearchbyName(stu,n,m);
73break;
74case10:
StatisticAnalysis(stu,n,m);
75break;
76case11:
PrintScore(stu,n,m);
77break;
78case12:
WritetoFile(stu,n,m);
79break;
80case13:
ReadfromFile(stu,&n,&m);
81break;
82case0:
printf("Endofprogram!
\n");
83exit(0);
84
85default:
printf("Inputerror!
\n");
86}
87}
88return0;
89}
90/*Menu:
显示菜单并获得用户键盘输入的选项*/
91intMenu(void)
92{
93inta;
94
95printf("ManagementforStudents'scores\n");
96printf("1.Inputrecord\n");
97printf("2.Caculatetotalandaveragescoreofeverycourse\n");
98printf("3.Caculatetotalandaveragescoreofeverystudent\n");
99printf("4.Sortindescendingorderbyscore\n");
100printf("5.Sortinascendingorderbyscore\n");
101printf("6.Sortinascendingorderbynumber\n");
102printf("7.Sortindictionaryorderbyname\n");
103printf("8.Searchbynumber\n");
104printf("9.Searchbyname\n");
105printf("10.Statisticanalysis\n");
106printf("11.Listrecord\n");
107printf("12.Writetoafile\n");
108printf("13.Readfromafile\n");
109printf("0.Exit\n");
110printf("PleaseInputyourchoice:
");
111
112scanf("%d",&a);
113
114returna;
115
116}
117/*input:
输入每个学生每门课的成绩*/
118voidReadScore(STUstu[],intn,intm)
119{
120inti,j,k;
121
122printf("Inputstudent'sID,nameandscore:
\n");
123
124for(i=0;i 125{ 126 127scanf("%ld%s",&stu[i].num,stu[i].name); 128 129for(j=0;j 130{ 131scanf("%f",&stu[i].score[j]); 132} 133 134} 135} 136/*AverSumofEveryStudent: 计算每个学生每门课的总分和平均分*/ 137voidAverSumofEveryStudent(STUstu[],intn,intm) 138{ 139inti,j; 140 141for(i=0;i 142{ 143stu[i].sum=0; 144 145for(j=0;j 146{ 147stu[i].sum=stu[i].sum+stu[i].score[j]; 148} 149 150stu[i].aver=m>0? stu[i].sum/m: -1; 151 152printf("student%d: sum=%.0f,aver=%.0f\n",i+1,stu[i].sum,stu[i].aver); 153} 154} 155/*AverSumofEveryCourse: 计算每门课程的总分和平均分*/ 156voidAverSumofEveryCourse(STUstu[],intn,intm) 157{ 158inti,j; 159floatsum[6],aver[6]; 160 161for(j=0;j 162{ 163sum[j]=0; 164 165for(i=0;i 166{ 167sum[j]=sum[j]+stu[i].score[j]; 168} 169 170aver[j]=n>0? sum[j]/n: -1; 171 172printf("course%d: sum=%.0f,aver=%.0f\n",j+1,sum[j],aver[j]); 173} 174} 175/*SortbyScore: 将每个学生按总成绩排序*/ 176voidSortbyScore(STUstu[],intn,intm,int(*compare)(floata,floatb)) 177{ 178inti,j,k,t; 179 180for(i=0;i 181{ 182k=i; 183 184for(j=i+1;j 185{ 186if((*compare)(stu[j].sum,stu[k].sum)) 187k=j; 188} 189 190if(k! =i) 191{ 192for(t=0;t 193{ 194SwapFloat(&stu[k].score[t],&stu[i].score[t]); 195} 196 197SwapFloat(&stu[k].sum,&stu[i].sum); 198SwapFloat(&stu[k].aver,&stu[i].aver); 199SwapLong(&stu[k].num,&stu[i].num); 200SwapChar(stu[k].name,stu[i].name); 201} 202} 203} 204/*Ascending: 按照升序*/ 205intAscending(floata,floatb) 206{ 207returna 208} 209/*Descending: 按照降序*/ 210intDescending(floata,floatb) 211{ 212returna>b; 213} 214/*SwapFloat: 交换单精度浮点型数据*/ 215voidSwapFloat(float*x,float*y) 216{ 217floattemp; 218 219temp=*x; 220*x=*y; 221*y=temp; 222} 223/*SwapLong交换长整形数据*/ 224voidSwapLong(long*x,long*y) 225{ 226longtemp; 227 228temp=*x; 229*x=*y; 230*y=temp; 231} 232/*SwapChar交换字符型数据*/ 233voidSwapChar(charx[],chary[]) 234{ 235chartemp[10]; 236 237strcpy(temp,x); 238strcpy(x,y); 239strcpy(y,temp); 240} 241/*AsSortbyNum: 将学生按照学号顺序排列*/ 242voidAsSortbyNum(STUstu[],intn,intm) 243{ 244inti,j,k,t; 245 246for(i=0;i 247{ 248k=i; 249for(j=i+1;j 250{ 251if(stu[j].num 252k=j; 253} 254if(k! =i) 255{ 256for(t=0;t 257{ 258SwapFloat(&stu[k].sum,&stu[i].sum); 259} 260 261SwapFloat(&stu[k].sum,&stu[i].sum); 262SwapFloat(&stu[k].aver,&stu[i].aver); 263SwapLong(&stu[k].num,&stu[i].num); 264SwapChar(stu[k].name,stu[i].name); 265} 266} 267} 268/*SortbyName: 将学生按照字典顺序排列*/ 269voidSortbyName(STUstu[],intn,intm) 270{ 271inti,j,t; 272 273for(i=0;i 274{ 275for(j=i+1;j 276{ 277if(strcmp(stu[j].name,stu[i].name)<0) 278{ 279for(t=0;t 280{ 281SwapFloat(&stu[i].score[t],&stu[j].score[t]); 282} 283 284SwapFloat(&stu[i].sum,&stu[j].sum); 285SwapFloat(&stu[i].aver,&stu[j].aver); 286SwapLong(&stu[i].num,&stu[j].num); 287SwapChar(stu[i].name,stu[j].name); 288} 289} 290} 291} 292/*SearchbyNum: 按学号查找并打印学生成绩*/ 293voidSearchbyNum(STUstu[],intn,intm) 294{ 295longnumber; 296inti,j; 297 298printf("Inputthenumberyouwanttosearch"); 299scanf("%ld",&number); 300 301for(i=0;i 302{ 303if(stu[i].num==number) 304{ 305printf("%ld\t%s\t",stu[i].num,stu[i].name); 306 307for(j=0;j 308{ 3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成绩管理系统 V60