[信息与通信]第8讲单机版考试软件的设计.ppt

上传人:sccc 文档编号:5615544 上传时间:2023-08-02 格式:PPT 页数:35 大小:232.82KB
返回 下载 相关 举报
[信息与通信]第8讲单机版考试软件的设计.ppt_第1页
第1页 / 共35页
[信息与通信]第8讲单机版考试软件的设计.ppt_第2页
第2页 / 共35页
[信息与通信]第8讲单机版考试软件的设计.ppt_第3页
第3页 / 共35页
[信息与通信]第8讲单机版考试软件的设计.ppt_第4页
第4页 / 共35页
[信息与通信]第8讲单机版考试软件的设计.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《[信息与通信]第8讲单机版考试软件的设计.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]第8讲单机版考试软件的设计.ppt(35页珍藏版)》请在三一办公上搜索。

1、第8讲 单机版考试软件的设计,HuFuxiang,Software schoolChangsha Social Work College,Chapter 8 Test Software of Stand-alone,预习与提问,1、单机版软件与网络版软件有什么不同?2、举例说明我们用过的单机版软件。3、如何保证单机版考试软件的试题库不被考生打开?,本讲任务单,1、单机版考试软件设计的方法。2、单机版考试软件的实现。,8.1 总体设计,采用单选题一种题型,试题文件可以有多个,格式(假设试题文件名为test1.txt):BDBA/标准答案0:5:00/考试时间为5分钟1.JAVA是一种()的语言。

2、A、面向过程 B、面向对象C、面向过程同时面向对象 D、无法确定*/用*开始的这一行表示本题结束2.以下软件中,()是数据库软件。A、Windows B、OfficeC、IE D、SQL SERVER*3.JAVA通过()访问数据库。A、DBMS B、JDBCC、ODBC D、XML*4.JAVA中,通过()命令引入包。A、import B、downloadC、javac D、include*endend/试题结束标志,8.1 总体设计,类的设计:共分3个类。ReadTestquestion.java:读取试题,计分;TestArea.java:建立考试界面,调用ReadTestquestio

3、n,提供选择试题、查看分数、计时、试题显示;Test.java:主类,建立考试的主窗口,通过下拉列表选择一套试题,然后读取试题进入考试,调用TestArea。,8.2 软件的发布,一、发布过程1、将全部文件的class文件放在同一文件夹下;2、建立清单文件:用记事本建立,文件名随意,如mymf.txt,内容如下:Manifest-Version:1.0Main-Class:TestCreated-By:1.2.2(Sun Microsystem Inc.)所有参数的冒号:后面必须空一格,8.2 软件的发布,3、生成jar文件:jar命令位于JDKbin下,在DOS命令状态中,输入:jar cf

4、m Test.jar mymf.txt*.class其中:参数c表示要创建一个jar文件,f表示要确定jar文件名,m表示有清单文件上面命令表示建立了Test.jar文件,将此文件和所有calss文件拷贝到任意具有JDK运行环境的机器上,双击 Test.jar即可启动客户端程序。,8.2 软件的发布,4、生成bat批处理文件:双击jar文件时,如果安装了WinRar软件,可能会出现WinRar运行界面,使客户端程序无法运行,解决办法是:用记事本建立bat文件,如Test.bat,内容是:C:Program FilesJavajdk1.5.0_08binjavaw jar Test.jar同时建

5、立一个帮助文件help.txt,内容随意,如:请双击Test.bat启动客户端程序。5、将Test.bat、Test.jar、help.txt、所有试题文件一同发布,二、运行界面,8.3 主类test软件设计,import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame TestArea testPanel=null;Container con=null;public Test(),8.3 主类test软件设计,super(沉着冷静,胆大心细);testPanel=

6、new TestArea();con=getContentPane();con.add(testPanel,BorderLayout.CENTER);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););/窗口适配器 setVisible(true);setBounds(60,40,660,460);/移动组件并调整其大小 con.validate();/使内容面板中的组件生效 validate();/框架中的组件生效 public static void ma

7、in(String args)new Test();,8.4 类ReadTestquestion的设计,import java.io.*;import java.util.*;/提供StringTokenizer 类,分隔时间public class ReadTestquestion String filename=;correctAnswer=;testContent=;selection=;int score=0;long time=0;boolean 完成考试=false;File f=null;FileReader in=null;BufferedReader 读取=null;,8.4

8、 类ReadTestquestion的设计,public void setFilename(String name)filename=name;score=0;selection=;try if(in!=null,8.4 类ReadTestquestion的设计,catch(Exception e)testContent=没有选择试题;public String getFilename()return filename;public long getTime()return time;public void set完成考试(boolean b)完成考试=b;public boolean get

9、完成考试()return 完成考试;,8.4 类ReadTestquestion的设计,public String getTestContent()try String s=null;StringBuffer temp=new StringBuffer();if(读取!=null)while(s=读取.readLine()!=null)if(s.startsWith(*)break;temp.append(n+s);if(s.startsWith(endend)in.close();读取.close();完成考试=true;,8.4 类ReadTestquestion的设计,testConte

10、nt=new String(temp);elsetestContent=new String(没有选择试题);catch(Exception e)testContent=试题内容为空,考试结束!;return testContent;public void setSelection(String s)selection=selection+s;,8.4 类ReadTestquestion的设计,public int getScore()score=0;int length1=selection.length();int length2=correctAnswer.length();int mi

11、n=Math.min(length1,length2);for(int i=0;imin;i+)try if(selection.charAt(i)=correctAnswer.charAt(i)score+;catch(StringIndexOutOfBoundsException e)i=0;return score;,8.4 类ReadTestquestion的设计,public String getMessages()int length1=selection.length();int length2=correctAnswer.length();int length=Math.min

12、(length1,length2);String message=正确答案:+correctAnswer.substring(0,length)+n+你的回答:+selection+n;return message;,8.5 类TestArea的设计,import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;class FileName implements FilenameFilter String str=null;FileName(String s)str=.+s;public bool

13、ean accept(File dir,String name)return name.endsWith(str);,8.5 类TestArea的设计,public class TestArea extends JPanel implements ActionListener,ItemListener,Runnable Choice list=null;JTextArea 试题显示区=null,消息区=null;JCheckBox box;JButton 提交该题答案,读取下一题,查看分数;ReadTestquestion 读取试题=null;JLabel welcomeLabel=null;

14、Thread countTime=null;long time=0;JTextField timeShow=null;boolean 是否关闭计时器=false,是否暂停计时=false;JButton 暂停或继续计时=null;,8.5 类TestArea的设计,public TestArea()list=new Choice();/试题文件下拉列表框 String 当前目录=System.getProperty(user.dir);File dir=new File(当前目录);FileName fileTxt=new FileName(txt);String fileName=dir.l

15、ist(fileTxt);for(int i=0;ifileName.length;i+)list.add(fileNamei);,8.5 类TestArea的设计,试题显示区=new JTextArea(15,12);试题显示区.setLineWrap(true);试题显示区.setWrapStyleWord(true);试题显示区.setFont(new Font(TimesRoman,Font.PLAIN,14);试题显示区.setForeground(Color.blue);消息区=new JTextArea(8,8);消息区.setForeground(Color.blue);消息区

16、.setLineWrap(true);消息区.setWrapStyleWord(true);,8.5 类TestArea的设计,countTime=new Thread(this);String s=A,B,C,D;box=new JCheckBox4;for(int i=0;i4;i+)boxi=new JCheckBox(si);暂停或继续计时=new JButton(暂停计时);暂停或继续计时.addActionListener(this);提交该题答案=new JButton(提交该题答案);读取下一题=new JButton(读取第一题);读取下一题.setForeground(Co

17、lor.blue);,8.5 类TestArea的设计,提交该题答案.setForeground(Color.blue);查看分数=new JButton(查看分数);查看分数.setForeground(Color.blue);提交该题答案.setEnabled(false);提交该题答案.addActionListener(this);读取下一题.addActionListener(this);查看分数.addActionListener(this);list.addItemListener(this);读取试题=new ReadTestquestion();JPanel pAddbox=

18、new JPanel();,8.5 类TestArea的设计,for(int i=0;i4;i+)pAddbox.add(boxi);Box boxH1=Box.createVerticalBox(),boxH2=Box.createVerticalBox(),baseBox=Box.createHorizontalBox();boxH1.add(new JLabel(选择试题文件);boxH1.add(list);boxH1.add(new JScrollPane(消息区);boxH1.add(查看分数);timeShow=new JTextField(20);timeShow.setHor

19、izontalAlignment(SwingConstants.RIGHT);timeShow.setEditable(false);,8.5 类TestArea的设计,JPanel p1=new JPanel();p1.add(new JLabel(剩余时间:);p1.add(timeShow);p1.add(暂停或继续计时);boxH1.add(p1);boxH2.add(new JLabel(试题内容:);boxH2.add(new JScrollPane(试题显示区);JPanel p2=new JPanel();p2.add(pAddbox);p2.add(提交该题答案);p2.ad

20、d(读取下一题);boxH2.add(p2);baseBox.add(boxH1);baseBox.add(boxH2);,8.5 类TestArea的设计,setLayout(new BorderLayout();add(baseBox,BorderLayout.CENTER);welcomeLabel=new JLabel(“沉着冷静,胆大心细!,JLabel.CENTER);welcomeLabel.setFont(new Font(隶书,Font.PLAIN,24);welcomeLabel.setForeground(Color.blue);add(welcomeLabel,Bord

21、erLayout.NORTH);,8.5 类TestArea的设计,public void itemStateChanged(ItemEvent e)timeShow.setText(null);是否关闭计时器=false;是否暂停计时=false;暂停或继续计时.setText(暂停计时);String name=(String)list.getSelectedItem();读取试题.setFilename(name);读取试题.set完成考试(false);time=读取试题.getTime();if(countTime.isAlive()是否关闭计时器=true;countTime.in

22、terrupt();countTime=new Thread(this);,8.5 类TestArea的设计,消息区.setText(null);试题显示区.setText(null);读取下一题.setText(读取第一题);提交该题答案.setEnabled(false);读取下一题.setEnabled(true);welcomeLabel.setText(欢迎考试,你选择的试题:+读取试题.getFilename();,8.5 类TestArea的设计,public void actionPerformed(ActionEvent e)if(e.getSource()=读取下一题)读取

23、下一题.setText(读取下一题);提交该题答案.setEnabled(true);String contentTest=读取试题.getTestContent();试题显示区.setText(contentTest);消息区.setText(null);读取下一题.setEnabled(false);try countTime.start();catch(Exception event),8.5 类TestArea的设计,if(e.getSource()=提交该题答案)读取下一题.setEnabled(true);提交该题答案.setEnabled(false);String answer

24、=?;for(int i=0;i4;i+)if(boxi.isSelected()answer=boxi.getText();boxi.setSelected(false);break;读取试题.setSelection(answer);,8.5 类TestArea的设计,if(e.getSource()=查看分数)int score=读取试题.getScore();String messages=读取试题.getMessages();消息区.setText(分数:+score+n+messages);if(e.getSource()=暂停或继续计时)if(是否暂停计时=false)暂停或继续

25、计时.setText(继续计时);是否暂停计时=true;else if(是否暂停计时=true)暂停或继续计时.setText(暂停计时);是否暂停计时=false;countTime.interrupt();,8.5 类TestArea的设计,public synchronized void run()while(true)if(time=0)是否关闭计时器=true;countTime.interrupt();提交该题答案.setEnabled(false);读取下一题.setEnabled(false);timeShow.setText(用时尽,考试结束);else if(读取试题.g

26、et完成考试()是否关闭计时器=true;timeShow.setText(考试效果:分数*剩余时间(秒)=+1.0*读取试题.getScore()*(time/1000);countTime.interrupt();提交该题答案.setEnabled(false);读取下一题.setEnabled(false);,8.5 类TestArea的设计,else if(time=1)time=time-1000;long leftTime=time/1000;long leftHour=leftTime/3600;long leftMinute=(leftTime-leftHour*3600)/60;long leftSecond=leftTime%60;timeShow.setText(+leftHour+小时+leftMinute+分+leftSecond+秒);try Thread.sleep(1000);catch(InterruptedException ee)if(是否关闭计时器=true)return;,8.5 类TestArea的设计,while(是否暂停计时=true)try wait();catch(InterruptedException ee)if(是否暂停计时=false)notifyAll();,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号