C语言学生成绩管理系统,增加;查询;修改;排序;统计;文件_第1页
C语言学生成绩管理系统,增加;查询;修改;排序;统计;文件_第2页
C语言学生成绩管理系统,增加;查询;修改;排序;统计;文件_第3页
C语言学生成绩管理系统,增加;查询;修改;排序;统计;文件_第4页
C语言学生成绩管理系统,增加;查询;修改;排序;统计;文件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、 课程设计(论文)说明书题 目: 学生成绩管理系统 院 (系): 信息与通信学院 专 业: 电子信息工程 学生姓名: sushengmian 学 号: 1000220625 指导教师: 彭明 职 称: 教授 _2012年 12月 8日摘 要 学生成绩是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。我们有必要开发学生成绩管

2、理系统来对学生成绩档案进行数字化管理。既可减轻学院教职员工工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,又可加快成绩查询速度、加强成绩管理,使各项管理更加规范化。 本系统主要完成对学生成绩的管理,包括添加、修改、删除,查询,统计信息以用户管理等六个方面。系统可以完成对各类信息的浏览、查询、添加、删除、修改等功能关键词:c语言;学生成绩管理系统;增加;查询;修改;排序;统计;文件abstractstudent grades is an important part of talent cultivation of college。student files must remain

3、within the student services (or similar purpose area) at all times and should not be removed from these areas unless required for specific purposes such as to deal with other cases such as legal, disciplinary, grievances etc, however once those cases have been dealt with the files must be returned,

4、unaltered to the respective student service area. this system is a student curriculum and the result management systemmanagement system, it is in a universities educational administrationmanagement system management system sub- system. the main user is the student, the teacher and the manager. the s

5、ystem facilitated the student to choose the class and to look up the minute. has facilitatedteachers teaching management and the student result input. the systemhas more more importantly facilitated the school educationa administration managementkeyword:c languag;student score management system;aggr

6、andize; inquire; amend; sort; statistics; document目 录1.课设目的12.课程论文题目13.程序设计思路1 3.1需求分析1 3.2主函数分析2 3.3功能模块设计23.3.1菜单模块23.3.2增加模块23.3.3查询模块23.3.4修改模块23.3.5排序模块33.3.6统计模块34.功能模块流程图44.1增加模块流程图44.2查询模块流程图54.3修改模块流程图54.4排序模块流程图64.5统计模块流程图65.数据结构设计66.算法设计77.程序运行结果87.1菜单模块运行结果87.2增加模块运行结果87.3查询模块运行结果87.4修改模

7、块运行结果97.5排序模块运行结果97.6统计模块运行结果107.7打开文件模块运行结果107.8保存模块运行结果108.编程中遇到的困难与解决方法109.实验总结10致谢11参考文献12附录131.课设目的通过本课程设计巩固c语言程序设计课程教学成果,深入理解结构体、指针、链表、动态分配内存和文件操作等c程序设计中的中高级技术,熟练掌握c语言的调试方法,初步培养良好的编程习惯和编程风格,初步学习程序文档的撰写方法。2.程序论文题目创建一个学生管理系统。学生包含以下信息项:学号,姓名,性别,语文成绩,数学成绩,英语成绩,物理成绩,化学成绩,总分、平均分。系统的主要功能包括:(1). 创建学生成

8、绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。(2). 增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排序,并继续保存至原文件。(3). 删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。(4). 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续

9、进行修改操作。(5). 按不同条件对学生信息进行查询操作,输出满足条件的学生信息。a按学号查询,输入一个学号,输出对应的学生信息。b按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。c按学院查询,输入学院名称,输出该学院的全部学生的信息。(6).按不同条件对学生成绩进行统计工作。a.按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。b.分别找出3门课程成绩最高和最低的的学生,并输出他们的信息。3程序设计思路 3.1需求分析可将系统的设计分为:菜单模块,增加信息模块,修改信息模块,排序模块,统计模块,保存文件模块,打开文件模块,显示模

10、块。a.菜单模块为用户的选择进行提示。b.增加信息模块用于增加学生的学号,姓名,语文成绩,数学成绩,语成绩,物理成绩,化学成绩,总成绩,平均分。c.修改信息模块用于对学生的学号,姓名,语文成绩,数学成绩,英语成绩,物理成绩,化学成绩,总成绩,平均分等各种信息进行修改。d.排序模块用于对学生的学号,姓名,总分进行排序,每种排序方法对于有升序排序和降序排序两种排列方式e.统计模块用于对学生的各科成绩进行一个汇总分析。可统计出每一科的最高分,最低分以及平均分。3.2.主函数设计主函数提供输入,处理,输出部分的函数的调用,其中各个功能模块用菜单方式选择,即在主函数里显示一系列功能选择,判断后,是否调用

11、某个功能用了switch()选择功能3.3.各功能模块设计 3.3.1.菜单模块:定义了字符变量c,用户根据相应的提示进行选择,最后将字符变量返回main()函数,根据c的不同值,调用不同的函数3.3.2.增加信息模块。输入要增加的信息条数num。如果原来学生的数量为0.那么学生的数量为num,将要输入的学生信息依次放在指针位置为0(num-1)的位置,然后调用count函数,按总成绩对学生进行排名,并在屏幕上显示。如果原来学生数量不为0,询问是否覆盖原来的数据,如果选择覆盖,那么学生的数量为num,将要输入的学生信息依次放在指针位置为0(num-1)的位置,然后调用count函数,按总成绩对

12、学生进行排名,并在屏幕上显示。如果不选择覆盖,那么学生个数等于原个数加上新增数,将信息依次放在指针位置为numstusumstus+num-1)的位置,然后调用count函数,按总成绩对学生进行排名,并在屏幕上显示。最后返回主函数。 3.3.3查询信息模块。如果学生数量为0,没有信息可查询,返回主函数。如果学生人数不为0,则询问用户要选择的查询方式,有3种查询方式供选择,分别为按学号查询,按姓名查询,按名次查询。对于按学号查询,将输入的学号与各个学生的学号相比较调用格式为 strcmp(str,studi.number)。如果输入的学号与某个学生的学号相等,则输出该学生的全部信息。对于按姓名查

13、询,将输入的姓名与各个学生的姓名相比较,调用格式为 strcmp(str,)。如果输入的姓名与某个学生的姓名相等,则输出该学生的全部信息。对于按名次查询,将输入的名次与各个学生的名次相比较。如果输入的名次与某个学生的名次相等(num=studi.index),则输出该学生的全部信息。 3.3.4.修改模块。如果学生数量为0,没有信息可查询,返回主函数。如果学生人数不为0,则调用查询函数 findrecord(pointer),查询函数返回一个整型数据i,则修改函数对地i个学生的信息进行修改。修改完毕后,重新对学生的总成绩进行排名,并在屏幕显示修改之后的信息。 如果要删除信息

14、,则调用删除函数deleterecord(),修改完毕后,重新对学生的总成绩进行排名,并在屏幕显示修改之后的信息。如果还要修改其他信息,则返回开始处继续执行。最后返回主函数 3.3.5.排序模块。如果学生数量为0,没有信息可排序,返回主函数。如果学生人数不为0,询问用户要选择的排序方法。输入1,则按学号进行排序,可对学号进行升序排序,降序排序。如果进行降序排序,调用函数sortnum(p),如果进行升序排序,则调用函数sortnum2(p); 输入2,则按姓名进行排序,可对姓名进行升序排序,降序排序。如果进行降序排序,调用函数sortname(p),如果进行升序排序,则调用函数sortname

15、(p);输入3,则按名次进行排序,可对名次进行升序排序,降序排序。如果进行降序排序,调用函数sortcount(p),如果进行升序排序,则调用函数sortcount2(p);排序完成之后,显示排序之后的结果。如果还要进行其他的排序,则返回继续进行查询。查询完毕之后,返回主函数。在寻找的过程中用了字符串的比较strcmp(字符串1,字符串2) 如果字符串1=字符串2则函数值为0。 如果字符串1字符串2则函数值为一个正整数。 如果字符串1字符串2则函数值为一个负整数。3.3.6.统计模块。询问用户想要统计的科目,一共有5科(语文,数学,英语,物理),输入数字15进行选择。在运用swith()的选择

16、功能,进行各个科目的统计。运用比较法得到统计信息。3.3.7.保存文件模块。定义一个指向文件的指针的文件变量fp。用到fopen(文件名使用文件方式)fclose(文件指针)fprintf(文件指针格式字符串输出列表)。保存文件模块将输入的信息保存在硬盘中。打开文件模块将保存起来的文件再次调出来使用。显示模块将用户选择的模块在屏幕上显示出来 3.3.8.打开文件模块。定义一个指向文件的指针的文件变量fp。用到fopen(filename,rb+)=null) rb+,其中为读写打开一个二进制文件 fscanf(fp,%d,&numstus); 从磁盘文件中读取变量numstus,在屏幕上显示4

17、.功能模块图4.1增加模块4.2查询模块4.3修改模块4.4排序模块4.5统计模块5.数据结构设计此程序中用到了 (1)基本类型1)常量的使用#define h_student_hh50 2)整型int 3)字符型char4)浮点型float 5)浮点型(双精度double) (2)结构体类型 #define len sizeof(struct message_student) /*一个结构体数组元素的长度*/ #define numsubs 5 /*学科数目*/ typedef struct message_student /*结构体定义*/ char number6; char name2

18、0; char sex4; float subjectnumsubs; float score; float average; int index; student; (3)指针类针:file *fp,文件型指针变量,fp是一个指向flie类型结构的指针变量。 6.算法设计7.程序运行结果7.1主函数运行结果 7.2增加模块运行结果7.3查询模块运行结果a.按名次进行查询b.按学号进行查询c.按名次进行查询7.4修改模块运行结果7.5排序模块运行结果a.按学号排序b.按姓名排序c.按名次排序7.6统计模块运行结果7.7打开文件模块运行结果7.8保存模块运行结果8.编程中遇到的困难及解决方法 由

19、于自己时间过长的遗忘及知识的局限性使得在程序的编译中存在一些问题,对每个功能模块的理解,以及主函数的功能,都是在同学的帮助和老师的讲解下有了更深的了解。编写主函数根据一些例题的模式以及自己的所要实现的功能来完成,每一个子模块,也是根据例题模块以及要实现的功能编写。用到了文件,结构体类型,数组,类型的装换等等文件以及结构体类型,通过查看书本完成的。在运行过程中每个模块运行后不能接着下一个模块。9.实验总结 做这个项目让我明白了一些道理,再大的程序也是有不同的小程序组成的。经过这几天的学习使我了解到c语言的重要性,之前接触到的c语言内容都是理论上的,但是没怎么用到实际操作当中。这次课程设计给了我一

20、次真正认识c语言的机会刚开始觉得c语言是一种很深奥的东西对于刚开始接触这门课程的我来说非常的不适应。第一次真正认真的投入c语言当中,第一次用自己在课堂上学习的东西逐步的去解决实际问题这次是完成实验设备信息的管理。经过这次课程设计,我知道自己的计算机知识还是相当有限的,在这次的程序编译过程中遇到了很多自己无法解决的问题,可是通过同学的帮助和老师的指导,上网查看资料等方法,最终问题都基本解决了。致 谢 在这次课程设计过程中,我巩固了c语言的基础知识,对c语言有了更深入的了解。以前从来没有这样编过完整的程序,课设让我有这样的一个机会。我觉得自己说学的东西不多,但是在学习的过程中也发现c语言没那么难。

21、感谢我的c语言老师,一个是带我走进c语言大门的覃匡宇老师,从他身上学到了很多知识和道理,并逐渐喜欢上c语言。同时,在这次课设中,彭老师对我的帮助使我收获很多,包括论文的排版等问题,彭老师都指出错误和不足之处,使我少走出了许多误区,在此表示深深的感谢。最后感谢所有曾在c语言上帮助我的人。参考文献1 谭浩强.c语言程序设计.北京:清华大学出版社,2008:112892 陈朔鹰. c语言程序设计习题集(第二版). 北京:人民邮电出版社,2003:37853 陈朔鹰 . c语言趣味程序百例精解. 北京:北京理工大学出版社,2007:8198附 录程序代码:#ifndef h_student_hh /*

22、条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译/*条件编译*/#define h_student_hh /*#为预编译命令*/#include stdio.h #include string.h #include malloc.h #define len sizeof(struct message_student) /*一个结构体数组元素的长度*/ #define numsubs 5 /*学科数目*/ typedef struct message_student /*结构体定义*/ char number6; char name20; char sex4; float su

23、bjectnumsubs; float score; float average; int index; student; extern int numstus; /*学生数目*/ /*extern表示为全局变量*/extern student *pointer; /*指向结构体数组*/ extern int lens; int menu_select(); int openfile(student stu); int findrecord(student stud); int writetotext(student stud); void welcome(); void display1()

24、; void showtable(); void sort(student stu); void deleterecord(student stu,int i); void addrecord(student stud); void display(student stud,int n1,int n2); void amendrecord(student stud); void count(student stud); void sortnum(student stud); void sortnum2(student stud); void sortname(student stud); vo

25、id sortname2(student stud); void sortcount(student stud); void sortcount2(student stud); void statistic(student stud); #endifint menu_select() char c; printf(nn); printf( | 1. 增加学生记录 5.统计信息 |n); printf( | 2. 查询学生记录 6.打开文件 |n); printf( | 3. 修改学生记录 7.保存文件 |n); printf( | 4. 学生纪录排序 8.显示记录 |n); printf( |

26、 0. 退出系统 |n); printf(nn); printf(请选择(0-8):); c=getchar(); getchar(); return (c-0); int findrecord(student stud) /*查找学生信息*/ char str2; int i,num; if(numstus=0) printf(没有可被查找的记录n); return -1; else printf(以何种方式查找?n1.学号t2.姓名t3.名次n); gets(str); if(str0=1) /*按学号查找*/ printf(请输入学号:); gets(str); for(i=0;i=nu

27、mstus;i+) if(strcmp(str,studi.number)=0) display(stud,i,i); break; else continue; else if(str0=2) /*按姓名查找*/ printf(请输入姓名:); gets(str); for(i=0;i=numstus;i+) if(strcmp(str,)=0) display(stud,i,i); break; else continue; else if(str0=3) /*按名次查找*/ printf(请输入名次:); scanf(%d,&num); getchar(); for(

28、i=0;inumstus) printf(没有查找所要的信息。n); return -1; return i; /#includehead.h int openfile(student stu) /*打开文件*/ int i=0,j; file *fp; char filename20,str2; if(numstus!=0) printf(已经有记录存在,是否保存?(y/n); gets(str); if(str0=y|str0=y) writetotext(stu); printf(请输入文件名:); gets(filename); numstus=0; if(fp=fopen(filen

29、ame,rb+)=null) /*rb+,为读写打开一个二进制文件*/ printf(无法打开该文件n); return(-1); fscanf(fp,%d,&numstus); /*从磁盘文件中读取变量numstus,在屏幕上显示*/ fgetc(fp); /*从文件fp获取一个字符*/ while(inumstus) fscanf(fp,%s,stui.number); fscanf(fp,%s,); fscanf(fp,%s,stui.sex); for(j=0;jnumsubs;j+) fscanf(fp,%f,&stui.subjectj); fscanf(fp,%

30、f,&stui.score); fscanf(fp,%f,&stui.average); fscanf(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); /#include head.h void sort(student stud) /*排序模块*/ int i,j=0; char str5; student *p; p=stud; if(numstus=0) pr

31、intf(没有可供查询的记录!); while(1) for(i=0;i+) printf( 请输入排序方式:); printf((直接输入回车则结束查询操作)n); printf(1.按照学号t); printf(2.按照姓名t); printf(3.按照名次n); gets(str); if(strlen(str)=0) break; if(str0=1) /*按学号排序*/ printf(请输入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortnum2(p); /*按学号升序排序*/ else sor

32、tnum(p); /*按学号降序排序*/ display(stud,0,numstus-1); else if(str0=2) /*按姓名排序*/ printf(请输入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortname2(p); /*按姓名升序排序*/ else sortname(p); /*按姓名降序排序*/ display(stud,0,numstus-1); else if(str0=3) /*按照名次排序*/ printf(请输入排序次序:n); printf(1.升序排列t); print

33、f(2.降序排列n); gets(str); if(str0=1) sortcount2(p); /*按照名次升序排序*/ else sortcount(p); /*按照名次降序排序*/ display(stud,0,numstus-1); else printf(请输入13); printf(是否退出排序?(y/n); gets(str); if(str0=y|str0=y) break; return; void sortnum(student stud) /*按学号降序排序*/ int i,j; student temp; student *p; p=stud; for(i=0;inum

34、stus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortnum2(student stud) /*按学号升序排序*/ int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortname(student stud) /*按姓名降序排序*/ int i,j; student temp; student *p

35、; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortname2(student stud) /*按姓名升序排序*/ int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortcount(student stud) /*按名次降序排序*/ int i,j;

36、student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;jstudj.index) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortcount2(student stud)/*按名次升序排序*/ int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;jstudj+1.index) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; /#in

37、cludehead.h void statistic(student stud) /*输出统计信息*/ int i,j=0,k=0; char c1,str2; float averagenumsubs,sum=0; if(numstus=0) printf(没有可被查找的记录n); else while(1) printf(下面将统计考试成绩n); printf(请选择你要统计哪科的成绩 1.语文t2.数学t3.英语t4.物理t5.化学n); c1=getchar(); printf(t一共有个%d记录n,numstus); /*总共记录数*/ switch(c1) case 1: for(

38、i=0;istudi.subject0) k=i; /*k用于记录成绩最低的学生的序号*/ if(studj.subject0studi.subject0) j=i; /*j用于记录成绩最高的学生的序号*/ average0=sum/numstus; /*统计该科的平均分*/ printf(t科目【语文】的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,,studj.subject0); printf(t科目【语文】的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2

39、fn,studk.number,,studk.subject0); printf(t科目【语文】的平均分是 %5.2fn,average0); /*平均分*/ break; case 2: for(i=0;istudi.subject1) k=i; if(studj.subject1studi.subject1) j=i; average1=sum/numstus; printf(t科目【数学】的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,,studj.subject1); pri

40、ntf(t科目【数学】的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,,studk.subject1); printf(t科目【数学】的平均分是 %5.2fn,average1); /*平均分*/ break; case 3: for(i=0;istudi.subject2) k=i; if(studj.subject2studi.subject2) j=i; average2=sum/numstus; printf(t科目【英语】的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:

41、%s 分数:%.2fn,studj.number,,studj.subject2); printf(t科目【英语】的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,,studk.subject2); printf(t科目【英语】的平均分是 %5.2fn,average2); /*平均分*/ break; case 4: for(i=0;istudi.subject3) k=i; if(studj.subject3studi.subject3) j=i; average3=sum/nu

42、mstus; printf(t科目【物理】的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,,studj.subject3); printf(t科目【物理】的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,,studk.subject3); printf(t科目【物理】的平均分是 %5.2fn,average3); /*平均分*/ break; case 5: for(i=0;istudi.subject4) k=i; if(studj.subject4studi.subject4) j=i; average4=sum/numstus; printf(t科目【化学】的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,,studj.subject4); printf(t科目【化学】的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名

温馨提示

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

评论

0/150

提交评论