Java swing讀取txt文件實(shí)現(xiàn)學(xué)生考試系統(tǒng)
本文實(shí)例為大家分享了Java swing讀取txt文件實(shí)現(xiàn)學(xué)生考試系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
主要實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的倒計(jì)時(shí)答題系統(tǒng)
源碼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;//設(shè)置題目數(shù)指針
int topicnum=0;
int right,error; //答對(duì)和答錯(cuò)
ClockDispaly mt; //倒計(jì)時(shí)模塊
public Test2(){
this.setTitle("學(xué)生在線考試系統(tǒng)v1"); //設(shè)置標(biāo)題
this.setSize(440,320); //設(shè)置窗口大小
this.setLocationRelativeTo(null); //設(shè)置顯示位置居中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設(shè)置關(guān)閉時(shí)關(guān)閉
panel = new JPanel(); //初始化面板
panel2 = new JPanel();
panel3 = new JPanel();
label = new JLabel("總考試時(shí)間:100分鐘 "); //初始化并命名標(biāo)簽
clock = new JLabel();
jTextArea = new JTextArea(10,35); //初始化文本區(qū)域
jTextArea.setEditable(false); //設(shè)置文本不可修改
aButton = new JRadioButton("A"); //初始化單選按鈕
bButton = new JRadioButton("B");
cButton = new JRadioButton("C");
dButton = new JRadioButton("D");
buttonGroup = new ButtonGroup(); //初始化選項(xiàng)組
start = new JButton("開(kāi)始考試"); //初始化按鍵
back = new JButton("上一題");
next = new JButton("下一題");
commit = new JButton("提交考試");
aButton.addActionListener(this); //單選按鈕添加監(jiān)聽(tīng)事件
bButton.addActionListener(this);
cButton.addActionListener(this);
dButton.addActionListener(this);
start.addActionListener(this); //按鈕添加監(jiān)聽(tīng)事件
back.addActionListener(this);
next.addActionListener(this);
commit.addActionListener(this);
buttonGroup.add(aButton); //把單選按鈕放到選項(xiàng)組
buttonGroup.add(bButton);
buttonGroup.add(cButton);
buttonGroup.add(dButton);
panel.add(label); //把標(biāo)簽放入面板panel
panel.add(clock);
panel.add(start); //把按鍵放入面板panel
panel2.add(jTextArea); //把文本區(qū)域放入面板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); //設(shè)置面板panel放在上面
this.add(panel2,BorderLayout.CENTER); //設(shè)置面板panel2放在中間
this.add(panel3, BorderLayout.SOUTH); //設(shè)置面板panel放在下面
this.setVisible(true); //設(shè)置窗口可見(jiàn)
mt = new ClockDispaly(clock, 30); //調(diào)用并設(shè)置倒計(jì)時(shí)的時(shí)間
}
public void createExam() {//創(chuàng)建考試模塊
Vector<Testquestion> qList=null;//創(chuàng)建一個(gè)向量列表,用于動(dòng)態(tài)增加試題
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="";//準(zhǔn)備接收一個(gè)題目的內(nèi)容
s = br.readLine();//獲取試題內(nèi)容的首行
}
if (s.equals("$$$$$")){//準(zhǔn)備讀取試題的答案
s = br.readLine(); //獲取試題的答案
standardKey = s; //把試題答案賦值給正確答案
t = new Testquestion(questionText,standardKey); //把試題和答案賦值給t
qList.add(t); //把試題和答案賦值給列表
}
questionText=questionText+s+'\n';
}
br.close();//關(guān)閉緩沖流
fr.close();//關(guān)閉文件流
}
catch (IOException e) {
e.printStackTrace(); //打印異常信息
}
topicnum=qList.size(); //統(tǒng)計(jì)試題數(shù)量
questions=new Testquestion[topicnum];
for (int i=0;i<qList.size();i++) //讀取試題
questions[i]=qList.get(i);
}
public void setSelected(String s) {//設(shè)置單選按鈕不重復(fù)模塊
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() {//設(shè)置試題模塊
jTextArea.setText("");
jTextArea.append(questions[p].getQuestionText());//在文本區(qū)域顯示試題
setSelected(questions[p].getSelectKey());
}
public void showScore() {//設(shè)置成績(jī)模塊
right=0;error=0;
for (int i = 0; i < topicnum; i++) {
if (questions[i].check()) {//判斷答案的正確與錯(cuò)誤
right++;
}else {
error++;
}
}
int score = (int)(right*100/topicnum); //設(shè)置分?jǐn)?shù)
JOptionPane.showMessageDialog(null, "答對(duì)"+right+"題,答錯(cuò)"+error+"題,分?jǐn)?shù)為"+score);
}
@Override
public void actionPerformed(ActionEvent e) {//動(dòng)作監(jiān)聽(tīng)事件
if (e.getSource()==start) {//開(kāi)始開(kāi)始按鍵實(shí)現(xiàn)
createExam(); //調(diào)用createExam模塊
p=0; //題目序號(hào)
showQuestion(); //調(diào)用showQuestion模塊
start.setEnabled(false);//設(shè)置按鈕不可點(diǎn)擊
mt.start(); //考試時(shí)間倒計(jì)時(shí)啟動(dòng)
}
if (e.getSource()==back) {//上一題的按鍵實(shí)現(xiàn)
p--;
if (p==-1) {
JOptionPane.showMessageDialog(null, "已經(jīng)是第一題");
p++;
}
showQuestion();
}
if (e.getSource()==next) {//下一題的按鍵實(shí)現(xiàn)
p++;
if (p==topicnum) {
JOptionPane.showMessageDialog(null, "已經(jīng)是最后一題");
p--;
}
showQuestion();
}
if (e.getSource()==commit) {//提交試卷的按鍵實(shí)現(xiàn)
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{//設(shè)置Thread考試倒計(jì)時(shí)模塊
private JLabel lefttimer;
private int testtime;
public ClockDispaly(JLabel lt,int time) {
lefttimer = lt;
testtime = time * 60;
}
public void run(){
NumberFormat numberFormat = NumberFormat.getInstance();//控制時(shí)間的顯示格式
numberFormat.setMinimumIntegerDigits(2);//設(shè)置數(shù)值的整數(shù)部分允許的最小位數(shù)
int h,m,s;//定義時(shí)分秒
while (testtime >= 0) {
h = testtime / 3600;
m = testtime % 3600 / 60;
s = testtime % 60;
StringBuffer stringBuffer = new StringBuffer("");
//增加到lefttimer標(biāo)簽
stringBuffer.append("考試剩余時(shí)間為:"+numberFormat.format(h)+":"+numberFormat.format(m)+":"+numberFormat.format(s));
lefttimer.setText(stringBuffer.toString());
try {
Thread.sleep(1000);//延時(shí)一秒
} catch (Exception e) {
//ignore error
}
testtime = testtime - 1;
}
if (testtime <= 0) {
JOptionPane.showMessageDialog(null, "考試結(jié)束");
System.exit(0);
}
}
}
txt文件

效果圖

正在嘗試寫(xiě)博客,如寫(xiě)的不好,請(qǐng)?jiān)u論,謝謝!
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot中@Import三種使用方式實(shí)例詳解
這篇文章主要介紹了Spring?Boot中@Import三種使用方式,主要有引入普通類,引入importSelector的實(shí)現(xiàn)類及引入importBeanDefinitionRegister的實(shí)現(xiàn)類,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-11-11
因Spring AOP導(dǎo)致@Autowired依賴注入失敗的解決方法
這篇文章主要給大家介紹了因Spring AOP導(dǎo)致@Autowired依賴注入失敗的解決方法,文中通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
Java微信公眾平臺(tái)開(kāi)發(fā)(8) 多媒體消息回復(fù)
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第八步,微信多媒體消息回復(fù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
springboot+vue實(shí)現(xiàn)阿里云oss上傳的示例代碼
文件上傳是常用的功能,本文主要介紹了springboot+vue實(shí)現(xiàn)阿里云oss上傳的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
SpringBoot去除參數(shù)前后空格和XSS過(guò)濾
本文主要介紹了SpringBoot去除參數(shù)前后空格和XSS過(guò)濾,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Stream distinct根據(jù)list某個(gè)字段去重的解決方案
這篇文章主要介紹了Stream distinct根據(jù)list某個(gè)字段去重,stream的distinct去重方法,是根據(jù) Object.equals,和 Object.hashCode這兩個(gè)方法來(lái)判斷是否重復(fù)的,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
SpringBoot實(shí)現(xiàn)接口防刷的兩種方法
接口被刷指的是同一接口被頻繁調(diào)用,可能是由于以下原因?qū)е拢簮阂夤艉驼`操作或程序錯(cuò)誤,本文給大家介紹了SpringBoot實(shí)現(xiàn)接口防刷的兩種方法,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-06-06

