高级网络程序设计课程设计报告班级:11网络2班学号:姓名:成绩:2013年6月Java课程设计报告1目录一、问题描述..............................................................................................2二、需求分析...........................................................................................2三、设计....................................................................................................23.1设计思想........................................................................................23.2逻辑结构设计................................................................................23.3主要功能实现.................................................................................33.3.1服务器端和客户端的数据传输方式...................................33.3.2服务器端功能设计...............................................................33.3.3试题读取功能.......................................................................33.3.4客户端功能设计...................................................................43.3.5连接服务器功能...................................................................53.3.6考试功能...............................................................................5四、测试数据及测试结果.........................................................................5五、用户手册...........................................................................................8六、个人体会..............................................................................................9七、源代码清单.......................................................................................9Server类源代码....................................................................................9Test类源代码......................................................................................12ChoiceFile类源代码...........................................................................16Question类源代码..............................................................................19Client类源代码...................................................................................21Java课程设计报告2一、问题描述网络测试系统要求:使用图形用户界面;客户端登录,获取服务器试卷文件列表,选取显示试卷;提交答案,查询分数。二、需求分析1、建立Socket链接,确保Server与Client能相互通信;2、图形用户界面;3、获取试题文件列表,试题文件存储;4、通过回答问题,给出答案和成绩。三、设计3.1设计思想由题目可知,作为一个“网络测试系统”,首先要做的是确保“网络”链接,即需要建立Socket使服务器Server与客户Client建立链接进行交互,其次,设计图形用户界面,同时用文件存储试卷文件列表与答案,放在同一目录底下存储,在判断提交答案与标准答案是否相同后,给出分数。3.2逻辑结构设计由题意,本题意涉及5个类,分别为Server类、Test类、Question类、ChoiceFile类、Client类,如下图所示:图1系统结构图Java课程设计报告33.3主要功能实现3.3.1服务器端和客户端的数据传输方式服务器端和客户端的数据时用套接字来传输的。IP地址表示Internet上的计算机,端口号标识正在计算机运行的进程。端口号与IP地址的组合得出一个网络套接字。客户端使用Socket类建立到服务器的套接字连接,具体实现:try{Socketsock=newSocket(Stringhost,intport);}catch(IOExceptione){}当套接字连接sock建立后,sock使用getInputStream()方法获得一个输入流,然后把获得的输入流接到另一个数据流上,然后就可以从这个数据流读取服务器来的信息,同样sock使用getOutputStream()方法获得一个输出流,然后把获得的输出流接到另一个DataOutputStram()数据流上,然后向这个数据流写入信息,发送给服务器。客户负责建立客户端到服务器的套接字连接,即客户端负责呼叫,因此服务器必须建立一个等待接收客户的套接字的ServerSocket对象,具体实现:try{ServerSocketserver_socket=newServerSocket(intport);}catch(IOExceptione){}当服务器的ServerSocket对象建立后,就可以使用accept()方法接收客户的套接字。3.3.2服务器端功能设计服务器端是接受客户端传来的信息,并作出相应的处理。标准化考试系统服务器端最主要是实现试题的读取。为了完成这个标准化考试系统还需要服务器有一些其他的功能。3.3.3试题读取功能本系统是采用文件来存储试题的,所以要读取试题必须通过函数读取,然后把试题内容发给客户端。具体实现如下:s=in.readUTF();if(s.startsWith(列出考试文件)){String当前目录=System.getProperty(user.dir);Filedir=newFile(当前目录);FileNamefileTxt=newFileName(txt);StringfileName[]=dir.list(fileTxt);for(inti=0;ifileName.length;i++){out.writeUTF(考试文件:+fileName[i]);}out.writeUTF(已经全部列出:);Java课程设计报告4}elseif(s.startsWith(考试文件的名字:)){StringfileName=s.substring(s.indexOf(:)+1);Testread1.setFilename(fileName);Testread1.set完成考试(false);//通知考试界面考试用时=true;}elseif(s.startsWith(读取下一题)){StringcontentTest=Testread1.getTestContent();out.writeUTF(试题内容:+contentTest);if(Testread1.get完成考试()){out.writeUTF(考试结束:);}}elseif(s.startsWith(提交的答案:)){Stringanswer=s.substring(s.indexOf(:)+1);Testread1.setSelection(answer);}elseif(s.startsWith(查看得分)){intscore=Testread1.getScore();Stringmessages=Testread1.getMessages();out.writeUTF(分数:+score+\n+messages);}}catch(IOExceptionee){try{socket.close();}catch(Exceptioneee){}3.3.4客户端功能设计客户端是提供学生进行考试和教师对系统进行管理,由于该系统是C/S模式,所以客户端必须有连接服务器功能,连接服务器后有用户登录功能,用户正确登录后,学生用户进Java课程设计报告5入考试界面,所以客户端必须有考试功能。3.3.5连接服务器功能客户端与服务器端连接时通过套接字实现的,本系统采用的是把套接字放在一个线程中,就是使用Socket类不带参数的构造方法Socket()创建一个套接字对象,该对象需调用publicvoidconnect(SocketAddressendpoint)throwsIOException,请求和参数SocketServer指定的套接字建立连接。为了使用connect方法,可以使用SocketAddress的子类InetSocketAddress创建一个对象,InetSocketAddress的构造方法如下:publicInetSocketAddress(InetAddressaddr,intport)。3.3.6考试功能学生正确登录后就进入考试界面,学生进入考试界面后,必须选择试卷,客户端会通知服务器端列出所有的试卷名称,在客户端的下拉列表中会显示所有试卷的名字,用户选择了试卷后,客户端会通知服务器端学生所选的试卷名称,学生点击开始考试按钮就可以开始考试了,考试结束后用户可以点击查询成绩按钮,用户可以看到题目,答案以及自己所选的答案,还有你的成绩,查询成绩是用对话框实现,玩了后用户可以退出系统。四、测试数据及测试结果1、先运行Server再运行Client,界面截图如下:2、输入本机IP地址127.0.0.1,并登录,显示如下界面:Java课程设计报告63、点击选择题目,将试题调入到本系统中,显示1、2、3、4、5道题目,选择题目2并进行答题,显示如下界面。4、点击读取下一题,进行答题,选择答案,Java课程设计报告75、当所有问题都结束之后,点击显示正确答案和分数,可显示所做题目正确性。6、试题内容及存储目录如下图,即需要存储在workspace文件夹中,以txt格式存储。Java课程设计报告87、txt文件中试题存储排列格式如下图:五、用户手册1、本系统运行环境为EclipseSDK6.0。2、用户在使用本系统时,需首先运行Server,再运行Client,在同一PC上运行时,注意登录IP地址为本机IP,即127.0.0.1。3、登录成功后,点击选择题目,可将已存储好的文件调入到本系统中,在本系统中一共使用五套题目,随机选择一套之后,