当前位置:文档之家› 达内在线考试系统项目报告

达内在线考试系统项目报告

毕业实习报告班级:姓名:学号:指导教师:开课时间: 2011 至2012 学年第 1 学期一、项目名称达内在线考试系统(Tarena Online Examination System)。

二、项目平台Windows xp操作系统。

三、项目环境MyEclipse8.6集成化开发工具环境。

四、项目技术学生在线考试系统实现的是学生通过客户端登陆服务器完成考试的过程,在这个项目整个过程中,我们实现了服务器的一些服务程序的开发,以及客户端的程序开发,在服务器这边,我们要实现的服务器能够响应客户端发送的数据请求,并且能够分辨出发送来的是什么请求,在客户端这边,客户端要能够接受服务器发送过来的数据,并且解析成所要的数据类型,并且要能让用户可阅读,客户端与服务器的一个线程保持着连接。

下面就简单说一下其中用到的一些技术:在线考试系统需要两个方面的程序开发,一个是服务器的服务开发,另一个是客户端的开发,这两个部分是分别处于两个不同的机器上运行的,也可以是在同一台机器上运行的。

对于服务器的程序设计,因为是服务器,所以必须要实现的肯定是能为多个用户进行服务,在这里也就是多个学生同时在线考试,我们这里使用的是多线程技术。

而客户端这边,我们通常就是向服务器发送请求,服务器相应我们的请求,从而完成服务器与客户端之间的通信。

在客户端与服务器之间,我们要掌握服务器的套接字编程技术和客户端的套接字编程技术。

五、项目描述这里主要介绍一下学生在线考试系统,学生在线考试系统主要是学生通过客户机登陆自己的账号,然后完成课程科目的考试过程,这当中没有任何纸质的试卷出现,全部都是以网路形式完成考试。

学生在线考试系统主要分成两个部分,一个是服务器部分,另一个则是客户机部分,服务器与客户端之间是以通过网路连接起来的,服务器的一个线程与一个客户机是连接着的。

在服务器部分,服务器先启动,先是读取配置文件,然后将试卷信息读取到服务器中,还要读取学生的信息,学号,姓名,密码,都要读取到服务器中,对于这些信息的读取,将会被封装在其他的类中,然后才是等待客户端发送数据连接请求,一旦发现有请求,就创建一个服务线程与之保持连接,等待考试完成的数据请求发送过来,才断开连接,在这其中服务器是一直处于监听客户端请求连接的运行状态。

在整个运行过程,服务器都是以控制台程序运行。

客户端部分,则是比较简单,因要给学生操作,所以,为了方便操作,这里用到了图形界面的操作,这里一共有三个部分的界面,第一个就是学生登录的界面,学生要输入学号和密码登录服务器,第二个就是学生选择考试科目的界面,这里呢,要先将前面一个窗口销毁,然后再创建新的窗口,第三个就是学生考试界面的窗口,这个窗口稍微复杂点,涉及到许多东西,这里在第三个窗口创建之前也是要先销毁第二个窗口。

最后用户点击交卷完成考试过程,并且显示得分,左后关闭窗口,服务器同时要断开连接,线程结束。

在这个三个窗口中,必须要有个连接与服务器保持连接,这里我们是将其划分成一个类,并且作为是哪个窗口的一个属性,当一个窗口被销毁,另一个窗口被创建时候,这个属性就要传送个另一个窗口使用。

在整个系统中,我们会涉及到两个类,一个是试卷类,另一个是学生类,试卷类中有个属性就是问题类,这两个类的信息,都是以配置文件的形式保存在文件中,我们可以使用工具类进行读取他们。

六、设计思路在这里我们就以服务器与客户端之间的连接为中心,简单说一下这个考试系统的搭建过程。

首先,服务器需要启动,服务器需要读取配置文件,这里我们就需要将所有的试卷题目以规定的格式写在一个配置文件中,把所有的学生信息写在另一个配置文件中,服务器需要试卷信息,所以定义试卷类,题目类,以及学生类,因为服务器与客户机之间需要有数据的请求,而且分为多于一种的请求类型,这里我们有连接请求,发送试卷请求,答题请求,所以我们定义一个请求类,这个服务器还需要不断地从磁盘文件中读取信息,所以为了减少代码量,我们这里需要几个工具类,一个是创建套接字的连接,另一个就是读取题目配置文件的题目的工具类。

这样服务器的基本框架已经出来了。

在客户机这边,我们只需要考虑一个线程就行了,所以这里我们只要四个类,其中有三个是窗口类,另一个是与服务器线程连接的类,这个连接类是作为三个窗口类的一个属性,用于三个窗口与服务器之间发送数据用,三个窗口也只能通过这个连接类与服务器之间进行通信,这三个窗口是依次通过这个连接类与服务器进行通信的。

这样这个客服器的整体设计也就出来了。

另外要说一下就是,客户机通过IP地址和端口号进而与服务器之间进行连接进行数据通信。

同时一个客户机只能与一个服务器进行连接,而一个服务器会与很多个客户机建立连接,服务器的每一个线程对应着一个客户机的连接的进程。

七、项目详细设计前面已经介绍说,在线考试系统主要的就是两个重要的部分,服务器部分和客户机部分,另外还有一些实体类和一些工具类,下面就按照包得结构详细的介绍一下在线考试系统的设计:1,实体类部分:在实体类中可分为四个部分,一个是试卷类,一个是试题类,学生类,还有个就是请求类。

Paper类:属性:subject String 表示考试科目allQusstion List 表示所有题目的集合answers List 表示学生选择的答案的集合方法:addQusetion() void 表示向试卷中添加题目toString() void 将试卷转换成字符串格式Question类:属性:title String 表示题目的标题items List<String> 表示选项answer char 表示正确选项方法:toString() void 表示将题目转换成字符串格式Student类:属性:id int 表示学生学号name String 表示学生姓名passwd String 表示学生的密码2,读取配置文件类PaperDao接口方法:getPaper()PaperDaoFromFile类:实现PaperDao接口,实现getPaper()方法;StudentDao接口方法:getStudent()StudentDaoFromTextFile类:实现StudentDao接口实现getStudent()方法3,工具类QuestionReader类封装了一些读取磁盘文件的方法SocketUtil类封装了一些创建套接字连接的基本格式4,服务器的类ServetMainClass类:属性:ss ServerSocket 表示服务器的套接字stuDao StudentDao 表示学生信息pDao PaperDao 表示试卷信息pro Properties 表示一个键值对,通信时传输信息用方法:main() void 表示服务器启动入口函数init() void 表示初始化函数内部类:ServerThread:s Socket 表示与客户机连接的套接字oos ObjectPutputStream 表示对象输出流run() void 表示线程运行login void 表示登陆请求begin void 表示开始考试请求send void 表示结束考试请求5,客户端的类LginFrame类:登录窗口学号输入框密码输入框确定按钮取消按钮SelectSubjectFrame类:选择科目的窗口一个现则科目的标签一个选择科目的下拉菜单一个确定按钮一个取消按钮ExamMainFrame类:学生考试窗口标题:学生在线考试系统显示题目的可滚动文本框四个选项的可选框一个显示题号和剩余题目数的标签上一题,下一题,交卷按钮一个显示剩余时间的标签Client类:属性:s socket 表示与服务器连接的套接字ois objectinputStream 表示对象输入流oos objectoutputstream 表示对象输出流方法:Login void 表示向服务器发送登陆请求数据方法recLogin void 表示从服务器接受登陆请求数据方法begin void 表示向服务器发送开始考试请求数据方法recLogin void 表示从服务器接受试卷信息数据方法close void 表示关闭I/O流exit void 表示学生退出考试系统方法send void 表示学生点击交卷按钮发送给服务器方法上面介绍了各个类的具体属性和方法,接下来介绍一下各个类之间的调用和依赖关系:上图表示整个在线考试系统的结构图,可以看出,其最主要的就是Client与服务器进程之间的连接,整个客户机与服务器之间都是靠着整个连接才能够完成在线考试整个过程的,这之间的数据交换和通信都是以这个连接为基础的,服务器在一开始运行的时候就要将配置文件中的数据读取到服务器中,然后才能发送数据给客户机,客户机每个窗口都是以Client这个类与服务器进程进行通信的,另外除了这些外还有两个工具类,只是为了少写些代码,做个封装而已,这符合了java程序的封装性。

下面就对上图的几个重要的类做个详细设计的说明:1,服务器线程类服务器的线程类,是服务器主类的一个内部类,只是作为一个服务的类,不需要对外公开,所以只是设在一个服务器类的内部,当服务器的运行到监听套接字监听客户端是否发送连接请求,程序就暂停,一直到有连接请求才会继续运行下去,程序会创建一个服务进程与之连接为之服务,只适合会运行run()方法,判断客户端发送的请求类型,来判断调用哪个方法,然后向客户端发送与之对应的数据给客户端处理。

下面详细解释运行过程:步骤:1,在初始化init()方法中是个while()死循环,不断的监听客户机的套接字连接请求,当有连接请求的时候就继续运行。

2,新建一个服务线程,这个服务线程继承自线程类,直接调用start()方法,让服务进程直接运行起来,这样,服务线程就与客户机连接起来了。

3,服务线程首先是创建一个输出流,准备给客户机发送数据,然后就是一个while()死循环,不断地从流中读取数据,一读取到数据就要判断请求类型。

另外,在服务器的控制台中,在每个用户连接过程中给服务器发送数据请求,服务器将在控制台即时输出连接请求的信息,还有用户的请求情况,这主要是显示服务器即时监控的效果。

其实不输出信息也是没有关系的。

4,判断请求的类型,这个要使用到一个Request请求类里面的四个静态常量,这里使用到一个switch case 语法,来匹配所要调用的方法。

5,如果静态常量是1,也就是login_request,程序就调用login()方法,login()方法,主要的就是发送学生信息和选择考试科目的链表给客户端程序,login调用完成后,就进入下一个循环,继续监听流中的数据请求。

6,如果是静态常量2,就要调用begin方法,程序调用begin方法,根据发送过来的选择的课表信息,就会向客户端发送相应的考试题目,以链表的形式发送,然后就继续进入下一个循环监听。

相关主题