成绩管理系统V6.0_第1页
成绩管理系统V6.0_第2页
成绩管理系统V6.0_第3页
成绩管理系统V6.0_第4页
成绩管理系统V6.0_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、harbin institute of technologyc语言实验大作业课程名称: c语言程序设计 报告类型: 程序设计报告 实验题目: 学生成绩管理系统v6.0 实验类型: (综合设计型/创新研究型) 所在院系: 航天学院电子信息类 学生类别: 本科生 指导教师: 郭萍 学生姓名: 王福海 班级和学号: 电子信息五班 1162100527 实验时间: 2017.5.20 成绩评定: 哈尔滨工业大学1 实验目的将教材中所包含的内容系统化考察,考察一维、二维数组,函数的调用,排序、查找、统计分析等常用算法,指针,动态数组以及结构体的应用。2 实验内容和要求1.实验内容 学生成绩管理系统v6.

2、0。某班有最多不超过30人(具体人数由键盘输入)参加最多不超过六门的考试(具体门数由键盘输入),定义结构体类型,用结构体数组作函数参数,编程实现学生成绩的管理。2.实验要求采用自顶向下、逐步求精的模块化设计思想设计小型数据库管理系统,对学生成绩进行管理。要求按系统的需求分析、系统设计(总体设计、各个模块的设计)、系统实现(各个模块的实现)、系统测试等过程组织报告内容,说明采用了什么数据结构和算法,遇到哪些问题,这些问题是如何解决的,本设计的亮点和难点在哪里,实验结果如何,有哪些收获和学习体会。3.系统功能需求分析本系统主要实现下面的功能:(1)录入每个学生的学号和考试成绩;(2)计算每门课程的

3、总分和平均分; (3)计算每个学生的总分和平均分;(4) 按成绩由高到低排出名次表;(5) 按成绩由低到高排出名次表;(6) 按学号由小到大排出成绩表;(7) 按姓名字典的排序排出成绩表;(8) 按学号查询学生排名及其考试成绩;(9) 按姓名查询学生排名及其考试成绩;(10) 按优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(059)5个类别,统计每个类别的人数以及所占的百分比;(11) 输出每个学生学号姓名各科成绩及每门考试的总分平均分;(12) 将每个学生信息写入文件;(13) 从文件中读取每个学生信息并显示;4.实验环境采用win10操作系统,使用软件d

4、ev-c+。3 系统设计1. 系统功能模块划分学生成绩管理系统按姓名排序按学号排序录入成绩录入文件读取文件标准分析排名排序计算总分平均分按学生成绩排名每个学生每门课五个档次2. 主要算法排序:进行学生成绩的排序从而出现排名表查找:通过多种方式如学号,姓名查找特定学生的成绩3. 数据结构输出每个学生学号姓名各科成绩及每门考试的总分平均分 按成绩由高到低排出名次表计算每个学生的总分和平均分计算每门课程的总分和平均分录入每个学生的学号和考试成绩按成绩由低到高排出名次表按姓名字典的排序排出成绩表按学号查询学生排名及其考试成绩按姓名查询学生排名及其考试成绩5个类别,统计每个类别的人数以及所占的百分比按学

5、号由小到大排出成绩表将每个学生信息写入文件从文件中读取每个学生信息并显示 退出 用户输入指令4.各模块(函数)的功能和接口设计:序号函数名函数功能函数参数1menu显示菜单获得输入的选项无2readscore录入学生信息stu stu, m,n3aversumofeverystudent计算每个学生总成绩平均值stu stu, m,n4aversumofeverycourse计算每门课程总成绩平均成绩stu stu, m,n5sortbyscore按成绩排序stu stu, m,n6ascending升序float a,b7descending降序float a,b8assortbynum按学

6、号排序stu stu, m,n9sortbyname按姓名排序stu stu, m,n10searchbynum按学号查询学生信息stu stu, m,n11searchbyname按姓名查询学生信息stu stu, m,n12statisticanlysis(stu stu, int n, int m)分析学生成绩五个分数段所占百分比stu stu, m,n13printscore打印输出学生成绩stu stu, m,n14writetofile写入程序 d盘student.txtstu stu, m,n15readfromfile读取文件stu stu, m,n4 系统实现1.系统的总流程

7、图:显示菜单输入用户的选择根据用户的输入选择不同的操作 case 1: readscore(stu,n,m); break; case 2: aversumofeverystudent(stu ,n,m); break; case 3: aversumofeverycourse(stu ,n,m); break; case 4: sortbyscore(stu ,n,m,descending); printf(n成绩降序排序n); printscore( stu ,n, m); break; case 5: sortbyscore(stu ,n,m,ascending); printf(n成绩

8、升序排序n); printscore( stu ,n, m); break; case 6: assortbynum( stu , n, m); printf(n学号升序排序n); printscore( stu ,n, m); break; case 7: sortbyname( stu , n, m); printf(n姓名升序排序n); printscore( stu ,n, m); break; case 8: searchbynum( stu , n, m); break; case 9: searchbyname( stu , n, m); break; case 10: stat

9、isticanlysis( stu , n, m); break; case 11: printscore( stu ,n, m); break; case 12: writetofile(stu,n,m); break; case 13: readfromfile(stu,&n,&m); break; case 0: printf(end of program!n ); exit(0);2. 程序的全部源代码:1 #include 2 #include 3 #include 4 typedef struct student5 6 long num;7 char name10;8 float

10、score6;9 float sum;10 float aver;11 stu;12 int menu(void);13 void readscore(stu stu,int n, int m);14 void aversumofeverystudent(stu stu,int n,int m);15 void aversumofeverycourse(stu stu,int n,int m);16 void sortbyscore(stu stu,int n,int m,int (*compare)(float a,float b);17 int ascending(float a,floa

11、t b);18 int descending(float a,float b);19 void swapfloat(float *x,float *y);20 void swaplong(long *x,long *y);21 void swapchar (char x,char y);22 void assortbynum(stu stu,int n,int m);23 void sortbyname(stu stu,int n,int m);24 void searchbynum(stu stu,int n,int m);25 void searchbyname(stu stu,int n

12、,int m);26 void statisticanalysis(stu stu,int n,int m);27 void printscore(stu stu,int n,int m);28 void writetofile(stu stu,int n,int m);29 void readfromfile(stu stu,int *n,int *m);30 int main()31 32 char ch;33 int n=0,m=0;34 35 stu stu30;36 37 printf(input student number:(less than 30)n);38 scanf(%d

13、,&n);39 40 printf(input course number:(less than 6)n);41 scanf(%d,&m);42 43 while(1)44 45 ch = menu();46 switch(ch)47 48 case 1: readscore(stu,n,m);49 break;50 case 2: aversumofeverycourse(stu,n,m);51 break;52 case 3: aversumofeverystudent(stu,n,m);53 break;54 case 4: sortbyscore(stu,n,m,descending)

14、;55 printf(nsort in descending order by score:n);56 printscore(stu,n,m);57 break;58 case 5: sortbyscore(stu,n,m,ascending);59 printf(nsort in ascending order by score:n);60 printscore(stu,n,m);61 break;62 case 6: assortbynum(stu,n,m);63 printf(nsort in ascending order by number:n);64 printscore(stu,

15、n,m);65 break;66 case 7: sortbyname(stu,n,m);67 printf(nsort in dictionary order by name:n);68 printscore(stu,n,m);69 break;70 case 8: searchbynum(stu,n,m);71 break;72 case 9: searchbyname(stu,n,m);73 break;74 case 10:statisticanalysis(stu,n,m);75 break;76 case 11:printscore(stu,n,m);77 break;78 cas

16、e 12:writetofile(stu,n,m);79 break;80 case 13:readfromfile(stu,&n,&m);81 break;82 case 0: printf(end of program!n);83 exit(0);84 85 default:printf(input error!n);86 87 88 return 0;89 90 /*menu:显示菜单并获得用户键盘输入的选项 */91 int menu(void)92 93 int a;94 95 printf(management for studentsscoresn);96 printf(1.in

17、put recordn);97 printf(2.caculate total and average score of every coursen);98 printf(3.caculate total and average score of every studentn);99 printf(4.sort in descending order by scoren);100 printf(5.sort in ascending order by scoren);101 printf(6.sort in ascending order by numbern);102 printf(7.so

18、rt in dictionary order by namen);103 printf(8.search by numbern);104 printf(9.search by namen);105 printf(10.statistic analysisn);106 printf(11.list recordn);107 printf(12.write to a filen);108 printf(13.read from a filen);109 printf(0.exitn);110 printf(please input your choice:);111 112 scanf(%d,&a

19、);113 114 return a;115 116 117 /*input:输入每个学生每门课的成绩*/118 void readscore(stu stu,int n,int m)119 120 int i,j,k;121 122 printf(input students id,name and score:n);123124 for(i=0;in;i+)125 126 127 scanf(%ld %s,&stui.num,);128 129 for(j=0;jm;j+)130 131 scanf(%f,&stui.scorej);132 133 134 135 136

20、 /* aversumofeverystudent:计算每个学生每门课的总分和平均分*/137 void aversumofeverystudent(stu stu,int n,int m)138 139 int i,j;140 141 for(i=0;in;i+)142 143 stui.sum = 0;144 145 for(j=0;j0 ? stui.sum/m:-1;151 152 printf(student %d: sum=%.0f,aver=%.0fn,i+1,stui.sum,stui.aver);153 154 155 /*aversumofeverycourse:计算每门课

21、程的总分和平均分*/156 void aversumofeverycourse(stu stu,int n,int m)157 158 int i,j;159 float sum6,aver6;160 161 for(j=0;jm;j+)162 163 sumj = 0;164 165 for(i=0;i0?sumj/n : -1;171 172 printf(course %d:sum=%.0f,aver=%.0fn,j+1,sumj,averj);173 174 175 /* sortbyscore:将每个学生按总成绩排序*/176 void sortbyscore(stu stu,int

22、 n, int m,int(*compare)(float a,float b)177 178 int i,j,k,t;179 180 for(i=0;in-1;i+)181 182 k=i;183 184 for(j=i+1;jn;j+)185 186 if(*compare)(stuj.sum,stuk.sum) 187 k=j;188 189 190 if(k!=i)191 192 for(t=0;tm;t+)193 194 swapfloat(&stuk.scoret,&stui.scoret);195 196 197 swapfloat(&stuk.sum,&stui.sum);19

23、8 swapfloat(&stuk.aver,&stui.aver);199 swaplong(&stuk.num,&stui.num);200 swapchar(,);201 202 203 204 /* ascending:按照升序*/205 int ascending(float a,float b)206 207 return ab;213 214 /* swapfloat:交换单精度浮点型数据 */215 void swapfloat(float *x,float *y)216 217 float temp;218 219 temp = *x;22

24、0 *x = *y;221 *y = temp;222 223 /* swaplong交换长整形数据 */224 void swaplong(long *x,long *y)225 226 long temp;227 228 temp = *x;229 *x = *y;230 *y = temp;231 232 /* swapchar交换字符型数据 */233 void swapchar(char x,char y)234 235 char temp10;236 237 strcpy(temp,x);238 strcpy(x,y);239 strcpy(y,temp);240 241 /* a

25、ssortbynum:将学生按照学号顺序排列 */242 void assortbynum(stu stu,int n,int m)243 244 int i,j,k,t;245 246 for(i=0;in-1;i+)247 248 k=i;249 for(j=i+1;jn;j+)250 251 if(stuj.numstuk.num) 252 k=j;253 254 if(k!=i)255 256 for(t=0;tm;t+)257 258 swapfloat(&stuk.sum,&stui.sum);259 260 261 swapfloat(&stuk.sum,&stui.sum);2

26、62 swapfloat(&stuk.aver,&stui.aver);263 swaplong(&stuk.num,&stui.num);264 swapchar(,);265 266 267 268 /* sortbyname:将学生按照字典顺序排列 */269 void sortbyname(stu stu,int n,int m)270 271 int i,j,t;272 273 for(i=0;in-1;i+)274 275 for(j=i+1;jn;j+)276 277 if(strcmp(,)0)278 27

27、9 for(t=0;tm;t+)280 281 swapfloat(&stui.scoret,&stuj.scoret);282 283 284 swapfloat(&stui.sum,&stuj.sum);285 swapfloat(&stui.aver,&stuj.aver);286 swaplong(&stui.num,&stuj.num);287 swapchar(,);288 289 290 291 292 /* searchbynum:按学号查找并打印学生成绩 */293 void searchbynum(stu stu,int n,int m)

28、294 295 long number;296 int i,j;297 298 printf(input the number you want to search);299 scanf(%ld,&number);300 301 for(i=0;in;i+)302 303 if(stui.num = number)304 305 printf(%ldt%st,stui.num,);306 307 for(j=0;jm;j+)308 309 printf(%.0ft,stui.scorej);310 311 312 printf(%.0ft%.0fn,stui.sum,stui

29、.aver);313 314 return;315 316 317 318 printf(nnot found! n);319 320 /* searchbyname:按名字查找并打印学生成绩 */321 void searchbyname(stu stu,int n,int m)322 323 char x10;324 int i,j;325 326 printf(input the name you want to search);327 scanf(%s,x);328 329 for(i=0;in;i+)330 331 if(strcmp(,x)=0)332 333 p

30、rintf(%ldt%st,stui.num,);334 335 for(j=0;jm;j+)336 337 printf(%.0ft,stui.scorej);338 339 340 printf(%.0ft%.0fn,stui.sum,stui.aver);341 342 return;343 344 345 346 printf(nnot found!n);347 348 /* statisticanalysis:统计各分段的学生及其所占百分比 */349 void statisticanalysis(stu stu,int n,int m)350 351 int i,

31、j,total,t6;352 353 for(j=0;jm;j+)354 355 printf(for course %d:n,j+1);356 357 memset(t,0,sizeof(t); /*将数组t的元素全部初始化为0*/ 358 359 for(i=0;i=0&stui.scorej60) t0+;362 else if(stui.scorej70) t1+;363 else if(stui.scorej80) t2+;364 else if(stui.scorej90) t3+;365 else if(stui.scorej100) t4+;366 else if(stui.s

32、corej=100) t5+;367 368 369 for(total=0,i=0;i=5;i+)370 371 total=total+ti;372 373 374 for(i=0;i=5;i+)375 376 if(i=0) 377 printf(60t%dt%.2f%n,ti,(float)ti/n*100);378 379 else if(i=5) 380 printf(%dt%dt%.2f%n, (i+5)*10,ti,(float)ti/n*100);381 382 else 383 printf(%d-%dt%dt%.2f%n,(i+5)*10,(i+5)*10+9,ti,(f

33、loat)ti/n*100);384 385 386 387 /* printscore:打印输出学生成绩 */388 void printscore(stu stu,int n,int m)389 390 int i,j;391 392 for(i=0;in;i+)393 394 printf(%ldt%st,stui.num,);395 396 for(j=0;jm;j+)397 398 printf(%.0ft,stui.scorej);399 400 printf(%.0ft%.0fn,stui.sum,stui.aver);401 402 403 /* writetofile:写入程序 student.txt */404 void writetofile(stu stu,int n,int m)405 406 file *fp;407 int i,j;408 409 if(fp=fopen(student.txt,w) = null)410 411 printf(failuren);412 exit(0);413 414 415 fprin

温馨提示

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

评论

0/150

提交评论