Java swing讀取txt文件實現(xiàn)學(xué)生考試系統(tǒng)
本文實例為大家分享了Java swing讀取txt文件實現(xiàn)學(xué)生考試系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
主要實現(xiàn)了一個簡單的倒計時答題系統(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; //答對和答錯 ClockDispaly mt; //倒計時模塊 public Test2(){ this.setTitle("學(xué)生在線考試系統(tǒng)v1"); //設(shè)置標題 this.setSize(440,320); //設(shè)置窗口大小 this.setLocationRelativeTo(null); //設(shè)置顯示位置居中 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設(shè)置關(guān)閉時關(guān)閉 panel = new JPanel(); //初始化面板 panel2 = new JPanel(); panel3 = new JPanel(); label = new JLabel("總考試時間:100分鐘 "); //初始化并命名標簽 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(); //初始化選項組 start = new JButton("開始考試"); //初始化按鍵 back = new JButton("上一題"); next = new JButton("下一題"); commit = new JButton("提交考試"); aButton.addActionListener(this); //單選按鈕添加監(jiān)聽事件 bButton.addActionListener(this); cButton.addActionListener(this); dButton.addActionListener(this); start.addActionListener(this); //按鈕添加監(jiān)聽事件 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); //把文本區(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è)置窗口可見 mt = new ClockDispaly(clock, 30); //調(diào)用并設(shè)置倒計時的時間 } public void createExam() {//創(chuàng)建考試模塊 Vector<Testquestion> qList=null;//創(chuà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="";//準備接收一個題目的內(nèi)容 s = br.readLine();//獲取試題內(nèi)容的首行 } if (s.equals("$$$$$")){//準備讀取試題的答案 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)計試題數(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è)置成績模塊 right=0;error=0; for (int i = 0; i < topicnum; i++) { if (questions[i].check()) {//判斷答案的正確與錯誤 right++; }else { error++; } } int score = (int)(right*100/topicnum); //設(shè)置分數(shù) JOptionPane.showMessageDialog(null, "答對"+right+"題,答錯"+error+"題,分數(shù)為"+score); } @Override public void actionPerformed(ActionEvent e) {//動作監(jiān)聽事件 if (e.getSource()==start) {//開始開始按鍵實現(xiàn) createExam(); //調(diào)用createExam模塊 p=0; //題目序號 showQuestion(); //調(diào)用showQuestion模塊 start.setEnabled(false);//設(shè)置按鈕不可點擊 mt.start(); //考試時間倒計時啟動 } if (e.getSource()==back) {//上一題的按鍵實現(xiàn) p--; if (p==-1) { JOptionPane.showMessageDialog(null, "已經(jīng)是第一題"); p++; } showQuestion(); } if (e.getSource()==next) {//下一題的按鍵實現(xiàn) p++; if (p==topicnum) { JOptionPane.showMessageDialog(null, "已經(jīng)是最后一題"); p--; } showQuestion(); } if (e.getSource()==commit) {//提交試卷的按鍵實現(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考試倒計時模塊 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);//設(shè)置數(shù)值的整數(shù)部分允許的最小位數(shù) 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, "考試結(jié)束"); System.exit(0); } } }
txt文件
效果圖
正在嘗試寫博客,如寫的不好,請評論,謝謝!
更多學(xué)習(xí)資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
因Spring AOP導(dǎo)致@Autowired依賴注入失敗的解決方法
這篇文章主要給大家介紹了因Spring AOP導(dǎo)致@Autowired依賴注入失敗的解決方法,文中通過示例代碼給大家介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07Java微信公眾平臺開發(fā)(8) 多媒體消息回復(fù)
這篇文章主要為大家詳細介紹了Java微信公眾平臺開發(fā)第八步,微信多媒體消息回復(fù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04springboot+vue實現(xiàn)阿里云oss上傳的示例代碼
文件上傳是常用的功能,本文主要介紹了springboot+vue實現(xiàn)阿里云oss上傳的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06Stream distinct根據(jù)list某個字段去重的解決方案
這篇文章主要介紹了Stream distinct根據(jù)list某個字段去重,stream的distinct去重方法,是根據(jù) Object.equals,和 Object.hashCode這兩個方法來判斷是否重復(fù)的,本文給大家介紹的非常詳細,需要的朋友可以參考下2023-05-05