用C语言编学生成绩管理系统复习进程.doc
《用C语言编学生成绩管理系统复习进程.doc》由会员分享,可在线阅读,更多相关《用C语言编学生成绩管理系统复习进程.doc(9页珍藏版)》请在咨信网上搜索。
学生成绩管理系统实验报告 一、实验内容 实验名称:学生成绩管理系统 实验目的: 1)利用所学的三种程序基本结构以及数组、用户自定义函数进行一个简单管理系统的设计,进一步理解和掌握c语言的语法以及三种基本程序结构的综合应用。 2)通过程序中涉及的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。 实验的基本要求:学号(字符串)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。 二、算法说明 将数学成绩、程序设计成绩、姓名、学号分别设一个数组,其中姓名和学号是二维数组,其他是一维数组,并设为全局变量方便使用。 分别将各个功能以及菜单等功能设置为函数,介时调用。 主函数中运行菜单函数。菜单函数中提供选择用switch语句调用函数。 1、新建数据build()。用文档导入的方式导入数据。 2、添加数据add()。界面出现相应信息并提示输入。输入完成后用if语句选择是否再添加数据。如果选择是则继续调用add函数,否则调用print函数继续选择其他功能。用全局变量m来计算增加的次数。 3、删除数据rid()。用swith语句选择是按姓名删除还是按学号删除或者返回主菜单。按姓名则输入想要删除的对象,用for语句找到对象后,再用stremp赋值的方法将下一个信息往上一个位置移动,达到覆盖要删除的信息的效果。最后用for循环输出。按学号删除也是同理。用全局变量m来计算删除的次数 4、排序arrange()。用swith语句选择是按数学成绩arr_math(),程序设计成绩arr_design()还是总分arr_total()。按数学成绩排序时用冒泡排序的方法排列数学成绩,同时其他的姓名、学号的信息的下标也随着数学成绩的下标变动,最后用for语句一起输出。按程序设计以及总分的具体算法也是同理。每个程序后调用arrange()返回上级子菜单以便继续操作。 5、查询search()。也用switch语句选择是按学号s_code()、姓名s_name()、数学成绩s_math()、程序设计成绩s_design()、总分s_total()查找。 按学号则是输入学号,用if语句查找,输出该位置所对应的成绩以及姓名。按姓名、成绩查找也是同理。按成绩查找时用到flag=0标记,找到至少一个flag=1输出,否则flag=0时输出不存在。并重新调用search()函数返回上级子菜单。 6、退出。 三、程序清单 #include<stdio.h> #define N 5 #define M 100 int i,j,m=N-1,k,choice; /*全局变量*/ int math[M]; int design[M]; char name[50][M]; char code[50][M]; int total[M]; void print() /*菜单函数*/ { void build(); void add(); void arrange(); void search(); void rid(); printf(" 欢迎使用学生成绩管理系统!\n"); printf("1.新建数据\n2.添加数据\n3.删除数据\n4.排序\n5.查询\n6.退出\n请选择:"); scanf("%d",&choice); switch(choice) { case 1: build();break; case 2: add();break; case 3: rid();break; case 4: arrange();break; case 5: search();break; case 6:break; } } void build() /*新建数据*/ { FILE*cp; FILE*np; FILE*mp; FILE*dp; np=fopen("d:code.txt","r"); /*导入文件*/ for(i=0;i<N;i++) fscanf(np,"%s",code[i]); cp=fopen("d:name.txt","r"); for(i=0;i<N;i++) fscanf(cp,"%s",name[i]); mp=fopen("d:math.txt","r"); for(i=0;i<N;i++) fscanf(mp,"%d",&math[i]); dp=fopen("d:design.txt","r"); for(i=0;i<N;i++) fscanf(dp,"%d",&design[i]); for(i=0;i<N;i++) total[i]=math[i]+design[i]; char select; printf("学号 姓名 数学 程序设计 总分\n"); for(i=0;i<N;i++) printf("%s %4s %4d %4d %4d\n",code[i],name[i],math[i],design[i],total[i]); printf("成功!\n"); print(); } void add() /*添加数据函数*/ { char select; m++; printf("请输入信息"); printf("请输入学号:"); scanf("%s",code[m]); printf("请输入姓名:"); scanf("%s",name[m]); printf("请输入数学成绩:"); scanf("%d",&math[m]); printf("请输入程序设计成绩:"); scanf("%d",&design[m]); total[m]=math[m]+design[m]; for(i=0;i<=m;i++) printf("%s %s %d %d %d\n",code[i],name[i],math[i],design[i],total[i]); printf("是否继续Y/N?"); getchar(); scanf("%c",&select); if(select=='y'||select=='Y') add(); else print(); } void name_rid() /*按名字删除函数*/ { void rid(); m--; char name2[10],select; printf("输入您要删除姓名:"); scanf("%s",name2); for(i=0;i<=m+1;i++) if(strcmp(name2,name[i])==0) { for(j=i;j<=m;j++) {strcpy(code[j],code[j+1]); strcpy(name[j],name[j+1]); math[j]=math[j+1]; design[j]=design[j+1];} } for(i=0;i<=m;i++) printf("%s %s %4d %4d %4d \n",code[i],name[i],math[i],design[i],total[i]); printf("是否继续Y/N?"); getchar(); scanf("%c",&select); if(select=='y'||select=='Y') name_rid(); else rid(); } void code_rid() /*按学号删除函数*/ { void rid(); m--; char NO[10]; int select; printf("输入您要删除的学号:"); scanf("%s",&NO); for(i=0;i<=m+1;i++) if(strcmp(NO,code[i])==0) { for(j=i;j<=m;j++) { strcpy(code[j],code[j+1]); strcpy(name[j],name[j+1]); math[j]=math[j+1]; design[j]=design[j+1];} } for(i=0;i<=m;i++) printf("%s %s %4d %4d %4d \n",code[i],name[i],math[i],design[i],total[i]); printf("是否继续Y/N?"); getchar(); scanf("%c",&select); if(select=='y'||select=='Y') code_rid(); else rid();} void rid() /*删除数据总函数*/ { int select; printf("1.按姓名\n2.按学号\n3.返回主菜单\n请选择:"); scanf("%d",&select); switch(select) {case 1: name_rid();break; case 2:code_rid();break; case 3:print(); break; default:break;} } void arr_math() /*按数学成绩排序函数*/ { void arrange(); int temp1; char str1[100],str2[100]; for(j=0;j<=m-1;j++) for(i=0;i<=m-1-j;i++) if(math[i]<math[i+1]) { temp1=math[i]; math[i]=math[i+1]; math[i+1]=temp1; strcpy(str1,name[i]); strcpy(name[i],name[i+1]); strcpy(name[i+1],str1); strcpy(str2,code[i]); strcpy(code[i],code[i+1]); strcpy(code[i+1],str2); } printf("按数学成绩排序\n"); for(i=0;i<=m;i++) printf("%s %s %4d\n",code[i],name[i],math[i]); arrange(); } void arr_design() /*按程序设计成绩排序*/ { void arrange(); int temp1; char str1[100],str2[100]; for(j=0;j<=m-1;j++) for(i=0;i<=m-1-j;i++) if(design[i]<design[i+1]) { temp1=design[i]; design[i]=design[i+1]; design[i+1]=temp1; strcpy(str1,name[i]); strcpy(name[i],name[i+1]); strcpy(name[i+1],str1); strcpy(str2,code[i]); strcpy(code[i],code[i+1]); strcpy(code[i+1],str2); } printf("按程序设计成绩排序\n"); for(i=0;i<=m;i++) printf("%s %s %4d\n",code[i],name[i],design[i]); arrange(); } void arr_total() /*按总分排序*/ { void arrange(); int temp1; char str1[100],str2[100]; for(j=0;j<=m;j++) for(i=0;i<=m-1-j;i++) if(total[i]<total[i+1]) { temp1=total[i]; total[i]=total[i+1]; total[i+1]=temp1; strcpy(str2,code[i]); strcpy(code[i],code[i+1]); strcpy(code[i+1],str2); strcpy(str1,name[i]); strcpy(name[i],name[i+1]); strcpy(name[i+1],str1); } printf("总分排序/n"); for(i=0;i<=m;i++) printf("%s %s %4d\n",code[i],name[i],total[i]); arrange(); } void arrange() /*排序的总函数*/ { int select; printf("1.数学成绩排序\n2.程序设计成绩排序\n3.总分排序\n4.返回主菜单\n"); scanf("%d",&select); switch(select) { case 1:arr_math();break; case 2:arr_design();break; case 3:arr_total();break; case 4:print();break; } } void s_code() /*按学号查找函数*/ { void search(); char NO[10];int flag=0; printf("请输入学号:"); scanf("%s",NO); for(i=0;i<=m;i++) if(strcmp(NO,code[i])==0){flag=1; printf("%s %s %4d %4d %4d\n",code[i],name[i],math[i],design[i],total[i]);} if(flag==0) {printf("不存在\n欢迎继续使用!\n");search();} else {printf("欢迎继续使用!\n");search();} } void s_name() /*按姓名查找函数*/ { void search(); char name2[10];int flag=0; printf("请输入姓名:"); scanf("%s",name2); for(i=0;i<=m;i++) if(strcmp(name2,name[i])==0) {flag=1;printf("%s %s %4d %4d %4d\n",code[i],name[i],math[i],design[i],total[i]);} if(flag==1) {printf("欢迎继续使用!\n");search();} else { printf("不存在\n欢迎继续使用!\n");search();} } void s_math() /*按数学成绩查找*/ { void search(); int mark,flag=0; printf("请输入数学成绩:"); scanf("%d",&mark); for(i=0;i<=m;i++) if(mark<=math[i]) { flag=1; printf("%s %s %4d %4d %4d\n",code[i],name[i],math[i],design[i],total[i]);} search(); if(flag==0) { printf("不存在\n欢迎继续使用!\n"); search();} } void s_design() /*按程序设计成绩查找*/ { void search(); int mark,flag=0; printf("请输入程序设计成绩:"); scanf("%d",&mark); for(i=0;i<=m;i++) if(mark<=design[i]) { flag=1; printf("%s %s %4d %4d %4d\n",code[i],name[i],math[i],design[i],total[i]);} search(); if(flag==0) { printf("不存在\n欢迎继续使用!\n"); search();} } void s_total() /*按总分查找*/ { void search(); int mark,flag=0; printf("请输入总分:"); scanf("%d",&mark); for(i=0;i<=m;i++) if(mark<=total[i]) { flag=1; printf("%s %s %4d %4d %4d\n",code[i],name[i],math[i],design[i],total[i]); } search(); if(flag==0) {printf("不存在\n欢迎继续使用!\n"); search();} } void search() /*查找总函数*/ { int select; printf("1.学号查询\n2.姓名查询\n3.数学成绩查询\n4.程序设计成绩查询\n5.总分查询\n6.返回主菜单\n"); scanf("%d",&select); switch(select) { case 1:s_code();break; case 2:s_name();break; case 3:s_math();break; case 4:s_design();break; case 5:s_total();break; case 6:print();break; } } void main() /*主函数*/ { print();} 四、运行结果 运行界面,显示“欢迎您使用学生成绩管理系统”,并提供菜单,供选择。 1、新建数据:输出按序号排列的学生姓名、成绩。 2、添加数据:输入相关信息后,界面输出添加后的学号、姓名、成绩(数学,程序设计和总分)列表。并提示成功,要求选择是否继续,若继续则继续先前输出的提示信息,否则返回显示主菜单。 3、删除数据:输入相关信息后,界面输出删除后的学号、姓名、成绩(数学,程序设计和总分)列表。并提示成功,提供选择是否继续。若继续则继续先前输出的提示信息,否则返回上级子菜单。 4、排序。界面要求选择按数学成绩还是程序设计成绩排序,或者返回主菜单。选择数学成绩后,输入数学成绩,最后显示按数学成绩的、从高到低排列的各个学生的学号、姓名和数学成绩。程序设计也是类似。排序完成后,提示成功并返回上级子菜单,继续操作。 5、查询。界面要求选择按学号、姓名、数学成绩,程序设计成绩还是总分查询。输入学号后输出该学号所对应的学生姓名和各个成绩。姓名查找是类似的。按数学成绩查找则是输入数学成绩,则输出大与该分数的所有人的学号以及相应的姓名和成绩。程序设计成绩和总分查找类似。所有查找若找不到就显示“不存在”。最后提示成功,要求选择是否结束操作还是返回主菜单。 6、退出。退出后显示“感谢您使用学生成绩管理系统”。 五、分析与思考 刚开始拿到题目时,感觉很棘手。但是慢慢分析后,我发现一切都是可以解决的。 我和其他人不一样,别人是分步调试完成,而我是全部编好再进行调试,一运行大批的错误提示让我迷茫了。 首先第一个问题,函数调用时我写上了如build(math[],design[],total[],name[],code[]),发现是错的,查书之后才发现是不对的 应该是build(math,design,total,name,code)。而且设为全局变量更简洁;还有第93行中的 scanf("%ld",code[k]);运行的时候是对的,而调试时就不成功,原因是没有取地址符号。这些都是书本上的基础知识,我觉得基础知识非常重要不能小看,c语言是门严谨的学科,一点小错误都会导致全局的失败,应当十分小心。在第70行中的getchar()也是我找了好就才发现的重要问题。没有getchar()语句,前面的回车键就当作一个字符出入scanf中,运行时就直接显示 下面的操作,系统默认选了其他。所以用一个空的getchar()避开了这个问题。 一直坐在电脑前面调试是一件十分辛苦的事,但是调试成功的结果让人很欣慰忘记了劳累。 我觉得老师布置的这个作业是很有道理的,她让我们学会了自己摸索,自己尝试其中的滋味:找不出所时的泄气,求该成功时的喜悦;也让我们喜欢上了这门课!- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 成绩管理系统 复习 进程
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文