第7讲 CS模式考试软件的设计(一)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.4 服务器端读取试题文件类的设计
二、类ReadTestFile的主要方法
名称 ReadTestFile getTestTime getTestQuestion 类型 ReadTestFile int String 功能 构造方法,创建ReadTestFile 实例 返回考试时间 返回每一道试题的内容
7.4 服务器端读取试题文件类的设计
三、类方法介绍 1、String类的方法 int indexOf():字符串中指定字符的位置; String subString():取子字符串; boolean startsWith("XXX"):是否以XXX开头; String trim():压缩字符串前后的空格 2、BufferReader类的方法 String readLine():读取一行信息; void close();关闭缓冲区流
socketClosing int saveTestScore void
7.5 服务器端线程类代码的设计
//ServerThread.java(1/13) 1. import java.io.*; 2. import java.net.*; 3. import java.util.*; 4. public class ServerThread extends Thread { 5. private Socket connectToClient; //服务器端传送/接收数据 的套接字 6. private DataOutputStream outToClient;//向客户输出数据 7. private DataInputStream inFromClient;//从客户读取数据 8. private ReadTestFile readTestFile;//读考试文件的对象 9. private String selectedAnswer="";//存放用户发送的答案
ReadTestFile代码实现(4/4)
28. if(s.startsWith(“**”)) //以**开始,表明该题结束 29. break; 30. temp.append("\n"+s); 31. if(s.startsWith("试题结束")) bufReader.close(); 32. } //对应第27行,循环结束 // 27 33. testQuestion=temp.toString();// 每个试题内容 34. } //对应第26行,表示缓冲区为空 35. } 36. catch(Exception e) { testQuestion="试题结束";} 37. return testQuestion; 38. }// 对应第18行,方法getCorrectAnswer结束 39. }//对应第2行,主类结束
7.4 服务器端读取试题文件类的设计
四、代码实现(1/4) 1. import java.io.*; 2. public class ReadTestFile { 3. private BufferedReader bufReader; //读取试题文件的缓冲流 4. public int testTime; //试题规定考 试用时 5. private String correctAnswer; // 正确答案
7.3 总体设计
三、客户端程序的设计
TestPanel.java:客户端考试界面,构造图形用户界面, 为 单 选 和 按 钮 注 册 监 听 器 , 并 实 现 ActionListener 和 Runnable两个接口,它们在各自的方法与服务器通信。
ClientFrame.java : 客 户 端 主 类 应 用 程 序 , 通 过 调 用 TestPanel的构造方法创建TestPanel实例,与服务器建立 连接。
7.1 C/S模式网络考试系统功能介绍
二、设计要求 考生读取试卷后点击“开始考试”按钮系统自 动计时,提交本题答案前不能读取下一道题; 动态显示考试的剩余时间,如果时间到,考生 不可以再做题; 每做完一小题,系统会自动将结果保存在服务 器,不要用户另外保存; 全部试题做完可以查看分数并显示是否通过 (60分及格)。
Leabharlann Baidu
7.2 命题
三、样卷
考试用时@5分钟 标准答案@BDBA 1.JAVA是一种( )的语言。 A、面向过程 B、面向对象 C、面向过程同时面向对象 D、无法确定 ******第1题结束** 2.以下软件中,( )是数据库软件。 A、Windows B、Office C、IE D、SQL SERVER ******* 3.JAVA通过( )访问数据库。 A、DBMS B、JDBC C、ODBC D、XML *********** 4.JAVA中,通过( )命令引入包。 A、import B、download C、javac D、include *********** 试题结束
connectToClient Socket inFromClient outToClient readTestFile selectedAnswer DataInputStream DataOutputStream ReadTestFile String
7.5 服务器端线程类的设计
二、类ServerThread的主要方法
ServerThread.java的代码实现(2/9)
10. public ServerThread(Socket socket) { //构造方法 11. connectToClient=socket; 12. try { 13. readTestFile=new ReadTestFile();//创建读取试题文件 内容的类对象 14. inFromClient=new DataInputStream(connectToClient.getInputStream()); 15. outToClient=new DataOutputStream(connectToClient.getOutputStream()); 16. } 17. catch (IOException e) {} 18. start();//启动线程 19. } //构造方法结束,对应10行
第7讲 C/S模式 讲 模式 考试软件的设计(一) 考试软件的设计(
Chapter 7 Test System Programming Basing on C/S Model HuFuxiang Software school Changsha Social Work College
预习与提问
1、B/S模式和C/S软件的发布有什么异同? 2、简要说明C/S软件开发过程所要用到的类。 3、如何定义线程类Thread?在开发哪些软件时 要用到线程类?
7.5 服务器端线程类的设计
一、类ServerThread的成员属性
名称 类型 功能 套接字,发送/接收客户端的数据 输入流,使用readUTF方法读取客户 机发送过来的UTF字符串 输出流,使用writeUTF方法向客户 机发送UTF字符串 调用ReadTestFile类,实例化,读 取考试文件内容,并发送给客户端 保存考生答题结果,用于评分
格式是:/169.254.96.106 成绩 75
7.2 命题
二、命题原则 文件名:test.txt 第一行:确定考试时间,格式:考试用时@xxx分钟; 第二行:各题标准答案,用大写字母表示,紧接着 写,各题答案中间不能有空格。格式是:标准答案 @XXXXXXXXXXXX; 从第三行开始:表示试题内容,要求每一题有个结 束标志,即用**开始的一个特殊行; 最后一行:试题结束标志,内容是:试题结束。 @符号不能缺少,这是系统判断的依据和标志。
ReadTestFile代码实现(3/4)
17. public int getTestTime(){return testTime;} 18. public String getCorrectAnswer(){ 19. return correctAnswer;} 20. //读取试题中的每一题并返回,读到文件最后 21. public String getTestQuestion() { 22. String testQuestion=""; 23. try { 24. StringBuffer temp=new StringBuffer();//缓 冲字符串 25. String s=""; //存放试题的每一行 26. if(bufReader!=null){ 27. while((s=bufReader.readLine())!=null){ //读 第3行的试题内容
7.4 服务器端读取试题文件类的设计
一、类ReadTestFile的成员属性
名称 bufReader testTime correctAnswer testQuestion 类型 BufferReader int String String 功能 读取试题文件的缓冲区流 考试时间 试题文件中的正确答案 题目内容
7.2 命题
一、设计原则 题型:网络考试系统一般采用标准化题型,即单选、多 选、填空、判断; 抽题:采用随机抽题,即根据题型和题量抽取题目或抽 取试卷; 评分:根据命题员给出的标准答案与考生提交的答案对 比,确定得分; 试题文件以文本文件或者数据库表的形式保存在服务器 上,供考生调用。 本软件只用单选题一种题型,用文本文件形式存放在服 务器上,标准答案是单独的一行,保存在试题文件中。 考试结束后,成绩保存在服务器的文件testscore.txt中,
7.3 总体设计
一、运行界面 1、服务器端
7.3 总体设计
一、运行界面 2、客户端
开始界面
考试界面
7.3 总体设计
一、运行界面 2、客户端
读取下一题界面
7.3 总体设计
二、服务器端程序的设计
ReadTestFile.java:读取试题文件的类,从服务器上读 取试题文件test.txt,并显示试题内容。 ServerThread.java:多线程通信类,调用ReadTestFile 类,通过套接字实现与客户的通信,同时为每个客户创建 一个ServerThread子类,完成一对多的通信联系。 MutliServer.java:服务器主类,服务器应用程序,创建 ServerThread对象,实现服务器/客户机之间数据的传递 通信。
本讲任务单
1、考试软件功能介绍。 、考试软件功能介绍。 2、考试题及评分标准设计。 、考试题及评分标准设计。 3、考试软件界面设计及组件分析 、 4、服务器端界面设计原则及主要类。 、服务器端界面设计原则及主要类。
7.1 C/S模式网络考试系统功能介绍
一、软件功能设计 标准化试题,全部采用单选题,能够考试、 评分、计时,采用C/S模式; 采用试卷库形式,文件名确定,客户端自 动读取试题; 试题、标准答案、考试用时全部放在同一 个文本文件中,置于服务器上; 可以多人同时在线考试。
名称 ServerThread run 类型 ServerThread void 功能 构造方法,参数socket传给Socket类 对象connectToClient,初始化输入/ 输出流,启动线程。 线程方法,由Thread.start()启动, 接收客户数据,向客户发送数据 评分并计算成绩 将用户名和成绩保存到文件testscore
ReadTestFile代码实现(2/4)
6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. public ReadTestFile( ) throws IOException { bufReader=new BufferedReader(new FileReader("test.txt")); //打开文件, //下面从文件第1行提取规定用时 String s=bufReader.readLine();//读取文件第1行 int i1=s.indexOf('@');//得到字符@的索引值 int i2=s.indexOf("分钟");//得到字符串"分钟"的索引值 s=s.substring(i1+1,i2);//得到用分钟表示的考试规定用时 testTime=Integer.parseInt(s)*60*1000; //考试规定用 时转化为毫秒,下面从文件第2行提取标准答案 s=bufReader.readLine().trim(); //读取文件第2行的标 准答案,并去掉字符串前后的空格 correctAnswer=s.substring(s.indexOf("@")+1); //得 到字符@后的标准答案 }