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

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业目录概述21.1设计题目21.2题目描述21.3题目要求2需求分析32.1 设计思想32.2 程序流程图32.3 相关处理函数3程序设计及代码分析43.1 程序主模块设计53.2 程序详细模块设计5实验数据及运行结果64.1 实验数据64.2 主菜单74.3 计算参考答案及频次74.4 输出成绩分析8课设心得总结9程序源代码9概述(正文宋体5号字,单倍行距,标题黑体3号字,小标题黑体5号字;题目内5个小标题间空两行,两个题目之间分页。正反面打印)设计题目模拟改卷系统。题

2、目描述改卷系统程序主要功能为改卷。同时,该系统程序可以实现成绩查询、成绩排序、成绩统计等一系列功能。通过接收数据文件格式为文本文件的数据流,其中文本文件由若干行组成,每行表示一名学生的考试答案信息,根据同学的答题情况,计算参考答案并统计学生的答题情况。题目要求输出参考答案,及各题参考答案选项的频次。支持按姓名查询学生成绩。能够按照指定需求进行排序,如按成绩的降序或升序对学生信息进行排序。输出成绩单及试卷分析(分数段人数,计算最高分、最低分、平均分、及格率)到外部文件。以功能菜单的形式选择执行各项操作。需求分析设计思想该系统采用模块化设计。程序设计一个简单、明了的主菜单供用户选择操作。程序初始化

3、阶段,读取文本文件“data.txt”,获取学生选择答案信息进行处理,若没有输入,则提示;系统自动统计学生答案并输出参考答案。同时,用户可根据主菜单对学生成绩进行排序、分析、查询等操作。程序流程图图2 程序主流程图相关处理函数void ClearQueue() 从缓冲区中不断获取多余字符,直到遇到回车才进行下一步操作,即清除缓存流。char InputChar(char const * msg) 获取有效的字符输入。char* InputLine(char const * msg, char * str)获取有效的字符串输入。int InputIntInRange(char const * m

4、sg, int l, int r)用来得到有效的整型输入,整型范围为l, r程序设计及代码分析学生结构体设计设计结构体,用来保存学生的姓名、答案以及分数信息,方便操作。typedef struct tagDatachar name10;/姓名char asnTEST_NUM + 1;/作答int grade;/分数Data;记录相关信息的全局变量:Data dataMAX_LEN;/保存数据int total = 0;/总人数int ansTEST_NUM4;/每题的选择人数频次char answerTEST_NUM;/参考答案文件读取模块通过C语言文件读取函数,对数据文件进行读取,同时将学生

5、的姓名、成绩写入结构体数组中。主要函数: void LoadData()参考答案计算模块遍历整个结构体数组,获取保存所有学生的答案选择,并获得所有题目答案选择的最大数量,最终获得参考答案。主要函数:void GetAswer()通过用户选择,可将保存的参考答案以及频次输出。主要函数:void PrintAnswer()按姓名查询模块通过用户输入的姓名信息,遍历结构体数组,并获取姓名与之相同的学生信息输出,若没有匹配到该学生,则输出提示信息。主要函数:void SearchByName()成绩计算模块遍历整个结构体数组,对学生的选择答案根据参考答案进行评分,其中1-15题计2分,16-35题计3

6、分,其余题目4分,最后获得总分保存至结构体数组中。主要函数:void GetGrade()成绩降序排序模块对于保存在学生结构体数组中的成绩,通过冒泡排序进行降序排序并输出。主要函数:void Sort()成绩单分析模块对学生的成绩信息进行分析,首先按学生成绩排名,然后计算学生的最高分、最低分、平均分、及格率等信息,同时统计059,6080,81100分数段同学个数。最后将所有统计信息通过C语言文件操作写入到文件“result.txt”。主要函数:void OutputData()程序主模块提供系统程序的入口,可循环打印程序的主菜单供用户选择,并调用相关处理函数完成相关操作。主菜单函数:void

7、 MainMenu()图3 系统程序主要功能模块图实验数据及运行效果截图实验数据主菜单计算参考答案以及频次按姓名查询成绩输出试卷分析Result.txt 课设心得总结通过本次课程设计,我更加熟练掌握C语言编程相关知识。对于C语言中结构体设计、全局变量、文件读写、冒泡排序等算法也有了深入了解。同时,通过本次课程设计,我更加了解了模块化编程的重要性。将一个大的系统程序分成多个小模块,不仅将问题简单化了,同时也使得整个系统简洁明了,对用户也是一目了然。 总之,本次课程设计对我今后的学习有很大的指导作用。程序源代码#include #include #include #define MAX_LEN10

8、0/最多人数#define TEST_NUM35/题目数量typedef struct tagDatachar name10;/姓名char asnTEST_NUM + 1;/作答int grade;/分数Data;Data dataMAX_LEN;/保存数据int total = 0;/总人数int ansTEST_NUM4;/每题的选择人数频次char answerTEST_NUM;/参考答案/清除无用输入缓存流void ClearQueue()while(getchar()!=n)continue;/输入charchar InputChar(char const * msg)char r

9、esult; printf(%s, msg);while(scanf(%c, &result)!=1)ClearQueue();printf(%s, msg);ClearQueue();return result;/*参数说明:msg:提示语str:用来得到输入的字符串功能说明:用来得到有效的字符串输入*/char* InputLine(char const * msg, char * str)int j=0;int c;printf(%s, msg);while(1)c = getchar();if (c = n | c = EOF)break;strj+=c;strj=0;return s

10、tr;/*参数说明:msg:提示语功能说明:用来得到有效的整型输入*/int InputInt(char const* msg)int result;printf(%s, msg);while(scanf(%d, &result)!=1)ClearQueue();printf(%s, msg);ClearQueue();return result;/*参数说明:msg:提示语l:下限r:上限功能说明:用来得到有效的整型输入,整型范围为l,r*/int InputIntInRange(char const * msg, int l, int r)int j;while(1)j = InputIn

11、t(msg);if(jr)printf(请输入%d和%d之间的整数.n, l, r);continue;elsebreak;return j;/载入数据void LoadData()char filename = sample.txt;FILE *fp; char buffer100;int index;if(fp = fopen(filename,r) = NULL) printf(没有找到或者不能打开data.txt!); return; memset(buffer, 0, sizeof(buffer);while (fgets(buffer, 100, fp) != NULL) ssca

12、nf(buffer, %d %s %s, &index, , datatotal.asn);memset(buffer, 0, sizeof(buffer);total+; fclose(fp);/根据每个学生的选择得到参考答案void GetAswer()int i;int j;int index;int max;memset(&ans, 0, sizeof(ans);memset(answer, 0, sizeof(answer);for (i = 0; i total; i+)for (j = 0; j TEST_NUM; j+)index = datai.a

13、snj - A;ansjindex+;for (i = 0; i TEST_NUM; i+)max = -1;index = -1;for (j = 0; j max)max = ansij;index = j;if (index = 0)answeri = A + index;/根据参考答案以及学生自己的选择得到分数void GetGrade()int i;int j;int bRight = -1;for (i = 0; i total; i+)for (j = 0; j TEST_NUM; j+)bRight = -1;if (answerj = datai.asnj)bRight =

14、1;if (bRight = 1)if (j 15)datai.grade += 2;else if (j 35)datai.grade += 3;else datai.grade += 4;/打印参考答案及频次void PrintAnswer()int i;printf(参考答案以及频次如下:n);for (i = 0; i TEST_NUM; i+)printf(%-3c, answeri);printf(n);for (i = 0; i TEST_NUM; i+)printf(%-3d, ansiansweri - A);printf(nn);/按姓名查找void SearchByNam

15、e()char name10;int i;InputLine(请输入学生姓名:, name);for (i = 0; i total; i+)if (strcmp(name, ) = 0)printf(%s成绩为: %dnn, name, datai.grade);return;printf(文件中没有记录该学生相关信息!nn);/打印所有信息void PrintData()int i;if (total = 0)return;printf(%-8s%-10s%sn, 排名, 姓名, 分数);for (i = 0; i total; i+)printf(%-8d, i+1)

16、;printf(%-10s, );printf(%dn, datai.grade);/排序void Sort()int i;int j;Data tempData;for (i = 1; i total; i+) for (j = 0; j total-i; j+) if (dataj.grade dataj+1.grade) memcpy(&tempData, &(dataj+1), sizeof(Data);memcpy(&(dataj+1), &(dataj), sizeof(Data);memcpy(&(dataj), &tempData, sizeof(Data)

17、; PrintData();/输出分析到文件void OutputData()int i;int j;Data tempData;FILE *fp;int gradeCount3;/0596079 80100int minGrade;int maxGrade;int totalGrade;int pass = 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

18、 total-i; j+) if (dataj.grade dataj+1.grade) memcpy(&tempData, &(dataj+1), sizeof(Data);memcpy(&(dataj+1), &(dataj), sizeof(Data);memcpy(&(dataj), &tempData, sizeof(Data); totalGrade = 0;minGrade = data0.grade;maxGrade = data0.grade;fprintf(fp, %-8s%-10s%sn, 排名, 姓名, 分数);for (i = 0; i total; i+)fprin

19、tf(fp, %-8d, i+1);fprintf(fp, %-10s, );fprintf(fp, %dn, datai.grade);if (datai.grade 60)gradeCount0+;else if (datai.grade 80)gradeCount1+;else gradeCount2+;totalGrade+= datai.grade;if (datai.grade maxGrade)maxGrade = datai.grade;fprintf(fp, n);fprintf(fp, 059分数人数为:%dn, gradeCount0);fprintf(fp, 6079分数人数为:%dn, gradeCount1);fprintf(fp, 80100分数人数为:%dn, gradeCount2);fprintf(fp, 最高分为:%dn, ma

温馨提示

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

最新文档

评论

0/150

提交评论