2022年c语言_学生成绩管理.docx

上传人:Che****ry 文档编号:12785373 上传时间:2022-04-26 格式:DOCX 页数:29 大小:78.65KB
返回 下载 相关 举报
2022年c语言_学生成绩管理.docx_第1页
第1页 / 共29页
2022年c语言_学生成绩管理.docx_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《2022年c语言_学生成绩管理.docx》由会员分享,可在线阅读,更多相关《2022年c语言_学生成绩管理.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品学习资源c 语言课程设计 _同学成果治理系统 3课程设计的内容 : 1 、每一条记录包括一个同学的学号、姓名、3 门课成果、平均成果;2、输入功能:可以一次完成如干条记录的输入;3、显示功能:完成全部同学记录的显示;4、查找功能:完成按姓名查找同学记录,并显示;5、排序功能:按同学平均成果进行排序;6、插入功能:按平均成果高低插入一条同学记录;7、将同学记录存在文件 score 中;8、应供应一个界面来调用各个功能 , 调用界面和各个功能的操作界面应尽可能清晰美观 .课程设计的要求 :1、用 C语言实现系统;2、3、利用结构体数组实现同学成果的数据结构设计;系统具有增加,查询,插入,排序等

2、基本功能;4、5、系统的各个功能模块要求用函数的形式实现;完成设计任务并书写课程设计报告;6、将同学成果信息存在文件中;#include /*暂停函数 */#include /*I/O函数*/#include /* 其它说明 */#include /* 字符串操作函数 */#defineM 1000int N=0 ;/* 记录已经存在的记录条数*/ int H=0 ;struct student/* 定义数据结构 */ char number8 ;char name16 ;float score3 ;float average;欢迎下载精品学习资源studM,temp;/*以下是函数声明 */

3、void loadvoid;/* 读入记录 */void inorderstruct student stud;/* 排列记录 */ void insertstruct student stud;/* 插入记录 */ void savestruct student stud;/* 储存记录 */ void printstruct student stud;/* 显示记录 */ void searchstruct student stud;/* 查找记录 */ void enterstruct student stud;/* 输入记录 */void delvoid;/*删除记录 */void c

4、hangevoid;/* 转变记录 */void quitvoid;/* 退出系统 */int flagstruct student stud;/* 返回值为 0 或 1*/int menuvoid;/*菜单 */main/* 主函数 */ /*以下 printf语句为打印欢迎界面语句 */ printfnnnnnnnttttttttt.n;printfwweeeeeeelcccccccooooommmmmmmmmeeeeeee.n;printfwwwene;lcoommmee.mprintf mprintfmw eeeeeeew ww www.e eeeeen;lcoowelcoommme.

5、n;printfwweeeeeeellllllcccccccooooommmeeeeeeen;欢迎下载精品学习资源printftttttttttb0;sleep1;printfnnnnntttttttt- pan;sleep1;load;/* 调用读入记录函数 */for;/* 无限循环 */ switchmenu/* 调用主菜单函数,返回值整数作开关语句的条件*/ case 1: enterstud;break ;/* 输入记录 */case 2: printstud;break ;/* 显示要看的一页的记录 */ case 3: searchstud; break ;/* 查找记录 */c

6、ase 4: inorderstud;break ;/* 排序 */ case 5: insertstud; break ;/* 插入记录 */case 6: savestud;break ;/* 储存文件 */ case 7: change;break ;/* 转变记录 */case 8: del;break ;/* 删除记录 */case 9: quit;/*如菜单返回值为 9 程序终止 */* 输入数据函数 */void enterstruct student stud int n=0,i,j,k,c;char b4; float sum;printfHow many students

7、record do you want to enter. n=.bbb;scanf%d,&n;/* 输入一次要输入记录数 */ fori=0;in ; sum=0 ;/* 统记三科总分 */ printfInput the %dth students number ,N+1;欢迎下载精品学习资源scanf%s,studN.number;/* 输入学号 */*以下 if-else语句判定所输记录是否存在 */ifflagstud/* 调用返回值为0 或 1 函数, 判定所输入的学号是否已经存在, 存在就执行 if语句 */printfThe record has exist.n;printfIn

8、put again.;getch;else printfInput the %dth students name ,N+1;scanf%s,studN.name;/* 输入姓名 */ forj=0;j3 ;j+ doprintfInput the %dth students score%d,N+1,j+1;/*打印提示 */scanf%s,b;/* 输入分数 */ studN.scorej=atofb;/* 将字符串强制转换成实型, 得值赋给studN.scorej*/ifstudN.scorej100/* 判定分数是否在 0-100 之间 */k=1 ;/* 分数不在 0-100 之间时 k

9、 值为 1*/printfError input .n;printfInput again .n;/* 打印出错提示 */else欢迎下载精品学习资源k=0 ;/* 分数在 0-100之间时 k 值为 0*/whilek;/* 由 k 值准备是否要循环*/sum+=studN.scorej;/* 统记三科总分 */studN.average=sum/3.0;/* 平均分 */ printfnEnter success .n;printfnPress any key to return.getch;N+;i+ ;/* 记录数加 1*/H=1 ;clrscr;/*清屏 */clrscr;/*清屏

10、*/*显示记录函数 */void printstruct student stud int i=0,k,max,maxb,n,flag=y;char m6;/*以下 if-else为判定文件中是否有记录 */ ifN=0printfThere are not record.n;printfPress any key to return.;/* 当 N为 0 时(即没有记录)打印没有记录提示 */getch;欢迎下载精品学习资源else whileflag.=n maxb=0 ;i=0 ;/*以下分页输出记录 */ do ifN%10.=0 printfnttThere are %d pages

11、 in all.,N/10+1;printfnttWhich page do you want to see. ;else printfnttThere are %d pages in all.,N/11+1;printfnttWhich page do you want to see. ;scanf%s,m;/* 输入要显示的页数 */ k=atoim;/* 强制把 m转换成整形 */ ifk k=10*k-1;/* 此时 k 变为第 k 页的第一条信息的序号 */ ifk=N/* 判定页数是否存在 */ printfnttThe page is not exist .;printfnttI

12、nput again .n;elsek=N+1;whilek=N;/*假如页数不存在进入do-whie 循环 */*以下 if-else语句是判定第 k 页是否有 10 条语句 */ ifk+10Nmax=N;/* 当第 k 页不够 10 条记录时 */else欢迎下载精品学习资源max=k+10 ;/*当第 k 页够 10 条记录时 */clrscr;/*以下fori=kfor语句为取得第;imaxb maxb=n ;i=k ;/*以下 if-else是为了保证表美观 */*假如最大字符长度不大于8 就按 if输出,就按名字方格长度为8 输出 */ ifmaxb8 whileimax /*以

13、下为输出记录 */ ifi%10=0 printfntttt Page:%d,k+10/10;printfnt|-|-|-|-|-|-|-|;printfnt|NO:| number|name|score1|score2|score3|average |n;printft|-|-|-|-|-|-|-|n;printft| %-2d|%-6s|%-8s|%-5.1f |%-5.1f |%-5.1f | %- 7.2f|n,i+1,studi.number,studi.name,studi.score0,studi.score1,studi.score2,studi.average;i+ ;欢迎下

14、载精品学习资源printft|-|-|-|-|-|-|-|n;/*假如最大字符长度大于8 就按 else输出,见就按名字格长度为16 输出 */else whileimax /*以下为输出记录 */ ifi%10=0 printfntttt Page:%d,k+10/10;printfntbb|-|-|-|-|-|-|-|;printfntbb|NO:| number|name|score1|score2|score3|average |n;printftbb|-|-|-|-|-|-|-|n;printftbb| %-2d|%-6s|%-16s|%-5.1f |%-5.1f |%-5.1f |

15、 %- 7.2f|n,i+1,studi.number,studi.name,studi.score0,studi.score1,studi.score2,studi.average;i+ ;printftbb|-|-|-|-|-|-|-|n;printftttbbDo you want to go on. y or n.bbbbbbb;flag=getch;/*猎取一个字符判定是否要连续显示*/欢迎下载精品学习资源clrscr;/*清屏 */* 查找函数 */void searchstruct student stud int i=0,n,j;char number8,flag=y;clrs

16、cr;/*清屏 */whileflag.=n i=0;printfnttttbbbbThe number-name list:n;printf;printf;/*以下 while语言句为输出已有的记录的学号与名字whileiN*/ /*以下保证输出的学号和名字总长度不长于14*/ifstrlenstudi.number4 n=4 ;elsen=strlenstudi.number;ifn+strlenstudi.name6 printf%-4s-,studi.number;printf%st,studi.name;i+ ;else printf%-4s-,studi.number;printf

17、%stt,studi.name;欢迎下载精品学习资源i+ ;else/*总长度长于 14时执行 else语句 */ printf%-4s-,studi.number;ifstrlenstudi.number4j=12-strlenstudi.number;elsej=12-4;forn=0;nj ;n+printf%c,studi.namen;/* 以上输出总长度为 13*/ printf. ;/* 长出部分用 .省略表示*/i+ ;printfn-;printf-;printfnttbInput the students number you want to search:;scanf%s,

18、number;/*输入要查找的记录的学号 */ i=0 ;whileiN ifstrcmpstudi.number,number=0/* 查找记录 */*输出找到的记录 */*当名字长度小于8 时执行 if语句 */ ifstrlenstudi.name8 printfn;printft|-|-|-|-|-|-欢迎下载精品学习资源|-|n;printft|NO:| number|name|score1|score2|score3|average |n;printft|-|-|-|-|-|-|-|n;printft| %-2d|%-6s|%-8s|%-5.1f |%-5.1f |%-5.1f |

19、 %-7.2f|n,i+1,studi.number,studi.name,studi.score0,studi.score1,studi.score2,studi.average;printft|-|-|-|-|-|-|-|n;/*当名字长度大于8 时执行 else 语句 */ else printfn;printft|-|-|-|-|-|-|n;printft|NO:| number|name|score1|score2|score3|average |n;printft|-|-|-|-|-|-|n;printft| %-2d|%-6s|%-16s|%-5.1f |%-5.1f |%-5.

20、1f | %-7.2f|n,i+1,studi.number,studi.name,studi.score0,studi.score1,studi.score2,studi.average;printft|-|-|-|-|-|n;欢迎下载精品学习资源flag=0;i=N ;/* 找到并打印后i=N 退出 while 循环 */i+ ;/* 找不到时 i 自加 */ifflag/*当找到记录时 flag为 0,否就为 1*/ printfntttYour input is errorn;printfntttDo you want to go on. y or n.bbbbbbb;flag=get

21、ch;/*猎取一个字符判定是否要连续查找*/ clrscr;/*清屏 */* 排序函数 */void inorderstruct student stud int i,j,k;fori=0;iN-1 ;i+ k=i;/*以下 for语句为选择法排序 */ forj=i+1;jstudk.average k=j ;ifk.=itemp=studk;studk=studi;studi=temp;H=1 ;欢迎下载精品学习资源printfnnnnnnnnnnn;printf ;printf* Has been inoder. *n;/* 排序成功提示 */ printf ;sleep2;/*调用暂停

22、函数 暂停 2 秒钟 */clrscr;/*清屏 */* 插入记录函数 */void insertstruct student stud int i,j,k;float sum;char flag=y,b4;clrscr;/*清屏 */whileflag=y sum=0 ;k=0 ;printfInput the students number you want to insert:;scanf%s,studN.number;/* 输入要插入记录的学号 */ fori=0;iN ;i+ifstrcmpstudi.number,studN.number=0/* 查找要插入记录是否存在*/k=1

23、;ifk/* 判定要插入记录是否存在 */printfThe record has exist.n;else欢迎下载精品学习资源 printfInput the students name you want to insert:;scanf%s,studN.name;/* 输入要插入记录的名字 */ forj=0;j3 ;j+ do printfInput the students score%d:,j+1;scanf%s,b;/* 输入分数 */ studN.scorej=atofb;ifstudN.scorej100/* 判定分数是否在 0-100 之间 */ k=1;printfErro

24、r input .n;printfInput again .n;elsek=0 ;whilek;sum=sum+studN.scorej;/* 三科总分 */studN.average=sum/3.0;/* 平均分 */* 以下 for语句为插入 */ forj=0;jN ;j+ifstudj.averagej ; studi=studi-1;i-;studj=temp;j=N ;欢迎下载精品学习资源 N+;H=1 ;/* 记录数加 1*/printfnInsert success .nn;printfIf you wantto go on press:yn;printfElse press

25、any key to menu:;flag=getch;/* 猎取一个字符判定是否要连续插入*/ clrscr;/* 清屏 */* 储存记录函数 */void savestruct student stud FILE *fp;int i=0;printfnnnnnnnnnnn;printf;printf* Saving file.*n;/* 储存提示 */printf;sleep1;/*调用暂停函数 暂停 1 秒钟 */ iffp=fopenscore,wb=NULL/* 以 wb形式打开文件 score*/printfCan not open the filen;sleep1;return;

26、fori=0;iN ;i+iffwrite&studi,sizeofstruct student,1,fp.=1/* 把记录储存到 score 文件中 */欢迎下载精品学习资源printfFile write errorn;return;fclosefp;/* 关闭文件 */ clrscr;/*清屏 */printfnnnnnnnnnnn;printf;printf* Saving success . *n;/*储存成功提示*/printf H=0 ;sleep2clrscr;/*/*调用暂停函数清屏 */暂停1.5秒钟 */* 转变记录函数 */ void changevoid int i,

27、a,k,n,h,j;float sum;char m10,flag=y,b8;whileflag=y sum=0 ;i=0 ;k=0 ;printfnttttbbbbThe number-name list:n;printf;printf;/*以下 while语句为输出文件中已有记录的学号与人名whileiN*/ ifstrlenstudi.number4n=4 ;欢迎下载精品学习资源elsen=strlenstudi.number;ifn+strlenstudi.name6 printf%-4s-,studi.number;printf%st,studi.name;i+ ;else prin

28、tf%-4s-,studi.number;printf%stt,studi.name;i+ ;else printf%-4s-,studi.number;ifstrlenstudi.number4j=12-strlenstudi.number;elsej=12-4;forn=0;nj ;n+ printf%c,studi.namen;printf. ;i+ ;printfn-;printf-;printfnttInput the students number you want to change.;scanf%s,m;/* 输入要转变记录的人名 */欢迎下载精品学习资源printfn;for

29、i=0;strcmpstudi.number,m.=0&iN;i+ ;/* 查找要转变记录的人名*/*a为判定是否找到 */ ifiNa=1 ;h=i ;elsea=0 ;/*以下 if语句为找到要转变的并输入新记录 */ ifa printfInput new number:;scanf%s,b ; /* 输入学号 */ fori=0 ;ih&iN ;i+ifstrcmpstudi.number,b=0/*查找要转变记录是否存在 */ k=1 ;ifk/* 判定要转变记录是否存在 */printfThe record has exist.n;getch;else strcpystudh.nu

30、mber,b;/*复制学号 */printfInput new name:;scanf%s,studh.name;/*输入姓名 */fork=0;k3;k+欢迎下载精品学习资源 do printfInput new score%d,k+1;scanf%s,b;/* 输入分数 */studh.scorek=atofb;/*将字符串强制转换成整形 */* 以下语句判定输入是否在0-100 之间 */ ifstudi.scorek100n=1 ;printfError input .n;printfInput again .n;elsen=0 ;whilen;sum=sum+studh.scorek

31、; /* 统记三科总分*/studi.average=sum/3.0;/* 平均分 */printfnttt * Change success . *nn; /* 转变成功提示*/H=1 ;elseprintfnttttError input.nn;printfttt If you wantto go on press:y;printfntttElse press any key to menu:;flag=getch;/*猎取一个字符判定是否要连续转变*/ clrscr;/*清屏 */欢迎下载精品学习资源/* 删除记录函数 */ void delvoid int i,a,j,k,n;char m10,flag=y;whileflag=y i=0;printfttttbbbbThe number-name list:n;printfprintf;/*以下

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁