Java swing读取txt文件实现学生考试系统

本文实例为大家分享了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文件

效果图

正在尝试写博客,如写的不好,请评论,谢谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • CCF考试试题之门禁系统java解题代码

    问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请问每一条记录中的读者是第几次出现. 输入格式 输入的第一行包含一个整数n,表示涛涛的记录条数. 第二行包含n个整数,依次表示涛涛的记录中每位读者的编号. 输出格式 输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现. 样例输入 5 1 2 1 1 3 样例输出 1 1 2 3 1 评测用例规模与约定 1≤n≤1,000,读者的编号

  • Java实现在线考试系统与设计(学生功能)

    学生模块功能比较少,就是进行考试和查看自己成绩两个大的功能. 学生进行考试的功能比较复杂(首先做了校验,不在考试时间范围内,不能进行考试) 考试试题是数据库根据发布考试时的条件随机产生的一套试题.因为每次考试题型题量都是不同的,因此我们继续采用JSON的格式去保存数据,当状态为1:表示正在考试:状态为2:表示已经考试结束:状态为3:表示老师已经阅完试卷 (1)当考试考试的时候,会给考上随机产生一套试题,并存储到数据库中,如果考试中电脑突然坏了可以保证重新打开还是之前的试题 (2)考试时间结束会自

  • Java项目实战之在线考试系统的实现(系统介绍)

    1.本系统和现在有的考试系统有以下几种优势: a.和现在有的系统比较起来,本系统有科目.章节.老师.学生.班级等信息的管理,还有批阅试卷查看已批阅试卷等.传统的考试系统划分并不细,业务功能简单. b.和学校的考试系统还有外面的考试系统比较起来,本系统是B/S结构,学校的考试系统一般为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑具有浏览器,在同一局域网就可以进行考试. c.从架构方面来讲,我们的系统为分布式架构,传统的考试系统没有我们的架构合

  • Java swing读取txt文件实现学生考试系统

    本文实例为大家分享了Java swing读取txt文件实现学生考试系统的具体代码,供大家参考,具体内容如下 主要实现了一个简单的倒计时答题系统 源码Testquestion 类 public class Testquestion { private String questionText ="";//定义题目 private String standardkey = "";// 定义正确答案 private String selectKey =""

  • java实现读取txt文件并以在每行以空格取数据

    简单一个例子.其中正则是取消多余空格或者tab键 package test4; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ExplaceSql { public static void main(String[] args) { String filePath = ExplaceSql.class.getResource("").g

  • java实现读取txt文件中的内容

    我们先来看个例子 import java.io.*; /** * Created by liguoqing on 2016/3/28. */ public class ReadTxtFile { public static void readTxt(String filePath) { try { File file = new File(filePath); if(file.isFile() && file.exists()) { InputStreamReader isr = new

  • JAVA实现读取txt文件内容的方法

    通常,我们可以直接通过文件流来读取txt文件的内容,但有时可能会出现乱码!此时只要设置一下文件字符编码即可. public class txttest { /** * 读取txt文件的内容 * @param file 想要读取的文件对象 * @return 返回文件内容 */ public static String txt2String(File file){ StringBuilder result = new StringBuilder(); try{ BufferedReader br

  • Java自动读取指定文件夹下所有文件的方法

    能够自动读取文件夹下的所有文件在处理或者读取数据的时候作用很大,要不然需要手动修改文件路径,非常麻烦.如果该文件夹下只有几个文件倒是还好,但是一旦文件的数量非常大的时候,将导致工作量非常大,而且还可能漏了某些文件. 接下来为大家讲解一下如何实现这个过程. java代码: import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList;

  • Java读取txt文件和写入txt文件的简单实例

    写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂! package edu.thu.keyword.test; import java.io.File; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream;

  • java读取txt文件代码片段

    本文实例为大家分享了java读取txt文件的具体代码,供大家参考,具体内容如下 学习小记: 1.首先要根据路径获取你的 txt 文本文件.File file = new File(path); 2.将获取到的这个字节码流读进缓存.new FileInputStream(file) ; 3.然后对刚才读进缓存的输入流进行解读,生成对应字节流.InputStreamReader(readIn) 4.再然后通过 BufferedReader 这个类进行一行一行的输出.bufferedReader.re

  • Java读取txt文件的方法

    java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了.接下来需要解读成乙方可以理解的东西 既然你使用了FileInputStream().那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据 解读完成后要输出

  • Java读取TXT文件内容的方法

    Java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了.接下来需要解读成乙方可以理解的东西 既然你使用了FileInputStream().那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据 解读完成后要输出

  • Java读取txt文件中的数据赋给String变量方法

    实例如下所示: public class MainActivity { private static final String fileName = "D:/Tao/MyEclipseWorkspace/resources/weather.txt"; public static void main(String[] args) { //读取文件 BufferedReader br = null; StringBuffer sb = null; try { br = new Buffer

随机推荐