c语言课程设计网_学生成绩管理系统_第1页
c语言课程设计网_学生成绩管理系统_第2页
c语言课程设计网_学生成绩管理系统_第3页
c语言课程设计网_学生成绩管理系统_第4页
c语言课程设计网_学生成绩管理系统_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

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)数据结构设计描述,各模块(函数)的功能介绍

3、,参数说明等。5)调试分析(包含各模块的测试用例,及测试结果。)6)总结(课程设计完成了哪些功能,还有哪些地方需要改进,及通过一周的课程设计有何收获,调试程序的体会等):本程序共有八个功能与数据结构说明:1 .学生记录的输入(一次性输入,输入个数由用户决定,最大可容纳80记录 ,最大数可以在源程序中改) 。2 .追加学生记录。(追加后不能超过最在值80)。3 .修改记录。4 .删除记录。5 .浏览全部记录。6 .查找记录(按姓名查找)。7 .插入记录。8 .对记录进行排序(按平均成绩排序)。9 .退出。10 .数据结构是这样的:学号只能由数字字符组成,最大可以1 1个字符; 姓名由字符组成,最

4、大可以2 0个字符;三门科目分数都是整型;平均 成绩是实型。11 .程序中定义了学生的容量为5 0个。容量可以在源程序宏定义中改,本 程序宏定义#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) /* 以输出打开方式,在此前的记录被覆盖 */p

5、rintf(ncannot open filen);return null;for(i=0;in;i+)if(stui.ave!=0) /*stui.ave=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(

6、ncannot open filen);return null;for(i=0;!feof(fp);i+)fread(&stui,sizeof(struct student),1,fp);fclose(fp);return(i-1);/* 返回记录个数*/* 一个任务结束时的选择浏览还是返回的函数*/void printf_back() /* 一个任务结束时的选择浏览还是返回 */int k,w;printf(nntsuccessful. a_ann);printf(what do you want to do? nnt1).browse allnowt2).back: bb);scanf(%

7、d,&w);if(w=1) browse();else menu();/* 显示数据结构项目函数*/void printf_face() /* 显示数据结构项目 */printf(ntno. namescore1 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;

8、dow1=0;printf(no.:);scanf(%s,stui.num);for(j=0;stui.numj!=0;j+)/* 学号输入函数,作了严格规定*/if(stui.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) /* 判断学号是否有雷同编辑版 word*

9、/puts(this record is exist. please reinput!n);w1=1;break;while(w1=1);/* 对分数输入*/score_input(int 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,);score_input(i);/* 调用分数输入函数*/average(i);

10、/* 调用求平均值函数*/* 显示一个记录的函数*/printf_one(int i)/* 显示一个记录的函数*/int j;printf(%11s %-17s,stui.num,);for(j=0;jnn1).no. 2.name 3).score1 4).score2n 5).score3 6).allscore 7).all data 8).cancel and back);printf(which you needed?: bb);scanf(%d,&c);编辑版 wordif(c8|c8|c2&c7)average(i);/* 调用求平均值函数*/puts(nnow

11、:n);printf_face();/* 调用显示数据结构项目函数*/printf_one(i);/* 修改后的记录让用户确认 */printf(nare you sure?nnt1).sure 2).no and remodify 3).backwithout save in this time bb);/* 是否确定 */scanf(%d,&w1); /* 选择 2则表示这次修改错误要重新修改 */while(w1=2);return(w1);/* 返回控制值*/*输入模块 */编辑版 wordenter()/* 输入模块 */int i,n;printf(how many student

12、s(0-%d)?:,n);scanf(%d,&n);/* 要输入的记录个数*/printf(nenter data nownn);for(i=0;in;i+)printf(ninput %dth student 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 a

13、dd(0-%d)?:,n-n);scanf(%d,&m);/* 输入要追加的记录个数*/k=m+n;for(i=n;ik;i+)printf(ninput %dth student record.n,i-n+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 wr

14、ite errorn);fclose(fp);printf_back();/* 一个任务结束时的选择浏览还是返回 */*修改模块 */modify()/* 修改模块 */ struct student s;file *fp;int i,n,k,w0=1,w1,w2=0;n=load();do clrscr();k=-1;/* 给用户看全部记录以便确认要修改的记录 */puts_();/* 显示 */printf_face();/* 调用显示数据结构项目函数*/for(i=0;in;i+)if(i!=0)&(i%10=0)/* 目的是分屏显示*/printf(nnremember no.whic

15、h needed modify. pass any key to contiune . . .);getch();puts(nn);printf_one(i);/* 调用显示一个记录的函数*/puts_();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,以便用户反悔时

16、恢复名誉*/if(k=-1) printf(nnno exist! please again);while(k=-1);/* 当 k=-1 表示没有找到 */printf_face(); /* 调用显示数据结构项目函数*/printf_one(k);/* 调用显示一个记录的函数*/w1=modify_data(k,n); /* 修改学生记录并且返回保存控制值w1,w1=1 则表示用户已确认修改 */if(w1=1)/*w1 等于 1 时则表示用户确定这次修改*/printf(nsuccessful a_a.nnare you modifyanother?nnt1).yes 2).back wi

17、th savet bb);scanf(%d,&w0);w2=1;/* 来控制保存,使 w2=1 是标记已有过修改*/elsew0=0;if(w2=1)stuk=s;/* 走到这里是由于用户没有确认这次修改(在调用修改函数w1=modify_data(k,n)时没有确认).使w0=0,为了让终止循环,stuk=s,则把备份的s恢复给stuk(即当次彳改的),这样的好处是确保在此之前修改过的成功保存,而本次(用户没有确认的)不修改 */if(w0!=1&w2=1)/*w0 不等于 1则表示正常返回 ,w2=1 表示在此之前有过修改,这时就保存用户已确认修改的并返回 */save(n); /*w2

18、不等于 1 表示在此次之前没有修改过(即:第一次),而又反悔这次修改,则不保存返回*/while(w0=1);menu();/* 删除模块 */del()/* 删除模块 */struct student s;file *fp;int i,j,n,k,c,w0=1;n=load();do clrscr();k=-1;/* 给用户看全部记录以便确认要删除的记录*/puts_();printf_face();/* 调用显示数据结构项目函数 */for(i=0;in;i+)if(stui.ave!=0)if(i!=0)&(i%10=0)/* 目的是分屏显示,每 10个一屏 */printf(nnrem

19、ember no. which needed del. pass any key to contiune . . .);getch();puts(nn);printf_one(i);/* 调用显示一个记录的函数*/puts_();doprintf(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

20、(nnno exist! please again); /*k=-1, 表示没有找到相同之的 */while(k=-1);puts(n);printf_face();/* 调用显示数据结构项目函数 */printf_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 的数据 */prin

21、tf(nnsuccessful a_a.nnare you again?nt1).again2).back to menut bb);/* 问是否继续 */scanf(%d,&w0);if(c=3) w0=0;/*w0=0 不删除直接返回 */if(w0!=1&c!=3)/* 只有当确认删除后返回才保存,不删除直接返回则不保存,且不保存在此之前删除过的记录 */save(n);while(w0=1);menu();/* 返回主介面*/*浏览(全部)模块*/browse()/* 浏览(全部)模块 */int i,j,n;n=load();/* 加载记录 */clrscr();puts_();pr

22、intf_face();/* 调用显示数据结构项目函数*/for(i=0;in;i+)if(i!=0)&(i%10=0)/* 目的是分屏显示*/printf(nnpass any key to contiune . . .);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,w

23、1=1,w2,w3,w4;struct student s;n=load();dodok=-1;printf(nnenter name that you want to search! name:);scanf(%s,); /* 输入要修改的数据的学号*/printf_face();/* 调用显示数据结构项目函数*/for(i=0;in;i+)/* 查找要修改的数据*/if(strcmp(,)=0)k=i;/* 找到要修改的记录*/printf_one(k);break;/* 调用显示一个记录的函数*/if(k=-1)printf(nnno exist

24、! please);printf(nnare you again?nt1).again 2).no and back bb);scanf(%d,&w1);while(k=-1&w1=1);/* 如果 w1 不等于 1 则直接返回 */w4=0;w3=0;if(k!=-1)/*k 不等于 -1表示找到 ,如果找到则选择操作*/printf(nnwhat do you want to do?nt1).searchanother 2).modify 3).delete 4).back menu bb);scanf(%d,&w2);switch(w2)case 2:w3=modify_data(k,n

25、);break; /调用修改数据函数*/case 3:printf(nare you sure?nt1).sure 2).no andback bb);scanf(%d,&w4);if(w4=1)stuk.ave=0; /* 表示删除 */break;if(w3=1|w4=1)save(n);printf(nnsuccessful. a_a.);printf(nnwhat do you want to do?nt1).searchanother 2).back bb);scanf(%d,&w2);while(w2=1);menu();/*插入模块*/insert()/* 插入模块 */ int

26、 i,j,n,c;struct student s;n=load();puts(ninput one data.n);doinput(n); /* 输入到第 n 个记录 ,即插入到最后 */printf_face();printf_one(n);printf(nnare you sure?nnt1).suret2).cancel snd againt3).backwithuot 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,k,n;struct student s;n=load();for(i=0;in-1;i+)/* 选择法排序*/k=i;for(j=i+1;jstuk.ave) k=j;

温馨提示

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

评论

0/150

提交评论