学生信息管理系统

总结了好久以前 2015年4月份 的数据结构课程设计,重点放在链表的存取实现与 bootstrap 前端搭建。

设计思路

设计该系统时已经学过数据结构一段时间,因此首先是实现无界面的学生信息管理系统V1.0,目的是可以先充分复习单链表的定义、存储形式、表达方式、基本操作及熟悉其特点等。
将该系统初步实现后,再结合学过的 JSP/Servlet 的知识,引用V1.0 的单链表实现的核心代码,重新实现图形用户界面、学生信息的各个操作,并扩充了可由不同用户登录实现不同权限等操作,以及 Excel 表格的生成、下载等操作等等功能。
为了实现 Excel表格的读写功能,最后决定引用 Apache POI,实现了表格的读写功能。
为了节约时间,同时体现图形界面的友好性,又使用了前端开发的开源工具包 Bootstrap,初步实现响应式页面布局,带给使用者更良好的体验。

学生信息管理系统V1.0

  • 学生单链表模块:主要将学生的基本数据和选课数据生成的Student对象封装为单链表模式。
  • 登录模块:主要对教务员和学生的登录进行区分并分配各自对应的模块和权限。
  • 信息管理模块:主要完成对学生的基本数据和选课数据进行插入、删除、修改、查询等功能。
  • 选课模块:主要实现学生的课程选择、修改功能。

学生信息管理系统V2.0

模块结构图

模块结构图

模块详细设计

  1. 登录模块
    • 输入用户名称和密码,如果用户名、密码正确,进入主控制平台;否则无法登录。
  2. 系统维护模块
    • 权限管理子模块:系统管理员进行用户权限设置和初始密码的设置。
    • 信息管理子模块:对学生的基本数据和选课数据进行插入、删除、修改、查询等功能。
    • 课程设置子模块:在每学期开始需要进行本学期需要开设课程的设置。在某一课程发生变动时可以进行课程的维护,包括修改课程的名称、学分等,也可以删除某一课程。
  3. 学生信息管理模块
    • 学生信息查询子模块:方便教务管理人员快速的查找某一学生。分为按照学生的姓名进行查,利于管理人员随时掌握学生信息。
    • 更新学生信息子模块:教务管理人员可以随时更改学生的某些信息,包括学生姓名、学号、班级等信息的更改。
  4. 信息文件子模块
    • Excel导出子模块:实现进行学生信息操作之后导出为Excel表格,方便信息的保存、备份与可交流性。
  5. 帮助信息模块
    • 显示系统的开发版本和系统说明信息。

逻辑层结构

逻辑层结构

视图层结构

视图层结构

另外,还有两个Excel表,一个存放管理员帐号,另一个存放学生信息。

主要类描述

链表核心类包node
该包主要存放重点类:单链表的 Student 类、结点类、描述类以及接口;接口的实现在 Manage 包中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Student {// 结点内的Student对象
public String id;// 学号
public String name;// 姓名
public String sex;// 性别
public String classed;// 班级
public String phone;// 手机号
public String coursera;// 选修课程
//Getters and Setters
}
public class StuNode {
// 结点类

public interface StuInterface {// 对外接口类
void addStu(Student s)throws Exception;
void removeStu(String name);
void updateStu(Student stu)throws Exception;
Student findStu(String name);
ArrayList display();
}

用户登录包user
该类包主要存放用户登录与权限分配有关的类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package user;

public class Login {
private String userName; // 用户名
private String password; // 密码
//Getters and Setters
}

public class Admin {
// 存放从Excel读取的管理员账户密码进行登录检测,以及对Excel进行操作的方法
}

public class Stuser {
ArrayList<Login> df = new ArrayList<Login>();
public Stuser() throws IOException{
// 与Admin类实现的方法类似
}
public Login checkUser(String username, String password) {
// 与Admin类实现的方法类似
}
}

信息管理包Manage
该类包主要存放 Excel 的读写和实现 node 包中 StuInterface 接口的实现。

1
2
3
4
5
6
7
8
9
10
11
public class writeXls {
//对Excel进读写的专用类
}

public class AdminMange extends StuLinkList implements StuInterface {
// 继承与实现node包里的类,主要是对管理员的操作实现
}

public class StuMange extends StuLinkList implements StuInterface {
// 与AdminMange类似,主要是对学生的操作实现

控制器Servlet

1
2
3
4
5
6
7
8
9
public class addstuServlet extends HttpServlet {……}  	处理要添加的学生信息
public class closeServlet extends HttpServlet {……} 实现保存、下载、退出等功能
public class delstuServlet extends HttpServlet {……} 处理要删除的学生信息
public class findoneServlet extends HttpServlet {……} 处理要查找的单个学生信息
public class findstuServlet extends HttpServlet {……} 查找符合条件的学生信息
public class mainServlet extends HttpServlet {……} 处理登录页面
public class uponeServlet extends HttpServlet {……} 管理员修改学生信息
public class upServlet extends HttpServlet {……} 学生修改个人信息
public class upstuServlet extends HttpServlet {……} 指定特定ID的学生

部分展示

总结

本次课程设计,回顾了数据结构的基本知识。还实践了 JSP/Servlet 知识;成功实现不借助数据库,而是使用单链表数据结构,实现 Excel 数据存储功能。

界面设计问题

在思考界面的实现方式上,考虑了两种方式:
第一个是利用 Swing 组件实现(Swing 是一个用于开发 Java 应用程序用户界面的开发工具包),但 Swing 组件虽然拥有先进的模式设计,设计模型的确不错,但设计复杂。一个复杂的界面,代码动不动就上千行,全是流水式的代码, 大量重复性的, 根本没有体现出 Java 应有的面向对象。并且拥有界面难看和速度慢等问题。
其二是利用 Jsp/Servlet 实现,其综合起来有如下优点:

  1. 对于用户界面的更新,其实就是由 Web Server 进行的,所以给人的感觉更新很快。
  2. 所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。
  3. 客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。

因此最终决定使用 Jsp/Servlet 技术来实现用户交互界面。

Excel 读写问题

在思考 Excel 的读写问题上,也考虑了利用两个包的其中一个来实现。其一是 jxl,其二是 poi。最后决定使用 poi,原因有如下几点:

  1. jxl 只能操作 Excel 95-2000 的版本,不支持 Excel2007 以上的版本,但 poi 可以。
  2. poi 可以实现对 Microsoft Office 格式档案读和写的功能,而 jxl 只能操作 Excel,鉴于该系统以后的可拓展性。还是使用功能丰富的 poi
  3. poiApache 软件基金会的开放源码函式库,依旧会继续更新,有技术支持。而 jxl 是韩国人写的一个工具类库,没有继续对它进行升级换代。

乱码问题

Jsp 依旧存在乱码问题,因为 ISO-8859-1 编码的原因。所以一开始就在 Setters 都加上 getBytes ( "ISO-8859-1" ) , "UTF-8") 进行转码,其实不用。因为在 Servlet 已经声明了编码类型是 UTF-8。所以这个就是读取 Excel 乱码问题,所以去掉 getBytes()就可以解决。

具体代码见:https://coding.net/u/gcusky/p/stutrans/git

文章目录
  1. 1. 设计思路
  2. 2. 学生信息管理系统V1.0
  3. 3. 学生信息管理系统V2.0
    1. 3.1. 模块结构图
    2. 3.2. 模块详细设计
    3. 3.3. 逻辑层结构
    4. 3.4. 视图层结构
    5. 3.5. 主要类描述
    6. 3.6. 部分展示
  4. 4. 总结
    1. 4.1. 界面设计问题
    2. 4.2. Excel 读写问题
    3. 4.3. 乱码问题

20170126-project-3/

本页二维码