课程设计——学生信息管理系统.doc_第1页
课程设计——学生信息管理系统.doc_第2页
课程设计——学生信息管理系统.doc_第3页
课程设计——学生信息管理系统.doc_第4页
课程设计——学生信息管理系统.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、设计题目:学生信息管理系统班 级:计算机1006姓 名:周言学 号:20101221450完成日期:201194 目录 1。课程设计的目的和要求-22。课程设计任务内容-33。详细设计说明-44.软件使用说明-65。课程设计心得与体会-66.参考文献7.附录:部分程序清单(带有详细的注释)一:课程设计的目的和要求1. 学生信息初始化:创建学生信息文件(包括学号,姓名,学院,班级,高数,英语,c语言成绩),然后计算总分和平均分,并将排序后的学生信息存入二进制文件中2. 学生信息操作:(1)增加学生信息(增加后仍按学号排序,并保存)(2)删除学生信息(输入要删除的学号,如果存在则删除信息;若不存在

2、,则输出提示信息)(3)修改学生信息(输入要修改的学号,如果存在,提示要修改的选项并保存;若无则输出提示信息)3.学生信息查询:(1)按学号查询学生信息(输入学号,输出学生信息)(2)按姓名查询学生信息(包括精确查询和模糊查询)(3)按学院查询学生信息(输入学院名称,输出学院学生信息)(4)按班级查询学生信息(输入班级,输出全部学生信息)4按不同条件对学生信息进行查询:(1) 按总分对学生信息进行排序(由高到低),输出排序后的信息并存放到一个新的二进制文件中。(2) 按平均分统计各个分数段的学生人数(不及格,6069,7079,80-89,90100)。(3) 分别找出3门课程成绩最高的学生,

3、并输出他们的信息.(4) 分别统计出3门课程的不及格率,并输出.二:课程设计任务内容:学生成绩管理系统主菜单信息查询信息删除信息修改信息增加信息统计姓名查询学号查询总分统计平均分统计三门课最高分三门课不及格班级查询信息输入学院查询按学号删除按学号修改信息显示信息保存三:详细设计说明:1. 数据结构设计:根据需要,定义了一个结构体类型,即学生类型.包括学生的学号,姓名,学院,班级和三门成绩。定义如下:struct student /定义结构体类型int num;/学号char name 12;/姓名char college12;/学院char cla20;/班级int score3;/三门课程成

4、绩int total;/总分float average;/平均分studN;2。main函数的设计:由于学生信息都保存在文件中,因此系统首先调用LoadStuds()函数返回学生人数,并将值返给学生人数,然后登陆学生登陆系统,调用StudentLogin函数实现学生登录,从而实现功能选择3。学生信息处理:对学生信息处理主要调用一下函数,/学生信息管理模块的函数声明void InputOnestud(int i); /输入一个学生信息的函数void InputAllStuds(int sn); /输入全部学生信息的函数void SaveOnestud(int i); /保存一个学生的信息void

5、 sort(struct student x ); /对学生学号排序的函数int LoadStuds(); /从文件载入全部学生信息的函数void SaveAllStuds(int sn); /保存全部学生信息的函数int OriginalStud(void); /学生信息初始化的函数void ModifyStud(int sn); /修改学生信息的函数int AddStud(int sn); /添加学生信息的函数int DelStud(int sn); /删除学生信息的函数void OutputAllStuds(int sn); /输出全部学生信息的函数void OutputOnestud(

6、int i); /输出一个学生信息的函数/学生信息查询模块的函数声明void SearchMenu(int sn); /学生信息查询函数void SearchSnum(int sn); /按学号查询函数void SearchSname(int sn); /按姓名查询函数void SearchScollege(int sn); /按学院查询函数void SearchScla(int sn); /按班级查询函数 /学生信息统计模块的函数声明void CountMenu(int sn); /学生信息统计函数void CountTotal(struct student x); /学生总分从高到低排序统

7、计函数void CountAverage(struct student x,int sn); /按平均分统计各个阶段的学生人数的函数void CountTop(struct student x,int sn); /统计三门课程分数最高的学生的信息的函数int Search(struct student x,int n); /查找最高分的函数void CountNopass(struct student x,int sn); /统计三门课程的不及格率的函数四:软件使用说明:该学生信息管理系统,通过学生用户进行操作,实现学生信息的初始化,并能计算总分和平均分;对学生信息进行删除、添加、删除操作;而

8、且通过调用函数实现对学生信息通过学号、姓名、学院和班级的查询;并可以对学生信息进行统计:其中包括按从高到低进行排序;统计三门课程的最高分学生的信息;三门课程的不及格率和统计各分数段的人数五:课程设计心得与体会:通过这一星期的编程,发现了很多的问题:其中就有对以前知识的模糊认识,没有弄清楚结构体的使用。感觉学的东西很少,很零散,不知该怎么总和到一起,就要课程设计,是不是太难为我们了。上午基本上是看课本,毕竟一个暑假都没有看课本了有些生疏。后来对照课本后面的程序,自己慢慢地学着编译。先把程序中的几个模块编写出来,觉得还是有很大收获的.后来通过思考于对照课本,程序基本上算是编完了但一运行,那些错误我

9、都不忍卒读啊!后来在同学们得帮助下,我把错误一点点减少,并学到了很多以前我认为自己会的知识。短短的一周课程设计结束了,但是这段时间里,我又学到了更多C 知识,如:数据结构体,函数调用时形参和实参的类型等等,总之这一周收获很大的.六:参考文献:C语言课本及学生信息管理系统七:附录:代码清单(带有详细解释)/ fdasfas.cpp : Defines the entry point for the console application./#include<stdio。h>#include<stdlib.h#include<string。hdefine N 10defin

10、e stud_LEN sizeof(stud) /学生类型占用存储空间的大小struct student /定义结构体类型int num;char name 12;char college12;char cla20;int score3;int total;float average;studN;/用户登录模块的函数声明void StudentLogin(int *psn); /学生登录函数/学生信息管理模块的函数声明void InputOnestud(int i); /输入一个学生信息的函数void InputAllStuds(int sn); /输入全部学生信息的函数void SaveOn

11、estud(int i); /保存一个学生的信息void sort(struct student x ); /对学生学号排序的函数int LoadStuds(); /从文件载入全部学生信息的函数void SaveAllStuds(int sn); /保存全部学生信息的函数int OriginalStud(void); /学生信息初始化的函数void ModifyStud(int sn); /修改学生信息的函数int AddStud(int sn); /添加学生信息的函数int DelStud(int sn); /删除学生信息的函数void OutputAllStuds(int sn); /输出

12、全部学生信息的函数void OutputOnestud(int i); /输出一个学生信息的函数/学生信息查询模块的函数声明void SearchMenu(int sn); /学生信息查询函数void SearchSnum(int sn); /按学号查询函数void SearchSname(int sn); /按姓名查询函数void SearchScollege(int sn); /按学院查询函数void SearchScla(int sn); /按班级查询函数 /学生信息统计模块的函数声明void CountMenu(int sn); /学生信息统计函数void CountTotal(str

13、uct student x); /学生总分从高到低排序统计函数void CountAverage(struct student x,int sn); /按平均分统计各个阶段的学生人数的函数void CountTop(struct student x,int sn); /统计三门课程分数最高的学生的信息的函数int Search(struct student x,int n); /查找最高分的函数void CountNopass(struct student x,int sn); /统计三门课程的不及格率的函数void main(void) int sn,select; int psn; psn

14、=sn; sn=LoadStuds(); /调用LoadStuds(),返回值为学生人数,将其赋值给snwhile(1) printf("n”); printf("t-n"); printf("t 学生信息管理系统 n"); printf("t n”); printf(”t 1.学生n”); printf("t 0。退出系统n”); printf(”t 请选择用户:"); scanf("%d",&select); getchar(); switch(select) case 1:Stud

15、entLogin(&sn);break; case 0:printf(”n谢谢使用!再见n");exit(1); default:printf(”n按键错误,请重新选择!n"); /功能:实现学生登录,显示学生用户菜单,进行功能选择/参数:psn为主函数中变量sn的地址/返回:无/主要思路:用if进行学号验证,用switch结构实现菜单功能选择void StudentLogin(int psn) int select;while(1)printf("n");printf(" 同学,你好!n");printf(” -n"

16、;);printf(”1。学生信息初始化 5。学生信息查询n"); printf(”2。修改学生信息 6.学生统计n”);printf("3。添加学生信息 7。输出全部学生信息n");printf("4.删除学生信息n"); printf(”0。返回主菜单n”);printf("n请你选择需要的服务(0-7):");scanf(”d",&select);getchar();switch(select)case 1:*psn=OriginalStud();break; case 2:ModifyStud(ps

17、n);break;case 3:psn=AddStud(*psn);break;case 4:*psn=DelStud(psn);break; case 5:SearchMenu(*psn);break;case 6:CountMenu(*psn);break;case 7:OutputAllStuds(*psn);break;case 0:return;default:printf(”n按键错误,请重新选择!n");/功能:实现学生信息的初始化/参数:无/返回:学生人数/主要思路:用for循环多次调用InputOnestud函数实现输入多个信息,并写入文件int OriginalS

18、tud(void)int i,j,sum,n;char c=y;for(n=0;c='y'|c=Y'n+)printf(”n输入学生%d的信息:n",n+1);InputOnestud(n);printf("n继续输入请按y;停止请按'n':”);getchar();c=getchar();for(i=0;i<N;i+) /计算每个学生的总成绩和平均分sum=0;for(j=0;j3;j+)sum=sum+studi。scorej;studi.total=sum;studi.average=(float)(sum/3.0);so

19、rt(stud);SaveAllStuds(n);return(n);/功能:输入一个学生信息/参数:i表示对第i个学生进行输入操作/返回:无/主要思路:用scanf函数输入学生的学号,姓名,学院,班级和高数英语c语言成绩void InputOnestud(int i)printf("n”);int j;printf(”输入学号,姓名,学院,班级,高数,英语,C语言的成绩:n”);scanf(”d%ss%s",studi。num,,studi。college,studi。cla); for(j=0;j<3;j+)scanf(”d",&am

20、p;studi。scorej);/功能:按学号进行排序void sort(struct student x ) /对学号进行排序 int i,j; struct student temp; for(i=0;i<N-1;i+)for(j=0;jN-i1;j+)if(xj。numxj+1.num)temp=xi; xi=xi+1; xi+1=temp; /功能:将一个学生信息保存到文件“stud。dat”中/参数:i表示将第i个学生信息保存到文件中/返回:无/主要思路:用fseek函数定位,再用fwrite函数写入第i个学生信息void SaveOnestud(int i) FILE * f

21、s;if(fs=fopen(”stud.dat",”rb+”))=NULL) /以二进制读写方式打开文件printf(”cant open file stud.datn");exit(1);fseek(fs,stud_LEN * i,0);fwrite(&studi,stud_LEN,1,fs);fclose(fs);/功能:从文件”stud.dat”中载入全部学生信息/参数:无/返回:返回文件中学生的人数/主要思路:用while循环从文件中读取学生信息到数组student,同时统计学生人数int LoadStuds(void)FILE fs;int sn=0;if

22、(fs=fopen(”stud.dat”,”rb+"))=NULL) /以二进制读,写方式打开文件printf(”can't open file stud.datn");return(sn);while(!feof(fs)) /文件没有结束时进行读数据if(fread(studsn,stud_LEN,1,fs)sn+; /从文件中每读一个学生的信息,学生人数加1 fclose(fs);return(sn); /返回学生人数,即sn的值/功能:将全部信息保存到文件“stud.dat"中/参数:sn表示学生人数/返回:无/主要思路:用fwrite函数将数组st

23、udent中的数据一次性写入文件void SaveAllStuds(int sn) FILE fs;if((fs=fopen("stud.dat","wb"))=NULL) /以二进制写方式打开文件printf("can't open file stud。datn");exit(1);fwrite(stud,stud_LEN,sn,fs);fclose(fs);/功能:增加学生信息/参数:sn表示增加前的学生数量/返回:增加后的学生数量/主要思路:调用InputOnestud函数输入要添加的学生信息,再用fwrite将其写入文

24、件int AddStud(int sn) int s;printf(”n输入增加前的学生数量:n”);scanf("d",&s);char c='y;FILE fb;if(fb=fopen(”stud.dat”,"ab")=NULL)printf("cant open file stud。datn");exit(1);while(c='y'|c=Y)printf(”n请输入新增学生的信息:n”);InputOnestud(sn);/调用函数,输入第sn个学生的信息fwrite(studsn,stud_L

25、EN,1,fb); /将第sn个学生的信息保存至文件sn+; /学生数量加1sort(stud);SaveAllStuds(sn);printf(”n继续输入其它新学生的信息吗?(y/n):”);getchar();c=getchar();printf(”n按任意键继续!n”);getchar();fclose(fb);return(s); /返回增加后学生的数量/功能:删除学生信息/参数:sn表示删除前的学生数量/返回:删除后的学生数量/主要思路:先输入要删除学生的学号,找到该学生后进行删除操作,再调用SaveAllStuds/ 函数将删除后的图书信息写入文件int DelStud(int

26、sn)int s;printf(”n输入删除前的学生数量:n”);scanf("%d”,&s);int i,k=-1;int num,c1=y',c2;if(sn=0)printf(”n学生信息为空,无法执行操作!n");return(s);while(c1=y|c1='Y)c2='n'printf(”n请输入要删除的学生的学号:");scanf("d",num);for(i=0;i<s;i+)if(studi。num=num)k=i; /找到要删除的学生,用k记录其下标break;if(k0)pr

27、intf(”n输入的学号有误,请重新输入!n");elseprintf(”n确定要删除该学生的全部信息吗?(y/n):");getchar();c2=getchar();if(c2='y') /c2为y',表示确定进行删除操作for(i=k;isn;i+)studi=studi+1; /从数组中删除第k个学生sn-; /学生数量减1printf(”n成功删除!n");else /c2为'n',表示不进行删除操作printf(”n取消删除!n”);printf(”n继续删除其他学生的信息吗?(y/n):”);getchar()

28、;c1=getchar();SaveAllStuds(sn); /保存删除后的全部学生信息printf("n按任意键继续!n”);getchar();return(s); /返回删除后的学生数量/功能:修改学生信息/参数:sn表示学生的数量/返回:无/主要思路:通过switch实现修改学生的任意信息项,并将修改后的信息写入文件void ModifyStud(int sn) int s;printf(”n输入学生数量:n”);scanf(”d”,&s);int select,k=-1;int num,c1=y',c2;if(sn=0)printf(”n学生信息为空,无法

29、执行操作!n");return;while(c1='y'|c1='Y)c2=y';printf(”n请输入要修改的学生的学号:");scanf(”%d”,&num);for(int i=0;i<sn;i+)if(studi.num=num)k=i;break;if(k<0) /k小于0,表示在数组st中没找到输入学号对应的学生printf("n输入的学号有误,请重新输入!n");else /k大于等于0,表示找到该学生,应进行一下操作printf(”n显示此学生信息:n”);OutputOnestud(

30、k); /显示该学生的全部信息while(c2=y|c2=Y)printf(”n 学生信息包括以下数据项n");printf(”1。学号n");printf("2.姓名n”);printf("3。学院n");printf(”4.班级n”);printf(”5。成绩n”);printf(”n请选择要修改的数据项(15):”);scanf("%d”,&select);getchar();switch(select)case 1:printf(”学号:");scanf("d”,&num);break; c

31、ase 2:printf(”姓名:”);gets();break;case 3:printf(”学院:");gets(studk。college);break;case 4:printf("班级:");gets(studk.cla);break;case 5:printf("成绩:%S”,studk。score);break;default:printf("n按键错误,请重新输入!n");printf("n还要修改此学生的其他信息吗?(y/n):”);getchar();c2=getchar();Save

32、Onestud(k); /保存修改后的学生信息printf("n还要修改其他学生的信息吗?(y/n):"); getchar();c1=getchar();printf(”/n按任意键继续!n");getchar();/功能:输出一个学生信息/参数:i表示对第i个学生进行输入操作/返回:无/主要思路:用printf函数输出一个学生的信息void OutputOnestud(int i) int j;printf(”n一个学生的信息:n");printf(”输出学号,姓名,学院,班级,高数,英语,C语言的成绩:n”);printf("%ds%ss

33、”,studi.num,,studi。college,studi。cla); for(j=0;j<3;j+)printf(”%d”,studi。scorej);/功能:输出全部学生信息/参数:sn表示学生的数量/返回:无/主要思路:通过for循环输出全部学生的信息void OutputAllStuds(int sn) int i,j;printf("n全部学生的详细信息:n");printf("n学号 姓名 学院 班级 高数 英语 c语言成绩n”);for(i=0;isn;i+)printf("n输出学生d的信息:",

34、i+1);printf(”%dss%s",studi.num,,studi。college,studi.cla);for(j=0;j3;j+)scanf(”%d",studi。scorej);printf("n全部学生信息输出完毕。n");printf("n按任意键返回!n”);getchar(); /学生信息查询模块的函数定义/功能:显示学生查询菜单,实现功能选择/参数:sn表示学生的数量/返回:无/主要思路:采用switch结构实现查询功能的选择void SearchMenu(int sn)int select;whil

35、e(1)printf(”n欢迎使用学生信息查询服务n”);printf("t-n");printf(”1.按学号查询n");printf("2。按姓名查询n”);printf("3.按学院查询n");printf(”4.按班级查询n”);printf(”0.返回主菜单n");printf(”n请选择查询方式(0-4):”);scanf(”d”,select);getchar();switch(select)case 1:SearchSnum(sn);break;case 2:SearchSname(sn);break;cas

36、e 3:SearchScollege(sn);break;case 4:SearchScla(sn);break;case 0:return;default:printf(”n按键错误,请重新选择!n”);/功能:按学号进行学生信息查询/参数:sn表示学生的数量/返回:无/主要思路:输入学生学号,用strcmp函数进行查询void SearchSnum(int sn)int i,j ,k;int num,c='y'while(c=y'|c='Y')k=-1;printf(”n请输入学号:");scanf(”d”,&num);getcha

37、r();for(i=0,j=1;i<sn;i+) if(studi。num=num)k=i;printf(”n学生d的信息:n",j+);OutputOnestud(k);printf(”n还要查询其他的学生信息吗?(y/n):");getchar();c=getchar();/功能:按姓名进行查询/参数:sn表示学生的数量/返回:无/主要思路:输入姓名,先用strcmp函数进行精确查询,若无查询结果,再用strstr函数/ 进行模糊查询void SearchSname(int sn)int i,j,k;char sname40,c='y'while(

38、c='y|c=Y')k=-1;printf(”n请输入姓名:”);gets(sname);for(i=0,j=1;isn;i+)if(strcmp(,sname)=0)/精确查询k=i;printf(”n学生%d的信息:n",j+);OutputOnestud(k);printf("n还要查询其他的学生信息吗?(y/n):");getchar();c=getchar();if(k=-1)printf(”n模糊查询结果如下:n”);for(i=0,j=1;isn;i+)if(strstr(,sname)!=NU

39、LL)/模糊查询k=i;printf("n学生d的信息:n”,j+);OutputOnestud(k);printf("n还要查询其他的学生信息吗?(y/n):”);getchar();c=getchar();if(j=1) printf("n抱歉!没有相应的学生信息!n");c=getchar();getchar();/功能:按学院进行学生信息查询/参数:sn表示学生的数量/返回:无/主要思路:输入学生所在学院,用strcmp函数进行查询void SearchScollege(int sn) int i,j ,k;char college20,c=y&

40、#39;while(c=y|c=Y')k=1;printf("n请输入学院:");gets(college);for(i=0,j=1;i<sn;i+)if(strcmp(studi.college,college)=0)k=i;printf(”n学生%d的信息:n",j+);OutputOnestud(k);printf("n还要查询其他的学生信息吗?(y/n):”); getchar();c=getchar();/功能:按班级进行学生信息查询/参数:sn表示学生的数量/返回:无/主要思路:输入学生所在班级,用strcmp函数进行查询voi

41、d SearchScla(int sn) int i,j ,k;char cla20,c=y;while(c=y'|c=Y)k=1;printf(”n请输入班级:”);gets(cla);for(i=0,j=1;i<sn;i+)if(strcmp(studi。cla,cla)=0)k=i;printf(”n学生d的信息:n”,j+);OutputOnestud(k);printf(”n还要查询其他的学生信息吗?(y/n):"); getchar();c=getchar();/学生信息统计模块的函数定义/功能:显示学生统计菜单,实现功能选择/参数:sn表示学生的数量/返回

42、:无/主要思路:采用switch结构实现统计功能的选择void CountMenu(int sn)int select; while(1)printf("n欢迎使用学生信息统计服务n");printf(”t-n”);printf("1。按总分排序统计n”);printf(”2。按平均分统计各个阶段n");printf(”3.按三门课程最高统计n”);printf(”4.按三门课程的不及格率统计n");printf(”0.返回主菜单n”);printf("n请选择查询方式(04):");scanf("d",

43、select);getchar();switch(select)case 1:CountTotal(stud);break;case 2:CountAverage(stud,sn);break;case 3:CountTop(stud,sn);break;case 4:CountNopass(stud,sn);break;case 0:return;default:printf(”n按键错误,请重新选择!n");/功能:按总分进行排序并输出且保存至新的二进制文件/参数:数组元素/返回:无/主要思路:采用冒泡排序将总分按从高到低排序void CountTotal(struct student x)struct student

温馨提示

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

评论

0/150

提交评论