c语言课程设计系统,在线考试系统-C语言课程设计

本文档详细介绍了使用C语言进行的一次课程设计,开发了一个仅支持选择题的标准化考试系统。系统实现了教师添加试题、浏览试题、组卷、题库管理、查询和排序等功能,并扩展了权限处理、学生信息管理、成绩报表等功能。在设计过程中,作者解决了文件读写、数据同步、屏幕清屏等问题,增强了程序的健壮性。通过测试,系统运行稳定,功能齐全。
摘要由CSDN通过智能技术生成

《在线考试系统-C语言课程设计》由会员分享,可在线阅读,更多相关《在线考试系统-C语言课程设计(21页珍藏版)》请在人人文库网上搜索。

1、课 程 报告 课 程 名 称: 程序设计实践 专 业 班级: 计算机 1306 学 生 姓名: 王永森 学 号: 任 课 教师: 徐振强 学 期 : 2 013-2014 学年第二学期 课程报告任务书 题 目 标准化考试系统 主要 内容 开发出一个标准化考试系统,所谓标准化考试系统即仅支持选择题型的考试系 统,要求实现以下 基本功能: ( 1)提供给教师添加试题的功能(试题信息用文件保存)- 输入 (2)试题的浏览功能(可以按照不同的知识点或者难度系数进行查看) (3)能够抽取试题组合成一套试卷(组卷的策略:可以是随机的,亦可以实现 按照一定的组卷策略实现出题:如每个知识点抽取若干题目,最终组。

2、合一套试卷) (4)教师可以实现题库的管理,比如删除、修改等 ( 5)查询功能 ( 至少一种查询方式 ) 、排序功能 ( 至少一种排序方式,比如按照难 度系数排序 ) 扩展功能: 可以按照自己的程度进行扩展。比如( 1)简单的权限处理(教师登 录、学生登录) (2)可以加上学生信息和考试成绩信息的管理,并扩充为广义的考试 系统。即学生输入账号密码登陆,进行考试,交卷后显示成绩;( 3)成绩报表打印功 能( 4)模糊查询 ( 5)综合查询 (6)统计、分析等功能总之,可以根据自己需 求进行分析功能。 特别说明:尽可能地运用自己已经学习过的数据结构的知识去展现。 任务 要求 一、提交材料应包括: 。

3、(1)系统源代码 ( 2)课程报告 二、整个设计过程具体要求 ( 1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善 各个模块的调用关系; ( 2)设计过程 要求学生进一步明确各模块调用关系, 进一步完善模块函数细节 (函数名、参数、返回值等) ( 3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终 完成系统整体测试; ( 4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。 成绩 评定 报告撰写情况( 30 分) 系统完成情况 (30 分) 答辩情况( 40 分) 总分 内容 20 分 规范程度 5分 程序测试 5分 基本功能 20 分 扩展功。

4、能 10 分 自述情况 10 分 答辩情况 30分 成绩评定教师: 1 需求分析 标准化考试系统仅支持选择题,可以在学生做题之后进行自动批改试卷。主要包括以 下几个基本功能: (1)提供给教师添加试题的功能(试题信息用文件保存) - 输入 (2)试题的整体浏览功能 (3)能够抽取试题组合成一套试卷(组卷的策略:可以是随机的,当然若教师添加的试题 时有知识点、章节等信息,亦可以实现按照一定的组卷策略实现出题:如每个知识点抽取 若干题目,最终组合一套试卷) (4)教师实现题目信息的管理,比如删除、修改等 (5)查询功能(至少一种查询方式 ) 、排序功能 (至少一种排序方式 ) 2 概要设计 图 1。

5、 程序概要图 如图( 1)所示,此程序中学生信息使用单向链表存储,题库中的试题采用结构体数组 存储,主要流程分为两部分,一部分为学生登录进行操作,另一部分为老师登录进行操作。 程序中自定义了大量的功能函数,包括学生密码的修改,登录权限的确定,个人资料的修 改;老师对试题的查找、添加、修改、删除、排序,对学生信息的查找、添加、修改、删 除,以及自动随机生成一套试卷。各个功能函数都是独立的,可以相互调用,最终构成一 个完整的系统。 3 详细设计 头文件 # include # include # include # include typedef struct student , i); gets。

6、(testsi.maintest); printf ( 请输入 A:); gets(testsi.a); printf ( 请输入 B:); gets(testsi.b); printf ( 请输入 C:); gets(testsi.c); printf ( 请输入 D:); gets(testsi.d); printf ( 请输入答案( a、 b、c、d):); gets(testsi.ans); printf ( 请输入章节(数字) :); testsi.zhangjie = my_natural(); printf ( 请输入难度( *号表示):); gets(testsi.nandu)。

7、; save_tests(); printf (n 新建试题成功! n 回车键返回 ); getchar(); return ; 修改试题 # include void to_tests() , n); gets(testsn.maintest); printf ( 请输入 A:); gets(testsn.a); printf ( 请输入 B:); gets(testsn.b); printf ( 请输入 C:); gets(testsn.c); printf ( 请输入 D:); gets(testsn.d); printf ( 请输入答案 :); gets(testsn.ans); pr。

8、intf ( 请输入章节(数字) :); testsn.zhangjie = my_natural(); printf ( 请输入难度( *号表示):); gets(testsn.nandu); save_tests(); printf (n 修改成功! n); printf ( 回车键返回 ); getchar(); return ; 删除学生信息 # include void del_stu() n); Admin = (struct teacher *)malloc(sizeof(struct teacher); fread(Admin,sizeof(struct teacher),1,。

9、fp); fclose(fp); if(fp = fopen(,rb) = NULL)n); fp = fopen(,wb+); fclose(fp); else n); s = (stu *)malloc(sizeof(stu); s-next = NULL; while (fread(s,sizeof(stu),1,fp) != 0) if (head-next = NULL) head-next = s; tail = s; else tail-next = s; tail = s; s = (stu *)malloc( sizeof(stu) ); s-next = NULL; fcl。

10、ose(fp); if (fp = fopen(,rb) = NULL) n); fp = fopen(,wb+); fclose(fp); else n); while (fread( (tests+i+1),sizeof(struct tests),1,fp) != 0) i+; fclose(fp); return ; 保存学生数据到文件 # include void save_stu() / static FILE *fp; static stu *p; fp = fopen(,wb); p = head-next; while (p != NULL) if (fwrite(p,siz。

11、eof(stu),1,fp) != 1) printf (file write errorn); p = p-next; fclose(fp); 保存试题到文件 # include void save_tests() / 保存学生数据到文件 保存试题到文件 static FILE *fp; static int l; fp = fopen(,wb); for (l = 1; l = i; l +) if (fwrite( (tests + l),sizeof(struct tests), 1, fp ) != printf (file write errorn); fclose(fp); 随机。

12、数组题 # include void take_tests() / static int n, l, m, c, L; srand( (unsigned)time( NULL ) );/ system(cls); printf ( 请输入需要几套试卷: ); n = my_natural(); if (i = 10) printf ( 题目不足! n 回车键返回 ); getchar(); return ; for (j = 1; j = n; j +) L = 1; do 1) 随机数组题 产生不同的随机数 m = 0; 生成随机数 / c = rand()%i + 1; for(l = 1。

13、; l L; l +) if(c = tsjl) m +; if(m = 0) tsjL = c; L+; while(L != 11); j -= 1; printf (n已生成 %d套试卷! n 回车键返回 ,n); getchar(); return ; 4 调试分析 试题个数的同步问题。为了让每个函数都能随时读取利用试题以及不超过试题的最大 数量,定义全局的变量并在程序开始运行时读取文件中的内容,这样,成功的做到了 试题的修改、删除、查找、组题。 文件的读取及保存问题。此程序的一个最大难题就是在文件的运用上,因为要存取的 是试题及答案,其中含有大量的空格,其长度又是变化不一的,如果使用。

14、文本文件也 就是 ASC码的话,十分困难,所以我采用了二进制文件的形式进行存取,二进制文件 的存取优点是可以模块化的存取,十分方便,而且存取之后无法用文本打开显示在电 脑上,也就起到了加密的作用,但同时又给存入信息增加了难度,不能直接通过打开 复制信息进去,而要通过程序进行输入。通过不断努力修改之后,终于可以正确的使 用二进制的方法存取文件了。 数据的修改、删除、增加过程中的问题。很多同学采用随时读取随时处理的方式,但 遇到了很多问题,出现了很多错误,为了防止这个问题的出现,我采取一次性读取, 多次利用的方式,先在程序运行的开头进行一次文件数据的读取,然后进行的相应的 操作之后,进行一次文件数。

15、据的保存,这样很方便的对数据进行了处理,而又不容易 出现错误。 试题查看问题。 由于试题过多, 题目全部显示在一页的话需要往上翻页, 不便于查看, 于是,经过努力之后,采用分页的方式进行显示,只有当用户敲击回车键时自动跳到 下一页,这样,查看起来非常方便。 屏幕清屏问题。由于需要进行过多的操作,所以要在适当的时候进行清屏操作,清屏 函数的适当运用也是个问题,既不能清除掉需要显示的数据,又要及时的在菜单显示 前清空屏幕,所以,我就采用回车键返回的功能,不敲回车键就不能返回,这一创意 完美的解决了清屏问题。 程序健壮性问题。为了增加程序的健壮性,避免用户错误输入数据导致程序的崩溃, 我将数据输入方。

16、式全部采用字符输入, 这样,就防止了用户随意输入, 然后输入之后, 将字符转化为整型或者需要的类型。 5 测试结果 测试数据如图( 2)所示,下面给出测试的流程及相应的截图。 (次要的界面已省略) 学生登录进行考试,如图( 3): 学生查看个人信息,如图( 4): 学生修改个人密码,如图( 5): 图 2 学生信息 老师进入添加试题,如图( 6): 修改试题及删除试题给出一个,如图( 7): 图 3 学生进入考试 图 4 学生查看个人信息 图 5 学生修改密码 用随机的方式组卷,如图( 8): 图 6 添加试题 图 7 删除试题 图 8 组合试卷 按照章节排序分页显示,如图( 9)(10): 。

17、图 9 按章节排序分页显示 图 10 按章节排序分页显示 图 11 查看全部试题分页显示 查看学生信息,如图( 13): 删除学生信息,如图( 14) 查看全部试题分页显示,如图( 11)(12): 图 12 查看全部试题分页显示 图 13 全部学生信息 图 14 删除学生信息 修改管理员密码,如图( 15) 图 15 修改管理员密码 6 课程心得总结 这次课程设计之后, 我又对 C语言有了更深入的了解和认识, 加强了对它的运用, 虽然花了近一个周的时间去完成这个标准化考试系统, 但最终完成的程序还是令我比 较满意的,这个程序基本功能都具备,我又额外添加了几个功能,整体操作起来还是 非常不错的,另外,在操作体验上也增强了很多, 比如说在试题浏览时可以进行翻页, 在选择试题组卷时可以自动产生随机数,组成一套完整的试卷,而不产生重复试题, 也就是去重。在程序的健壮性上我也进行了增强, 方法是采用全字符输入, 然后判断, 也能转换成整型进行使用。总之,这次课程设计让我学到了很多,增加了很多编程经 验,锻炼了编程能力。 7 源码 详细全部源码见附件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值