学生模拟改卷系统课程设计报告C语言_第1页
学生模拟改卷系统课程设计报告C语言_第2页
学生模拟改卷系统课程设计报告C语言_第3页
学生模拟改卷系统课程设计报告C语言_第4页
学生模拟改卷系统课程设计报告C语言_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

目录TOC\o"1-5"\h\z\o"CurrentDocument"概述2\o"CurrentDocument"1.1设计题目2\o"CurrentDocument"1.2题目描述2\o"CurrentDocument"1.3题目要求2\o"CurrentDocument"需求分析3\o"CurrentDocument"2.1设计思想3\o"CurrentDocument"2.2程序流程图3\o"CurrentDocument"2.3相关处理函数3\o"CurrentDocument"程序设计及代码分析43.1程序主模块设计53.2程序详细模块设计5\o"CurrentDocument"实验数据及运行结果64.1实验数据6\o"CurrentDocument"4.2主菜单7\o"CurrentDocument"4.3计算参考答案及频次74.4输出成绩分析8\o"CurrentDocument"课设心得总结96.程序源代码§1.概述(正文宋体5号字,单倍行距,标题黑体3号字,小标题黑体5号字;题目内5个小标题间空两行,两个题目之间分页。正反面打印)设计题目模拟改卷系统。题目描述改卷系统程序主要功能为改卷。同时,该系统程序可以实现成绩查询、成绩排序、成绩统计等一系列功能。通过接收数据文件格式为文本文件的数据流,其中文本文件由若干行组成,每行表示一名学生的考试答案信息,根据同学的答题情况,计算参考答案并统计学生的答题情况。题目要求输出参考答案,及各题参考答案选项的频次。支持按姓名查询学生成绩。能够按照指定需求进行排序,如按成绩的降序或升序对学生信息进行排序。输出成绩单及试卷分析(分数段人数,计算最高分、最低分、平均分、及格率)到外部文件。以功能菜单的形式选择执行各项操作。§2.需求分析设计思想该系统采用模块化设计。程序设计一个简单、明了的主菜单供用户选择操作。程序初始化阶段,读取文本文件,data.txt”,获取学生选择答案信息进行处理,若没有输入,则提示;系统自动统计学生答案并输出参考答案。同时,用户可根据主菜单对学生成绩进行排序、分析、查询等操作。程序流程图图2程序主流程图相关处理函数voidClearQueue()从缓冲区中不断获取多余字符,直到遇到回车才进行下一步操作,即清除缓存流。charInputChar(charconst*msg)获取有效的字符输入。char*InputLine(charconst*msg,char*str)获取有效的字符串输入。intInputIntInRange(charconst*msg,intl,intr)用来得到有效的整型输入,整型范围为[l,r]§3.程序设计及代码分析学生结构体设计设计结构体,用来保存学生的姓名、答案以及分数信息,方便操作。typedefstructtagData(charname[10];//姓名charasn[TEST_NUM+1];//作答intgrade;)Data;记录相关信息的全局变量:Datadata[MAX_LEN];inttotal=0;intans[TEST_NUM][4];charanswer[TEST_NUM];//分数//保存数据//总人数//每题的选择人数频次//参考答案文件读取模块通过C语言文件读取函数,对数据文件进行读取,同时将学生的姓名、成绩写入结构体数组中。主要函数:voidLoadData()参考答案计算模块遍历整个结构体数组,获取保存所有学生的答案选择,并获得所有题目答案选择的最大数量,最终获得参考答案。主要函数:voidGetAswer()通过用户选择,可将保存的参考答案以及频次输出。主要函数:voidPrintAnswer()按姓名查询模块通过用户输入的姓名信息,遍历结构体数组,并获取姓名与之相同的学生信息输出,若没有匹配到该学生,则输出提示信息。主要函数:voidSearchByName()成绩计算模块遍历整个结构体数组,对学生的选择答案根据参考答案进行评分,其中1-15题计2分,16-35题计3分,其余题目4分,最后获得总分保存至结构体数组中。主要函数:voidGetGrade()成绩降序排序模块对于保存在学生结构体数组中的成绩,通过冒泡排序进行降序排序并输出。主要函数:voidSort()成绩单分析模块对学生的成绩信息进行分析,首先按学生成绩排名,然后计算学生的最高分、最低分、平均分、及格率等信息,同时统计0〜59,60〜80,81〜100分数段同学个数。最后将所有统计信息通过C语言文件操作写入到文件“result.txt”。主要函数:voidOutputData()程序主模块提供系统程序的入口,可循环打印程序的主菜单供用户选择,并调用相关处理函数完成相关操作。主菜单函数:voidMainMenu()图3系统程序主要功能模块图

§4.实验数据及运行效果截图实验数据_|sarnple.txt-记事本文件旧福旧梢式心)查看—帮助[H)012345678901234567890123456789012?12012345678901234567890123456789012?123456789111111111122222222223333333333444^凡膏伦鹏韵譬是进康剑夫Is^inS光志先S冒共>成卫鸿建章®^宁艺十与汉亚璐金¥肓东环彪志傲同彦建2柄晅风赵罗目黄汪吴卫郭CADBDCBCDADCABACBCCACACCUBCBDDBCABCDCBDCCCDBDBBBCCBBCACAC&UBCBDDBCABCDCBDCCCDBDDABACBDCACACMABCBDDBCCACACBDCBCDBDCBBACBDCACCCMABCBDDBCABCDDBDCDCDBDAABBDDBCBCACMABCBDDBCABCADBDABCDBDCABCCBDBACCCM3BCBDDBCABDADBDDBCDBDCBCCCBDC3CACBAABCBDDADAACADBDCCBCADCBCDCABCCCACADBBCDCDBDAACBDBDBBCDBDBBCCABDBACACBA3BCBDAADABCADBDCACDBDCBDADDALA3AACBBBCBDDBCABCADBDCCCDBDCBBACB3CACACM3BCBDDBCABCACCDCBCDBDCBCCCBDCDCACABBBCBDDBCABCBDBDCDDDBDCDCC3BDCDCCCADABCBDDACAACADBDABCDCDCBBC3BDBACCAAA3BCBDDBCABCADADCBCDBDCBDDCDCCA3ACABABCBDDBCDDCADDDABCDBDCBBCABDBACACBDBBCBDDBCABCADBDCBCDBDCBBCACDCACACMBBCBDDBCABCADBDABBDBDCBCDABDCBCCCMABCBDDBCABCABDACCCDBDCBCCCBCDBCCABBDBBCCDBCCDAADBACCCDBDABBCCBDCACACABABCBDDBCABCADBBABCDADBBCCABBBACACADABCBDDBCABCADBDBCCDBDCBBCCBCBACACMBBCBDDBCABCACBDBACDBDBBCADDCCA.\ACBCABCBDDBCABCADCDABCDADCBCDCDDBCCAAABBBCBDDBCABCADBDDBCDBDCBBAABDBACCCAD5BCBDDACABCABDDCBCDBDCBBDCBDCMCCCD5BCBDDBCCACDABDDBCDBDCBCCABDCACCCMBBCBDDBCABCADBDABCDBDCBBACCABACCCMBBCBDDBCCBCBDBCCDBBAACBADBCBDDUCCDLBCCDDBCABCADBDDBCDBDABBDABDBACCCLAABCBDDBCABCADBDABCDBDBBBDCDDCACAAADLBCBDDBCMCADBDABCDBDABBBCBDCDCACMBBCBDDBCABCADBDCBCDBDCBBACDDCACCAABABCBDDBCABCADBDCCCDBDCBCDABBCMCACBBBCBDDBBADCBDBDCBCBADDCCADDABACAABCBBCADDBAABCADBDBBCDACCABDCDDBBCAADBBBCBDDBCADCADBDCBCDBDBABBCABDCCACABBBCBDDADCDDADBDDBCDBDCBBCCBDBMCCABBBCBDDACABCDDBDADCDBDCBCCDDDBACAACDBBCBDDBDABBDDBDCBCDBDCBDDCBDCACAAAABBCBDDBCCACADBDDACDBDCBBCCDCCACCCMBBCBDDBCCAPRriRnriRr'riRriEPFPfRRr1rRRCRRnRcrR4.2,主菜单■D:\Backup\定面\匚佬言设计in.exe模拟改卷系统8

行文

is到dfc-LI^U分频壑卷及生学试季对及答询序单考杳票统出姓3出-择■II1----..-.X.K3I.1-In----.}、、、>iH^.-12345青<<<<<■-y4.3,计算参考答案以及频次模必改卷系统91754556672767583648695ro84748B6c8行文息析次绩信分频成一J希及生字讨答询序单4{.宜降m统参富成系出姓站出;1案D□TBAHD97B175607285780881清拓什意键继氛一.4.4.按姓名查询成绩D:\Backuph,桌面V:语言设计\m』in.exe序.-1-_行文进到息析分颛星卷及生学试隼对及答询序单考查雷统出姓雷出:2学绩J-4WSr:1:2:3:4:5主皇墓请按任意键继续-.4.5.输出试卷分析D:\Backuph,桌面'匹显言设计\m』in.exe行文

谜到

息析频星卷及生学试褰子对及笞御序单考查菖统出姓带出请按任意键继续.3210099877666655443220985166666655555555555555555444430m杰远tsK套爰涛来典林光春琦宁亚兆海子磨笑金世甘w+心光道鸿建房擎鬣泽彪文欣丁刘堰非哥唐SWeM王酱周罗王代肖于站nJWIK鬣5678901234567S901234567890126666677777777778888888888999Result.txt二]result,txt-记事本文件旧福旧格式0登7444311110009998887666688888888888877777777777为:6成9457为:□.752715544443377777777木〔彤重蔓晃胃昊源敏杰字东强明进伟凡直化签雪冲同奕住坚曰碧雨鑫文涛瞿文恒汉志亚^^一姓肖囊王李许王番汪李吴韩魏D弃徐何费周季褶乔吴早§5.课设心得总结通过本次课程设计,我更加熟练掌握c语言编程相关知识。对于c语言中结构体设计、全局变量、文件读写、冒泡排序等算法也有了深入了解。同时,通过本次课程设计,我更加了解了模块化编程的重要性。将一个大的系统程序分成多个小模块,不仅将问题简单化了,同时也使得整个系统简洁明了,对用户也是一目了然。总之,本次课程设计对我今后的学习有很大的指导作用。§6.程序源代码#include<STDIO.H>#include<string.h>#include<stdlib.h>#defineMAX_LEN100//最多人数#defineTEST_NUM35//题目数量typedefstructtagData(charname[10];//姓名charasn[TEST_NUM+1];//作答intgrade;//分数)Data;Datadata[MAX_LEN];//保存数据inttotal=0;//总人数intans[TEST_NUM][4];//每题的选择人数频次charanswer[TEST_NUM];//参考答案//清除无用输入缓存流voidClearQueue()(while(getchar()!='\n')continue;}//输入charcharInputChar(charconst*msg)(charresult;printf("%s",msg);while(scanf("%c",&result)!=1)(ClearQueue();printf("%s",msg);}ClearQueue();returnresult;}/*参数说明:msg:提示语str:用来得到输入的字符串功能说明:用来得到有效的字符串输入*/char*InputLine(charconst*msg,char*str)(intj=0;intc;printf("%s",msg);while(1)(c=getchar();if(c=='\n'||c==EOF)break;str[j++]=c;}str[j]='\0';returnstr;}/*参数说明:msg:提示语功能说明:用来得到有效的整型输入*/intInputInt(charconst*msg)(intresult;printf("%s",msg);while(scanf("%d",&result)!=1)(ClearQueue();printf("%s",msg);}ClearQueue();returnresult;}/*参数说明:msg:提示语l:下限r:上限功能说明:用来得到有效的整型输入,整型范围为[l,r]*/intInputIntInRange(charconst*msg,intl,intr)(intj;while(1)(j=Inputlnt(msg);if(j<lIIj>r)(printf("请输A%d和%d之间的整数.\n”,l,r);continue;}elsebreak;}returnj;}//载入数据voidLoadData()(charfilename[]="sample.txt";FILE*fp;charbuffer[100];intindex;if((fp=fopen(filename,"r"))==NULL)(printf("没有找到或者不能打开data.txt!");return;}memset(buffer,0,sizeof(buffer));while(fgets(buffer,100,fp)!=NULL)(sscanf(buffer,"%d%s%s",&index,data[total].name,data[total].asn);memset(buffer,0,sizeof(buffer));total++;}fclose(fp);}//根据每个学生的选择得到参考答案voidGetAswer()(inti;intj;intindex;intmax;memset(&ans,0,sizeof(ans));memset(answer,0,sizeof(answer));for(i=0;i<total;i++)(for(j=0;j<TEST_NUM;j++)(index=data[i].asn[j]-'A';ans[j][index]++;}}for(i=0;i<TEST_NUM;i++)(max=-1;index=-1;for(j=0;j<4;j++)(if(ans[i][j]>max)(max=ans[i][j];index=j;}if(index>=0)(answer[i]='A'+index;}}}//根据参考答案以及学生自己的选择得到分数voidGetGrade()(inti;intj;intbRight=-1;fOr(i=0;i<total;i++)(fOr(j=0;j<TEST_NUM;j++)(bRight=-1;if(answer[j]==data[i].asn[j])bRight=1;if(bRight==1)(if(j<15)data[i].grade+=2;elseif(j<35)data[i].grade+=3;elsedata[i].grade+=4;}}}}//打印参考答案及频次voidPrintAnswer()(inti;printf("参考答案以及频次如下:\n");fOr(i=0;i<TEST_NUM;i++)printf("%-3c",answer[i]);printfC'\n");for(i=0;i<TEST_NUM;i++)printf("%-3d",ans[i][answer[i]-'A']);printf("\n\n");}//按姓名查找voidSearchByName()(charname[10];inti;InputLine("请输入学生姓名:",name);for(i=0;i<total;i++)(if(strcmp(name,data[i].name)==0)(printf("%s成绩为:%d\n\n",name,data[i].grade);return;}}printf("文件中没有记录该学生相关信息!\n\n");}//打印所有信息voidPrintData()(inti;if(total<=0)return;printf("%-8s%-10s%s\n","排名","姓名","分数”);for(i=0;i<total;i++)(printf("%-8d”,i+1);printf("%-10s",data[i].name);printf("%d\n",data[i].grade);}}//排序voidSort()(inti;intj;DatatempData;for(i=1;i<total;i++)for(j=0;j<total-i;j++)(if(data[j].grade<data[j+1].grade)(memcpy(&tempData,&(data[j+1]),sizeof(Data));memcpy(&(data[j+1]),&(data[j]),sizeof(Data));memcpy(&(data[j]),&tempData,sizeof(Data));}}PrintData();}//输出分析到文件voidOutputData()(inti;intj;DatatempData;FILE*fp;intgradeCount[3];//0~5960~7980~100intminGrade;intmaxGrade;inttotalGrade;intpass=0;memset(&gradeCount,0,sizeof(gradeCount));if(total<=0)return;fp=fopen("result.txt","w");if(!fp)return;for(i=1;i<total;i++)for(j=0;j<total-i;j++)(if(data[j].grade<data[j+1].grade)(memcpy(&tempData,&(data[j+1]),sizeof(Data));memcpy(&(data[j+1]),&(data[j]),sizeof(Data));memcpy(&(data[j]),&tempData,sizeof(Data));}}totalGrade=0;minGrade=data[0].grade;maxGrade=data[0].grade;fprintf(fp,”%-8s%-10s%s\n","排名","姓名","分数”);fOr(i=0;i<total;i++)(fprintf(fp,"%-8d”,i+1);fprintf(fp,"%-10s",data[i].name);fprintf(fp,"%d\n",data[i].grade);if(data[i].grade<60)gradeCount[0]++;elseif(data[i].grade<80)gradeCount[1]++;elsegradeCount[2]++;total

温馨提示

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

最新文档

评论

0/150

提交评论