Java swing读取txt文件实现学生考试系统
作者:Woo_home 发布时间:2021-06-13 17:41:02
标签:java,swing,考试系统
本文实例为大家分享了Java swing读取txt文件实现学生考试系统的具体代码,供大家参考,具体内容如下
主要实现了一个简单的倒计时答题系统
源码Testquestion 类
public class Testquestion {
private String questionText ="";//定义题目
private String standardkey = "";// 定义正确答案
private String selectKey ="";// 定义输入答案
public Testquestion(String questionText, String standardkey) {
super();
this.questionText = questionText;
this.standardkey = standardkey;
}
public String getQuestionText() {
return questionText;
}
public void setQuestionText(String questionText) {
this.questionText = questionText;
}
public String getStandardkey() {
return standardkey;
}
public void setStandardkey(String standardkey) {
this.standardkey = standardkey;
}
public String getSelectKey() {
return selectKey;
}
public void setSelectKey(String selectKey) {
this.selectKey = selectKey;
}
public boolean check() {
if (this.selectKey.equals(this.standardkey)) {
return true;
}
else {
return false;
}
}
}
主程序Test2
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.text.NumberFormat;
import java.util.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Test2 extends JFrame implements ActionListener{
private JButton start,commit,back,next;
private JRadioButton aButton,bButton,cButton,dButton;
private ButtonGroup buttonGroup;
private JLabel label,clock;
private JTextArea jTextArea;
private JPanel panel,panel2,panel3;
Testquestion t1;
Testquestion[] questions;
int examtime;
int p=0;//设置题目数指针
int topicnum=0;
int right,error; //答对和答错
ClockDispaly mt; //倒计时模块
public Test2(){
this.setTitle("学生在线考试系统v1"); //设置标题
this.setSize(440,320); //设置窗口大小
this.setLocationRelativeTo(null); //设置显示位置居中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭时关闭
panel = new JPanel(); //初始化面板
panel2 = new JPanel();
panel3 = new JPanel();
label = new JLabel("总考试时间:100分钟 "); //初始化并命名标签
clock = new JLabel();
jTextArea = new JTextArea(10,35); //初始化文本区域
jTextArea.setEditable(false); //设置文本不可修改
aButton = new JRadioButton("A"); //初始化单选按钮
bButton = new JRadioButton("B");
cButton = new JRadioButton("C");
dButton = new JRadioButton("D");
buttonGroup = new ButtonGroup(); //初始化选项组
start = new JButton("开始考试"); //初始化按键
back = new JButton("上一题");
next = new JButton("下一题");
commit = new JButton("提交考试");
aButton.addActionListener(this); //单选按钮添加监听事件
bButton.addActionListener(this);
cButton.addActionListener(this);
dButton.addActionListener(this);
start.addActionListener(this); //按钮添加监听事件
back.addActionListener(this);
next.addActionListener(this);
commit.addActionListener(this);
buttonGroup.add(aButton); //把单选按钮放到选项组
buttonGroup.add(bButton);
buttonGroup.add(cButton);
buttonGroup.add(dButton);
panel.add(label); //把标签放入面板panel
panel.add(clock);
panel.add(start); //把按键放入面板panel
panel2.add(jTextArea); //把文本区域放入面板panel2
panel3.add(aButton); //把单选按钮放入面板panel3
panel3.add(bButton);
panel3.add(cButton);
panel3.add(dButton);
panel3.add(back); //把按键放入面板panel3
panel3.add(next);
panel3.add(commit);
this.add(panel,BorderLayout.NORTH); //设置面板panel放在上面
this.add(panel2,BorderLayout.CENTER); //设置面板panel2放在中间
this.add(panel3, BorderLayout.SOUTH); //设置面板panel放在下面
this.setVisible(true); //设置窗口可见
mt = new ClockDispaly(clock, 30); //调用并设置倒计时的时间
}
public void createExam() {//创建考试模块
Vector<Testquestion> qList=null;//创建一个向量列表,用于动态增加试题
Testquestion t;
String questionText="";
String standardKey;
String s;
try {
FileReader fr=new FileReader("D:\\test.txt");
BufferedReader br = new BufferedReader(fr); //可以每次读一行
qList=new Vector<Testquestion>();
while((s=br.readLine())!=null){//读取试题
if (s.equals("*****")){
questionText="";//准备接收一个题目的内容
s = br.readLine();//获取试题内容的首行
}
if (s.equals("$$$$$")){//准备读取试题的答案
s = br.readLine(); //获取试题的答案
standardKey = s; //把试题答案赋值给正确答案
t = new Testquestion(questionText,standardKey); //把试题和答案赋值给t
qList.add(t); //把试题和答案赋值给列表
}
questionText=questionText+s+'\n';
}
br.close();//关闭缓冲流
fr.close();//关闭文件流
}
catch (IOException e) {
e.printStackTrace(); //打印异常信息
}
topicnum=qList.size(); //统计试题数量
questions=new Testquestion[topicnum];
for (int i=0;i<qList.size();i++) //读取试题
questions[i]=qList.get(i);
}
public void setSelected(String s) {//设置单选按钮不重复模块
if (s.equals("A")) buttonGroup.setSelected(aButton.getModel(), true);
if (s.equals("B")) buttonGroup.setSelected(bButton.getModel(), true);
if (s.equals("C")) buttonGroup.setSelected(cButton.getModel(), true);
if (s.equals("D")) buttonGroup.setSelected(dButton.getModel(), true);
if (s.equals("")) buttonGroup.clearSelection();
}
public void showQuestion() {//设置试题模块
jTextArea.setText("");
jTextArea.append(questions[p].getQuestionText());//在文本区域显示试题
setSelected(questions[p].getSelectKey());
}
public void showScore() {//设置成绩模块
right=0;error=0;
for (int i = 0; i < topicnum; i++) {
if (questions[i].check()) {//判断答案的正确与错误
right++;
}else {
error++;
}
}
int score = (int)(right*100/topicnum); //设置分数
JOptionPane.showMessageDialog(null, "答对"+right+"题,答错"+error+"题,分数为"+score);
}
@Override
public void actionPerformed(ActionEvent e) {//动作监听事件
if (e.getSource()==start) {//开始开始按键实现
createExam(); //调用createExam模块
p=0; //题目序号
showQuestion(); //调用showQuestion模块
start.setEnabled(false);//设置按钮不可点击
mt.start(); //考试时间倒计时启动
}
if (e.getSource()==back) {//上一题的按键实现
p--;
if (p==-1) {
JOptionPane.showMessageDialog(null, "已经是第一题");
p++;
}
showQuestion();
}
if (e.getSource()==next) {//下一题的按键实现
p++;
if (p==topicnum) {
JOptionPane.showMessageDialog(null, "已经是最后一题");
p--;
}
showQuestion();
}
if (e.getSource()==commit) {//提交试卷的按键实现
showScore();
commit.setEnabled(false);
System.exit(0); //退出
}
if(e.getSource()==aButton) questions[p].setSelectKey("A");
if(e.getSource()==bButton) questions[p].setSelectKey("B");
if(e.getSource()==cButton) questions[p].setSelectKey("C");
if(e.getSource()==dButton) questions[p].setSelectKey("D");
}
public static void main(String[] args) {
new Test2();
}
}
class ClockDispaly extends Thread{//设置Thread考试倒计时模块
private JLabel lefttimer;
private int testtime;
public ClockDispaly(JLabel lt,int time) {
lefttimer = lt;
testtime = time * 60;
}
public void run(){
NumberFormat numberFormat = NumberFormat.getInstance();//控制时间的显示格式
numberFormat.setMinimumIntegerDigits(2);//设置数值的整数部分允许的最小位数
int h,m,s;//定义时分秒
while (testtime >= 0) {
h = testtime / 3600;
m = testtime % 3600 / 60;
s = testtime % 60;
StringBuffer stringBuffer = new StringBuffer("");
//增加到lefttimer标签
stringBuffer.append("考试剩余时间为:"+numberFormat.format(h)+":"+numberFormat.format(m)+":"+numberFormat.format(s));
lefttimer.setText(stringBuffer.toString());
try {
Thread.sleep(1000);//延时一秒
} catch (Exception e) {
//ignore error
}
testtime = testtime - 1;
}
if (testtime <= 0) {
JOptionPane.showMessageDialog(null, "考试结束");
System.exit(0);
}
}
}
txt文件
效果图
正在尝试写博客,如写的不好,请评论,谢谢!
更多学习资料请关注专题《管理系统开发》。
来源:https://blog.csdn.net/Woo_home/article/details/86184694


猜你喜欢
- 一、图示二、MapStructpom文件 <dependency> &n
- 一:算术运算符1.算术运算符有哪些①基本四则运算符:+ - * / %②增量赋值运算符:+= -= *= /= %=③自增/自减运算符++
- Java的IO是一个大知识点,如果把它的知识点拆开来说的话估计能说一个星期,关于IO的体系可以看看下面这张图,接下来我们从一段代码开始聊吧,
- sidebarDepth: 3条件构造器说明以下出现的第一个入参boolean condition表示该条件是否加入最后生成的SQL中,例如
- 1.c#里面的TabControl控件没有关闭按钮,而且很难看。2.有一些已经做好的第三方控件,但是收费。3.由于我的故障树推理诊断项目在绘
- 最近项目中用到了Elasticsearch5.4(ES)是比较新的一个版本,使用的过程中出现了很多的问题,很是头疼,但是问题最终还是解决掉了
- 本文实例讲述了java线程同步操作。分享给大家供大家参考,具体如下:java线程同步public class Hello { p
- C++在vscode中的多文件编程相信有很多的小伙伴在一开始的时候,都会对vscode的多文件编程有很多的疑问,网上也有很多的教学,不过网上
- 目录前言Maven依赖代码前言在工作中是否会遇到实用websocket客户端连接服务端的时候,网络波动,服务端断连的情况。会导致客户端被动断
- 环境信息名称版本号Spring Boot2.4.5Idea2021.3.2服务端实现导入依赖<dependency>  
- 简介设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,
- 一 概述GC(Garbage Collection),在程序运行过程中内存空间是有限的,为了更好的的使用有限的内存空间,GC会将不再使用的对
- 一、介绍Spring是通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用Spring提供的ThreadPoolTaskE
- Kotlin中SharedFlow的使用 VS StateFlowSharedFlow 是继承于 Flow ,同时它是 StateFlow
- 一、月份英文简写DateTime dt = DateTime.Now;string MM = dt.AddMonths(-1).ToStri
- 介绍 在开发过程中,我们有时候会遇到非接口调用而出发程序执行任务的一些场景,比如我们使用quartz定时框架通过配置文件来启动定时任务时,
- 0-1背包的问题背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重
- 本文实例讲述了Android编程判断当前应用是否在后台运行的方法。分享给大家供大家参考,具体如下:/** 判断程序是否在后台运行 */pub
- 目录QR二维码QR二维码格式QR二维码结构APIQRCodeDetector类结构检测QR二维码识别QR二维码检测并识别QR二维码操作结果源
- 其实如果我们不进行设置,只是修改了代码,运行程序以后,其出错界面如下图1所示:图1抛出异常如下:************** Excepti