c语言课程设计报告学生成绩管理系统[1]余销云.doc
C语言课程设计报告题 目: 学生成绩管理系统设计设 计 者: 余销云专业班级: 电子信息工程(2)班学 号: 0指导教师: 祝红琴完成日期: 6月21日学生成绩管理系统课程设计报 告目录一系统软件环境(3)二课程设计目的(3)三内容与要求(3)四程序主要功能(4)五系统功能设计(4)六函数实现功能说明(5)七调试分析(6)八心得与体会(6)九各功能模块的实现及其程序清单(7)十、附页源程序清单(11)学生成绩管理系统课程设计报 告一系统软件环境:本程序主要运行在:Visual C+ 6.0(主要)Turbo C/C+ 3.0 Turbo C 2.二课程设计目的: 本课程设计的系统是早已在很多领域均有应用,是一个很不错的教学管理系统,而且其功能更是相当强大、界面更加友好的应用型软件。而现在我的设计并非是重走旧路,而我的设计主要目的在于学习并深刻地掌握对C语言的基础知识以及其实践经验,更好地在以后的学习中能够更好地运用学习。特别是像这种比较多运用到一些课本上没有教的知识,比如说,像清屏函数CLRSCR、菜单函数MENU等。许多都是一开始就没有涉及到的知识,在自已的设计中得到了提升,更加重要的一点就是增加了自已的实践操作能力。三内容与要求:(一) 设计内容:成绩信息,内容如下:例:现有学生成绩信息,包含姓名 学号 语文 数学 英语 张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈明 05 67 38 47请用C/C+编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:(二)功能要求:(1)信息输入:(2)信息查询:要求:查询时可实现按姓名查询、按学号查询(3)成绩统计:要求:A输入任意的一个课程名(如数学)和一个分数段(如60-70),统计出在此分数段的学生情况。(4)可选功能:实现学生信息数据的维护。可包括:增加学生信息、删除学生信息、修改学生信息(其他要求:学生信息数据以结构体数组组织;或以链表形式组织;或以文件形式保存(可加分) 2、 插入记录在一个特定序号处插入一条记录 3、 删除记4、 修改记关键可选增强功能:统计录修改特定记录 5、 查询记录。(可对记录分)6、 排序按学号、姓名、出生年月、家庭住址、邮编、电话等进行排序 7、 系统维护退出系统时关闭所有文件四程序主要功能: 本系统的主要功能有如下:(1)、新输入学生的详细信息(包括:学号、姓名、语文成绩、数学成绩、英语成绩)(2)、增加学生的信息(3)、删除学生的信息(4)、查询学生的信息(5)、统计学生的成绩注:由于本人能力有限,不能完全地将所有的功能模块做出来;但我相信我能够再接再厉,继续开发下去的,并向人性化发展。五系统功能设计:(一)本系统的总体框架图:(二)、本系统的总体流程图:开始编译运行是/否MAIN有无调用MENUi=0i0EXIT调用五个功能函数(i=?)连接执行错误 输入正确结束注:此图为概图、程序较多无法一一展示。六函数实现功能说明:(1)、MENU函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择。(2)、CREAT函数是定义用于创建新的链表,并带回一个指向链表头的指针。其功能是输入最初的学生信息。(3)、ADD函数是定义用于再次输入学生信息,并将所有的学生信息按学号排序。(4)、DEL函数是定义用于删除学生信息。:(5)、SEARCH函数是定义义用于查询学生信息,主要是学号的查询。:(6)、TAXIS函数是定义用于统计学生的成绩信息,采用排序函数的方式对学号/数学等的排序。:七调试分析:因在不同的环境中运行是有不同的结果,以下分两种环境中说明:(1)、在Turbo C 2.0 在这个环境下运行警告之处比较多,在调试时采用的图象处理函数在其它两个环境中不能运行。例如:在原程序中加入#include “graphics.h” int gdtiver=DETECT,gmode; Initgraph(&gdriver,&gmode,“图象处理函数的路径”); Cleardevice();Setbkcolor(颜色值);*在Turbo C/C+ 3.0 中的Error提示是:Undefined symboc _c closegraph in module 原因在于:TC 3.0中对图象的处理函数有不足之处。*在Visual C+ 6.0 中的Error提示是:BGI Error:Graghics not initialized (useinitgraph)Cannot open includefile:”graphics.h”No such file or diretory原因在于:VC 6.0中对图象处量理的函数与TC中的不一样。(2)、在Turbo C/C+ 3.0 在这个环境中运行到输入学生姓名时就出错:Error:(在用户窗口中可以看到) Scanf:floating point formats not linked Ab mormal program termination*原因在于:连接浮点库错误。*解决办法:在主函数中加入:fioat arg,*pointer=&arg;即可运行。八心得与体会:(1)、通过本次对C语言的深入学习,让我对C语言有了更多的了解并撑握更多的知识,成功地运用各类函数、循环变量、结构化的程序设计,以及结构体、指针的使用。(2)、但在学习中发现,编程确实不是很好做的,并非是你想要就能完成的,它需要的是认真、仔细地对待每一个程序块,特别是在对指针的使用时更加困难,那些指针指来指去,一不小心就会看错,编译不出来。(3)、由于学生的我只是大一而已,没能够完完全全地把程序做出来,而且程序中有许多不足之处不能够正确地将它改正,但总体上是可以运行的。九各功能模块的实现及其程序清单:(1)、各功能模块的实现(请参照第六点:函数实现功能说明)(2)、程序清单(请见附页)参考文献:1 谭浩强编著.C程序设计第三版.北京:清华大学出版社,20052 林瑞仲等编著.C语言实例解析精粹.北京:人民邮电出版社,2005附页:学生成绩管理系统源程序清单 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #define M 3 /*定义结构体变量*/ typedef struct students char name20; char num15; float scoreM; float average; float total;MESSA; MESSA stu20;int S; /*函数声明*/ void menu(void); void choose(void); void input(void); void savescore(void); void loadscore(void); void choosec(void); void average(void); void total(void); void name(void); void number(void); void show(void); void excellent(void); void passing(void); void personal(void); void Exit(); /*主函数调用*/ void main() menu(); choose(); /*菜单系统*/ void menu(void)system("CLS");printf("t*n");printf("t* *n");printf("t* 。欢迎使用这个成绩管理系统。 *n");printf("t* *n");printf("t*n"); printf("n");printf("t 以下这个菜单由余销云制作,详情请看:nn");printf("t#n");printf("t# 请输入学生的分数.1 #n");printf("t# 搜索学生分数 .2 #n");printf("t# 搜索学生的优秀通过率.3 #n");printf("t# 搜索学生的通过状况.4 #n");printf("t# 搜索个人个门成绩分数.5 #n");printf("t# 离开.6 #n");printf("t#n"); printf("nt请选择:n"); /*菜单选择*/ void choose(void) int x,flag=0; while(flag=0) fflush(stdin); scanf("%d",&x); getchar(); switch(x) case 1:input();savescore();loadscore();menu();choose();flag=1;break; case 2:choosec();flag=1;break; case 3:excellent();flag=1;break; case 4:passing();flag=1;break; case 5:personal();flag=1;break; case 6:Exit();flag=1; default:printf("tSorry,your choose doesn't exist! please choose again!n"); /*输入学生成绩*/ void input(void) int flag=1,j,i;char k;float pp=0; for(i=0;flag=1;i+) printf("t请输入第N.%hd个学生的成绩信息:n",i+1); puts("姓名:"); fflush(stdin); gets(stui.name); fflush(stdin); puts("学号:"); fflush(stdin); gets(stui.num); puts("t分数:t语文t数学t英语"); for(j=0;j<M;j+) scanf("%f",&stui.scorej); puts("t你想要继续么?(Y/N)"); while(1) puts("t请选择."); fflush(stdin); scanf("%c",&k); if(k!='N'&&k!='Y') puts("t出错了,哈哈,再输一次吧!"); else if(k='N') flag=0;S=i;break; else break; for(i=0;i<=S;i+) for(j=0,stui.total=0.0;j<M;j+) stui.total+=stui.scorej; stui.average=stui.total/M; /*保存数据*/ void savescore(void) int i,flag=1;FILE *fp;char m;puts("t你想要保存这些数据么?(Y/N)");while(1) fflush(stdin); scanf("%c",&m); if(m='Y') if(fp=fopen("D:score.txt","w")=NULL) printf("t对不起哦,无法打开这个表单.n"); exit(0); for(i=0;i<=S;i+) if(fwrite(&stui,sizeof(struct students),1,fp)!=1) puts("t对不起,表单书写错误了!"); flag=0; if(flag=1) for(i=0;i<=S;i+) printf("t好了,第N.%d个学生的数据已经被保存了哦!n",i+1); fclose(fp); break; else if(m!='N'&&m!='Y') puts("t对不起,你输入错误,请重新输入一次吧!"); else break; /*读取文件中保存的数据*/ void loadscore(void) FILE *fp;char n;MESSA restu20;int i,j,flag=0; char read510="学号","姓名","语文","数学","英语" puts("t你想要立刻读取这些数据么?(Y/N)"); while(1) fflush(stdin); scanf("%c",&n); if(n='Y') if(fp=fopen("D:score.txt","r")=NULL) fprintf(stderr,"tOpen %s error!n","score.txt"); exit(0); for(i=0;i<=S;i+) fread(&restui,sizeof(struct students),1,fp); system("CLS"); puts("t成绩信息读取中."); printf("t好的,表单已经被读取!.n"); printf("n"); printf("t$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$n"); printf("t$*$ $*$nt"); printf("$*$ "); for(i=0;i<5;i+) printf("%-10s",readi); printf(" $*$"); printf("n"); for(i=0;i<=S;i+) printf("t$*$ "); printf("%-10s%-10s",restui.num,restui.name); for(j=0;j<3;j+) printf("%-10.2f",restui.scorej); printf(" $*$n"); printf("t$*$ $*$"); printf("nt$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$n"); fclose(fp); break; else if(n='N') break; else printf("t对不起,出现错误了,再来一次吧,相信你会成功的!n"); puts("t输入任意键回到主菜单.n"); getchar(); getchar(); /*选择查分的子菜单及子菜单选择*/ void choosec(void) int biao,i,flag=0;FILE *fp; if(fp=fopen("D:score.txt","r")=NULL) printf("t对不起,你无法输入任何成绩信息! 无法打开这个表单!nnn");printf("t输入任意键回到主菜单!n"); getchar();getchar(); menu(); choose(); for(i=0;i<=S;i+) fread(&stui,sizeof(struct students),1,fp); fclose(fp); system("CLS"); printf("t以下是第二个菜单:n"); printf("n"); printf("t%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$n");printf("t%$ 按平均分由高到低.1 %$n");printf("t%$ 按总分由高到低.2 %$n"); printf("t%$ 按学号降序.3 %$n"); printf("t%$ 按姓名降序.4 %$n");printf("t%$ 回到主菜单.5 %$n"); printf("t%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$n"); printf("nt请选择输入方式:n"); while(flag=0) fflush(stdin); scanf("%d",&biao); getchar(); switch(biao) case 1:flag=1;average();show();break; case 2:flag=1;total();show();break; case 3:flag=1;number();show();break; case 4:flag=1;name();show();break; case 5:flag=1;menu();choose();break; default:printf("t对不起,你的操作无法进行! 请重新做出正确操作!n"); /*显示分数*/ void show(void) int i,j,n,flag=0; char head710="学号","姓名","语文","数学","英语","总分","平均分" system("CLS"); puts("t读取信息中."); printf("n"); printf("t$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$nnt"); for(i=0;i<7;i+) printf("%-10s",headi); printf("nt"); for(i=0;i<=S;i+) printf("%-10s%-10s",stui.num,stui.name); for(j=0;j<3;j+) printf("%-10.2f",stui.scorej); printf("%-10.2f",stui.total); printf("%-10.2f",stui.average); printf("nt"); printf("nt$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$n"); printf("nYou want :(1 or 2)n"); puts("t1.回到第二个菜单!n"); puts("t2.回到主菜单!n"); while(flag=0) fflush(stdin); scanf("%d",&n); getchar(); switch(n) case 1:flag=1;choosec();break; case 2:flag=1;menu();choose();break;default:printf("t出错了,请再次输入!n"); /*按平均分由高到低*/ void average(void) int i,j,k;MESSA t; for(i=0;i<S;i+) k=i; for(j=i+1;j<=S;j+) if(stuk.average<stuj.average) k=j; if(k!=i) t=stuk; stuk=stui; stui=t; /*按总分由高到低*/ void total(void) int i,j,k;MESSA t; for(i=0;i<S;i+) k=i; for(j=i+1;j<=S;j+) if(stuk.total<stuj.total) k=j; if(k!=i) t=stuk; stuk=stui; stui=t; /*按学号降序*/ void number(void) int i,j,k;MESSA t; for(i=0;i<S;i+) k=i; for(j=i+1;j<=S;j+) if(strcmp(stuk.num,stuj.num)<0) k=j; if(k!=i) t=stuk; stuk=stui; stui=t; /*按姓名降序*/ void name(void) int i,j,k;MESSA t; for(i=0;i<S;i+) k=i; for(j=i+1;j<=S;j+) if(strcmp(stuk.name,stuj.name)<0) k=j; if(k!=i) t=stuk; stuk=stui; stui=t; /*优秀率*/void excellent(void)int i,j,k,w,flag=0;float m;FILE *fp;char head2310="数学","语文","英语"if(fp=fopen("D:score.txt","r")=NULL) printf("t对不起,你无法输入任何信息! 找不到该表单!nnn");printf("t输入任意键回到主菜单!n"); getchar();getchar(); menu(); choose(); for(i=0;i<=S;i+) fread(&stui,sizeof(struct students),1,fp);fclose(fp);system("CLS");for(i=0;i<M;i+)printf("tThe excellent students in %s is following:n",head2i); for(j=0,k=0;j<=S;j+) if(stuj.scorei>=85.00) k+; printf("t%st%s",stuj.num,stuj.name); printf("t%.2fn",stuj.scorei);m=(k*1.0/(S+1)*100; printf("tThe excellent rate is %.2f%n",m);printf("nn");puts("t你想要继续操作么?n");printf("t1.离开系统!n");printf("t2.回到主菜单!n");printf("t3.回到第二个菜单!n"); puts("t请选择:n");while(flag=0) fflush(stdin); scanf("%d",&w); getchar(); switch(w) case 1:Exit();flag=1; case 2:menu();choose();flag=1;break; case 3:choosec();flag=1;break; default:printf("t对不起,操作无法进行! 请重新选择!n"); /*及格率*/void passing(void) int i,j,k,w,flag=0;float m;FILE *fp; char head2310="数学","语文","英语" if(fp=fopen("D:score.txt","r")=NULL) printf("t对不起,你不能输入任何信息! 无法找到该表单!nnn");printf("t输入任意键回到主菜单!n"); getchar();getchar(); menu(); choose(); for(i=0;i<=S;i+)fread(&stui,sizeof(struct students),1,fp);fclose(fp);system("CLS"); for(i=0;i<M;i+) printf("tThe passing students in %s is following:n",head2i); for(j=0,k=0;j<=S;j+)if(stuj.scorei>=60.0) k+; printf("t%st%s",stuj.num,stuj.name); printf("t%.2fn",stuj.scorei); m=(k*1.0/(S+1)*100; printf("tThe passing rate is %.2f%n",m); printf("nn"); puts("t是否继续操作?n");printf("t1.离开系统!n");printf("t2.回到主菜单!n");printf("t3.回到第二个菜单!n"); puts("t请选择:n");while(flag=0) fflush(stdin); scanf("%d",&w); getchar(); switch(w) case 1:Exit();flag=1; case 2:menu();choose();flag=1;break; case 3:choosec();flag=1;break; default:printf