c语言课程设计学生成绩管理系统_第1页
c语言课程设计学生成绩管理系统_第2页
c语言课程设计学生成绩管理系统_第3页
免费预览已结束,剩余7页可下载查看

下载本文档

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

文档简介

1、目录学生成绩管理程序题目要求2设计目的2总体设计3详细设计3调试与测试12源程序14总结30学生成绩管理程序一. 题目要求1. 问题描述:对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,年龄,数学,英语,物理成绩,默认以学号为序存放.2. 要求:(1) 一个文件按以班为单位存储学生记录.(2) 将允许的操作分为四种,以A,B,C,D,E,F为标志:A:插入一个学生记录;B:修改学生记录;C:删除一个学生记录;D:查找一个学生记录;E:浏览学生成绩:F:退出3. 计算学生的总成绩.按学号排序输出全班学生成绩表.二. 设计目的根据题目要求,由丁学生信息是存放在文件中,所以应提

2、供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.三. 总体设计根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块.四. 2生成绩管理系统I数据输入I数据显示I数据修改I数据删除I数据查找详细设计1. 主函数:主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.流程图:li亲一系列功能毕块一N输入n,判断n是审是A-EY根据n的值调用各功能模块函数|_程序:加学生记录5.统计信息|n");printf("|2.查询

3、学生记录6.打开文件|n");printf("|3.修改学生记录7.保存文件|n");printf("|4.学生纪录排序8.显示记录|n");printf("|0.退出系统|n");printf("nn");printf("请选择(0-8):");c=getchar();getchar();return(c-'O');2. 输入模块:分析:单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习

4、惯乂方便信息管理.如果要存放若干学生信息就用结构体数组:voidaddrecord(studentstud)(inti=O,j,num;charstr5;if(numstus!=0)(printf("已有记录存在是否覆盖?(y/n)n");gets(str);if(str0='Y'|str0='y')i=0;elsei=numstus;printf(”请输入增加的学生信息条目数:");scanf("%d",&num);if(i=0)numstus=num;elsenumstus+=num;if(numst

5、us>lens)(lens+=50;pointer=(student*)realloc(pointer,lens*LEN);printf("请输入学生信息:n");for(;i<numstus;i+)(getchar();printf(”请输入学号:");gets(pointeri.number);printf(”请输入姓名:");gets();printf(”请输入性别(男/女1/0):");gets(pointeri.sex);if(pointeri.sex0='0')strcpy(po

6、interi.sex,"女");elsestrcpy(pointeri.sex,"男");printf("请输入各科成绩:(按“语文,数学,英语,历史,政治”的顺序):");studi.score=0;for(j=0;j<numsubs;j+)(scanf("%f",&studi.subjectj);/*计算总分*/studi.score+=studi.subjectj;studi.average=studi.score/numsubs;/时算平均分*/count(stud);/*附名次*/displ

7、ay(stud,0,numstus-1);getchar();intnumstus;intlens;student*pointer;voidmain()(inti=1;charstr2;lens=100;pointer=(student*)malloc(lens*LEN);/*分配内存*/numstus=0;welcome();/*欢迎界面*/while(i>0)(i=menu_select();/*控制菜单*/switch(i)(case1:addrecord(pointer);break;/增加学生信息*/case2:findrecord(pointer);break;/喧询学生信息

8、*/case3:amendrecord(pointer);break;/修改学生信息*/case4:sort(pointer);break;/字生信息排序*/case5:statistic(pointer);break;/统计信息*/case6:openfile(pointer);break;/打开文件*/case7:writetotext(pointer);break;/*保存文件*/case8:display(pointer,0,numstus-1);break;/卷示十己录*/case0:if(numstus!=0)printf("是否保存当前记录?(y/n)”);gets(s

9、tr);if(str0='y'|str0=Y)writetotext(pointer);i=-1;break;/*退出系统*/default:printf("请输入数字08:n");i=1;/*输入错误*/printf("tt欢迎再次使用本系统。nn");display1();3. 修改模块:分析:用户输入要修改学生的学号,根据学生的学号等信息查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息.流程图:输入要修改的学号YN提示没有找到二"wb+")=NULL)/*检查是否出错*/printf(&

10、quot;nPLeaseshuruxiugaixuehao:");scanf("%d",&i);getchar();while(fread(&data,sizeof(data),1,fp)=1)j=atoi;if(j=i)printf("xuehao:%snmingzi:%snnianling:%sn",;printf("Pleaseshurumingzi:");gets;printf("Pleaseshurushuxuescore:");gets(temp);0=atof(temp);p

11、rintf("Pleaseinputyingyuscore:");gets(temp);1=atof(temp);printf("Pleaseinputwuliscore:");gets(temp);2=atof(temp);=0+1+2;fwrite(&data,sizeof(data),1,fp1);fseek(fp,0L,0);/*将位置指针移到离头文件0个字节处*/fseek(fp1,0L,0);while(fread(&data,sizeof(data),1,fp1)=1)fwrite(&data,sizeof(data

12、),1,fp);fclose(fp);fclose(fp1);4. 删除模块:分析:该模块的功能是,用户输入要删除的学生的学号,根据学生学号查找记录并删除.流程图:YNYN程序voiddeleterecor(intj;while(i>=0)(for(j=i;j<nu输入要删除的学号显示记录,调用删除函数提示没有找到tudlntstuDnti)/*删除信息*/mstus;stuj=stuj+1;Lnumstus-;printf("删除成功!n");voidcount(studentstud)(inti,j;for(i=0;i<numstus;i+)(stud

13、i.index=1;for(j=0;j<numstus;j+)if(studj.score>studi.score)studi.index+;5. 查找模块:需求分析:该模块的功能是根据输入的学生的姓名查找对应的记录,找到以后,显示相应的学生信息.流程图:YNN显示找到I提示没有找到Y号t2姓名t3.名次n");gets(str);if(str0='1')/*按学号查找*/(printf(”请输入学号:");gets(str);for(i=0;i<=numstus;i+)if(strcmp(str,studi.number)=0)(disp

14、lay(stud,i,i);break;elsecontinue;elseif(str0='2')/*按姓名查找*/(printf(”请输入姓名:");gets(str);for(i=0;i<=numstus;i+)if(strcmp(str,)=0)(display(stud,i,i);break;elsecontinue;elseif(str0='3')/*按名次查找*/(printf("请输入名次:");scanf("%d",&num);getchar();for(i=0;

15、i<=numstus;i+)if(num=studi.index)(display(stud,i,i);break;elsecontinue;if(i>numstus)(printf(-没有查找所要的信息。n");return-1;returni;6. 显示模块:需求分析:该模块的功能是显示所有学生记录信息.程序:voidwelcome()(printf("t*n");printf("tttt*学生成绩管理系统*ntttt倾情奉献欢迎使用!n");printf("t*n");voidshowtable()(pri

16、ntf("n");printf("学号t姓名t性别t语文t数学t英语t历史t政治t总分t平均分t名次n");printf("n");voiddisplay(studentstud,intn1,intn2)(inti;showtable();/*显示表头*/for(i=n1;i<=n2;i+)printf("%st%st%st%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%dtn”,studi.number,,studi.sex,studi.subject0,studi.sub

17、ject1,studi.subject2,studi.subject3,studi.subject4,studi.score,studi.average,studi.index);/*通过循环输出数据*/voiddisplay1()(printf("tt本系统由计科二班制作nn");printf("tt制作人员列表:nn");printf("tt殷增锋ttt邵超n");printf("nn");getchar();调试与测试在这次课程设计中,程序编写过程中遇到了很多的问题,各种函数的运用也让人头疼,在上机编译运行过

18、程中出现了很多的错误,例如:各种数据类型的定义,函数的调用等等。但最终还是在老师同学的帮助下进行了各种代码的编写与修改,最终程序成功的运行。下面是各个模块的界面图(1)主菜单函数::输入模块::显示模块::删除模块:(5) :查找模块:(6) :修改模块:程序源#ifndefH_STUDENT_HH#defineH_STUDENT_HH#include""#include""#include""#defineLENsizeof(structmessage_student)/*个结构体数组元素的长度*/#definenumsubs5/*

19、学科数目*/typedefstructmessage_student/*结构体定义*/charnumber6;charname20;charsex4;floatsubjectnumsubs;floatscore;floataverage;intindex;student;externintnumstus;/*学生数目*/externstudent*pointer;/*指向结构体数组*/externintlens;intmenu_select();/*函数声明*/intopenfile(studentstu);intfindrecord(studentstud);intwritetotext(s

20、tudentstud);voidwelcome();voiddisplay1();voidshowtable();voidsort(studentstu);voiddeleterecord(studentstu,inti);voidaddrecord(studentstud);voiddisplay(studentstud,intn1,intn2);voidamendrecord(studentstud);voidcount(studentstud);voidsortnum(studentstud);voidsortnum2(studentstud);voidsortname(students

21、tud);voidsortname2(studentstud);voidsortcount(studentstud);voidsortcount2(studentstud);voidstatistic(studentstud);voiddisplay1();#endif加学生记录5.统计信息|n");printf("|2.查询学生记录6.打开文件|n");printf("|3.修改学生记录7.保存文件|n");printf("|4.学生纪录排序8.显示记录|n");printf("|0.退出系统|n");

22、printf("nn");printf("请选择(0-8):");c=getchar();getchar();return(c-'0');号t2.姓名t3.名次n");gets(str);if(str0='1')/*按学号查找*/printf("请输入学号:");gets(str);for(i=0;i<=numstus;i+)if(strcmp(str,studi.number)=0)display(stud,i,i);break;elsecontinue;elseif(str0=

23、9;2')/*按姓名查找*/printf("请输入姓名:");gets(str);for(i=0;i<=numstus;i+)if(strcmp(str,)=0)display(stud,i,i);break;elsecontinue;elseif(str0='3')/*按名次查找*/(printf("请输入名次:");scanf("%d”,&num);getchar();for(i=0;i<=numstus;i+)if(num=studi.index)(display(stud,

24、i,i);break;elsecontinue;if(i>numstus)(printf("没有查找所要的信息。n");return-1;returni;umber);fscanf(fp,"%s”,);fscanf(fp,"%s”,stui.sex);for(j=0;j<numsubs;j+)fscanf(fp,”%f",&stui.subjectj);fscanf(fp,”%f",&stui.score);fscanf(fp,”%f",&stui.average);fs

25、canf(fp,"%d",&stui.index);i+;fclose(fp);printf("文件读取成功n");printf("是否显示纪录?(y/n)");gets(str);if(str0='y'|str0='Y')display(stu,0,numstus-1);return(0);照学号t");printf("2.按照姓名t");printf("3.按照名次n");gets(str);if(strlen(str)=0)break;if

26、(str0='1')printf("请输入排序次序:n");printf("1.升序排歹Ut");printf("2.降序排列n");gets(str);if(str0='1')sortnum2(p);elsesortnum(p);display(stud,0,numstus-1);elseif(str0='2')printf("请输入排序次序:n");printf("1.升序排歹Ut");printf("2.降序排列n");g

27、ets(str);if(str0='1')sortname2(p);elsesortname(p);display(stud,0,numstus-1);elseif(str0='3')printf("请输入排序次序:n");printf("1.升序排歹Ut");printf("2.降序排列n");gets(str);if(str0='1')sortcount2(p);elsesortcount(p);display(stud,0,numstus-1);elseprintf("请

28、输入13");printf(-是否退出排序?(y/n)");gets(str);if(str0='y'|str0='Y')break;return;voidsortnum(studentstud)inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i+)for(j=0;j<numstus-i-1;j+)if(strcmp(studj+1.number,studj.number)>0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;vo

29、idsortnum2(studentstud)inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i+)for(j=0;j<numstus-i-1;j+)if(strcmp(studj.number,studj+1.number)>0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;voidsortname(studentstud)inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i+)for(j=0;j<numst

30、us-i-1;j+)(if(strcmp(studj+1.name,)>0)(temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;voidsortname2(studentstud)(inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i+)for(j=0;j<numstus-i-1;j+)(if(strcmp(,studj+1.name)>0)(temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;voidsor

31、tcount(studentstud)(inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i+)for(j=0;j<numstus-i-1;j+)(if(studj+1.index>studj.index)(temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;voidsortcount2(studentstud)(inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i+)for(j=0;j<numstus-i-1;j+)

32、(if(studj.index>studj+1.index)(temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;ubject0;if(studk.subject0>studi.subject0)k=i;if(studj.subject0<studi.subject0)j=i;average0=sum/numstus;printf("t科目A的最高分:n");/*最高分*/printf("tt学号:%s姓名:%s分数:.2fn”,studj.number,,studj.subject0);pri

33、ntf("t科目A的最低分是:n");/*最低分*/printf("tt学号:%s姓名:%s分数:.2fn”,studk.number,,studk.subject0);printf("t科目A的平均分是n”,average0);/*平均分*/break;case'2':for(i=0;i<numstus;i+)/*循环输入判断*/(sum+=studi.subject1;if(studk.subject1>studi.subject1)k=i;if(studj.subject1<studi.subj

34、ect1)j=i;average1=sum/numstus;printf("t科目B的最高分:n");/*最高分*/printf("tt学号:%s姓名:%s分数:.2fn",studj.number,,studj.subject1);printf("t科目B的最低分是:n");/*最低分*/printf("tt学号:%s姓名:%s分数:.2fn",studk.number,,studk.subject1);printf("t科目B的平均分是n",avera

35、ge1);/*平均分*/break;case'3':for(i=0;i<numstus;i+)/*循环输入判断*/sum+=studi.subject2;if(studk.subject2>studi.subject2)k=i;if(studj.subject2<studi.subject2)j=i;average2=sum/numstus;printf("t科目C的最高分:n");/*最高分*/printf("tt学号:%s姓名:%s分数:%.2fn",studj.number,,studj.sub

36、ject2);printf("t科目C的最低分是:n");/*最低分*/printf("tt学号:%s姓名:%s分数:%.2fn",studk.number,,studk.subject2);printf("t科目C的平均分是n",average2);/*平均分*/break;case'4':for(i=0;i<numstus;i+)/*循环输入判断*/sum+=studi.subject3;if(studk.subject3>studi.subject3)k=i;if(studj.su

37、bject3<studi.subject3)j=i;average3=sum/numstus;printf("t科目D的最高分:n");/*最高分*/printf("tt学号:%s姓名:%s分数:%.2fn",studj.number,,studj.subject3);printf("t科目D的最低分是:n");/*最低分*/printf("tt学号:%s姓名:%s分数:%.2fn",studk.number,,studk.subject3);printf("

38、t科目D的平均分是n",average3);/*平均分*/break;case'5':for(i=0;i<numstus;i+)/*循环输入判断*/(sum+=studi.subject4;if(studk.subject4>studi.subject4)k=i;if(studj.subject4<studi.subject4)j=i;average4=sum/numstus;printf("t科目E的最高分:n");/*最高分*/printf("tt学号:%s姓名:%s分数:.2fn”,studj.number,stu

39、,studj.subject4);printf("t科目E的最低分是:n");/*最低分*/printf("tt学号:%s姓名:%s分数:.2fn”,studk.number,,studk.subject4);printf("t科目E的平均分是n”,average4);/*平均分*/break;default:printf("输入错误!请输入15之间的数n");sum=0;getchar();printf("是否继续进行统计?(y/n)");gets(str);if(str0=&#

40、39;y'|str0='Y');elsebreak;intwritetotext(studentstud)/*将所有记录写入文件*/(inti=0,j;FILE*fp;charfilename20;printf("输入文件名称:");gets(filename);fp=fopen(filename,"w");fprintf(fp,"%dn”,numstus);while(i<numstus)(fprintf(fp,"%s%s%s",studi.number,,studi.se

41、x);for(j=0;j<numsubs;j+)fprintf(fp,"%f",studi.subjectj);fprintf(fp,"%f%f%d",studi.score,studi.average,studi.index);i+;fclose(fp);printf(-已成功存储!n");display(stud,0,numstus-1);numstus=0;return0;voidwelcome()printf("t*n");printf("tttt*学生成绩管理系统*ntttt倾情奉献欢迎使用!n&q

42、uot;);printf("t*n");voidshowtable()printf("n");printf("学号t姓名t性别tAtBtCtDtEt总分t平均分t名次n");printf("n");voiddisplay(studentstud,intn1,intn2)inti;showtable();/*显示表头*/for(i=n1;i<=n2;i+)printf("%st%st%st%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%dtn",studi.numbe

43、r,,studi.sex,studi.subject0,studi.subject1,studi.subject2,studi.subject3,studi.subject4,studi.score,studi.average,studi.index);/*通过循环输出数据*/voiddisplay1()printf("tt本系统由计科二班制作nn");printf("tt制作人员列表:nn");printf("tt殷增锋ttt邵超n");printf("nn");getchar();#incl

44、ude<>voidamendrecord(studentstud)charstr5;/*供用户输入*/inti=-1,j;if(numstus=0)/*没有记录返回*/printf("没有可供修改的记录!");while(i<0)i=findrecord(stud);if(i>=0)printf(-要删除这个学生的信息吗?(y/n)");gets(str);if(str0='y'|str0='Y')deleterecord(stud,i);count(stud);elseprintf(-确定要修改这个学生的信

45、息吗?(y/n)");gets(str);if(str0='y'|str0='Y')printf("下面请重新输入学生的信息:n");printf(-请输入学号:");gets(studi.number);printf(-请输入姓名:");gets();printf(-请输入性别(男/女1/0):");gets(str);if(str0='0')strcpy(studi.sex,"女");elsestrcpy(studi.sex,"男&q

46、uot;);studi.score=0;printf("请按顺序输入成绩:");for(j=0;j<numsubs;j+)scanf("%f",&studi.subjectj);studi.score+=studi.subjectj;getchar();studi.average=studi.score/numsubs;count(stud);display(stud,0,numstus-1);printf("是否继续进行其他修改?(y/n)n");gets(str);if(str0='y'|str0=&

47、#39;Y')i=-1;elsei=1;voiddeleterecord(studentstu,inti)/*删除信息*/intj;while(i>=0)for(j=i;j<numstus;j+)stuj=stuj+1;numstus-;printf("删除成功!n");voidcount(studentstud)inti,j;for(i=0;i<numstus;i+)studi.index=1;for(j=0;j<numstus;j+)if(studj.score>studi.score)studi.index+;voidaddrecord(studentstud)inti=0,j,num;charstr5;if(numstus!=0)printf("已有记录存在是否覆盖?(y/n)n");gets(str);if(str0='Y'|str0='y')i=0;elsei=numstus;printf(-请输入增加的学生信息条目数:");scanf("%d"

温馨提示

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

评论

0/150

提交评论