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文件
效果图
正在尝试写博客,如写的不好,请评论,谢谢!
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: C#小数点格式化用法小结
推荐阅读