0
点赞
收藏
分享

微信扫一扫

心理测评全系统设计与代码实现

文风起武 2022-03-17 阅读 24

心理测评设计与代码实现

在这里插入图片描述

心理评测不同于考试系统, 答案是没有对错的,且都是选择题, 是根据被评测者所选的选项综合加权得分后,测试出被评测者的性格、爱好、职业等更近哪一种类型。
这里分别从数据库设计、后台代码实现、和小程序开发, 和评测报告的生成介绍

– 系统为本人从0开始搭建,持续同步更新, 欢迎各位大侠拍砖。

一、数据库设计篇

数据库— Mysql,表1:测评主表、表2:问题表、表3:回答选项表、表4:测试结果表、其它:报告、资源等

  1. 测评主表
CREATE TABLE `t_test_m` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(20) DEFAULT NULL COMMENT '问卷编码',
  `title` varchar(50) DEFAULT NULL COMMENT '问卷标题',
  `sub_title` varchar(50) DEFAULT NULL COMMENT '副标题',
  `sub_cn` varchar(30) DEFAULT NULL COMMENT '简称中文',
  `sub_en` varchar(30) DEFAULT NULL COMMENT '简称英文',
  `direction` text COMMENT '问卷说明(以MD读法保存)',
  `isfree` int(11) DEFAULT '1' COMMENT '是否免费(1免费,其它为收费)',
  `money` int(11) DEFAULT NULL COMMENT '收费金额,单位分',
  `thkMsg` text COMMENT '结束感谢语言',
  `ctime` datetime DEFAULT NULL COMMENT '添加时间',
  `startTime` datetime DEFAULT NULL COMMENT '开始时间',
  `endTime` datetime DEFAULT NULL,
  `editor` varchar(30) DEFAULT NULL COMMENT '添加人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 问题表
CREATE TABLE `t_test_q` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(50) DEFAULT NULL COMMENT '问题编号',
  `qnum` varchar(100) NOT NULL COMMENT '题号',
  `title` varchar(100) NOT NULL COMMENT '测试标题',
  `direction` varchar(200) DEFAULT NULL COMMENT '描述',
  `m_code` varchar(50) DEFAULT NULL COMMENT '评测主表ID',
  `qtype` int(11) DEFAULT '1' COMMENT '该问题题型,1表示单选,9表示多选,0表示填空',
  `ctime` datetime DEFAULT NULL COMMENT '创建时间',
  `order` int(11) DEFAULT NULL COMMENT '排序号',
  `isdel` int(11) DEFAULT '0' COMMENT '是否删除 0否,1删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.问题选项表

CREATE TABLE `t_test_a` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '选项ID',
  `q_code` varchar(50) NOT NULL COMMENT '问题Code',
  `direction` varchar(200) DEFAULT NULL COMMENT '选项描述',
  `score` int(11) DEFAULT NULL COMMENT '得分,用于计算',
  `iscorrect` int(11) DEFAULT '0' COMMENT '是否为正确的选项,0表示该回答无准答案,-1表示错误,1表示正确',
  `order` int(11) DEFAULT NULL COMMENT '排序',
  `isdel` int(11) DEFAULT NULL COMMENT '是否删除,0否,1是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 评测结果
CREATE TABLE `t_test_r` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userid` varchar(50) DEFAULT NULL COMMENT '评测用户ID',
  `username` varchar(50) DEFAULT NULL COMMENT '用户名',
  `orgname` varchar(100) DEFAULT NULL COMMENT '所属组织',
  `mcode` varchar(50) DEFAULT NULL COMMENT '测试主表Code',
  `source` varchar(30) DEFAULT NULL COMMENT '评测来源:如小程序、官网、线下二维码',
  `resutJson` text COMMENT '评测结果, 以Json方式保存',
  `startTime` datetime DEFAULT NULL COMMENT '测试开始时间',
  `endTime` datetime DEFAULT NULL COMMENT '测试结束时间',
  `costTime` int(11) DEFAULT NULL COMMENT '耗时,单位秒。(注意耗时≠结束时间-开始时间)',
  `reportUrl` varchar(300) DEFAULT NULL COMMENT '评测报告地址:报告生成的地址, 或则预留好的文件地址',
  `reportText` text COMMENT '报告内容:以MarkDown格式保存',
  `ispay` int(11) DEFAULT '0' COMMENT '是否已支付,0未支付,1已支付',
  `amount` int(11) DEFAULT NULL COMMENT '实际支付金额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

到此测试评系统数据库设计的主要几张表都已完成了, 接下来以“PSTR心理压力测试”案例导入数据, 完成SQL初始化数据。

主表:

INSERT INTO t_test_m (
	CODE,
	title,
	sub_title,
	sub_cn,
	sub_en,
	direction,
	isfree,
	money,
	ctime,
	testminute,
	startTime,
	endTime,
	editor
)
VALUES
	('PSTR',
		'心理压力测试(PSTR专业版)',
		'PSTR',
		'心理压力测试',
		'PSTR',
		'压力既可以是你生活的助手也可以变成生活的阻碍。PSTR心理压力测试,帮助你了解自己面临的心理压力程度。'
		,1
		,0
		,now()
		,10
		,now()
		,'2050-01-01',
		' admin '
		)
  1. 问题表初始化数据
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR1','1','____我受背痛之苦','','PSTR','1','2022-3-17','1','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR26','26','____我喝酒','','PSTR','1','2022-3-17','26','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR2','2','____我的睡眠不定且睡不安稳','','PSTR','1','2022-3-17','2','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR27','27','____我很自觉(自己需要、情绪、动机、计划、目标等)','','PSTR','1','2022-3-17','27','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR3','3','____我有头痛','','PSTR','1','2022-3-17','3','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR28','28','____我觉得己像四分五裂','','PSTR','1','2022-3-17','28','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR4','4','____我颚部疼痛','','PSTR','1','2022-3-17','4','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR29','29','____我的眼睛又酸又累','','PSTR','1','2022-3-17','29','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR5','5','____若须等候,我会不安','','PSTR','1','2022-3-17','5','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR30','30','____我的腿,或脚抽筋','','PSTR','1','2022-3-17','30','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR6','6','____我的後颈感到疼痛','','PSTR','1','2022-3-17','6','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR31','31','____我的心跳快速','','PSTR','1','2022-3-17','31','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR7','7','____我比多数人更神经紧张','','PSTR','1','2022-3-17','7','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR32','32','____我怕结识人','','PSTR','1','2022-3-17','32','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR8','8','____我很难入睡','','PSTR','1','2022-3-17','8','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR33','33','____我手脚冰冷','','PSTR','1','2022-3-17','33','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR9','9','____我的头感到紧或痛','','PSTR','1','2022-3-17','9','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR34','34','____我患便秘','','PSTR','1','2022-3-17','34','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR10','10','____我的胃有毛病','','PSTR','1','2022-3-17','10','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR35','35','____我发现自己很容易哭','','PSTR','1','2022-3-17','35','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR11','11','____我对自己没有信心','','PSTR','1','2022-3-17','11','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR36','36','____我消化不良','','PSTR','1','2022-3-17','36','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR12','12','____我对自己说话','','PSTR','1','2022-3-17','12','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR37','37','____我咬指甲','','PSTR','1','2022-3-17','37','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR13','13','____我忧虑财务问题','','PSTR','1','2022-3-17','13','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR38','38','____我耳中有嗡嗡声','','PSTR','1','2022-3-17','38','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR14','14','____与人见面时,我会窘怯','','PSTR','1','2022-3-17','14','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR39','39','____我小便频密','','PSTR','1','2022-3-17','39','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR15','15','____我怕发生可怕的事','','PSTR','1','2022-3-17','15','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR40','40','____我有胃溃疡的毛病','','PSTR','1','2022-3-17','40','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR16','16','____白天我觉得累','','PSTR','1','2022-3-17','16','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR41','41','____我有皮肤方面的毛病','','PSTR','1','2022-3-17','41','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR17','17','____下午我感到喉咙痛,','','PSTR','1','2022-3-17','17','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR42','42','____我未经医师指示使用各种但并非由於染上感冒药物','','PSTR','1','2022-3-17','42','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR18','18','____我心情不安、无法静坐','','PSTR','1','2022-3-17','18','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR43','43','____我的咽喉很紧','','PSTR','1','2022-3-17','43','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR19','19','____我感到非常口乾','','PSTR','1','2022-3-17','19','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR44','44','____我有十二指肠溃疡的毛病','','PSTR','1','2022-3-17','44','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR20','20','____我有心脏毛病','','PSTR','1','2022-3-17','20','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR45','45','____我担心我的工作','','PSTR','1','2022-3-17','45','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR21','21','____我觉得自己不是很有用','','PSTR','1','2022-3-17','21','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR46','46','____我口腔溃烂','','PSTR','1','2022-3-17','46','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR22','22','____我吸烟','','PSTR','1','2022-3-17','22','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR47','47','____我为琐事忧虑','','PSTR','1','2022-3-17','47','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR23','23','____我肚子不舒服','','PSTR','1','2022-3-17','23','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR48','48','____我呼吸浅促','','PSTR','1','2022-3-17','48','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR24','24','____我觉得不快乐','','PSTR','1','2022-3-17','24','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR49','49','____我觉得胸部紧迫','','PSTR','1','2022-3-17','49','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR25','25','____我流汗','','PSTR','1','2022-3-17','25','0');
insert into t_test_q(code,qnum,title,direction,m_code,qtype,ctime,`order`,isdel) values('PSTR50','50','____我发现难做决定','','PSTR','1','2022-3-17','50','0');

  1. 问题选项表
insert into t_test_a(q_code,direction,score,iscorrect,`order`,isdel) values('PSTR1','从未',0,0,5,0);
insert into t_test_a(q_code,direction,score,iscorrect,`order`,isdel) values('PSTR1','从未',0,0,5,0);
……
-- 省掉248条

频率: 总是–4 经常–3 有时–2 很少–1 从未–0

问题选项表脚本没有撸完, 全部一样5个答案, 50道题共添加250条记录, 会不会有键盘侠认为我很250呢, 可以5条记录搞定的, 非要来一个250; 可能真是多余的, 但为了测评系统的通用性, 多存几条记录对数据库来说很easy。

二、后台设计与实现(.Net Core)

三、前段开发与实现(wx小程序)

四、评测报告

举报

相关推荐

0 条评论