在线考试系统
软件开发的流程---------------------------------
需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级
软件的需求分析---------------------------------
在线考试系统的主要功能分析如下:
学员系统---------------------------------
用户模块:登录、修改密码、退出
考试模块:开始考试、查询成绩、导出成绩(选)
管理员系统---------------------------------
学员管理模块:增加学员、删除学员、修改学员、查找学员
考题管理模块:增加考题、删除考题、修改考题、查找考题、导入考题(选)
软件的概要设计---------------------------------
在线考试系统采用C(Client客户端)/S(Server服务器)架构进行设计
具体如下:客户端(Client) - 主要用于提供字符界面供用户选择并将处理结果显示出来
服务器(Server) - 主要用于针对字符界面的选择实现真正业务功能的处理
数据库(Database) - 主要用于进行数据的存取
如qq,需要现下载qq(C-客户端)才可,而B/S就是要有B(浏览器)才可
软件的详细设计---------------------------------
客户端和服务器之间采用基于tcp协议的编程模型进行通信
客户端的对象输出流连接服务器的对象输入流
服务器的对象输出流连接客户端的对象输入流
客户端采用消息的类型作为具体业务的代表,伴随着账户信息等一并发送给服务器
当客户端发来的消息类型为"managerCheck"时,则表示要实现管理员账户信息的校验功能
当客户端发来的消息类型为"userCheck"时,则表示要实现学员账户信息的校验功能
服务器采用消息的类型作为是否校验成功的标志发送给客户端
当客户端收到的消息类型为"success"时,则表示账户信息正确
当客户端收到的消息类型为"fail"时,则表示账户信息错误
记住,在操作文件时,做好要关闭资源,否则下次运行时,如果系统没有回收的话
那么就会操作不了资源,即会出现输出空的东西,即你对应的文件没有,当然对于其他的要关闭的资源一样,也要这样操作
都是防止资源占用,而操作不了,导致出现错误,或者结果的不正确
对于文件方法阻塞问题,必须满足该方法的需求才不会阻塞
而在网络编程里,主要阻塞的基本上是IO流的阻塞,即读取时,必须等待输出流输出数据时,才读取
即getInputStream方法和getOutputStream方法,之间相互制约
所以必须等待getOutputStream输出内容时getInputStream方法的读取才不会阻塞
若没有输出内容,那么当程序运行完时,也不会阻塞了,即读取时,读取内容在先,然后返回数值,若没有读取内容
那么就会等待你运行完毕,然后在解除阻塞,若你没有自己关闭资源,那么就会报一个提示错误,当然,有定义的错误就会报
若在IO流里,将一个流输出之前进行关闭,那么就不会阻塞了
注意对于NIO来说,流变成了管道,即流的关闭就变成了连接的关闭了
所以通常不考虑连接的关闭的话,是用不了流的关闭进行阻塞的
因为程序运行完时,会自动关闭的,而报错的原因,就是没有自动关闭
但其实之所以这样,是因为网络编程,都是阻塞的IO流
因为他一直在等待结果,如果没有结果就会一直等待
软件的编码流程---------------------------------
管理员登录功能:
编写基于tcp协议的服务器端,也就是初始化服务器
编写基于tcp协议的客户端,来连接服务器
编写客户端的字符界面并提示客户进行业务的选择
将客户的选择和输入的相关信息通过对象输出流发送给服务器
服务器通过对象输入流接收客户端发来的消息并进行功能处理,将处理结果发送给客户端
客户端通过对象输入流接收服务器的处理结果并给出提示
学员管理系统的功能---------------------------------
当项目启动时,将文件中的所有学员账户信息全部读取出来放到一个List集合中
客户端输入要增加学员的用户名和密码信息,通过对象输出流发送给服务器
服务器接收客户端发来的消息,判断集合中是否存在该学员账户信息并实现具体添加功能
服务器将增加学员功能的处理结果发送给客户端,客户端给出对应的提示
当项目退出时,将集合中的所有学员账户信息整体写入到文件中
发来的消息,判断集合中是否存在该学员账户信息并实现具体添加功能