欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-10-28 08:11:58
本文实例为大家分享了java swing读取txt文件实现学生考试系统的具体代码,供大家参考,具体内容如下主要实现了一个简单的倒计时答题系统源码testquestion 类public class t...

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

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

效果图

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

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

更多学习资料请关注专题《管理系统开发》。

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