electron-vue-exam-single/requirement.md

23 KiB
Raw Blame History

统计技能电子考试系统

需求说明

环境

Windows 7 64位 单机版 Windows 10 64位 单机版

其他

不同身份的人,在考试过程中使用的题是不一样的。

试题结构说明

  • 试题类型:单选题、多选题、填空题、问答题
  • 试题内容:
    • 单选题:每题包括问题描述、问题配图(可选,base64可能有多个、问题数据集较大的json字符串可能有多个数据集每题可能包含多个小题每小题有4个选项每个小题都应该有唯一正确的答案。
    • 填空题:每题包括问题描述、问题配图(可选,base64可能有多个、问题数据集较大的json字符串可能有多个数据集每题可能包含多个填空处包括数据集内的填空处和题目内的填空处每小题有一个填空框每个空都应该有正确答案。
    • 填表题:每题包括问题描述、待完成的数据表格,需要考生按照要求把表格中的空白格填入正确的数据。每个空格都有唯一的正确答案。
    • 问答题:每题包括问题描述、问题配图(可选,base64可能有多个、问题数据集较大的json字符串可能有多个数据集每题可能有多个问题每个问题都需要一个长文本答案每个问题都应该有一个参考答案问答题需要人工评分
  • 考试方式:进入考试时程序从题库中随机抽取指定类型、指定数量的试题并按随机顺序排列,考试者需要在规定时间内完成所有试题的填写。
  • 考试结束考试结束后程序将本次考试的试题、答题、正确答案参考答案、考试时间、考试人员等信息进行排版并保存为PDF文件文件名称为“姓名_考试时间.pdf”保存在电脑桌面上。
  • 评分标准:
    • 单选题:与正确答案完全一致才算正确。
    • 多选题:与正确答案完全一致才算正确。
    • 填空题:与正确答案完全一致才算正确。
    • 问答题:人工评分。

试题示例

某企业2025年6月30日资产负债表数据如下
流动资产1200万元其中存货300万元
流动负债800万元
计算该企业的流动比率(保留两位小数)。

正确答案1.50
某市政府2025年一般公共预算支出明细如下
基本支出(人员经费 + 日常公用经费180万元
项目支出发展类项目20万元
总支出200万元
计算基本支出占总支出的百分比(保留一位小数)。

正确答案90.0%
某企业2024年财务报表及某市政府2025年公共预算支出明细如下表所示请根据表格数据完成计算。

表1企业A 2024年财务报表摘要单位万元
项目	金额
营业收入	5000
净利润	800
年初应收账款余额	400
年末应收账款余额	600
流动资产	1500
流动负债	1000
平均净资产	4000

表2某市政府2025年公共预算支出明细单位万元
支出类别	金额
基本支出(人员经费)	1200
基本支出(公用经费)	300
项目支出(发展类)	500
项目支出(民生类)	200
总预算支出	2200

问题与填空要求
企业财务指标计算:
计算企业A的 流动比率(保留两位小数):流动比率 = ______
计算企业A的 应收账款周转率(次数,保留一位小数):周转率 = ______次
计算企业A的 净资产收益率ROE百分比保留一位小数ROE = ______%
公共预算支出分析:
计算基本支出(人员经费 + 公用经费)占总预算支出的 百分比(保留一位小数):占比 = ______%
若上级要求基本支出占比不超过 60%判断该政府是否达标填写“是”或“否”______

正确答案:
1.50
10.0
20.0
68.2
否

页面规划

  • 欢迎页提供2个入口”参加考试“和”管理系统“点击”参加考试“进入考试页面点击”管理系统“进入管理页面欢迎页要展示软件版本号和题库版本号。
    • 管理入口:提供用户管理、试题管理、考试管理等功能。
      • 输入管理密码页:输入正确的管理密码才可以进入管理系统。
      • 试题管理提供试题的添加、删除、修改、查询等功能。添加、修改中支持上传图片和导入数据集可能是excel文件。每次试题变化后都要为当前题库生成唯一的正序的题库版本号这是单机软件因为在实际上机考试时要确认各台机器的题库版本号是否一致
      • 人员管理提供考试人员的添加、删除、修改、查询等功能。支持批量导入人员信息excel文件。支持批量删除人员信息。
      • 考试管理:提供考试的添加、删除、修改、查询等功能,考试信息包括考试名称、时间、各类型试题题量(各类题型的小题数)、分值设置(各类试题的小题分值)。
      • 系统初始化
    • 参加考试:提供考试页面,包括试题展示、答题、提交等功能。
      • 输入考生信息页:输入正确的考生姓名、身份证号、手机号才可以进入考试系统,信息来源于人员管理中维护的数据。
      • 考试确认页:随机抽题组生成本次试卷,结合考生信息、考试时间等形成唯一考试数据,展示考试说明(固定内容),提供“开始考试”入口。
      • 考试页面展示试题支持单选题、多选题、填空题、问答题的答题功能。考试页面强制全屏具备防切出机制切出5次后在第6次切出时强制结束考试。考试页面具备倒计时功能
        • 单选题:支持单选项选择。
        • 填空题:支持填空内容输入。
        • 填表题:支持数据表格的补充填写。
        • 问答题:支持长文本输入。
      • 提交页提供提交按钮点击提交按钮将考试数据提交入库生成试卷PDF文件。

实现方案

技术选型

Electron + SQLite + bootstrap + fontawesome

管理员密码

t2t6a9

数据库设计

本应用是单机应用,没有网络环境,所以需要考虑到单机环境下的数据管理问题。

单机环境下我们使用SQLite数据库设计两个库system.db和user.db其中system.db为系统库系统管理员的操作可以更改system.db中的数据user.db为用户库考生的操作可以更改user.db中的数据。

本应用需要数据与应用分离,所以需要将数据库文件与应用程序文件分离,数据库文件的路径需要在应用程序中配置。

系统库 system.db

说明system.db是系统数据库只有系统管理员的操作才会更改系统库。

系统配置
config 系统配置表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
key text 配置名称
value text 配置值

已知的配置项: + 管理员密码admin_password + 题库版本号question_bank_version

数据字典
dict_types 字典类型表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
type_code TEXT 字典类型编码(唯一标识,如 "question_category"、"user_role"
type_name TEXT NOT NULL 字典类型名称(如 "题型分类"、"用户角色"
description TEXT 字典类型的描述信息(可选)
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
dict_items 字典项表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 字典项唯一标识(自增主键)
type_code TEXT NOT NULL 关联到 dict_types.type_code表示字典项所属类型如 "question_type"
item_code TEXT NOT NULL 字典项编码(唯一标识,如 "choice"、"admin"
item_name TEXT NOT NULL 字典项名称(如 "选择题"、"管理员"
item_value TEXT 字典项的额外信息(如排序、扩展字段,可选)
parent_code TEXT 父级字典项编码(用于构建树形结构,如 "objective" 是 "choice" 的父级)
is_active BOOLEAN DEFAULT 1 是否启用1=启用0=禁用)
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP

字典示例 -- 1. 定义字典类型 INSERT INTO dict_types (type_code, type_name, description) VALUES ('question_category', '题型分类', '用于区分客观题和主观题'), ('question_type', '题型', '存储所有题型(选择题、填空题等)'); -- 2. 插入题型分类(客观题、主观题) INSERT INTO dict_items (type_code, item_code, item_name, item_value) VALUES ('question_category', 'objective', '客观题', '有固定答案,机器可自动评分'), ('question_category', 'subjective', '主观题', '需人工评分,答案不唯一'); -- 3. 插入题型(选择题、填空题等),并关联到分类 INSERT INTO dict_items (type_code, item_code, item_name, parent_code, item_value) VALUES ('question_type', 'choice', '选择题', 'objective', '包含单选和多选'), ('question_type', 'fill_blank', '填空题', 'objective', '填写空白处的答案'), ('question_type', 'fill_table', '填表题', 'objective', '填写表格内容'), ('question_type', 'true_false', '判断题', 'objective', '判断对错'), ('question_type', 'short_answer', '问答题', 'subjective', '简短回答问题'), ('question_type', 'analysis', '分析题', 'subjective', '需要分析问题'), ('question_type', 'essay', '论述题', 'subjective', '详细论述');

试题
questions 题干表(问题主表)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_type TEXT NOT NULL 问题类型(关联到 dict_types.type_code
question_name TEXT NOT NULL DEFAULT '' 问题名称
question_description TEXT NOT NULL DEFAULT '' 问题描述
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_datasets 题干的配套数据集表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
dataset_name TEXT NOT NULL DEFAULT '' 数据集名称
dataset_data TEXT NOT NULL 数据集数据的json字符串
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_images 题干的配图表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
image_name TEXT NOT NULL DEFAULT '' 图片名称
image_base64 TEXT NOT NULL 图片文件的base64编码
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_fill_table 填表问题的表格表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
table_name TEXT NOT NULL DEFAULT '' 表格名称
table_data TEXT NOT NULL 表格数据的json字符串
table_description TEXT NOT NULL DEFAULT '' 表格描述
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_fill_table_blanks 填表问题的表格填空表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
table_id INTEGER NOT NULL 关联到 question_fill_table.id
cell_position TEXT NOT NULL 填空单元格的位置(如 "A1"、"B2"
cell_type TEXT NOT NULL DEFAULT 'number' 填空单元格的类型(如 "text"、"number"
correct_answer TEXT NOT NULL DEFAULT '' 填空单元格的正确答案(如 "123"、"456"
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_choices 选择题问题表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
choice_description TEXT NOT NULL DEFAULT '' 选择题的描述含占位符__blank__
choice_type TEXT NOT NULL DEFAULT 'single' 选择题类型(如 "single"、"multiple"
choice_options TEXT NOT NULL 选项的数组字符串
correct_answers TEXT NOT NULL 正确答案的索引序列(如 "0,1"、"2,3,4"
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_fill_blanks 填空题问题表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
blank_description TEXT NOT NULL DEFAULT '' 填空题的描述含填空占位符__blank__
blank_count INTEGER NOT NULL DEFAULT 0 填空数量
correct_answers TEXT NOT NULL DEFAULT '' 填空处的正确答案序列(如 "123,456"
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_short 简答题/论述题/分析题表(含参考答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
short_ask TEXT NOT NULL DEFAULT '' 简答题/论述题/分析题的问题
short_answer_ref TEXT NOT NULL DEFAULT '' 简答题/论述题/分析题的参考答案
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
question_judge 判断题表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
question_id INTEGER NOT NULL 关联到 questions.id
judge_ask TEXT NOT NULL DEFAULT '' 判断题的问题
judge_answer INTEGER NOT NULL 判断题的答案0 或 1
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
考试
exam 考试表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
exam_name TEXT NOT NULL DEFAULT '' 考试名称
exam_description TEXT NOT NULL DEFAULT '' 考试描述
exam_examinee_type TEXT NOT NULL DEFAULT '' 考试考生类型(如 "student"、"teacher"
exam_notice TEXT NOT NULL DEFAULT '' 考试须知长文本Markdown语法可展示在页面上
exam_minutes INTEGER NOT NULL DEFAULT 0 考试时长(分钟)
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
考生
examinee 考生表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
examinee_type TEXT NOT NULL DEFAULT '' 考生类型(如 "student"、"teacher"
examinee_name TEXT NOT NULL DEFAULT '' 考生姓名
examinee_gender TEXT NOT NULL DEFAULT '' 考生性别
examinee_unit TEXT NOT NULL DEFAULT '' 考生单位
examinee_position TEXT NOT NULL DEFAULT '' 考生职务
examinee_id_card TEXT NOT NULL DEFAULT '' 考生身份证号
examinee_phone TEXT NOT NULL DEFAULT '' 考生手机号
examinee_event TEXT NOT NULL DEFAULT '' 考生报名赛项
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP

考生库 user.db

操作日志
examinee_log 考生操作日志表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
examinee_id INTEGER NOT NULL 关联到 exam_examinee.id
operation TEXT NOT NULL DEFAULT '' 操作类型(如 "login"、"logout"
operation_time TIMESTAMP NOT NULL 操作时间
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
参加考试
examinee_exam 考生考试表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
examinee_id INTEGER NOT NULL 关联到 exam_examinee.id
exam_name TEXT NOT NULL DEFAULT '' 考试名称
exam_description TEXT NOT NULL DEFAULT '' 考试描述
exam_examinee_type TEXT NOT NULL DEFAULT '' 考试考生类型(如 "student"、"teacher"
exam_notice TEXT NOT NULL DEFAULT '' 考试须知长文本Markdown语法可展示在页面上
exam_minutes INTEGER NOT NULL DEFAULT 0 考试时长(分钟)
start_time TEXT NOT NULL 考试开始时间
latest_end_time TEXT NOT NULL 考试最晚结束时间
end_time TEXT NOT NULL 考试结束时间
exam_duration INTEGER NOT NULL DEFAULT 0 实际考试时长(分钟)
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
updated_at TEXT 记录更新时间(默认 CURRENT_TIMESTAMP
examinee_papers 考生试卷主表

这是在考生参加时从system库中的exam表中查询出的考试信息。

字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
examinee_id INTEGER NOT NULL 关联到 examinee.id
exam_id INTEGER NOT NULL 关联到 exam.id
paper_minutes INTEGER NOT NULL DEFAULT 0 试卷时长(分钟)
paper_total_score INTEGER NOT NULL DEFAULT 0 试卷总分根据system库中的exam_question_set表计算得到
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP

这种表应该是只读的表所以不需要updated_at字段。

paper_questions 考生试卷问题表

这是从system库中根据exam_question_set表中的配置从questions表中查询出的数据组成本次考试的试卷。

字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
examinee_paper_id INTEGER NOT NULL 关联到 examinee_papers.id
question_type TEXT NOT NULL 问题类型(关联到 dict_types.type_code
question_name TEXT NOT NULL DEFAULT '' 问题名称
question_description TEXT NOT NULL DEFAULT '' 问题描述
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP

这种表应该是只读的表所以不需要updated_at字段。

paper_question_datasets 题干的配套数据集表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
dataset_name TEXT NOT NULL DEFAULT '' 数据集名称
dataset_data TEXT NOT NULL 数据集数据的json字符串
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_question_images 题干的配图表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
image_name TEXT NOT NULL DEFAULT '' 图片名称
image_base64 TEXT NOT NULL 图片文件的base64编码
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_question_fill_table 填表问题的表格表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
table_name TEXT NOT NULL DEFAULT '' 表格名称
table_data TEXT NOT NULL 表格数据的json字符串
table_description TEXT NOT NULL DEFAULT '' 表格描述
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_question_fill_table_blanks 填表问题的表格填空表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
paper_dataset_id INTEGER NOT NULL 关联到 paper_datasets.id
cell_position TEXT NOT NULL 填空单元格的位置(如 "A1"、"B2"
cell_type TEXT NOT NULL DEFAULT 'number' 填空单元格的类型(如 "text"、"number"
correct_answer TEXT NOT NULL DEFAULT '' 填空单元格的正确答案(如 "123"、"456"
score REAL NOT NULL DEFAULT 0 填空单元格的分值
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_question_choices 选择题问题表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
choice_description TEXT NOT NULL DEFAULT '' 选择题的描述含占位符__blank__
choice_type TEXT NOT NULL DEFAULT 'single' 选择题类型(如 "single"、"multiple"
choice_options TEXT NOT NULL 选项的数组字符串
correct_answers TEXT NOT NULL 正确答案的索引序列(如 "0,1"、"2,3,4"
score REAL NOT NULL DEFAULT 0 选择题的分值
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_question_fill_blanks 填空题问题表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
blank_description TEXT NOT NULL DEFAULT '' 填空题的描述含填空占位符__blank__
blank_count INTEGER NOT NULL DEFAULT 0 填空数量
correct_answers TEXT NOT NULL DEFAULT '' 填空处的正确答案序列(如 "123,456"
score REAL NOT NULL DEFAULT 0 填空题的分值
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_question_short 简答题/论述题/分析题表(含参考答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
short_ask TEXT NOT NULL DEFAULT '' 简答题/论述题/分析题的问题
short_answer_ref TEXT NOT NULL DEFAULT '' 简答题/论述题/分析题的参考答案
score REAL NOT NULL DEFAULT 0 简答题/论述题/分析题的分值
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_question_judge 判断题表(含答案)
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
judge_ask TEXT NOT NULL DEFAULT '' 判断题的问题
judge_answer INTEGER NOT NULL 判断题的答案0 或 1
score REAL NOT NULL DEFAULT 0 判断题的分值
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP
paper_answers 考生试卷答案表
字段名 字段类型 字段描述
id INTEGER PRIMARY KEY AUTOINCREMENT 主键
examinee_paper_id INTEGER NOT NULL 关联到 examinee_papers.id
paper_question_id INTEGER NOT NULL 关联到 paper_questions.id
paper_question_item_id INTEGER NOT NULL 多态的方式关联到各个具体的小题表id
answer TEXT NOT NULL DEFAULT '' 考生的答案
get_score REAL NOT NULL DEFAULT 0 考生的得分
created_at TEXT 记录创建时间(默认 CURRENT_TIMESTAMP