软件开发流程
需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级
软件需求分析文档
(1)学员系统
- 用户模块:登录、修改密码、退出
- 考试模块:开始考试、查询成绩、导出成绩
(2)管理员系统
- 学员管理模块:增加学员、删除学员、修改学员、查询学员
- 考题管理模块:增加考题、删除考题、修改考题、查找考题、导入考题
框架图如下所示
软件的概要设计
- 在线考试系统采用C(Client客户端)/S(Sever服务器)架构进行设计具体如下:
– 客户端-主要用于提供字符串界面供用户选择并将处理结果显示出来
– 服务器-主要用于针对字符界面的选择实现真正业务功能的处理
– 数据库-主要用于进行数据的存取。
框架图详解如下:
软件的详细设计
- 客户端和服务器之间采用基于tcp协议的编程模型进行通信。
– 客户端的对象流输出流程连接服务器的对象输入流
– 服务器的对象输出流连接客户端的对象输入流 - 客户端采用消息类型作为具体业务的代表,伴随着账户信息等一并发送给服务器
– 当客户端发来的消息类型为“managerCheck”时,则表示要实现管理员账户信息的校验功能
– 当客户端发来的消息类型为“userCheck”时,则表示要实现学员账户信息的校验功能。 - 服务器采用消息类型作为是否校验成功地标志发送给客户端
– 当客户端收到的消息类型为success时,则表示账户信息正确。
– 当客户端收到的消息类型为false时,则表示账户信息错误。
软件的编码流程
(1)管理员登录功能
- 编写基于tcp协议的服务器端,也就是初始化服务器;
- 编程基于tcp协议的客户端,来连接服务器;
- 编写客户端的字符界面并提示客户进行业务的选择;
- 将客户的选择和输入的相关信息通过对象输出流发送给服务器;
- 服务器通过对象输入流接收客户端发来的消息并进行功能处理,将处理结果发送给客户端;
- 客户端通过对象输入流接收服务器的处理结果并给出提示;
(2)学员管理系统的功能
- 当项目启动时,将文件中所有的学员账户信息全部读取出来放到一个List集合中。
- 当客户端输入要增加学员的用户名和密码信息,通过对象输入流发送给服务器。
- 服务器接收客户端发来的消息,判断集合中是否存在该学员账户信息并实现具体添加功能。
- 服务器将增加学员功能的处理结果发送给客户端,客户端给出对应的提示。
- 当项目退出时,将集合中的所有学员账户信息整体写入到文件中
服务器初始化代码:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 编程实现服务器的初始化和关闭
*/
public class ServerInitClose {
/**
* 自定义成员变量来记录Socket和流对象
*/
private Socket s;
private ServerSocket ss;
private ObjectInputStream ois;
private ObjectOutputStream oos;
/**
* 自定义成员方法实现服务器的初始化操作
*/
public void SeverInit() throws IOException {
//1.创建ServerSocket类型的对象并提供端口号
ss = new ServerSocket(8888);
//2.等待客户端的连接请求,调用accept()方法
System.out.println("等待客户端的连接请求....");
s = ss.accept();
System.out.println("客户端连接成功!");
//3.使用输入输出流进行通信
ois = new ObjectInputStream(s.getInputStream());
oos = new ObjectOutputStream(s.getOutputStream());
System.out.println("服务器初始化成功!");
}
/**
* 自定义成员方法实现服务器的关闭操作
*/
public void serverClose() throws IOException {
//4.关闭socket并释放有关的资源
//调用初始化方法里面的变量(属于局部变量),不可以直接调用,
//此时有两种解决方案:第一种是使用参数传递的方式,
// 第二种是将变量提升为成员变量
oos.close();
ois.close();
s.close();
ss.close();
System.out.println("服务器成功关闭!");
}
}
服务器端界面接收消息并返回处理结果封装类
import java.io.IOException;
/**
* 编程实现服务器主功能
*/
public class ServerView {
/**
* 使用合成复用原则
*/
private ServerInitClose sic;
private ServerDao sd;
/**
* 通过构造方法实现成员变量的初始化
*
* @param sic
*/
public ServerView(ServerInitClose sic, ServerDao sd) {
this.sic = sic;
this.sd = sd;
}
/**
* 自定义成员方法实现客户端发来消息的接收并处理
*/
public void serverReceive() throws IOException, ClassNotFoundException {
UserMessage tum = (UserMessage) sic.getOis().readObject();
System.out.println("接收到的功能是:" + tum