1、(一)、课程设计题目学生成绩管理系统设计与实现(二)、课程设计目1、 进一步掌握和运用C语言进行程设计能力;2、 进一步理解和运用构造化程设计思想和办法;3、 初步掌握开发一种小型实用系统基本办法;4、 学会调试一种较长程序基本办法;5、 学会运用流程图或N-S图表达算法;6、 掌握书写程设计开发文档能力(书写课程设计报告);(三)、设计内容1、每一条记录涉及一种学生学号、姓名、3门课成绩、平均成绩。2、输入功能:可以一次完毕若干条记录输入。3、显示功能:完毕所有学生记录显示。4、查找功能:完毕按姓名查找学生记录,并显示。5、排序功能:按学生平均成绩进行排序。6、插入功能:按平均成绩高低插入一
2、条学生记录。7、将学生记录存在文献score中。8、应提供一种界面来调用各个功能,调用界面和各个功能操作界面应尽量清晰美观!(四)、设计规定1、 用C语言实现系统;2、 运用构造体数组实现学生成绩数据构造设计;3、 系统具备增长,查询,插入,排序等基本功能;4、 系统各个功能模块规定用函数形式实现;5、 完毕设计任务并书写课程设计报告。6、 将学生成绩信息存在文献中。(五)、提交材料1、课程设计报告1)课程设计题目、内容、规定。2)总体设计(包括几大功能模块)。3)详细设计(各功能模块详细实现算法流程图)4)数据构造设计描述,各模块(函数)功能简介,参数阐明等。5)调试分析(包括各模块测试用例
3、,及测试成果。)6)总结(课程设计完毕了哪些功能,尚有哪些地方需要改进,及通过一周课程设计有何收获,调试程序体会等)二:本程序共有八个功能与数据构造阐明:学生记录输入(一次性输入,输入个数由顾客决定,最大可容纳80记录,最大数可以在源程序中改) 。追加学生记录。(追加后不能超过最在值80)。修改记录。删除记录。浏览所有记录。查找记录(按姓名查找)。插入记录。对记录进行排序(按平均成绩排序)。退出。10数据构造是这样:学号只能由数字字符构成,最大可以个字符;姓名由字符构成,最大可以个字符;三门科目分数都是整型;平均成绩是实型。11程序中定义了学生容量为个。容量可以在源程序宏定义中改,本程序宏定义
4、#define N 50#include#include/*控制学生记录容量*/#define N 50struct studentchar num11;char name20;int score3;float ave;stuN;/*全新保存函数*/save(int n) /*保存函数,保存n个记录*/FILE *fp;int i;if(fp=fopen(score.txt,wb)=NULL) /*以输出打开方式,在此前记录被覆盖*/ printf(nCannot open filen); return NULL; for(i=0;in;i+) if(stui.ave!=0) /*stui.a
5、ve=0表此记录已删除*/ if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(file write errorn);fclose(fp);/*加载记录或可以计算记录个数函数*/load() /*加载记录或可以计算记录个数函数*/FILE *fp;int i;if(fp=fopen(score.txt,rb)=NULL) /*以输出打开方式,在此前记录被覆盖*/ printf(nCannot open filen); return NULL; for(i=0;!feof(fp);i+) fread(&stui,sizeof(struc
6、t student),1,fp);fclose(fp);return(i-1); /*返回记录个数*/*一种任务结束时选取浏览还是返回函数*/void printf_back() /*一种任务结束时选取浏览还是返回*/int k,w;printf(nntSuccessful. _nn);printf(What do you want to do?nnt1).Browse all nowt2).Back: bb);scanf(%d,&w);if(w=1) browse();else menu();/*显示数据构造项目函数*/void printf_face() /*显示数据构造项目*/print
7、f(ntNO. name score1 score2 score3 averagen);average(int i) /*对第i个记录分数求平均值*/int j,sum;for(sum=0,j=0;j3;j+) sum+=stui.scorej;stui.ave=sum/3.0;/*学号输入函数*/no_input(int i,int n) /*i表达第i个学生信息,n表达比较到第n个学生*/int j,k,w1; do w1=0; printf(NO.:); scanf(%s,stui.num); for(j=0;stui.numj!=0;j+) /*学号输入函数,作了严格规定*/ if(s
8、tui.numj9) /*判断学号与否为数字*/ puts(Input error!Only be made up of (0-9).Please reinput!n); w1=1;break; if(w1!=1) for(k=0;kn;k+) /*比较到第n个学生*/ /*排除第i个学生记录即你要修改*/ if(k!=i&strcmp(stuk.num,stui.num)=0) /*判断学号与否有雷同*/ puts(This record is exist. please reinput!n); w1=1;break; while(w1=1);/*对分数输入*/score_input(int
9、 i)int j;for(j=0;j3;j+) printf(score %d:,j+1); scanf(%d,&stui.scorej); /*输入一种记录函数*/input(int i) /*输入一种记录函数*/no_input(i,i); /*调用学号输入函数*/printf(name:);scanf(%s,stui.name);score_input(i); /*调用分数输入函数*/average(i); /*调用求平均值函数*/*显示一种记录函数*/printf_one(int i) /*显示一种记录函数*/int j;printf(%11s %-17s,stui.num,stui.
10、name);for(j=0;jnn 1).NO. 2.name 3).score1 4).score2n 5).score3 6).all score 7).all data 8).cancel and back); printf(Which you needed?: bb); scanf(%d,&c); if(c8|c8|c2&c7) average(i); /*调用求平均值函数*/ puts(nNow:n); printf_face(); /*调用显示数据构造项目函数*/ printf_one(i); /*修改后记录让顾客确认*/ printf(nAre you sure?nnt1).Su
11、re 2).No and remodify 3).Back without save in this time bb); /*与否拟定*/ scanf(%d,&w1); /*选取2则表达这次修改错误要重新修改*/ while(w1=2); return(w1); /*返回控制值*/*输入模块*/enter() /*输入模块*/int i,n;printf(How many students(0-%d)?:,N);scanf(%d,&n); /*要输入记录个数*/printf(nEnter data nownn);for(i=0;in;i+) printf(nInput %dth student
12、 record.n,i+1); input(i); /*调用输入函数*/ if(i!=0) save(n); /*调用保存函数*/printf_back(); /*一种任务结束时让顾客选取是浏览还是返回*/*追加模块*/add() /*追加模块*/int i,n,m,k;FILE *fp;n=load();printf(How many students are you want to add(0-%d)?:,N-n);scanf(%d,&m); /*输入要追加记录个数*/k=m+n;for(i=n;ik;i+) printf(nInput %dth student record.n,i-n+
13、1); input(i); /*调用输入函数*/ if(fp=fopen(score.txt,ab)=NULL) /*以ab方式打开文献,追加保存*/ printf(cannot open filen); return; for(i=n;ik;i+) /*输入出到文献*/ if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(file write errorn);fclose(fp);printf_back(); /*一种任务结束时选取浏览还是返回*/*修改模块*/modify() /*修改模块*/struct student s;FI
14、LE *fp;int i,n,k,w0=1,w1,w2=0;n=load();doclrscr(); k=-1; /*给顾客看所有记录以便确认要修改记录*/ puts_(); /*显示-*/ printf_face(); /*调用显示数据构造项目函数*/ for(i=0;in;i+) if(i!=0)&(i%10=0) /*目是分屏显示*/ printf(nnRemember NO.which needed modify. pass any key to contiune . . .); getch(); puts(nn); printf_one(i); /*调用显示一种记录函数*/ puts
15、_(); do printf(nnEnter NO. that you want to modify! NO.:); scanf(%s,s.num); /*输入要修改数据学号*/ for(i=0;in;i+) /*查找要修改数据*/ if(strcmp(s.num,stui.num)=0) k=i; /*找到要修改记录*/ s=stui; /*把stui(即当次修改学生记录)备份给s,以便顾客反悔时恢复名誉*/ if(k=-1) printf(nnNO exist!please again); while(k=-1); /*当K=-1表达没有找到*/ printf_face(); /*调用显示
16、数据构造项目函数*/ printf_one(k); /*调用显示一种记录函数*/ w1=modify_data(k,n); /*修改学生记录并且返回保存控制值w1,w1=1则表达顾客已确认修改*/ if(w1=1) /*W1等于1时则表达顾客拟定这次修改*/ printf(nSuccessful _.nnAre you modify another?nnt1).Yes 2).Back with savet bb); scanf(%d,&w0); w2=1; /*来控制保存,使w2=1是标记已有过修改*/ else w0=0; if(w2=1) stuk=s; /*走到这里是由于顾客没有确认这次
17、修改(在调用修改函数w1=modify_data(k,n);时没有确认). 使W0=0,为了让终结循环, stuk=s,则把备份s恢复给stuk(即当次修改),这样好处是保证在此之前修改过成功保存,而本次(顾客没有确认)不修改*/ if(w0!=1&w2=1) /*W0不等于1则表达正常返回,w2=1表达在此之前有过修改,这时就保存顾客已确认修改并返回*/ save(n); /*w2不等于1表达在本次之前没有修改过(即:第一次),而又反悔这次修改,则不保存返回*/ while(w0=1);menu();/*删除模块*/del() /*删除模块*/struct student s;FILE *f
18、p;int i,j,n,k,c,w0=1;n=load();doclrscr(); k=-1; /*给顾客看所有记录以便确认要删除记录*/ puts_(); printf_face(); /*调用显示数据构造项目函数*/ for(i=0;in;i+) if(stui.ave!=0) if(i!=0)&(i%10=0) /*目是分屏显示,每10个一屏*/ printf(nnRemember NO. which needed del. pass any key to contiune . . .); getch(); puts(nn); printf_one(i); /*调用显示一种记录函数*/
19、puts_(); do printf(nnEnter NO. that you want to Delete! NO.:); scanf(%s,s.num); /*输入要修改数据学号*/ for(i=0;in;i+) /*查找要修改数据*/ if(strcmp(s.num,stui.num)=0) k=i; /*找到要修改记录下标赋给K*/ s=stui; if(k=-1) printf(nnNO exist!please again);/*K=-1,表达没有找到相似之*/ while(k=-1); puts(n); printf_face(); /*调用显示数据构造项目函数*/ printf
20、_one(k); /*调用显示一种记录函数*/ printf(nAre you sure?nt1).sure 2).no and del another 3).back without save all bb); scanf(%d,&c); if(c=1) stuk.ave=0; /*stuk.ave=0用来标记这个记录是要删除.保存时则不保存stuk.ave=0数据*/ printf(nnSuccessful _.nnAre you again?nt1).again 2).back to menut bb); /*问与否继续*/ scanf(%d,&w0); if(c=3) w0=0; /*
21、w0=0不删除直接返回*/ if(w0!=1&c!=3) /*只有当确认删除后返回才保存,不删除直接返回则不保存,且不保存在此之前删除过记录*/ save(n); while(w0=1);menu(); /*返回主介面*/*浏览(所有)模块*/browse() /*浏览(所有)模块*/int i,j,n;n=load(); /*加载记录*/clrscr();puts_();printf_face(); /*调用显示数据构造项目函数*/for(i=0;in;i+) if(i!=0)&(i%10=0) /*目是分屏显示*/ printf(nnPass any key to contiune . .
22、 .); getch(); puts(nn); printf_one(i); /*调用显示一种记录函数*/ puts_();printf(tThere are %d record.n,n);printf(nPass any key to back . . .);getch(); /*按任意健*/menu();/*查找模块*/search() /*查找模块*/int i,n,k,w1=1,w2,w3,w4;struct student s;n=load();do do k=-1; printf(nnEnter name that you want to search! name:); scanf
23、(%s,s.name); /*输入要修改数据学号*/ printf_face(); /*调用显示数据构造项目函数*/ for(i=0;in;i+) /*查找要修改数据*/ if(strcmp(s.name,stui.name)=0) k=i; /*找到要修改记录*/ printf_one(k);break; /*调用显示一种记录函数*/ if(k=-1) printf(nnNO exist!please); printf(nnAre you again?nt1).again 2).NO and back bb); scanf(%d,&w1); while(k=-1&w1=1); /*如果w1不
24、等于1则直接返回*/ w4=0;w3=0; if(k!=-1) /*k不等于-1表达找到,如果找到则选取操作*/ printf(nnWhat do you want to do?nt1).Search another 2).Modify 3).Delete 4).Back menu bb); scanf(%d,&w2); switch(w2) case 2:w3=modify_data(k,n);break;/*调用修改数据函数*/ case 3:printf(nAre you sure?nt1).Sure 2).No and back bb); scanf(%d,&w4); if(w4=1)
25、 stuk.ave=0; /*表达删除*/ break; if(w3=1|w4=1) save(n); printf(nnSuccessful. _.); printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d,&w2); while(w2=1);menu();/*插入模块*/insert() /*插入模块*/int i,j,n,c;struct student s;n=load();puts(nInput one data.n);do input(n); /*输入到第n个记录,即插入到最后*/ pri
26、ntf_face(); printf_one(n); printf(nnAre you sure?nnt1).Suret2).cancel snd againt3).Back withuot save bb); scanf(%d,&c); if(c=1) for(j=0;jj;i-) if(stui.avestui-1.ave) s=stui-1;stui-1=stui;stui=s; save(n+1); printf_back(); else if(c!=2) menu(); while(c=2);/*排序模块(按平均成绩)*/order() /*排序模块(按平均成绩)*/int i,j,
27、k,n;struct student s;n=load();for(i=0;in-1;i+) /*选取法排序*/ k=i; for(j=i+1;jstuk.ave) k=j; s=stui;stui=stuk;stuk=s; save(n);puts(nn);printf_back();/*主界面*/menu() /*主界面*/int n,w1;do clrscr(); /*清屏*/ puts(nttt Copy right by CHEN LIN BIN!); puts(tttt 24/06/!nn); puts(tt*MENU*nn); puts(tttt1.Enter new data)
28、; puts(tttt2.Addition data); puts(tttt3.Modify data); puts(tttt4.Delete data); puts(tttt5.Browse all); puts(tttt6.Search by name); puts(tttt7.Insert data); puts(tttt8.Order by average); puts(tttt9.Exit); puts(nntt*n); printf(Choice your number(1-9): bb); scanf(%d,&n); if(n9) /*对选取数字作判断*/ w1=1;getcha
29、r(); else w1=0; while(w1=1);/*选取功能*/switch(n) case 1:enter();break; /*输入模块*/ case 2:add();break; /*追加模块*/ case 3:modify();break; /*修改模块*/ case 4:del();break; /*删除模块*/ case 5:browse();break; /*浏览模块*/ case 6:search();break; /*查找模块*/ case 7:insert();break; /*插入模块*/ case 8:order();break; /*排序模块*/ case 9:exit(0); /*退出*/ /*主函数*/main()menu();点击此处下载报告