版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.**工程学院实习(实训)说明书题目名称:标准化考试系统(C/S版)系部:计算机工程系专业班级:00000学生:0000000**:00000000指导教师:完成日期:2017年6月9日(第二页)**工程学院实习(实训)评定意见设计题目:标准化考试系统(C/S版)学生:00000评定意见:评定成绩:指导教师(签名):年月日(此页背书)评定意见参考提纲:1.学生完成的工作量与容是否符合任务书的要求。2.学生的勤勉态度。3.设计或说明书的优缺点,包括:学生对理论知识的掌握程度、实践工作能力、表现出的创造性和综合应用能力等。**工程学院实习(实训)任务书2016-2017学年2学期2017年6月9日专业信息管理班级15-1课程名称Java程序设计设计题目标准化考试系统(C/S版)指导教师卫东、杰起止时间周数1设计地点B504机房设计目的:本次实训是通过Java语言编制一个标准化考试系统。而Java语言是当今较为流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。这次实训,还有利于加深对Java课程的进一步了解,也可以巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法。设计任务或主要技术指标:采用客户端用户可以呼叫服务器,建立套接字连接。和服务器建立连接后,可以将服务器端试题文件的名字显示在客户端界面的下拉式列表中。用户选择*套试题后,单击“开始考试”按钮,开始考试。通过客户端界面从服务器读取试题以及考试的用时,该界面提供计时功能,如果佣金考试用时,用户将不能再读取任何题目。用户完成一个题目后,可以查看该题目的正确答案和目前所得分数。运用的操作系统是MicrosoftWindows7,使用的开发工具为jdk1.6,实现上机考试和分数查询。设计进度与要求:1、第1天领取任务,小组分工,查找标准考试系统c\s版的资料;2、第2-3天实现程序标准化考试功能并调试成功;3、编写文档4、答辩主要参考书及参考资料:[1]耿祥义,跃平.Java2实用教程(第三版).:清华大学,2006
[2]耿祥义.Java课程设计(第四版).:清华大学,2014目录TOC\o"1-3"\h\u1概述21.1实训目的21.2实训容22系统需求分析22.1系统目标22.2主体功能22.3开发环境23系统概要设计24系统详细设计24.1系统的功能模块划分24.2系统类图24.3系统流程图25测试25.1测试方案25.2测试结果2小结2参考文献2附录2-.z.标准化考试系统1概述1.1实训目的本次实训是通过Java语言编制一个标准化考试系统。而Java语言是当今较为流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。这次实训,还有利于加深对Java课程的进一步了解,也可以巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法。1.2实训容系统界面如下图:(1)提示框显示输入服务器的IP或域名,(2)输入后点击呼叫服务器,显示呼叫成功。(3)选择试题并开始考试。图1-1系统界面设计2.程序编写并运行(1)程序的编写实现标准化考试系统的呼叫服务器,选择试卷开始考试,查看考试剩余时间及试卷的正确答案及考生的分数。(2)①用DOS命令运行时,先运行服务端,在运行客户端。②程宇完成打包后,可以直接运行jar文件运行程序。编写文档并答辩编写标准化考试系统的报告,介绍本系统制作的过程和使用过程的详细说明。编写完成报告后将报告发给老师,报告合格后,即可打印并进行答辩。2系统需求分析2.1系统目标1.客户端用户可以呼叫服务器。2.和服务器建立连接后,将客户端试题添加到下拉列表中,并选择试题。3.用户选择*套试题后,单击“开始考试”按钮,开始考试。4.考试开始后,页面显示考试剩余时间,考试题。考试完成后,考试剩余时间会停止计时,计时结束后,考生不能答题。5.用户完成一个题目后,可以查看该题目的正确答案和目前所得分数。完成试卷后,可以查看考试剩余时间和试卷正确答案、所得分数。2.2主体功能1.客户端用户可以呼叫服务器,建立套接字连接。2.和服务器建立连接后,可以将服务器端试题文件的名字显示在客户端界面的下拉式列表中。3.用户选择*套试题后,单击“开始考试”按钮,开始考试。4.通过客户端界面从服务器读取试题以及考试的用时,该界面提供计时功能,如果佣金考试用时,用户将不能再读取任何题目。5.用户完成一个题目后,可以查看该题目的正确答案和目前所得分数。2.3开发环境操作系统:MicrosoftWindows7开发工具:jdk1.73系统概要设计在标准化考试系统时,需要编写5个java源文件:Client.java、ChoiceFile.java、ClientTestArea.java、Server.java、RedTestquestion.java。(1)Client.java类模块该java文件生成的类负责创建标准化考试客户端的主窗口。该类含有main方法,程序从该类开始执行。主窗口首先显示输入服务器IP地址的界面,如果和服务器连接成功,将提示该用户连接成功,并在窗口中显示选择试题界面;如果和服务器连接失败,将提示无法连接,不出现选择试题的界面。(2)ChoiceFile.java类模块该类创建的对象是Client窗口的一个成员变量——选择试题文件界面,负责获取服务器上试题文件的名字,并将名字添加到客户端界面的下拉式列表中。(3)ClientTestArea.java类模块负责客户端窗口中的考试界面,该界面可以读取服务器端的试题、显示试题、向服务器提交答案、显示考试所剩时间等等。(4)Server.java类模块负责监听客户的呼叫,为每个发出呼叫的客户启动一个线程,在该线程中和客户交流信息。(5)RedTestquestion.java类模块该类对象负责读取试题文件和计算考试分数。4系统详细设计4.1系统的功能模块划分(1)Client.java类模块该java文件生成的类负责创建标准化考试客户端的主窗口。该类含有main方法,程序从该类开始执行。主窗口首先显示输入服务器IP地址的界面,如果和服务器连接成功,将提示该用户连接成功,并在窗口中显示选择试题界面;如果和服务器连接失败,将提示无法连接,不出现选择试题的界面。Client类的主要成员的作用将在后面的详细设计中阐述,Client类主要成员变量(属性)和主要方法如表4-1,4-2所示。表4-1Client.java主要成员变量成员变量描述变量类型名称输入服务器IP的文本框负责呼叫负责文本考试先是提示信息客户端套接字对象负责选择试题文件显示考试界面Te*tField 输入呼叫地址Button 开始呼叫Button 开始测试Lable 提示条1,提示条2,提示条3Socket SocketChoiceFile 选择试题文件界面ClientTestArea 客户考试界面表4-2Client.java主要方法名称功能备注ClientactionPerformedmain创建客户端窗口构造方法处理ActionEvent事件接口方法客户端程序开始运行(2)ChoiceFile.java类模块ChoiceFile类创建的对象是ChoiceFile类最重要的成员之一,代表“选择试题”。该类的成员变量中有5种重要类型的对象:得到试题文件、List、Socket、thread。ChoiceFile类类主要成员变量(属性)和主要方法如表4-3,4-4所示。表4-3主要成员变量(属性)描述变量类型名称触发试题文件名的获取负责显示试题文件名字客户端套接字负责读取服务器发来的试题文件名的线程Button 得到试题文件Choice ListSocket SocketThread thread表4-4主要方法名称功能备注ChoiceFilesetSocketConnectionrunactionPerformeditemStateChanged得到选择的文件名getSuccess创建选择试题界面构造方法和服务器建立连接读取服务器发来的信息接口方法处理ActionEvent事件接口方法处理ItemEvnent事件接口方法得到用户选择的试题文件的名字判断选择试题界面是否得到了服务器端全部试题文件的名字(3)ClientTestArea.java类模块负责客户端窗口中的考试界面,该界面可以读取服务器端的试题、显示试题、向服务器提交答案、显示考试所剩时间等等。ClientTestArea.java类主要成员变量(属性)和主要方法如表4-5,4-6所示。表4-5主要成员变量(属性)描述变量类型名称客户端套接字试题显示区答案显示区读取服务器信息的线程选择答案用的Checkbo*组件数组计时器考试用时显示考试剩余时间的文本条负责提交答案,读取试题,查看得分的按钮Socket socketTe*tArea 试题显示区Te*tArea 答案显示区Thread threadMessageCheckbo*[] Bo*Timer 计时器long timeTe*tField 考试用时提示条Button提交该题答案,读取下一题,查看得分表4-6主要方法名称功能备注ClientTestAreagetTimesetSocketConnectionset试题显示区runactionPerformed创建考试界面对象构造方法获取考试用时和服务器建立套接字连接设置试题显示区的文本容读取服务器端发送的信息接口方法处理ActionEvent事件接口方法(4)Server.java类模块负责监听客户的呼叫,为每个发出呼叫的客户启动一个线程,在该线程中和客户交流信息。Server.java类主要成员变量(属性)和主要方法如下表:表4-7主要成员变量(属性)描述变量类型名称监听客户端呼叫ServerSocketserver与客户端套接字建立起连接Socketsocket的服务器端套接字为处理客户端请求而启动Server_thread(无)的线程表4-8主要方法名称功能备注main启动服务器端程序(5)RedTestquestion.java模块该类对象负责读取试题文件和计算考试分数。RedTestquestion.java类主要成员变量(属性)和主要方法如表4-9,4-10所示。注意:本系统没有考虑用户提交两个或两个以上答案的情况,读者可作为练习添加相应处理。表4-9主要成员变量(属性)描述变量类型名称文件名字正确答案试题容用户提交的答案用户得分试题用时读取试题的字符流String filenameString correctAnswerString testContentString selectionint scorelong timeFileReader in表4-10主要方法名称功能备注setFilenamegetFilenamegetTimeset完成考试get完成考试getTestContentsetSelectiongetScoregetMessages设置试题文件的名字获取试题文件的名字获取考试用时设置是否已完成考试判断是否已完成考试获取下一道试题的容排列用户提交的答案计算用户得分查阅分数和正确答案4.2系统类图标准化考试系统UML类图如下:4-1UML类图4.3系统流程图(1)根据对标准化考试系统的功能分析,设计得到标准化考试系统流程,如图4-2所示:标准化考试系统标准化考试系统客户端窗口客户端窗口呼叫服务端成功呼叫将试卷加入列表查询分数呼叫服务端成功呼叫将试卷加入列表查询分数计时停止完成试卷计时开始选择试卷退出系统图4-2系统流程图(2)根据对标准化考试系统的功能分析,设计得到标准化考试系统详细流程,如图4-3所示:开始开始输入IP地址输入IP地址呼叫服务器呼叫服务器完成试卷计时开始选择试题添加试题呼叫成功查看分数计时停止回答试卷开始考试图4-3系统详细流程图结束考试YNYN5测试完成试卷计时开始选择试题添加试题呼叫成功查看分数计时停止回答试卷开始考试图4-3系统详细流程图结束考试YNYN5.1测试方案在DOS环境里对程序进行打包,具体操作如下:(1)用文本编辑器编写一个清单文件(Manifestfiles):Manifest-Version:1.0Main-Class:ClientCreated-By:1.7清单文件命名为moon.mf,保存C:\Users\Administrator\Desktop\enlish。注意:在编写清单文件时,在“Manifest-Version:”和“1.0”之间、“Main-Class:”和主类“Client”之间,以及“Created-By:”和“1.7”之间必须有且只有一个空格。5-1编写清单文件(2)生成JAR文件:在DOS命令进入C:\Users\Administrator\Desktop\enlish并输入命令行如下:jarcfmClient.jarmoon.mf*.class图5-2生成JAR文件界面图5-3生成JAR文件界面现在可以将Client.jar以及若干试题文件拷贝到任何一个安装了java运行环境(版本号需高于1.7)的计算机上,只要用鼠标双击该文件就可以运行本java应用程序了,如果已运行相应的服务器端程序,用户就可以进行标准化考试了。注意:如果机器上没有安装过中文版WinRAR解压缩软件,则Client.jar的文件类型是E*ecutableJarFile。如果机器上安装过中文版WinRAR解压缩软件,并将jar文件与该解压缩软件做了关联,则Client.jar的文件类型是WinRAR,在这种情况下,当鼠标双击该文件时,WinRAR解压缩软件会自动运行进行解压缩操作,使得我们的java程序无法运行。因此,在发布本程序时,还应该创建一个有如下容的bat文件Client.bat(用文本编译器)。Javaw-jarClient.jar另创建一个帮助文件help.t*t,容如下:您可以用鼠标双击Client.jar或Client.bat来运行本软件,但是,如果您的计算机上安装了中文版的WinRAR解压缩文件,并将jar文件与该解压压缩软件做了关联,则。用鼠标双击Client.jar文件时,WinRAR解压缩软件会自动运行进行解压缩操作,这是您可以双击Client.bat来运行我们的软件。最后,将.bat文件、.jar文件和帮助文件一同发布。用发布客户端应用程序同样的办法来发布服务器端应用程序。5.2测试结果(1)鼠标双击该jar文件就可以运行java应用程序,用户就可以进行标准化考试。如下图:图5-4运行jar文件界面(2)输入服务器的IP地址或域名,呼叫成功后,点击将试题文件添加到下拉列表中获取试题文件,选择一个文件后,单机开始考试按钮,开始考试。如下图:图5-5呼叫成功并添加试题界面(3)选择试题后,点击开始考试,系统会提醒选择的试题文件名和考试剩余时间。在考试时间的围答题,考试时间停止不能继续答题。(没做的题不能重新做)图5-6选择试题后点击开始考试后界面(4)试题容为空,考试结束,系统会提示考试剩余时间,用户可以查看此次考试的得分,系统会显示正确答案、用户回答的答案、以及用户的分数。最后用完后点击关闭退出系统。图5-7考试结束查看正确答案和成绩小结这次Java实训我们做的是“标准化考试系统”,当实训任务分配下来的时候,我们组的所有成员在一起认真讨论,每人分配一个模块的设计,遇到困难了,大家一起研究讨论,解决不了就询问老师,在老师的帮助下我们顺利运行了程序。通过一个星期的努力,终于完成了整个系统的设计与制作。通过这次的实训,我不仅拓宽了自己的知识面,还在实践过程中巩固和加深了自己所学的理论知识,使自己的技术素质和实践能力有了进一步的提高,同时我的专业水平也有了很大的进步。通过实训过程的锻炼,自己分析问题和解决问题的能力都得到了锻炼和提高,完善了自己的知识结构,加深了对所学知识的理解。还有在这次实训中,我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现*些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。我也感受到了网络通信中服务器和客户相互通信的特点,加深了对网络通信知识的理解。参考文献[1]耿祥义,跃平.Java2实用教程(第三版).:清华大学,2006
[2]耿祥义.Java课程设计(第四版).:清华大学,2014小组成员**负责模块靳超南2015232801ClientTestArea、Server代码霞2015232797Client、ChoiceFile代码邴云飞2015232796RedTestquestion代码附录代码:(1)Client.javaimportjava.awt.*;importjava.awt.event.*;importjava.io.*;import.*;publicclassCliente*tendsFrameimplementsActionListener{Te*tField输入呼叫地址=null;Button开始呼叫,开始测试=null;Label提示条1=null,提示条2,提示条3;Socketsocket=null;DataInputStreamin=null;DataOutputStreamout=null;ChoiceFile选择试题文件界面=null;ClientTestArea用户考试界面=null;Panelwest,center;publicClient(){super("英语标准化考试系统");输入呼叫地址=newTe*tField(16);开始呼叫=newButton("呼叫");开始测试=newButton("开始考试");开始呼叫.addActionListener(this);开始测试.addActionListener(this);选择试题文件界面=newChoiceFile();选择试题文件界面.setVisible(false);用户考试界面=newClientTestArea();用户考试界面.setVisible(false);提示条1=newLabel("输入服务器的IP或域名,如18");提示条2=newLabel("提示是否连接成功的标签");提示条3=newLabel("选择一个文件后,单击"+开始测试.getLabel()+"按钮");提示条3.setVisible(false);PanelH1=newPanel();H1.add(提示条1);PanelH2=newPanel();H2.add(输入呼叫地址);H2.add(开始呼叫);PanelH3=newPanel();H3.add(提示条2);PanelH4=newPanel();H4.add(提示条3);PanelH5=newPanel();H5.add(选择试题文件界面);west=newPanel();center=newPanel();west.setLayout(newGridLayout(5,1));west.add(H1);west.add(H2);west.add(H3);west.add(H4);west.add(H5);center.setLayout(newBorderLayout());center.add(开始测试,BorderLayout.NORTH);center.add(用户考试界面,BorderLayout.CENTER);add(west,BorderLayout.WEST);add(center,BorderLayout.CENTER);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.e*it(0); }});setVisible(true);setBounds(60,40,660,460);validate();}publicvoidactionPerformed(ActionEvente){if(e.getSource()==开始呼叫){if(socket!=null&&in!=null&&out!=null)//清除以往的连接信息try{socket.close();in.close();out.close();用户考试界面.setVisible(false);}catch(E*ceptionee){}Stringip=输入呼叫地址.getTe*t().trim();try{socket=newSocket(ip,6666);in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());}catch(IOE*ceptionee){//如果连接失败输入呼叫地址.setTe*t("呼叫失败");提示条2.setTe*t("您呼叫没有成功");}if(socket!=null){//如果连接成功InetAddressaddress=socket.getInetAddress();提示条2.setEnabled(true);提示条2.setTe*t("您呼叫:"+address+"成功");选择试题文件界面.setVisible(true);选择试题文件界面.validate();选择试题文件界面.setSocketConnection(socket,in,out);提示条3.setVisible(true);west.validate();validate();}}if(e.getSource()==开始测试){if(选择试题文件界面.getSuccess()){用户考试界面.setSocketConnection(socket,in,out);用户考试界面.setVisible(true);用户考试界面.set试题显示区("你选择了试题:"+选择试题文件界面.得到选择的文件名());center.validate();validate();}}}publicstaticvoidmain(Stringargs[]){newClient();}}(2)ChoiceFile.javaimportjava.awt.*;importjava*.swing.*;importjava.awt.event.*;importjava.io.*;import.*;publicclassChoiceFilee*tendsPanelimplements ItemListener,ActionListener,Runnable{Button得到试题文件=null;Choicelist=null;Socketsocket=null;DataInputStreamin=null;DataOutputStreamout=null;Threadthread=null;booleansuccess=false,isSelected=false;intn=0;publicChoiceFile(){得到试题文件=newButton("将试题文件添加到下拉列表中");得到试题文件.setEnabled(false);得到试题文件.addActionListener(this);list=newChoice();list.add("**********");add(得到试题文件);add(list);list.addItemListener(this);thread=newThread(this);}publicvoidsetSocketConnection(Socketsocket,DataInputStream in,DataOutputStreamout){this.socket=socket;this.in=in;this.out=out;try{thread.start();}catch(E*ceptionee){}if(this.socket!=null){得到试题文件.setEnabled(true);}}publicvoidactionPerformed(ActionEvente){try{out.writeUTF("列出考试文件");}catch(IOE*ceptionee){success=false;}}publicvoiditemStateChanged(ItemEvente){n=list.getItemCount();if(n>=1&&isSelected==true){StringlistItem=list.getSelectedItem();try{out.writeUTF("考试文件的名字:"+listItem);out.writeUTF("请通知考试界面考试用时:");}catch(IOE*ceptionee){}}}publicString得到选择的文件名(){returnlist.getSelectedItem();}publicvoidrun(){Strings=null;list.removeAll();while(true){try{s=in.readUTF();//等待(堵塞本线程,直到收到信息)服务器端发来的信息if(s.startsWith("考试文件:")){StringlistItem=s.substring(s.inde*Of(":")+1);list.add(listItem);isSelected=true;}if(s.startsWith("已经全部列出:")){success=true;break;}catch(E*ceptionee){} }}publicbooleangetSuccess(){n=list.getItemCount();if(n>0&&success==true)returntrue;elsereturnfalse;}}(3)ClientTestArea.javaimportjava.awt.*;importjava*.swing.*;importjava.awt.event.*;importjava.io.*;import.*;publicclassClientTestAreae*tendsPanelimplements ActionListener,Runnable{Socketsocket=null;//和服务器所建立的连接的套接字。DataInputStreamin=null;//读取服务器信息的输入流。DataOutputStreamout=null;//向服务器发送信息的输出流。ThreadthreadMessage=null;//读取服务器端信息的线程。Te*tArea试题显示区=null,答案显示区=null;Checkbo*bo*[];//答案选项。Stringanswer="""; //设置答案的缺省值。longtime=0;//试题文件的考试用时(单位:毫秒)。Timer计时器=null;//计时器。Button提交该题答案,读取下一题,查看得分;Te*tField考试用时提示条=null;publicClientTestArea(){threadMessage=newThread(this);//创建读取服务器信息的线程。试题显示区=newTe*tArea("",16,5,Te*tArea.SCROLLBARS_BOTH);答案显示区=new Te*tArea("",3,5,Te*tArea.SCROLLBARS_VERTICAL_ONLY);答案显示区.setFont(newFont("TimesRoman",Font.PLAIN,14));试题显示区.setFont(newFont("TimesRoman",Font.PLAIN,14));试题显示区.setForeground(Color.blue);试题显示区.setTe*t(null);答案显示区.setForeground(newColor(255,100,100));答案显示区.setTe*t("单击查看得分按钮,可以在这里看到得分和正确答案");计时器=newTimer(1000,this);//创建计时器,该计时器每隔1秒“振铃”一次。Strings[]={"A","B","C","D"};bo*=newCheckbo*[4];for(inti=0;i<4;i++){bo*[i]=newCheckbo*(s[i]);}提交该题答案=newButton("提交该题答案");读取下一题=newButton("读取下一题");查看得分=newButton("查看得分");考试用时提示条=newTe*tField("显示考试用时(倒计时)",28);考试用时提示条.setForeground(Color.red);考试用时提示条.setEditable(false);读取下一题.setEnabled(true);提交该题答案.setEnabled(false);读取下一题.setEnabled(false);读取下一题.addActionListener(this);提交该题答案.addActionListener(this);查看得分.addActionListener(this);PanelpAddbo*=newPanel();for(inti=0;i<4;i++){pAddbo*.add(bo*[i]);}setLayout(newBorderLayout());PanelpCenter=newPanel();pCenter.setLayout(newBorderLayout());pCenter.add(试题显示区,BorderLayout.CENTER);pCenter.add(答案显示区,BorderLayout.NORTH);add(pCenter,BorderLayout.CENTER);Panelp1=newPanel();p1.add(pAddbo*);p1.add(提交该题答案);p1.add(读取下一题);p1.add(查看得分);Panelp2=newPanel();p2.add(考试用时提示条);PanelpSouth=newPanel();pSouth.setLayout(newGridLayout(2,1));pSouth.add(p1);pSouth.add(p2);add(pSouth,BorderLayout.SOUTH);}publiclonggetTime(){returntime;}publicvoidsetSocketConnection(Socketsocket,DataInputStream in,DataOutputStreamout){this.socket=socket;this.in=in;this.out=out;try{threadMessage.start();}catch(E*ceptione){}if(this.socket!=null){读取下一题.setEnabled(true);提交该题答案.setEnabled(false);计时器.stop();考试用时提示条.setTe*t("显示考试用时(倒计时)");}}publicvoidset试题显示区(Strings){试题显示区.setTe*t(s);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==计时器){time=time-1000;if(time<=0){//如果考试时间用尽。则用户停止答题。计时器.stop();读取下一题.setEnabled(false);提交该题答案.setEnabled(false);}longleftTime=time/1000;//剩余的考试时间(秒)。longleftHour=leftTime/3600;//剩余的“时”。longleftMinute=(leftTime-leftHour*3600)/60;//剩余的“分”。longleftSecond=leftTime%60;//剩余的“秒”。考试用时提示条.setTe*t("剩余时间:"+leftHour+"小时"+leftMinute+"分"+leftSecond+"秒");}if(e.getSource()==读取下一题){读取下一题.setLabel("读取下一题");提交该题答案.setEnabled(true);读取下一题.setEnabled(false);try{out.writeUTF("读取下一题");}catch(E*ceptionevent){}}if(e.getSource()==提交该题答案){读取下一题.setEnabled(true);提交该题答案.setEnabled(false);for(inti=0;i<4;i++){if(bo*[i].getState()==true){answer=bo*[i].getLabel();bo*[i].setState(false);break;}}try{out.writeUTF("提交的答案:"+answer);}catch(IOE*ceptionee){}}if(e.getSource()==查看得分){try{out.writeUTF("查看得分");}catch(IOE*ceptionee){}}}publicvoidrun(){while(true){Strings=null;try{s=in.readUTF();//等待(堵塞本线程。直到收到信息)服务器端发送的信息。if(s.startsWith("试题容:")){//读取服务器端发来的一道试题。Stringcontent=s.substring(s.inde*Of(":")+1);试题显示区.setTe*t(s);}if(s.startsWith("分数")){答案显示区.setTe*t("\n"+s);}if(s.startsWith("考试用时:")){Stringstr=s.substring(s.inde*Of(":")+1);time=Long.parseLong(str);考试用时提示条.setTe*t(""+time);计时器.start();//计时器开启,每隔1000毫秒“振铃”一次。//导致ActionEvent事件。}if(s.startsWith("考试结束:")){计时器.stop();//停止计时。}Thread.sleep(5);}catch(E*ceptione){试题显示区.setTe*t("和服务器的连接已中断");}}}}(4)Server.javaimportjava.io.*;import.*;importjava.util.*;classFileNameimplementsFilenameFilter{//列出指定扩展名的文件。Stringstr=null;FileName(Strings){str="."+s;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(str);}}publicclassServer{publicstaticvoidmain(Stringargs[]){ServerSocketserver=null;Socketyou=null;while(true){try{server=newServerSocket(6666);}catch(IOE*ceptione1){System.out.println("正在监听");}try{you=server.accept();//建立与客户端连接的套接字。InetAddressaddress=you.getInetAddress();System.out.println("客户端的IP:"+address);}catch(IOE*ceptione){}if(you!=null){newServer_thread(you).start();}else{continue;}}}}classServer_threade*tendsThread{inti=0;Socketsocket=null;Filefile=null;DataOutputStreamout=null;DataInputStreamin=null;ReadTestquestion读取试题=null;boolean通知考试界面考试用时=true;Server_thread(Sockett){socket=t;try{in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());}catch(IOE*ceptione){}读取试题=newReadTestquestion();}publicvoidrun(){while(true){Strings=null;try{s=in.readUTF();//等待(堵塞本线程,直到收到消息)客户端发来的信息。if(s.startsWith("列出考试文件")){//如果客户端要求列出试题文件的名字,String当前目录=System.getProperty("user.dir");Filedir=newFile(当前目录);FileNamefileT*t=newFileName("t*t");StringfileName[]=dir.list(fileT*t);//列出当前目录下的所有//文本文件,即试题文件。for(inti=0;i<fileName.length;i++){out.writeUTF("考试文件:"+fileName[i]);//将试题文件名字依次发送给客户端。}out.writeUTF("已经全部列出:");}elseif(s.startsWith("考试文件的名字:")){StringfileName=s.substring(s.inde*Of(":")+1);//获取客户端选择的试题文件名。读取试题.setFilename(fileName);读取试题.set完成考试(false);通知考试界面考试用时=true;//服务器需通知客户端新试题文件的考试用时。}elseif(s.startsWith("读取下一题")){StringcontentTest=读取试题.getTestContent();//读取一道试题。out.writeUTF("试题容:"+contentTest);//将试题的容发送给客户端。if(通知考试界面考试用时==true){longtime=读取试题.getTime();//将当前试题文件的考试用时发给客户端。out.writeUTF("考试用时:"+time);通知考试界面考试用时=false;}if(读取试题.get完成考试()){out.writeUTF("考试结束:");}}elseif(s.startsWith("提交的答案:")){//获取用户提交的答案。Stringanswer=s.substring(s.inde*Of(":")+1);//将用户提交的答案依次尾加到selection。读取试题.setSelection(answer);}elseif(s.startsWith("查看得分")){intscore=读取试题.getScore();Stringmessages=读取试题.getMessages();out.writeUTF("分数:"+score+"\n"+messages);}}catch(IOE*ceptionee){try{socket.close();}catch(E*ceptioneee){}System.out.println("客户离开了");break;} } }}(5)ReadTestquestion.javaimportjava.io.*;importjava.util.*;publicclassReadTestquestion{Stringfilename="",//存放试题文件名的字符串。correctAnswer="",//存放正确答案的字符串。testContent="",//试题容。selection="";//存放用户提交的答案。intscore=0;//用户的得分。longtime=0;//该试题文件的考试用时。boolean完成考试=false;//判断是否已完成全部试题。Filef=null;FileReaderin=null;BufferedReader读取=null;publicvoidsetFilename(Stringname{filename=name;score=0;//用户选择了新的试题文件后,将用户的答案字符串清空,并将分数重置为0。selection="";try{if(in!=null&&读取!=null){in.close();//关闭此前的连接。读取.close();}f=newFile(filename);in=newFileReader(f);读取=newBufferedReader(in);//读取试题文件的第1行:correctAnswer=(读取.readLine()).trim();//标准答案,并除去前后空格。Stringtemp=(读取.readLine()).
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF(陕) 070-2021 螺纹深度规校准规范
- JJF(陕) 021-2020 万用量规校准规范
- 幼儿园小班探索未来的活动计划
- 《信用证种类》课件
- 社团活动的数字化转型探索计划
- 护理部患者安全管理措施计划
- 班级自主管理的实施案例研究计划
- 少先队大队委员竞选讲义模板
- 《设备的开孔和附》课件
- 《酒店企业文化培训》课件
- 【大单元整体教学】教科版科学五年级上册-第一单元《光》第1课有关光的思考-单元整体分析+课时公开课一
- 2024年黑龙江省龙东地区中考数学试题含答案
- 刘润年度演讲2024
- 小学生讲海军司令肖劲光的红色故事肖劲光先进事迹学习
- 养老院的经营规划方案
- 人教版英语初二上学期试题及答案指导(2024年)
- 期末+(试题)+-2024-2025学年译林版(三起)(2024)英语三年级上册
- 2023年农机专业合作社调研报告(五篇)
- 2024年秋季新人教版七年级上册地理全册导学案(2024年新教材)
- TCMAM Z25-2024“卡洛甘露”藏浴(泷沐)质量标准
- 人工智能生成内容的著作权侵权风险与侵权责任分配
评论
0/150
提交评论