1 绪论
1.1 项目概述
本项目是一个小型宿舍管理系统。首先由超管增加、删除、修改、查找、导入超管和宿管信息,再由宿管界面登录负责增加、删除、修改、查找、学生的相关缺寝信息、学生通过注册将信息加到数据库中,再进行登录,学生可以通过本系统来查询缺寝信息,如果缺寝信息有误,学生申诉后能够修改缺寝信息以及系统的登录,退出、帮助等功能实现。
该项目系统画面舒适,内容充实且紧凑,可以对每个学生的每次个人信息进行收集保存,是一个逻辑性较强的综合系统。
1.2 项目意义
(1)保证信息的准确性和时效性,随时通过计算机对系统进行管理,使得学生宿舍信息处于最新状态,保证统计数据和分析的准确。
(2)减轻劳动强度、提高工作效率、增加学生宿舍管理的透明度。高校学生宿舍管理信息系统可以发挥计算机的强大功能,让管理人员从大量繁琐的手工劳动中解放出来,将单调枯燥的纸张涂写变成灵活的电子信息操作。并充分利用网络优势,加快学校内部学生宿舍信息的发布、传送和获取,改善和优化宿管工作,增加学生宿舍管理的透明度。
(3)降低管理成本,由于采用本系统的原因,使宿管管理工作一改往日埋在各种表格中的被动局面,基本实现了无纸化办公,根除了很多日常管理中的浪费现象,体现出现代化学生宿舍管理的优势。
(4)规范化管理,由于采用了计算机统计分析学生宿舍缺勤信息,一些原始信息在录入时就必须要求准确录入,这就要求管理人员在提供信息时要准确,同时要求在录入时也要十分认真,这样做是为了将错误降到最低,提高系统工作的准确率,从而实现校园学生宿舍管理工作规范化。
2 开发工具和相关技术简介
本项目是校园宿舍管理系统。开发环境:Eclipse,MySQL,GUI;开发语言:Java语言;开发技术:GUI和JDBC技术等。本章将对开发工具和相关技术进行简单介绍
2.1 Eclipse简介
Eclipse是一个开放源代码、基于Java的可扩展开发平台,用于通过插件组件构建开发环境。是著名的跨平台的自由集成开发环境,最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。eclipse是Java开发者最喜欢的工具之一,它具有强大的编辑,调试功能。所以很多人把Eclipse作为一款IDE来使用,但从本质上而言,Eclipse不仅仅局限于一个IDE,只是它实现了一般IDE具有的普遍功能,同时经过多年历史的沉淀,现如今成为了Java开发的必备工具。
2.2 Java语言介绍
Java语言是一款面向对象的一款高级语言是由Sun Microsystems公司(现已被Oracle公司收购)。由James Gosling和同事们共同研发,并在1995年正式推出,据Oracle官方数据指数,目前全球已有上亿的系统是使用Java开发的。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言的优点:
(1)跨平台性:跨平台性是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。Java自带的虚拟机很好地实现了跨平台性。
(2)简单:Java语言是一种相当简洁的“面向对象”程序设计语言。
(3)面向对象:面向对象技术使得应用程序的开发变得简单易用,节省代码。
(4)安全性:Java编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。
(5)多线程:是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序能够具有更好的交互性、实时性。
因此,在进行后台系统开发时采用了Java语言。
2.3 MySQL简介
MySQL是一种DBMS,而且是一种一个小型的开源的关系型数据库管理系统。2008年1月16日MySQL AB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。
MySQL它在世界范围内得到了广泛的安装和使用,应该是使用人数最多的数据库软件了,因为它有着这样的特性:
成本——MySQL是开源软件,可以免费使用和修改。
性能——MySQL性能很好处理速度很快。
简单——MySQL很容易安装和使用,对新手友好。
MySQL数据库软件也是使用最常用的数据库管理语言:结构化查询语言(SQL)进行数据库管理和操作。
*2.4 JDBC技术简介*
JDBC是一种用于SQL语句的Java API,由一组类和接口组成,通过调用这些类和接口所提供的方法,可以使用标准的SQL语言来存取数据库中的数据。
SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为 ,JDBC不能直接操作数据库,JDBC通过接口加载数据库的驱动,然后操作数据库。JDBC:Java Data Base Connectivity,它主要由接口组成。组成JDBC的2个包为java.sql和javax.sql。开发JDBC应用需要这2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。
3 系统需求分析
3.1 系统可行性分析
(1)技术可行性
该程序使用Eclipse编译器,采用的Java语言,Java面向对象,GUI图形界面,MySQL数据库,技术上是可行的。
(2)经济可行性
该程序使用Eclipse编译器是免费的,该软件能满足设计的基本的需求,不需要额外的开销,经济上是可行的。
(3)操作可行性
该程序只需用户安装Eclipse编译器并配置好环境变量就可以使用,GUI也在Eclipse编译器上安装了Window Builder插件,操作简单便捷。符合大部用户的使用习惯。操作上是可行的。
(4)法律可行性
在法律上是合法的,所以是可行的。
3.2 系统需求分析
- 宿舍管理员管理:能够添加管理员用户、删除管理员用户信息、查找管理
信息、修改管理员信息。
(2)学生信息管理:能够添加学生信息、删除学生信息、查找学生信息、修改学生信息。
(3)宿舍楼信息管理:能够添加宿舍楼信息、删除宿舍楼信息、查找宿舍楼信息、修改宿舍楼信息。
(4)宿舍信息管理:能够添加宿舍信息、删除宿舍信息、查找宿舍信息、修改宿舍信息。
(5)学生住宿管理:能够添给学生分配宿舍、能够给学生调换宿舍、能够删除学生住宿信息。
(6)学生缺寝管理:学生缺寝时,能够记录学生缺寝记录,如果缺寝信息有误,学生申诉后能够修改缺寝信息、删除缺寝信息、查询学生缺寝信息。
(8)系统登录退出:能够正常登陆、退出系统。
3.3 组内成员分工
表3-1 组内成员分工情况表
序号
姓名
组内角色
小组分工
备注
1
项目经理,编码
系统管理员类代码编写,GUI设计,测试,JDBC编写
2
编码,测试
宿舍管理员类代码编写,GUI设计,测试
3
构架师,测试
学生类代码编写,GUI设计,JDBC的编写,测试
3.4 进度安排
进度安排如表3-2所示。
表3-2 进度安排表
阶段
持续时间
阶段描述
输出
构思阶段
5h
需求分析
需求说明,功能模块图
设计阶段
1天
系统设计
设计说明-可以画流程图;数据库设计
是现阶段
1天
编写代码
项目工程源代码
6h
系统测试
进行黑盒测试(功能测试)-测试说明
运行阶段
一天
部署、运行
系统使用说明、运维报告-答辩
4 系统设计
4.1 系统设计
根据系统的实际功能需求分析,对系统功能部分进行了设计。
登录界面有超管、宿管、学生三种选项,选择不同的身份进入不同的操作。
超管登录后对宿管、学生进行增加、修改、查询、删除的操作,删除操作保留最新数据的同时也减小了存储空间的消耗。
宿管增删查学生的个人信息。
学生注册登录,查看个人信息、做到及时更新最新信息,学生也可以申诉修改缺勤信息记录。
4.2 数据库设计
5.1 管理员登录界面实现
管理员通过输入账号密码来进行登录后台管理系统(有三个登录页面,分别对应超管、宿管和学生)。登录界面如图5-9所示。
**5.2 管理用户信息界面实现 **
管理员登录后台系统后,点击缺寝记录,便可看到当前有多少学生缺寝,也可对其进行操作(增删改查)。
管理员登录后台系统后,点击宿管人员管理,便可对超管、宿管、学生类型进行管理。
管理员登录后台系统后,点击学生人员管理,便可对学生进行管理。
管理员登录后台系统后,点击宿舍信息管理,便可对宿舍信息进行操作管理。
管理员登录后台系统后,点击寝楼信息管理,便可对寝楼进行管理。
管理员登录后台系统后,点击退出系统,便可退出该系统
用户登录后台系统后,点击缺寝记录,便可看到纸巾的缺寝记录,有误也可对其申述修改操作。
6 系统测试
对超管功能模块进行测试,测试结果如表6-1所示。
表6-1 超管模块测试表
编号
测试功能
输入描述
预期结果
运行结果
1
增加功能
超管加学生信息
数据库中有
正常,与预期结果一致
2
删除功能
超管通过学号删除超管、学生信息
从数据库中删除
正常,与预期结果一致
3
修改功能
通过学号修改
数据库中显示修改内容
正常,与预期结果一致
4
查找功能
从数据库中查找
查找到与数据库中对应中内容
正常,与预期结果一致
管理员模块测试主要是针对超管和学生的操作,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。
对宿管功能模块进行测试,测试结果如表6-2所示。
表6-2 宿管模块测试表
编号
测试功能
输入描述
预期结果
运行结果
1
增加功能
宿管加学生缺寝信息
数据库中有
正常,与预期结果一致
2
删除功能
宿管通过学号删除相关信息
从数据库中删除
正常,与预期结果一致
3
修改功能
通过学号修改缺寝信息
数据库中显示修改内容
正常,与预期结果一致
4
查找功能
从数据库中查找
查找到与数据库中对应中内容
正常,与预期结果一致
宿管模块测试主要是针对学生的操作,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。
对学生功能模块进行测试,测试结果如表6-3所示。
表6-3 学生模块测试表
编号
测试功能
输入描述
预期结果
运行结果
1
查看功能
从数据库中查找
查找到与数据库中对应中内容
正常,与预期结果一致
学生模块测试主要是针对缺寝信息的查看,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。
总结:
本课题经过测试,所有功能都符合需求分析并且均能正常实现。
附源码:
login.java
package login;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.ArrayList;
//登录界面
public class login extends JFrame implements ActionListener {//增加监听事件
///label组件数组
JLabel welcome=new JLabel("欢迎使用校园宿舍管理系统");//创建欢迎界面JLabel。
JLabel user, password;//用户、密码
//单行文本框
JTextField username;//用户名框
JPasswordField passwordField;//密码框
JButton loginButton;//登录按钮
JButton button;
//定义一个卡片式布局
CardLayout cardLayout = new CardLayout();//扑克牌,每次显示最前面的一张
JPanel card;
JPanel cardPanel,cardPanel2,cardPanel3,cardPanel4;
//界面上需要放置多个组件时
JTabbedPane jTabbedPane,jTabbedPane2;
int type=1;
Users users;
Font font = new Font("宋体", Font.BOLD|Font.ITALIC, 20);
public login(){
init();//在文档加载完后调用函数,不调用不执行
}
private void init() {//初始化界面、该函数为初始化功能
welcome.setFont(font);//设置字体的方法
setTitle("宿舍管理系统 组长:索泽薇 组员:张金晶 陈秋雨 陶然 刘宇杰");
getContentPane().setLayout(new BorderLayout());
user = new JLabel("用户名");
password = new JLabel("密码");
button = new JButton("重置");
card = new JPanel(cardLayout);
JPanel panel1 = new JPanel(new BorderLayout());
username = new JTextField();
passwordField = new JPasswordField();
loginButton = new JButton("Login!");
loginButton.addActionListener(this);
JPanel titlepanel = new JPanel(new FlowLayout());//标题面板
JPanel loginpanel = new JPanel();//登录面板
loginpanel.setLayout(null);//关闭窗口布局管理器,使后面的setBounds生效
//设定窗体的偏移量
welcome.setBounds(300,100,400,25);
user.setBounds(340, 170, 50, 20);
password.setBounds(340, 210, 50, 20);
username.setBounds(390, 170, 120, 20);
passwordField.setBounds(390, 210, 120, 20);
loginButton.setBounds(340, 250, 80, 25);
button.setBounds(430,250,80,25);
//把页面各项信息添加到登录login面板上
loginpanel.add(welcome);
loginpanel.add(user);
loginpanel.add(password);
loginpanel.add(username);
loginpanel.add(passwordField);
loginpanel.add(loginButton);
loginpanel.add(button);
panel1.add(titlepanel, BorderLayout.NORTH);
panel1.add(loginpanel, BorderLayout.CENTER);
card.add(panel1, "login");
getContentPane().add(card);//初始化一个容器 ,在容器上添加控件
setBounds(300, 100, 900, 600);
setVisible(true);//显示JFrame对象
button.addActionListener(new ActionListener(){//为重置按钮添加监听事件
//同时清空name、password的数据
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
username.setText("");
passwordField.setText("");
}
});
}
public static void main(String[] args) {//main方法
new login();
}
@Override
public void actionPerformed(ActionEvent e) {
boolean flag=false;//用来标志用户是否正确
if (e.getSource() == loginButton) {
ArrayList<Users> list = new CheckUsers().getUsers();//获得所有用户信息
for (int i = 0; i < list.size(); i++) {//遍历所有用户信息,以此来判断输入的信息是否正确
users = list.get(i);
String passwordStr = new String(passwordField.getPassword());
if (username.getText().equals(users.getName()) && passwordStr.equals(users.getPassword())) {
if(users.getType()==1){//如果时学生
type=users.getType();
System.out.println("登录人员类别"+type);
JOptionPane.showMessageDialog(null, "欢迎(学生)"+username.getText()+"登录", "学生宿舍管理系统", JOptionPane.PLAIN_MESSAGE);
//当输入的信息正确时,就开始加载选项卡界面,并把选项卡界面加入到卡片布局器中
StudentInfo studentInfo=new StudentInfo(users,type);//学生信息
AddLater later = new AddLater(type,users);//晚归信息
//guanyu guanyu=new guanyu();
//guanyu.help help=new guanyu.help();
Exit exit=new Exit();
cardPanel = new JPanel();
cardPanel2 = new JPanel();
cardPanel3 = new JPanel();
cardPanel4 = new JPanel();
jTabbedPane = new JTabbedPane(JTabbedPane.LEFT);
jTabbedPane.add("学生信息",studentInfo);
jTabbedPane.add("缺寝记录", later);
jTabbedPane.add("退出登录", exit);
cardPanel.add(jTabbedPane);
jTabbedPane2 = new JTabbedPane(JTabbedPane.TOP);
jTabbedPane2.add("系统操作页面",cardPanel);
//jTabbedPane2.add("关于系统",guanyu);
// jTabbedPane2.add("帮助",help);
cardPanel2.add(jTabbedPane2);
card.add(cardPanel2, "info");
cardLayout.show(card, "info");//输入信息正确就显示操作界面,否则重新输入正确信息
}else if (users.getType()==2){//如果时宿管
type=users.getType();
System.out.println("登录人员类别"+type);
JOptionPane.showMessageDialog(null, "欢迎(宿管)"+username.getText()+"登录", "学生宿舍管理系统", JOptionPane.PLAIN_MESSAGE);
//当输入的信息正确时,就开始加载选项卡界面,并把选项卡界面加入到卡片布局器中
StudentInfo studentInfo=new StudentInfo(users,type);//学生信息
CooDormitory dormitoryInfo = new CooDormitory(type,users);//宿舍信息
AddLater later = new AddLater(type,users);//晚归信息
editLater editLater=new editLater(type,users);//修改缺寝信息
DeleteLater deleteLater=new DeleteLater(type,users);//删除
SeekLater seekLater=new SeekLater(type,users);
//guanyu guanyu=new guanyu();
//guanyu.help help=new guanyu.help();
Exit exit=new Exit();//退出系统
cardPanel = new JPanel();
cardPanel2 = new JPanel();
cardPanel3 = new JPanel();
cardPanel4 = new JPanel();
cardPanel = new JPanel();
jTabbedPane = new JTabbedPane(JTabbedPane.LEFT);
jTabbedPane.add("学生信息",studentInfo);
jTabbedPane.add("宿舍信息", dormitoryInfo);
jTabbedPane.add("缺寝记录", later);
jTabbedPane.add("查询缺寝记录",seekLater);
jTabbedPane.add("修改缺寝记录", editLater);
jTabbedPane.add("删除缺寝记录",deleteLater);
jTabbedPane.add("退出登录", exit);
cardPanel.add(jTabbedPane);
jTabbedPane2 = new JTabbedPane(JTabbedPane.TOP);
jTabbedPane2.add("系统操作页面",cardPanel);
//jTabbedPane2.add("关于系统",guanyu);
// jTabbedPane2.add("帮助",help);
cardPanel2.add(jTabbedPane2);
card.add(cardPanel2, "info");
cardLayout.show(card, "info");//输入信息正确就显示操作界面,否则重新输入正确信息
}else if (users.getType()==3){
type=users.getType();
System.out.println("登录人员类别"+type);
JOptionPane.showMessageDialog(null, "欢迎(超管)"+username.getText()+"登录", "学生宿舍管理系统", JOptionPane.PLAIN_MESSAGE);
//当输入的信息正确时,就开始加载选项卡界面,并把选项卡界面加入到卡片布局器中
AddLater later = new AddLater(type,users);//晚归信息
editLater editLater=new editLater(type,users);//修改缺寝信息
DeleteLater deleteLater=new DeleteLater(type,users);//删除
SeekLater seekLater=new SeekLater(type,users);
CooUsers cooUsers=new CooUsers(type,users);
CooStu cooStu=new CooStu(type,users);
CooDormitory dormitoryInfo = new CooDormitory(type,users);//宿舍信息
CooBuilding cooBuilding=new CooBuilding(type,users);
//guanyu guanyu=new guanyu();
//guanyu.help help=new guanyu.help();
Exit exit=new Exit();
cardPanel = new JPanel();
cardPanel2 = new JPanel();
cardPanel3 = new JPanel();
cardPanel4 = new JPanel();
jTabbedPane = new JTabbedPane(JTabbedPane.LEFT);
jTabbedPane.add("缺寝记录", later);
jTabbedPane.add("查询缺寝记录",seekLater);
jTabbedPane.add("修改缺寝记录", editLater);
jTabbedPane.add("删除缺寝记录",deleteLater);
jTabbedPane.add("宿管人员管理",cooUsers);
jTabbedPane.add("学生人员管理",cooStu);
jTabbedPane.add("宿舍信息管理", dormitoryInfo);
jTabbedPane.add("寝楼信息管理",cooBuilding);
jTabbedPane.add("退出登录", exit);
cardPanel.add(jTabbedPane);
jTabbedPane2 = new JTabbedPane(JTabbedPane.TOP);
jTabbedPane2.add("系统操作页面",cardPanel);
// jTabbedPane2.add("关于系统",guanyu);
// jTabbedPane2.add("帮助",help);
cardPanel2.add(jTabbedPane2);
card.add(cardPanel2, "info");
cardLayout.show(card, "info");//输入信息正确就显示操作界面,否则重新输入正确信息
}
flag = true;
break;//如果信息正确就退出遍历,提高效率
}
}
if(!flag){//信息不正确,重新输入
JOptionPane.showMessageDialog(null, "请输入正确的用户名或密码", "警告",JOptionPane.WARNING_MESSAGE);
username.setText("");//让文本框显示我要的信息
passwordField.setText("");
}
}
}
}
Users.java
package login;
//用户信息
public class Users {
private String name;
private String password;
private int type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
StudentInfo.java
package login;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
//宿舍信息(学生)
public class StudentInfo extends JPanel{ //implements ActionListener {
Connection connection = new GetConnection().GetConnection();
Users users;//当前用户
int type;//用户类型
JTable table=new JTable();
String[] col ={ "学号", "姓名", "性别","专业编号","宿舍号","寝楼" ,"楼层"};
DefaultTableModel mm = new DefaultTableModel(col, 0); // 定义一个表的模板
public StudentInfo(Users users, int type){//从登录界面传回,用户名和用户类型
this.type=type;
this.users=users;
setLayout(new FlowLayout());
table.setModel(mm);
table.setRowSorter(new TableRowSorter<>(mm));//排序
JPanel jPanel=new JPanel(new FlowLayout());
JScrollPane js=new JScrollPane(table);
jPanel.add(js);
add(jPanel);
search();
}
private void search(){
PreparedStatement state;
ResultSet resultSet;
if(type==1){//如果是学生,只显示学生自己的信息
try {
String select="select * from student where Sname"+"="+"'"+users.getName()+"'";
state=connection.prepareStatement(select);
resultSet=state.executeQuery();
while (resultSet.next()){
String Sno=resultSet.getString(1);
String Sname=resultSet.getString(2);
String Ssex=resultSet.getString(3);
String Sdept=resultSet.getString(4);
String Dno=resultSet.getString(5);
String Bbu =resultSet.getString(6);
String Bfloor =resultSet.getString(7);
String[] data={Sno,Sname,Ssex,Sdept,Dno,Bbu,Bfloor};
mm.addRow(data);
}
} catch (SQLException e) {
e.printStackTrace();
}
}else if(type==2||type==3){//如果是宿管,则显示全部学生的宿舍
try {
state=connection.prepareStatement("select *from student");
resultSet = state.executeQuery();
while (resultSet.next()){
String Sno=resultSet.getString(1);
String Sname=resultSet.getString(2);
String Ssex=resultSet.getString(3);
String Sdept=resultSet.getString(4);
String Dno=resultSet.getString(5);
String Bbu =resultSet.getString(6);
String[] data={Sno,Sname,Ssex,Sdept,Dno,Bbu};
mm.addRow(data);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
GetConnection.java
package login;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
//连接到mySQL数据库
public class GetConnection {
private Connection con=null;
public Connection GetConnection(){
//数据库连接URL(url:就是一个jdbc的规范的约定)
String URL="jdbc:mysql://localhost:3306/user";//数据库位置
String USER="root";
String KEY="123456";
try {
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
con= DriverManager.getConnection(URL, USER, KEY);//数据库连接用户名、密码
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return con;// 返回的con就是一个数据库连接对象,通过它你就可以对这个数据库做添删改查的动作
}
}
希望能够帮助你!
版权归原作者 QLの菜园子 所有, 如有侵权,请联系我们删除。