毕业设计(论文)-C语言源码评判系统设计与实现.doc_第1页
毕业设计(论文)-C语言源码评判系统设计与实现.doc_第2页
毕业设计(论文)-C语言源码评判系统设计与实现.doc_第3页
毕业设计(论文)-C语言源码评判系统设计与实现.doc_第4页
毕业设计(论文)-C语言源码评判系统设计与实现.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

C 语言源码评判系统设计与实现 摘要 C 语言源码评判系统是智能信息处理技术的具体应用 系统可以自动完成选择题 填空题 简答题的自动评判 并自动编译 运行用户提交的源代码 实现的 C 语言源 码评判系统 采用 MySQL 数据库保存用户身份信息 实现用户创建与删除 主要包括 管理员 教师和学生三种身份 同时 在数据库中 还保存有学生的考试成绩与试卷 提交时间 最重要的是数据库中保存有 C 语言试题库 Qt 界面通过 MySQL 数据库 API 访问并管理数据库中的相关数据信息 包括用户身份信息 成绩和 C 语言题库等 它通过 Qt 界面的方式提交用户针对特定问题设计的源代码 然后进行自动评判 立即 反馈信息 给计算机专业数据结构 算法等课程的教学和学习带来极大的方便 本文 在研究了当前流行的源代码自动评判系统后 针对源代码自动评判系统受时间地点限 制 并发处理能力差 可伸缩性差等问题 完成改进的设计方案 并在 Linux 和 Windows 环境下用 C C 开发实现 系统遵循软件工程设计规范 针对提高系统可用性 作了设计 并进行了性能测试和优化设计 关键词 多线程 高可用性 自动阅卷 全套设计加扣 3012250582 C Program Automatic Judge System Abstract The C program automatic judge system is intelligent information processing technology specific application the system Call automatically compile and run the riser to submit the source code and system time consumed by user programs Judging system of implementation of the C language source code using MySQL database to store the user identity information realizes the user to create and delete including administrators teachers and students of three kinds of identity At the same time in the database but also hold the students test scores and test submission time database is the most important mediator with C language test Qt interface through the MySQL database API access and management of the related data in the database information including user identity information grades and C language test etc It is submitted via a Qt UI designed for users to issue specific source code and then automatically judged immediately feedback to the computer science data structures algorithms such source from the teaching and learning has brought great convenience This paper studies the source code for the popular automatic judge system the source code for the automatic judge system by the time and place constraints concurrent processing capability is poor and poor scalability issues the completion of an improved design and in Linux 2 数据库初始化 创建项目数据库 mysql create database c test system CHARACTER SET utf8 切换到项目数据库 mysql use c test system 创建管理员信息表 mysql create table administrator id int auto increment primary key user varchar 30 not null pass varchar 30 not null 添加管理员 mysql insert into administrator values admin admin 创建教师信息表 mysql create table teacher id varchar 30 name varchar 30 user varchar 30 not null pass varchar 30 not null 添加教师 mysql insert into teacher values 001 赵老师 teacher 01 teacher 01 mysql insert into teacher values 002 钱老师 teacher 02 teacher 02 创建学生信息表 mysql create table student id varchar 30 name varchar 30 user varchar 30 not null pass varchar 30 not null last score int last time varchar 30 not null question ans 1 varchar 1024 not null question ans 2 varchar 1024 not null 19 question ans 3 varchar 1024 not null question ans 4 varchar 1024 not null question ans 5 varchar 1024 not null question ans 6 varchar 1024 not null question ans 7 varchar 1024 not null question ans 8 varchar 1024 not null question ans 9 varchar 1024 not null question ans 10 varchar 1024 not null 添加学生 mysql insert into student values 001 张三 student 01 student 01 0 mysql insert into student values 002 李四 student 02 student 02 0 创建试题列表 mysql create table question id int auto increment primary key content varchar 1024 not null answer varchar 1024 not null 添加选择题 5 题 1 题 10 分 共 50 分 mysql insert into question values 在 C 语言中 每个语句必须以 结束 A 回车符 B 冒号 C 逗号 D 分号 D mysql insert into question values 标识符和关键字间 要用 隔开 A 回车符 B 冒号 C 空格 D 分号 C mysql insert into question values 用 C 语言编写的源文件经过编译 若 没有产生编译错误 则系统将 A 生成可执行目标文件 B 生成目标文件 C 输出运行结果 D 自动保存源文件 B mysql insert into question values 下列说法中正确的是 A C 语言程序由主函数和 0 个或多个函数组成 B C 语言程序由主程序和子程序组成 C C 语言程序由子程序组成 D C 语言程序由过程组成 A mysql insert into question values 下列说法中错误的是 A 主函数可以分为两个部分 主函数说明部分和主函数体 B 主函数可以调用任何非主函数的其他函数 C 任何非主函数可以调用其他任何非主函数 D 程序可以从任何非主函数开始执行 D 20 添加填空题 2 题 1 题 10 分 共 20 分 mysql insert into question values 每个源程序有且只有一个 函数 系统总是从该函数开始执行 C 语言程序 主 mysql insert into question values 在 C 语言程序中允许出现的字符集是 字符集 ASCII 码 添加简答题 2 题 1 题 10 分 共 20 分 mysql insert into question values 试描述 Static 的特点 1 局部变量在函数内定义 2 局部变量的生存期虽然为整个源程序 但是其作用域仍域自变量相同 3 允许对构造类静态局部量赋初值 4 对基本类型的静态局部变量若在说明未赋予初值 则系统自动赋予 0 值 mysql insert into question values 文件的操作顺序是什么 1 定义文件指针 2 打开文件 判断是否成功打开 若打开失败 程序退出运行状态 3 对文件进行读写操作 4 关闭文件 添加编程题 1 题 共 10 分 mysql insert into question values 将正整数 123456789 逆序打印出各 位数字 987654321 5 2 Qt 界面设计 Qt 界面通过 MySQL 数据库 API 访问并管理数据库中的相关数据信息 包括用户 身份信息 成绩和 C 语言题库等 Qt 界面主要包括登录窗口 管理员管理窗口 教师管理窗口和学生考试窗口 各 个窗口的功能说明如下所示 1 登录窗口 完成用户登录 可以选择管理员 教师和学生 2 管理员窗口 可以完成教师和学生的身份信息添加与删除 3 教师管理窗口 教师可以通过该窗口获取学生的考试成绩 4 学生考试窗口 学生通过该窗口可以完成 C 语言考试 并获取成绩 21 程序架构 登录界面 管理员 教师或学生 管理员窗口教师窗口学生窗口 添加 与删 除用 户 获取 身份 信息 获取 成绩 显示 用户 信息 获取 成绩 进入 考试 MySQL数据库 图 5 1 程序架构 5 3 C 语言考试题型分析 C 语言考试有其自身的特点 大多 C 语言考试一般通过以下几种题型考察学生对 编程能力的综合掌握程度 1 选择题 考察学生对基本概念的掌握程度 覆盖知识点较多 2 填空题 考察学生对知识掌握的精确度 3 简答题 要求考生对问题进行合适回答 4 编程题 编制一个源程序 并进行编译 调试 连接及运行 得到正确结果 5 4功能实现 5 4 1 密码修改 void studentform on btnOk 2 clicked if ui leOldPwd 2 text ui leNewPwd 2 text ui leNewPwd2 2 text QMessageBox about this Message item with can t not be empty return if ui leNewPwd 2 text ui leNewPwd2 2 text QMessageBox about this Message tr 新密码和确认新密码不统一 return QSqlQuery query 22 query exec update student set pass ui leNewPwd 2 text WHERE user stdName if query isActive query numRowsAffected QMessageBox about this message success 5 4 2 随机选题 从两套题中随机选题 srand time NULL int question select rand if question select 2 0 question name question ui label setText A 卷题号 else question name question1 ui label setText B 卷题号 timer start 1000 ui btnPrevious 3 setEnabled true ui btnNext 3 setEnabled true ui btnSubmit 3 setEnabled true ui btnStart 3 setEnabled false QSqlQuery query query exec select COUNT from question name if query next num query value 0 toInt for int i 0 i 5 ui rBtnA 3 setDisabled true ui rBtnB 3 setDisabled true ui rBtnC 3 setDisabled true ui rBtnD 3 setDisabled true ui textEdit ans setDisabled false ui pushButton setDisabled false ui pushButton 2 setDisabled false ui pushButton 3 setDisabled false 23 if currentNum rBtnA 3 setDisabled false ui rBtnB 3 setDisabled false ui rBtnC 3 setDisabled false ui rBtnD 3 setDisabled false ui textEdit ans setDisabled true ui pushButton setDisabled true ui pushButton 2 setDisabled true ui pushButton 3 setDisabled true query exec select from question name where id QString number questionId 0 ui leQuestionID 3 setText QString number currentNum if query next ui textEdit 3 append query value 1 toString get current question ans 5 4 3 计算成绩 计算最终成绩 void studentform on btnSubmit 3 clicked score 0 QString student ans QString teacher ans QSqlQuery query QString column name for int i 1 i textEdit insertPlainText n 考试结果 n if i 10 if student ans teacher ans 24 score 10 ui textEdit insertPlainText 第 QString number i 10 题 正确 n else ui textEdit insertPlainText 第 QString number i 10 题 错误 n else if run output teacher ans score 10 ui textEdit insertPlainText 第 QString number i 10 题 正确 n else ui textEdit insertPlainText 第 QString number i 10 题 错误 n teacher ans clear student ans clear column name clear 5 4 4 检测抄袭 检测编程题是否抄袭 if currentNum 10 int count 0 QString other ans query exec select count from student if query next count query value 0 toInt for int i 0 i textEdit ans document toPlainText QMessageBox about this 警告 tr 编程题涉嫌抄袭 n ui btnSubmit 3 setDisabled true return 5 4 5 加载源文件 void studentform on pushButton 3 clicked ui btnSubmit 3 setDisabled false 25 QString SendFileName QFileDialog getOpenFileName this tr 选择源文件 0 tr 添加更多的文件类型 QFile file SendFileName 如果取消打开则退出函数 if file fileName isEmpty return 如果打开失败则提示并退出函数 if file open QFile ReadOnly QIODevice Text QMessageBox warning this tr 打开失败 tr 抱歉 未能打开此文件 这可能是由于没有足够的权限造成的 QMessageBox Ok return 5 4 6 下一题 切换到下一道题 void studentform on btnNext 3 clicked if currentNum questionNum QMessageBox warning this tr Warning tr 这已经是最后一道题了 return ui textEdit 3 clear currentNum currentNum 1 if currentNum 5 ui rBtnA 3 setDisabled true ui rBtnB 3 setDisabled true ui rBtnC 3 setDisabled true ui rBtnD 3 setDisabled true ui textEdit ans setDisabled false ui pushButton setDisabled false ui pushButton 2 setDisabled false ui pushButton 3 setDisabled false if currentNum rBtnA 3 setDisabled false ui rBtnB 3 setDisabled false ui rBtnC 3 setDisabled false ui rBtnD 3 setDisabled false ui textEdit ans setDisabled true ui pushButton setDisabled true 26 ui pushButton 2 setDisabled true ui pushButton 3 setDisabled true ui leQuestionID 3 setText QString number currentNum QSqlQuery query query exec select from question name where id QString number questionId currentNum 1 if query next ui textEdit 3 append query value 1 toString get current question ans 5 4 7 数据库连接 与数据库连接 bool createConnection QSqlDatabase db QSqlDatabase addDatabase QMYSQL db setHostName localhost db setUserName DATABASE USER db setPassword DATABASE PASSWARD db setDatabaseName c test system if db open QMessageBox warning 0 QObject tr Database Error db lastError text return false 初始化数据库 QSqlQuery query 创建项目数据库 query exec create database c test system CHARACTER SET utf8 切换到项目数据库 query exec use c test system 创建管理员信息表 query exec create table administrator id int auto increment primary key user varchar 30 not null pass varchar 30 not null 添加管理员 query exec insert into administrator values admin admin 创建教师信息表 query exec create table teacher id varchar 30 name varchar 30 user varchar 30 not null pass varchar 30 not null 创建学生信息表 27 query exec create table student id varchar 30 name varchar 30 user varchar 30 not null pass varchar 30 not null last score int last time varchar 30 not null return true 5 4 8 获取值 获取当前列 的索引 scoreInfoModel setHeaderData 0 Qt Horizontal tr 学生学号 scoreInfoModel setHeaderData 1 Qt Horizontal tr 学生姓名 scoreInfoModel setHeaderData 2 Qt Horizontal tr 考试成绩 scoreInfoModel setHeaderData 3 Qt Horizontal tr 考试时间 ui tvScore 2 setEditTriggers QAbstractItemView NoEditTriggers 使其不 可编辑 ui tvScore 2 setModel scoreInfoModel ui tabWidget setCurrentIndex 0 28 6 系统测试 6 1 测试方案 鉴于本系统的目的是用于评判教学中学生编写的 C 源程序文件 程序的复杂度不 是很高 输入输出数据也相对较为简单 为了测试出各种质量的程序的评判结果是否 正确 选取各文件夹中的一个程序修改使之存在语法错误而无法通过编译链接 一个 完全正确的程序 另两个修改程序使之语法正确能够通过编译链接但输出内容与正确 输出不同 在运行这两个题目正确的 C 源程序得到正确的 开始进入测试 6 2 运行界面 6 2 1 登录系统 用户可以选择三种角色登录 C 语言源码评判系统 包括学生 教师 和管理员所 示 学生登录界面 图 6 1 学生登录界面 管理员登录界面 29 图 6 2 管理员登录界面 教师登录界面 图 6 3 教师登录界面 6 2 2 管理员窗口 管理员登录系统后 可以获取学生的考试成绩和提交时间 30 图 6 4 管理员登录系统可以获取学生的考试成绩和提交时间 同时 管理员也可以获取教师信息 图 6 5 管理员登录系统可以获取教师信息 并且 管理员还可以添加和删除教师和学生的身份信息 方面用户数量的扩展 31 6 2 3 教师管理窗口 教师登录系统后 可以支持密钥修改 图 6 6 教师登录系统后 可以支持密钥修改 同时 教师能够获取所有学生考试信息 32 图 6 7 教师登录系统后 能够获取所有学生考试信息 6 2 4 学生考试窗口 学生登录 C 语言源码评判系统后 在界面上可以显示当前考生的相关信息和最终 成绩 33 学生登录 C 语言源码评判系统后 在界面上可以显示当前考生的相关信息和最终成绩 图 6 8 学生登录后 在界面上可以显示当前考生的相关信息和最终成绩 6 3 系统测试 考生点击 开始考试 后 开始进入考试状态 并从两套试卷中随机选择一套 A 卷或 B 卷 显示选择题 34 考生点击 开始考试 后 从两套试卷中随机选择一套 A 卷或 B 卷 显示选择题 图 6 9 考生点击 开始考试 后 开始进入考试状态 题库中包含有编程题 考生能够从外部载入源文件 进行编译与运行 同时能够 与数据库中已存在的源文件进行比对 判断源文件是否抄袭 35 图 6 10 从外部载入源文件 判断源文件是否抄袭 如果编译错误或运行错误 界面上均会显示结果 告知考生 图 6 11 加载源文件 36 编译失败 图 6 12 编译失败 运行结果错误 图 6 13 运行结果错误 37 运行结果正确 图 6 14 运行结果正确 38 结论 本文对 C 语言考试中常见的题型做出了分析 本文重点放在编程题的解决上 本 系统在实现程序设计题自动评分功能时 进行了如下创新 1 在程序中对考生程序进行编译 2 在程序中运行考生程序并避免系统崩溃 3 考生程序是否存在抄袭的检测 在进行自动阅卷系统研究中 由于条件和能力的有限 程序运行的最终结果成为 我最主要的判断依据 但是 而程序内部的逻辑和程序复杂度也应该是我们进行自动 阅卷系统所要判断的 这也是一个十分有前途的研究领域 研究的结果有很强的实用 性和可推广性 同时也是一个十分有挑战性的工作 通过对 C 语言源程序自动打分系统现状及其开发技术了解 考虑其技术可行性 使用可行性 经济可行性 及对系统的开发按软件工程的标准进行系统分析 详细设 计 系统实现 经过一系列的开发 能够满足 C 语言自动打分系统的要求 实现基本 的功能 本次所做的毕业设计虽然完成了 但由于自己的水平有限 在写论文的过程中遇 到了许多的问题 例如 以何种形式完成对 C 语言源程序的自动打分功能 我们尝试 了很多的方法 但还是不能解决问题 最后还是在老师的提点下我们才找到突破口 同时系统功能还需要进一步的完善 在后续的工作学习中 希望自己能够有所突破 改善自己的不足 让自己更加的完善 通过对 C 语言源程序自动打分系统现状及其开 发技术了解 考虑其技术可行性 使用可行性 经济可行性 及对系统的开发按软件 工程的标准进行系统分析 详细设

温馨提示

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

评论

0/150

提交评论