Idéias de design para sistema de exames/respostas a perguntas

O sistema de exame/resposta baseado em SpringBoot, por fazer parte da função interceptada de um grande projeto, o código de negócio específico é muito complicado e não será listado aqui.Aqui apresentamos principalmente a ideia de design do sistema, que pode ser usado como design de curso ou design final, consulte

Projeto de banco de dados

Design de classe de entidade

  • teste (papel de teste): registre as informações de um único papel de teste
  • quiz (pergunta): registre as informações de uma única pergunta, um teste corresponde a várias perguntas
  • test_record (conclusão da prova): registre a resposta de um único aluno e gere uma cópia após o envio de cada aluno
  • quiz_record (status de conclusão da pergunta): registre o status de conclusão da pergunta de um determinado aluno, cada aluno gerará uma cópia após o envio, e o status de conclusão de um teste corresponde ao status de conclusão de várias perguntas

insira a descrição da imagem aqui

Tabelas e campos de dados

DROP TABLE IF EXISTS `t_test`;
CREATE TABLE `t_test` (
  `id` char(19) NOT NULL,
  `title` varchar(20) NOT NULL COMMENT '试卷标题',
  `type` int NOT NULL COMMENT '试卷类型',
  `score` int NOT NULL COMMENT '总分',
  `suggest_time` int NOT NULL COMMENT '建议用时',
  `deadline` datetime NOT NULL COMMENT '截止时间',
  `status` int NOT NULL COMMENT '状态',
  `is_deleted` int NOT NULL DEFAULT '0',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

DROP TABLE IF EXISTS `t_test_record`;
CREATE TABLE `t_test_record` (
  `id` char(19) NOT NULL,
  `uid` char(19) NOT NULL COMMENT '做题人',
  `test_id` char(19) NOT NULL,
  `type` int NOT NULL COMMENT '试卷类型',
  `system_score` int NOT NULL COMMENT '系统评分',
  `final_score` int DEFAULT NULL COMMENT '最终得分',
  `score` int NOT NULL COMMENT '总分',
  `quiz_count` int NOT NULL COMMENT '题目数量',
  `correct_count` int NOT NULL COMMENT '正确数量',
  `finish_time` int NOT NULL COMMENT '完成时间',
  `is_deleted` int NOT NULL DEFAULT '0',
  `gmt_create` datetime NOT NULL COMMENT '提交时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

DROP TABLE IF EXISTS `t_quiz`;
CREATE TABLE `t_quiz` (
  `id` char(19) NOT NULL COMMENT '题目ID',
  `test_id` char(19) NOT NULL COMMENT '试卷ID',
  `question` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '问题',
  `options` varchar(800) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '选项',
  `type` int NOT NULL COMMENT '题目类型',
  `answer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '答案',
  `score` int NOT NULL COMMENT '分数',
  `is_deleted` int NOT NULL DEFAULT '0',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

DROP TABLE IF EXISTS `t_quiz_record`;
CREATE TABLE `t_quiz_record` (
  `id` char(19) NOT NULL,
  `test_record_id` char(19) NOT NULL,
  `uid` char(19) NOT NULL COMMENT '做题人',
  `quiz_id` char(19) NOT NULL,
  `user_answer` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户答案',
  `correct_answer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '正确答案',
  `status` int DEFAULT NULL COMMENT '是否正确',
  `is_deleted` int NOT NULL DEFAULT '0',
  `gmt_create` datetime NOT NULL COMMENT '提交时间',
  `score` int NOT NULL COMMENT '获得分数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

realização de função

Tratamento de opções

Eu uso apenas um campo da tabela de dados para as opções aqui. A ideia é conectar múltiplas opções através de '/' durante a leitura e depois armazená-las no banco de dados; ao ler, use o método split de String para dividir múltiplas opções em uma lista. passe para o front-end

Verifique a conclusão do trabalho e a pontuação

Depois que os alunos enviam as provas, o front-end transmite as informações das provas e as respostas às perguntas dos alunos para o back-end, e o back-end consulta as respostas corretas às perguntas correspondentes no banco de dados e as compara com as respostas enviadas pelos alunos para obter o status de conclusão das perguntas dos alunos. Após os dados correspondentes serem armazenados no banco de dados, uma cópia dos dados é devolvida ao front end para que os alunos possam verificar suas respostas

Otimização de função

Para aumentar o rigor do exame e evitar que os alunos compartilhem as respostas, decidi embaralhar aleatoriamente as opções de cada questão quando diferentes alunos recebem as provas. A dificuldade aqui é: o embaralhamento aleatório aqui não pode ser completamente aleatório, porque o mesmo aluno deve ser garantida A consistência entre a interface de atendimento e a interface de resultado de atendimento, por exemplo, escolhi C na hora de fazer a pergunta, mas quando verifiquei o resultado descobri que ficou D...

Idéia de implementação : o front-end adiciona o número de ID do aluno atual ao objeto transmitido ao back-end. Como o ID é fixo, o último dígito do ID é considerado a semente do número aleatório quando as opções são embaralhadas, e o O método shuffle de Collections é chamado para embaralhar as opções, de modo que possa ser garantido que, para um trabalho de teste, a ordem de embaralhamento do mesmo aluno seja a mesma e as ordens de embaralhamento de alunos diferentes sejam diferentes

efeito final

Nesta base, combinado com CRUD e página front-end, o efeito final é o seguinte:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/wzc3614/article/details/127820448
Recomendado
Clasificación