JavaSwing实现完整心理测试考试系统,管理员端与学生端
文章目录
- 一、项目介绍
- 二、效果预览
- 1.登录页面
- 2.考试页面
- 3.考试结果页面
- 4.试卷管理页面
- 5.学生管理页面
- 6.测评结果管理
- 三、主要代码演示
- 1.管理员页面
- 2.考试页面
- 3.登录页面
一、项目介绍
本项目主要使用Java语言,利用JavaSwing实现可视化界面心理测试考试系统,包含完整的逻辑代码,数据文件,图片等等。本系统支持管理员与学生两个权限登录,没有账号的用户可以进行注册。
用户端会从题库中随机抽取20道题目进行测试,考试过程会记录时间,时间结束会强制交卷,用户阅读题目后可以在下方选项进行选择,提交试卷时如果没有选择,会被记为0分。用户可以点击上一页下一页切换题目,系统会记录你的答题状态,已经回答过的问题选项会被记录,并且可以修改。系统还会记录你已答数量,未答数量等。提交试卷后,会根据用户的选择进行打分,并显示出相应的评价,用户可以看到自己历史测试成绩。
管理员端可以管理题库中的试题,进行增加删除等,还可以管理系统中用户信息,授予考试权限。用户的所有测试结果都会显示在管理员端以查看用户的测试结果等,管理员不可以注册,登陆的账号密码已被固定。
二、效果预览
1.登录页面

2.考试页面

3.考试结果页面

4.试卷管理页面

5.学生管理页面

6.测评结果管理

三、主要代码演示
1.管理员页面
public class AdminFrame extends JFrame {private static AdminFrame adminFrame;private QuestionService service = MySpring.getBean("service.QuestionService");private HashSet<Question> list;//分割线private ArrayList<JLabel> arr = new ArrayList<>();protected AdminFrame() {//创建试卷管理按钮JButton man_qu = new JButton("试卷管理");man_qu.setBounds(5, 50, 90, 30);//创建学生管理按钮JButton man_stu = new JButton("学生管理");man_stu.setBounds(5, 150, 90, 30);//创建测评结果管理按钮JButton res_stu = new JButton("测评结果");res_stu.setBounds(5, 250, 90, 30);JTextField title = new JTextField("试题列表");title.setBounds(330, 15, 135, 35);title.setFont(new Font("黑体", Font.BOLD, 30));// 创建编号与编号输入框JLabel quest = new JLabel("问题:");JTextField questionTextField = new JTextField();quest.setBounds(100, 430, 50, 25);questionTextField.setBounds(160, 430, 200, 25);//选项AJLabel aLable = new JLabel("选项A:");JTextField aTextField = new JTextField();aLable.setBounds(100, 460, 50, 25);aTextField.setBounds(160, 460, 200, 25);//选项BJLabel bLable = new JLabel("选项B:");JTextField bTextField = new JTextField();bLable.setBounds(100, 490, 50, 25);bTextField.setBounds(160, 490, 200, 25);//选项CJLabel cLable = new JLabel("选项C:");JTextField cTextField = new JTextField();cLable.setBounds(100, 520, 50, 25);cTextField.setBounds(160, 520, 200, 25);// 删除的问题序号JLabel delnum = new JLabel("删除序号:");JTextField delnumTextField = new JTextField();delnum.setBounds(470, 460, 70, 25);delnumTextField.setBounds(550, 460, 100, 25);//创建增加按钮JButton addQuestion = new JButton("添加试题");addQuestion.setBounds(180, 560, 150, 30);//创建删除按钮JButton delQuestion = new JButton("删除试题");delQuestion.setBounds(500, 560, 150, 30);// 创建表格JTable table = new JTable();//设置表格table.setModel(new DefaultTableModel(new Object[][]{}, new String[]{"序号", "题目", "选项A", "选项B", "选项C"}));table.setRowHeight(16);table.getColumnModel().getColumn(0).setPreferredWidth(40);table.getColumnModel().getColumn(1).setPreferredWidth(360);table.getColumnModel().getColumn(2).setPreferredWidth(100);table.getColumnModel().getColumn(3).setPreferredWidth(100);table.getColumnModel().getColumn(4).setPreferredWidth(100);DefaultTableModel model = (DefaultTableModel) table.getModel();list = QuestionFileReader.getQuestion();//从文件查找数据放入表格中if (!list.isEmpty()) {int index = 1;for (Question question : list) {String[] str = question.getTitle().split(" ");//去除掉选项前面的ABC以及换行符
if (str[0].length() >= 4 && str[1].length() >= 4 && str[2].length() >= 4 && str[3].length() >= 2)model.addRow(new Object[]{index++, str[0].substring(0, str[0].length() - 4), str[1].substring(2, str[1].length() - 4), str[2].substring(2, str[2].length() - 4), str[3].substring(2)});}}// 创建table滚动窗体JScrollPane scrollPane = new JScrollPane(table);scrollPane.setBounds(50, 60, 700, 350);//创建监听器addQuestion.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取输入的问题和选项String question = questionTextField.getText();String A = aTextField.getText();String B = bTextField.getText();String C = cTextField.getText();String res = question + "
A." + A + "
B." + B + "
C." + C;service.saveQuestion(res);JOptionPane.showMessageDialog(AdminFrame.this, "保存成功");Object[] data = new Object[]{list.size() + 1, question, A, B, C};//将题添加到缓存list.add(new Question(res));//将新数据显示在表格中model.addRow(data);//增加后清空数据questionTextField.setText("");aTextField.setText("");bTextField.setText("");cTextField.setText("");}});delQuestion.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int num = Integer.valueOf(delnumTextField.getText());//删除序号对应的行的数据for (int i = 0; i < model.getRowCount(); i++) {int number = (Integer) model.getValueAt(i, 0);if (num == number) {model.removeRow(i);}if (i == model.getRowCount() - 1) {JOptionPane.showMessageDialog(AdminFrame.this, "该序号不存在");}}//增加后清空数据delnumTextField.setText("");}});JTextField title2 = new JTextField("学生列表");title2.setBounds(330, 15, 135, 35);title2.setFont(new Font("黑体", Font.BOLD, 30));JLabel name = new JLabel("姓名:");JTextField nameTextField = new JTextField();name.setBounds(100, 430, 50, 25);nameTextField.setBounds(160, 430, 200, 25);JLabel num = new JLabel("学号:");JTextField numTextField = new JTextField();num.setBounds(100, 460, 50, 25);numTextField.setBounds(160, 460, 200, 25);JLabel major = new JLabel("专业:");JTextField majorTextField = new JTextField();major.setBounds(100, 490, 50, 25);majorTextField.setBounds(160, 490, 200, 25);JLabel class1 = new JLabel("班级:");JTextField class1TextField = new JTextField();class1.setBounds(100, 520, 50, 25);class1TextField.setBounds(160, 520, 200, 25);// 删除的问题序号JLabel delnum1 = new JLabel("删除序号:");JTextField delnumTextField1 = new JTextField();delnum1.setBounds(470, 460, 70, 25);delnumTextField1.setBounds(550, 460, 100, 25);JTable table2 = new JTable();//设置表格table2.setModel(new DefaultTableModel(new Object[][]{}, new String[]{"序号", "姓名", "学号", "专业", "班级"}));table2.setRowHeight(16);DefaultTableModel model2 = (DefaultTableModel) table2.getModel();ArrayList<String> arr1 = UserFileReader.getStu();//从文件查找数据放入表格中if (!arr1.isEmpty()) {int index = 1;for (String strs : arr1) {String[] str = strs.split(" ");model2.addRow(new Object[]{index++, str[0], str[1], str[2], str[3]});}}// 创建学生table滚动窗体JScrollPane scrollPane2 = new JScrollPane(table2);scrollPane2.setBounds(50, 60, 700, 350);//创建增加按钮JButton addStu = new JButton("添加学生信息");addStu.setBounds(180, 560, 150, 30);//创建删除按钮JButton delStu = new JButton("删除学生信息");delStu.setBounds(500, 560, 150, 30);addStu.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取输入的问题和选项String name = nameTextField.getText();String num = numTextField.getText();String major = majorTextField.getText();String class1 = class1TextField.getText();UserFileReader.saveStu(name, num, major, class1);Object[] data = new Object[]{arr1.size() + 1, name, num, major, class1};JOptionPane.showMessageDialog(AdminFrame.this, "保存成功");//将新数据显示在表格中model2.addRow(data);//增加后清空数据questionTextField.setText("");aTextField.setText("");bTextField.setText("");cTextField.setText("");}});delStu.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int num = Integer.valueOf(delnumTextField1.getText());//删除序号对应的行的数据for (int i = 0; i < model2.getRowCount(); i++) {int number = (Integer) model2.getValueAt(i, 0);if (num == number) {model2.removeRow(i);JOptionPane.showMessageDialog(AdminFrame.this, "删除成功");break;}if (i == model2.getRowCount() - 1) {JOptionPane.showMessageDialog(AdminFrame.this, "该序号不存在");}}//增加后清空数据delnumTextField.setText("");}});//心里测试结果JTextField title3 = new JTextField("测评结果列表");title3.setBounds(300, 15, 200, 35);title3.setFont(new Font("黑体", Font.BOLD, 30));JTable table3 = new JTable();//设置表格table3.setModel(new DefaultTableModel(new Object[][]{}, new String[]{"序号", "姓名", "评分", "评价"}));table3.setRowHeight(16);table3.getColumnModel().getColumn(0).setPreferredWidth(40);table3.getColumnModel().getColumn(1).setPreferredWidth(70);table3.getColumnModel().getColumn(2).setPreferredWidth(70);table3.getColumnModel().getColumn(3).setPreferredWidth(520);DefaultTableModel model3 = (DefaultTableModel) table3.getModel();ArrayList<String> arr2 = QuestionFileReader.readResult();//从文件查找数据放入表格中if (!arr2.isEmpty()) {int index = 1;for (String strs : arr2) {String[] str = strs.split(":");String[] str2=str[2].split("。");model3.addRow(new Object[]{index++, str[0], str2[0], str2[1]+str[3]});}}// 创建测评结果table滚动窗体JScrollPane scrollPane3 = new JScrollPane(table3);scrollPane3.setBounds(50, 60, 700, 350);JPanel container = new JPanel();//试卷管理内容页JPanel buttons = new JPanel();//按钮页JPanel stupanl = new JPanel();//学生内容页JPanel resultpanl = new JPanel();//学生内容页JPanel mainpanl = new JPanel();//总页面buttons.add(man_qu);buttons.add(man_stu);buttons.add(res_stu);stupanl.add(scrollPane2);stupanl.add(title2);stupanl.add(addStu);stupanl.add(delStu);stupanl.add(name);stupanl.add(nameTextField);stupanl.add(num);stupanl.add(numTextField);stupanl.add(major);stupanl.add(majorTextField);stupanl.add(class1);stupanl.add(class1TextField);stupanl.add(delnum1);stupanl.add(delnumTextField1);container.add(title);container.add(scrollPane);container.add(quest);container.add(questionTextField);container.add(aLable);container.add(aTextField);container.add(bLable);container.add(bTextField);container.add(addQuestion);container.add(cTextField);container.add(cLable);container.add(delQuestion);container.add(delnum);container.add(delnumTextField);resultpanl.add(scrollPane3);resultpanl.add(title3);//设置button区域的位置buttons.setLayout(null);buttons.setBounds(10, 10, 100, 600);buttons.setBorder(BorderFactory.createLineBorder(Color.GRAY));//内容区域位置container.setLayout(null);container.setBounds(120, 10, 780, 600);container.setBorder(BorderFactory.createLineBorder(Color.GRAY));//内容区域位置stupanl.setLayout(null);stupanl.setBounds(120, 10, 780, 600);stupanl.setBorder(BorderFactory.createLineBorder(Color.GRAY));//内容区域位置resultpanl.setLayout(null);resultpanl.setBounds(120, 10, 780, 600);resultpanl.setBorder(BorderFactory.createLineBorder(Color.GRAY));mainpanl.add(container);mainpanl.add(buttons);mainpanl.add(stupanl);mainpanl.add(resultpanl);stupanl.setVisible(false);resultpanl.setVisible(false);man_qu.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {container.setVisible(true);stupanl.setVisible(false);resultpanl.setVisible(false);}});man_stu.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {container.setVisible(false);stupanl.setVisible(true);resultpanl.setVisible(false);}});res_stu.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {container.setVisible(false);stupanl.setVisible(false);resultpanl.setVisible(true);}});mainpanl.setLayout(null);mainpanl.setBackground(Color.LIGHT_GRAY);this.add(mainpanl);this.setTitle("后台数据管理");this.setVisible(true);this.setSize(925, 658);//this.setResizable(false);//不想让窗体拖拽大小this.setLocationRelativeTo(null);// 设置居中显示// 设置Jframe窗体关闭时 程序结束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public synchronized static AdminFrame getAdminFrame() {if (adminFrame == null) {adminFrame = new AdminFrame();}return adminFrame;}
}
2.考试页面
public class ExamFrame extends BaseFrame {private static ExamFrame examFrame;//当前登录的用户private static String account;private QuestionService service = MySpring.getBean("service.QuestionService");//试卷private ArrayList<Question> paper = service.getPaper(20);//答题卡private String[] answers = new String[paper.size() + 1];private int totalCount = paper.size();//题目总数private int unanswerCount = totalCount;//未答//控制窗体右侧的数值显示private int nowNumber = 0;//当前题号private int answerCount = 0;//已答//记录倒计时事件, 分钟为单位private int time = 20;//内部类 - 线程对象, 处理事件倒计时private TimeControlThread timeControlThread = new TimeControlThread();//添加三个panel 区域的分割private JPanel mainPanel = new JPanel();//负责答题主页面展示private JPanel messagePanel = new JPanel();//负责右侧信息展示private JPanel buttonPanel = new JPanel();//负责下方按钮的展示//添加主要答题的组件private JTextArea examArea = new JTextArea();//考试文本域 展示题目private JScrollPane scrollPane = new JScrollPane(examArea);//滚动条//添加右侧信息的组件private JLabel pictureLabel = new JLabel();//展示图片信息private JLabel nowNumLabel = new JLabel("当前题号:");//提示当前的题号private JLabel totalCountLabel = new JLabel("题目总数:");//提示题目的总数private JLabel answerCountLabel = new JLabel("已答题数:");//提示已经答过的题目数量private JLabel unanswerCountLabel = new JLabel("未答题数:");//提示未答题数量private JTextField nowNumField = new JTextField();//展示题号private JTextField totalCountField = new JTextField();//展示总数private JTextField answerCountField = new JTextField();//展示已答数private JTextField unanswerCountField = new JTextField();//展示未答数private JLabel timeLabel = new JLabel("剩余答题时间");//提示剩余时间private JLabel realTimeLabel = new JLabel();//倒计时真实时间//添加下方按钮的组件private JButton aButton = new JButton("A");//a按钮private JButton bButton = new JButton("B");//b按钮private JButton cButton = new JButton("C");//c按钮private JButton prevButton = new JButton("上一题");//previous题private JButton nextButton = new JButton("下一题");//next题private JButton submitButton = new JButton("提交试卷");//提交按钮private ExamFrame() {super("考试窗口");this.init();}public synchronized static ExamFrame getExamFrame(String user) {if (examFrame == null) {examFrame = new ExamFrame();}account = user;return examFrame;}@Overrideprotected void setFontAndSoOn() {//设置panel布局管理---->自定义mainPanel.setLayout(null);mainPanel.setBackground(Color.LIGHT_GRAY);//设置message区域的位置messagePanel.setLayout(null);messagePanel.setBounds(680, 10, 300, 550);messagePanel.setBorder(BorderFactory.createLineBorder(Color.GRAY));//设置button区域的位置buttonPanel.setLayout(null);buttonPanel.setBounds(16, 470, 650, 90);buttonPanel.setBorder(BorderFactory.createLineBorder(Color.GRAY));//手动设置每一个组件的位置 字体 背景scrollPane.setBounds(16, 10, 650, 450);examArea.setFont(new Font("黑体", Font.BOLD, 20));examArea.setEnabled(false);//文本域中的文字不能编辑this.showQuestion();//展示第一道题pictureLabel.setBounds(10, 10, 280, 230);pictureLabel.setBorder(BorderFactory.createLineBorder(Color.GRAY));//pictureLabel.setIcon(null);//展示图片信息nowNumLabel.setBounds(40, 270, 100, 30);nowNumLabel.setFont(new Font("黑体", Font.PLAIN, 20));nowNumField.setBounds(150, 270, 100, 30);nowNumField.setFont(new Font("黑体", Font.BOLD, 20));nowNumField.setBorder(BorderFactory.createLineBorder(Color.GRAY));nowNumField.setEnabled(false);nowNumField.setHorizontalAlignment(JTextField.CENTER);totalCountLabel.setBounds(40, 310, 100, 30);totalCountLabel.setFont(new Font("黑体", Font.PLAIN, 20));totalCountField.setBounds(150, 310, 100, 30);totalCountField.setFont(new Font("黑体", Font.BOLD, 20));totalCountField.setBorder(BorderFactory.createLineBorder(Color.GRAY));totalCountField.setEnabled(false);totalCountField.setHorizontalAlignment(JTextField.CENTER);answerCountLabel.setBounds(40, 350, 100, 30);answerCountLabel.setFont(new Font("黑体", Font.PLAIN, 20));answerCountField.setBounds(150, 350, 100, 30);answerCountField.setFont(new Font("黑体", Font.BOLD, 20));answerCountField.setBorder(BorderFactory.createLineBorder(Color.GRAY));answerCountField.setEnabled(false);answerCountField.setHorizontalAlignment(JTextField.CENTER);unanswerCountLabel.setBounds(40, 390, 100, 30);unanswerCountLabel.setFont(new Font("黑体", Font.PLAIN, 20));unanswerCountField.setBounds(150, 390, 100, 30);unanswerCountField.setFont(new Font("黑体", Font.BOLD, 20));unanswerCountField.setBorder(BorderFactory.createLineBorder(Color.GRAY));unanswerCountField.setEnabled(false);unanswerCountField.setHorizontalAlignment(JTextField.CENTER);timeLabel.setBounds(90, 460, 150, 30);timeLabel.setFont(new Font("黑体", Font.PLAIN, 20));timeLabel.setForeground(Color.BLUE);realTimeLabel.setBounds(108, 490, 150, 30);realTimeLabel.setFont(new Font("黑体", Font.BOLD, 20));realTimeLabel.setForeground(Color.BLUE);aButton.setBounds(110, 10, 120, 30);aButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));bButton.setBounds(260, 10, 120, 30);bButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));cButton.setBounds(410, 10, 120, 30);cButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));prevButton.setBounds(60, 50, 100, 30);prevButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));nextButton.setBounds(490, 50, 100, 30);nextButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));submitButton.setBounds(276, 50, 100, 30);submitButton.setForeground(Color.RED);submitButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//设置控制窗体右侧的数值nowNumField.setText(nowNumber + 1 + "");totalCountField.setText(totalCount + "");answerCountField.setText(answerCount + "");unanswerCountField.setText(unanswerCount + "");}@Overrideprotected void addElement() {messagePanel.add(pictureLabel);messagePanel.add(nowNumLabel);messagePanel.add(nowNumField);messagePanel.add(totalCountLabel);messagePanel.add(totalCountField);messagePanel.add(answerCountLabel);messagePanel.add(answerCountField);messagePanel.add(unanswerCountLabel);messagePanel.add(unanswerCountField);messagePanel.add(timeLabel);messagePanel.add(realTimeLabel);buttonPanel.add(aButton);buttonPanel.add(bButton);buttonPanel.add(cButton);buttonPanel.add(prevButton);buttonPanel.add(nextButton);buttonPanel.add(submitButton);mainPanel.add(scrollPane);mainPanel.add(messagePanel);mainPanel.add(buttonPanel);this.add(mainPanel);}@Overrideprotected void addListener() {//4个选项按钮ActionListener option = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//清楚全部选项按钮的颜色ExamFrame.this.clearOptionButtonColor();//处理点击的按钮JButton button = (JButton) e.getSource();button.setBackground(Color.GREEN);//填写答题卡answers[nowNumber] = button.getText();}};aButton.addActionListener(option);bButton.addActionListener(option);cButton.addActionListener(option);//next按钮nextButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (nowNumber == 0) {prevButton.setEnabled(true);}//清楚全部选项按钮的颜色ExamFrame.this.clearOptionButtonColor();//题号增加nowNumber++;//主界面与按钮界面变化if (nowNumber == totalCount) {//答完examArea.setText("全部题目已经回答完毕\n请点击下方提交按钮");//next按钮失效nextButton.setEnabled(false);//全部选项按钮失效ExamFrame.this.setOptionButtonEnabled(false);} else {ExamFrame.this.showQuestion();//修改右侧题号ExamFrame.this.nowNumField.setText(nowNumber + 1 + "");}//修改已答题 未答题ExamFrame.this.answerCountField.setText(++answerCount + "");ExamFrame.this.unanswerCountField.setText(--unanswerCount + "");//还原之前的选择ExamFrame.this.restoreButton();}});//prev按钮prevButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (nowNumber == totalCount) {ExamFrame.this.setOptionButtonEnabled(true);nextButton.setEnabled(true);}//清除全部选项按钮的颜色ExamFrame.this.clearOptionButtonColor();//题号减少nowNumber--;//按钮界面变化if (nowNumber == 0) {prevButton.setEnabled(false);}//显示题目ExamFrame.this.showQuestion();//修改右侧题号 已答题 未答题nowNumField.setText(nowNumber + 1 + "");answerCountField.setText(--answerCount + "");unanswerCountField.setText(++unanswerCount + "");//还原之前的选择ExamFrame.this.restoreButton();}});//submit按钮submitButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//0.显示确认框//是0 否1 取消2int value = JOptionPane.showConfirmDialog(ExamFrame.this, "确认提交?");if (value == 0) {//1.倒计时停止timeControlThread.stopTimeThread();//2.所有按钮失效setOptionButtonEnabled(false);nextButton.setEnabled(false);prevButton.setEnabled(false);//3.选项按钮颜色清楚clearOptionButtonColor();//4.最终成绩的计算,并展示float score = gradePaper();StringBuffer sb1 = new StringBuffer();String result = "";if (score >= 61 && score <= 75) {result = "你本次测试的最终得分是: " + score + "。\n" +"儿童,儿童心理年龄的关键词是:幼稚。" + "\n" +"你的心理年龄只有10岁左右,你对这个世界还充满了好奇心,一切在你看来" + "\n" +"都是新鲜和有趣的。你对外界的反应很直接,对情绪的控制能力很差。如果" + "\n" +"说你的生理年龄超过了心理年龄,那么你会很难适应周围的环境。";} else if (score >= 51 && score <= 60) {result = "你本次测试的最终得分是: " + score + "。\n" +"年轻人,年轻人心理年龄的关键词是:冲突。" + "\n" +"你的心理年龄在20~30岁,你已经有了自己的想法,也能控制一部分情绪和承担一定的" + "\n" +"责任。当你的理想化和现实发生冲突的时候,你会感到很痛苦,正在不断地摸索解决的" + "\n" +"办法。如果说你的生理年龄与你的心理年龄产生超 过10岁以上的差异,那么你的适应" + "\n" +"能力有待调节。";} else if (score >= 36 && score <= 50) {result = "你本次测试的最终得分是: " + score + "。\n" +"中年人,中年人心理年龄的关键词是:成熟。" + "\n" +"你的心理年龄在35~50岁,你完全知道怎么处理各种矛盾,你也知道自己的问题出在哪" + "\n" +"里,你有了丰富的社会经验和与人打交道的能力。对于生活中的大部分问题,你已经" + "\n" +"有了解决的办法。如果说你的生理年龄与你的心理 年龄相差无几,那么你的适应能力" + "\n" +"已经很好。";} else {result = "你本次测试的最终得分是: " + score + "。\n" +"老人,老年人心理年龄的关键词是:固执。" + "\n" +"你的心理年龄在50~70岁,你认为自己已经完全了解整个社会的所有问题,你形" + "\n" +"成了自己的处世风格。遇到问题,你坚信只有你知道唯一的 正确答案。内心深处" + "\n" +"已经逐渐拒绝接受改变。如果说你的生理年龄比你的心理年龄小,那么 你需要的" + "\n" +"是打破固有的约束,跟上社会的步伐继续前进。";}sb1.append(result);sb1.append("\n\n您以前的测试结果为:\n");ArrayList<String> strings = QuestionFileReader.readResult(account);for (String str : strings) {sb1.append(str + "\n");}examArea.setText(sb1.toString());//输出文件时去掉换行String[] strs = result.split("\n");StringBuffer sb = new StringBuffer();for (String str : strs) {sb.append(str);}service.saveResult(account + ":" + sb.toString());}}});}@Overrideprotected void setFrameSelf() {this.setBounds(260, 130, 1000, 600);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);//不想让窗体拖拽大小this.setVisible(true);//最终展示整个窗体timeControlThread.start();//启动线程, 倒计时开始}//展示一道题目private void showQuestion() {Question question = paper.get(nowNumber);//展示图片pictureLabel.setIcon(this.drawPicture("src\\img\\" + "exam.jpg"));examArea.setText((nowNumber + 1) + "." + question.getTitle().replace("
", "\n "));}//画图private ImageIcon drawPicture(String path) {ImageIcon imageIcon = new ImageIcon(path);imageIcon.setImage(imageIcon.getImage().getScaledInstance(280, 230, Image.SCALE_DEFAULT));return imageIcon;}//下一题时清除全部选项按钮的颜色private void clearOptionButtonColor() {aButton.setBackground(null);bButton.setBackground(null);cButton.setBackground(null);}//控制全部选项按钮是否可用private void setOptionButtonEnabled(boolean key) {aButton.setEnabled(key);bButton.setEnabled(key);cButton.setEnabled(key);}//还原上一题的选项private void restoreButton() {String answer = answers[nowNumber];if (answer == null) {return;}switch (answer) {case "A":aButton.setBackground(Color.GREEN);break;case "B":bButton.setBackground(Color.GREEN);break;case "C":cButton.setBackground(Color.GREEN);break;}}//计算最终成绩private float gradePaper() {float score = 0;for (int i = 0; i < paper.size(); i++) {if ("A".equals(answers[i])) {score += 3;} else if ("B".equals(answers[i])) {score += 2;} else if ("C".equals(answers[i])) {score += 1;} else {score += 0;}}return score;}//用来处理倒计时问题private class TimeControlThread extends Thread {private boolean flag = true;//此时正常执行线程处理public void stopTimeThread() {this.flag = false;}@Overridepublic void run() {//time转化为 小时:分钟:秒int hour = time / 60;int minute = time % 60;int second = 0;while (flag) {//处理时分秒的显示StringBuilder builder = new StringBuilder();if (hour >= 0 && hour < 10) {builder.append("0");}builder.append(hour);builder.append(":");if (minute >= 0 && minute < 10) {builder.append("0");}builder.append(minute);builder.append(":");if (second >= 0 && second < 10) {builder.append("0");}builder.append(second);//展示realTimeLabel.setText(builder.toString());try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}//改变时间if (second > 0) {second--;} else {if (minute > 0) {second = 59;minute--;} else {if (hour > 0) {second = 59;minute = 59;hour--;} else {//考试结束realTimeLabel.setForeground(Color.RED);setOptionButtonEnabled(false);nextButton.setEnabled(false);prevButton.setEnabled(false);JOptionPane.showMessageDialog(ExamFrame.this, "考试结束了");break;}}}}}}}
3.登录页面
public class LoginFrame extends BaseFrame {private LoginFrame(){super("登录窗口");this.init();}private static LoginFrame loginFrame;public synchronized static LoginFrame getLoginFrame(){if (loginFrame == null){loginFrame = new LoginFrame();}return loginFrame;}private UserService service = MySpring.getBean("service.UserService");//创建一个面板private JPanel mainPanel = new JPanel();//创建title显示标题private JLabel titleLabel = new JLabel("心 理 测 试 系 统");//创建账号和密码的标题private JLabel accountLabel = new JLabel("账 户:");private JLabel passwordLabel = new JLabel("密 码:");private JLabel labDo = new JLabel("权 限:");private String[] labs = {"管理员","用户"};private JComboBox labCombo = new JComboBox(labs);//创建输入账号和密码的文本框/密码框private JTextField accountField = new JTextField();private JPasswordField passwordField = new JPasswordField();//创建两个按钮private JButton loginButton = new JButton("登 录");private JButton registerButton = new JButton("注 册");//设置每一个组件的位置 大小 字体 布局等等protected void setFontAndSoOn(){//设置组件的位置----布局管理//设置panel的布局管理为自定义方式mainPanel.setLayout(null);//设置标题组件的位置和字体大小titleLabel.setBounds(120,40,340,35);titleLabel.setFont(new Font("黑体",Font.BOLD,34));//设置用户名label位置和字体大小accountLabel.setBounds(94,124,90,30);accountLabel.setFont(new Font("黑体",Font.BOLD,24));//设置用户名filed位置和字体大小accountField.setBounds(204,124,260,30);accountField.setFont(new Font("黑体",Font.BOLD,24));//设置密码label位置和字体大小passwordLabel.setBounds(94,174,90,30);passwordLabel.setFont(new Font("黑体",Font.BOLD,24));//设置密码field位置和字体大小passwordField.setBounds(204,174,260,30);passwordField.setFont(new Font("黑体",Font.BOLD,24));labDo.setBounds(94,214,90,30);labDo.setFont(new Font("黑体",Font.BOLD,24));labCombo.setBounds(204,214,120,30);//设置登录按钮的位置和文字大小loginButton.setBounds(154,292,100,30);loginButton.setFont(new Font("黑体",Font.BOLD,22));//设置退出按钮的位置和文字大小registerButton.setBounds(304,292,100,30);registerButton.setFont(new Font("黑体",Font.BOLD,22));}//将所有的组件添加在窗体上protected void addElement(){//将所有的组件添加至窗体上mainPanel.add(titleLabel);mainPanel.add(accountLabel);mainPanel.add(accountField);mainPanel.add(passwordLabel);mainPanel.add(passwordField);mainPanel.add(loginButton);mainPanel.add(registerButton);mainPanel.add(labCombo);mainPanel.add(labDo);this.add(mainPanel);}//绑定事件监听protected void addListener(){loginButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//1.获取用户输入的账号和密码// 从登录窗口上的组件内获取 文本框 密码框String account = accountField.getText();String password = new String(passwordField.getPassword());String power= (String) labCombo.getSelectedItem();if(power.equals("管理员")){if(account.equals("admin")&&password.equals("admin")){LoginFrame.this.setVisible(false);//将登录窗口隐藏AdminFrame.getAdminFrame();}else{//弹出一个警告框 告诉登录失败啦JOptionPane.showMessageDialog(LoginFrame.this,"用户名或密码错误");//设置文本框和密码框的值为空accountField.setText("");passwordField.setText("");}}else{String result = service.login(account,password);if (result.equals("登录成功")){//用户登录成功LoginFrame.this.setVisible(false);//将登录窗口隐藏ExamFrame.getExamFrame(account);}else{//弹出一个警告框 告诉登录失败啦JOptionPane.showMessageDialog(LoginFrame.this,result);//设置文本框和密码框的值为空accountField.setText("");passwordField.setText("");}}}});registerButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {LoginFrame.this.setVisible(false);//将登录窗口隐藏RegisterFrame.getRegisterFrame();}});}protected void setFrameSelf(){//设置窗体起始位置和大小this.setBounds(600,280,560,400);//设置点击关闭退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体大小不可拖拽this.setResizable(false);//设置窗体显示状态this.setVisible(true);}}
以上就是主要部分的内容展示,要获取完整代码,可以去我的git上面直接下载哦!喜欢的话点点赞!感谢您的支持!
->心理测试考试系统完整代码
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
