何小豆儿在此 发表于 6 天前

HNU-数据库系统-大作业-学校信息管理系统

【媒介】

这是数据库的大作业,由于时间仓促,只能做到这个程度了。参考github上的开源项目,完成了这个不分离前后端的简朴本地数据库应用管理系统。并加入了本身的想法与拓展。没有什么精彩的地方,只能说是中规中矩完成了任务。真话说参考价值不大,假如要找更好的想法,可以去逛一逛github。
【参考评分:95/100】
【2024-12-13更新】
本项目已挂github:https://github.com/wolfvoid/HNU-SIMS
假如有用麻烦star&follow,谢谢喵
https://i-blog.csdnimg.cn/blog_migrate/a7a6cb14bfaebf8e8527fdb0259d36b9.png
学校信息管理系统 实验陈诉

成员分工:


[*]数据库计划部分,实验陈诉:
[*]软件计划部分:
[*]参与讨论:
目录


一、具体问题

系统分为四个模式:弟子模式、宿管模式、教师模式、系统管理员模式。


[*] 弟子模式的功能有:查看个人信息、宿舍报修、建议与反馈、选课、查看所选课程信息、修改暗码、退出。
[*] 宿管模式的功能有:查看个人信息、宿舍管理、住宿管理、出入登记、宿舍报修、建议与反馈、修改暗码、退出。
[*] 教师模式的功能有:查看个人信息、查看授课信息、查看选课弟子信息、退出。
[*] 系统管理员的功能有:宿舍楼管理、宿舍管理、宿管管理、弟子管理、住宿管理、寝室分配、教师管理、课程管理。
二、数据库计划部分

1. 需求分析

1.1 配景概述

为了便于更好的管理弟子宿舍和弟子选课以及人员信息情况,采用软件与数据库相结合的管理模式对弟子宿舍报修,弟子选课,教师给弟子录入成绩等信息进行记录与处理惩罚,从而提升管理服从。


[*] 弟子需求:能够进行选课;查看选课情况;申请宿舍报修;对宿舍情况进行建议与反馈;记录本人基本信息,包括住宿情况,选课情况等;
[*] 教师需求:记录本人基本信息;能够查看本身授课情况;查看选课弟子信息;
[*] 宿管需求:查看个人信息、宿舍管理、弟子管理、住宿管理、出入登记、宿舍报修、建议与反馈、修改暗码、退出。
[*] 系统管理员需求:能够对宿舍楼、宿舍、宿管、弟子、住宿、寝室、教师、课程等进行管理。
综上,计划一个学校信息管理系统。可以对弟子宿舍报修、教师授课、弟子选课等进行管理。
1.2 功能需求

弟子端

[*] 登录
[*] 完满个人信息
[*] 修改暗码
[*] 申请宿舍报修
[*] 建议与反馈
[*] 查看所选课程信息
[*] 修改暗码
[*] 退出
教师端

[*] 登录
[*] 完满个人信息
[*] 修改暗码
[*] 查看授课信息
[*] 查看选课弟子信息
[*] 退出
宿舍管理员端

[*] 登录
[*] 完满个人信息
[*] 修改暗码
[*] 宿舍管理
[*] 住宿管理
[*] 出入登记
[*] 宿舍报修
[*] 接收建议与反馈
[*] 修改暗码
[*] 退出
系统管理员端

[*] 登录
[*] 宿舍楼管理
[*] 宿舍管理
[*] 宿管管理
[*] 弟子管理
[*] 住宿管理
[*] 寝室分配
[*] 教师管理
[*] 课程管理
[*] 删库跑路
[*] 退出
1.3 数据需求

数据字典:
数据布局形貌,反映数据之间的组合关系:
1.数据布局:宿舍楼


[*] 含义阐明:弟子信息管理系统的数据布局,定义了一个宿舍楼的有关信息
[*] 构成:楼号,层数,房间数,类别,居住性别,宿管编号
2.数据布局:宿舍


[*] 含义阐明:弟子信息管理系统的数据布局,定义了一个宿舍的有关信息
[*] 构成:楼号,楼层,宿舍号,总床位数,剩余床位数,单价
3.数据布局:宿舍管理员


[*] 含义阐明:弟子信息管理系统的主体数据布局,定义了一个宿舍管理员的有关信息
[*] 构成:编号,暗码,姓名,性别,手机
4.数据布局:弟子


[*] 含义阐明:弟子信息管理系统的主体数据布局,定义了一个弟子的有关信息
[*] 构成:学号,暗码,姓名,性别,出生日期,年级,院系,班级,手机,是否入住
5.数据布局:建议与反馈


[*] 含义阐明:弟子信息管理系统的数据布局,定义了一个建议与反馈的有关信息
[*] 构成:学号,详细信息
6.数据布局:课程


[*] 含义阐明:弟子信息管理系统的数据布局,定义了一个课程的有关信息
[*] 构成:课程号,课程名,学分,授课教师
7.数据布局:教师


[*] 含义阐明:弟子信息管理系统的主体数据布局,定义了一个教师的有关信息
[*] 构成:职工号,教师名,性别,暗码
2. 概念布局计划

包含建议与反馈advice、课程course、宿舍管理员admin、宿舍dormitory、宿舍楼floor、弟子student、教师teacher等7个实体。每个实体的属性、码如下:
2.1 实体

1.建议与反馈advice:学号,详细信息info。主码:学号stu_num,详细信息info。
字段名类型备注stu_numchar(15)主码,学号infotext详细信息 2.课程course:课程号cno,课程名cname,学分score,授课教师tno。主码:课程号cno。
字段名类型备注cnochar主码,课程号cnamevarchar课程名scoresmallint学分tnochar授课教师 3.宿舍管理员admin:编号admin_num,暗码password,姓名name,性别sex,手机phone。主码:编号admin_num。
字段名类型备注admin_numchar主码,编号passwordchar暗码namechar姓名sexchar性别phonechar手机 4.宿舍dormitory:楼号floor_num,楼层号layer,宿舍号room_num,总床位数bed_total,剩余床位数bed_surplus,单价price。主码:楼号floor_num,楼层layer,宿舍号room_num。
字段名类型备注floor_numchar主码,楼号layerint主码,楼层room_numint主码,宿舍号bed_totalint总床位数bed_surplusint剩余床位数priceint单价 5.宿舍楼floor:楼号floor_num,层数layer_amount,房间数room_amount,类别category,居住性别sex,宿管编号admin_num。主码:楼号floor_num。
字段名类型备注floor_numchar主码,楼号layer_amountint层数room_amountint房间数categorychar类别sexchar居住性别admin_numchar宿管编号 6.弟子student:学号stu_num,暗码password,姓名name,性别sex,出生日期birth,年级grade,院系faculty,班级class,手机phone,是否入住yes_no。主码:学号stu_num。
字段名类型备注stu_numchar主码,学号passwordchar暗码namechar姓名sexchar性别birthint出生日期gradeint年级facultychar院系classchar班级phonechar手机yes_nochar是否入住 7.教师teacher:职工号tno,教师名tname,性别tsex,暗码password。主码:职工号tno。
字段名类型备注tnochar主码,职工号tnamevarchar教师名tsexchar性别passwordvarchar暗码 2.2 ER图

https://i-blog.csdnimg.cn/blog_migrate/fff4485ae88b0301ada956112155183b.png
3. 逻辑计划

3.1 模型选择

选用关系数据模型来实现相应的计划。
3.2 主题分别

分成宿舍管理员主题模块和弟子教师主题模块,具体如下:
宿舍管理员主题模块
由宿舍管理员、宿舍楼、宿舍、建议与反馈四个实体构成;

[*] 宿舍管理员有编号,暗码,姓名,性别,手机五个属性;
[*] 宿舍楼有楼号,层数,房间数,类别,居住性别,宿管编号六个属性;
[*] 宿舍有楼号,楼层,宿舍号,总床位数,剩余床位数,单价六个属性;
[*] 建议与反馈有学号,详细信息两个属性;
弟子教师主题模块
由弟子、课程、教师三个实体构成

[*] 弟子有学号,暗码,姓名,性别,出生日期,年级,院系,班级,手机,是否入住十个属性;
[*] 课程有课程号,课程名,学分,授课教师四个属性;
[*] 教师有职工号,教师名,性别,暗码四个属性;
3.3 依靠分析

1.宿舍管理员(编号,暗码,姓名,性别,手机)
由于每个宿舍管理员只有一个候选码编号,所以不存在非主属性对码的部分函数依靠;另外,由于除了候选码以外的所有非主属性每一个都是只有通过候选码推出,因此,也不存在传递依靠,而且因为候选码编号是唯一的决定因素,所以该关系模式也满意BCNF。
2.宿舍楼(楼号,层数,房间数,类别,居住性别,宿管)
由于每个课程只有一个候选码楼号,所以不存在非主属性对码的部分函数依靠;另外,由于除了候选码以外的所有非主属性每一个都是只有通过候选码推出,因此,也不存在传递依靠,而且因为候选码编号是唯一的决定因素,所以该关系模式也满意BCNF。
3.宿舍(楼号,楼层,宿舍号,总床位数,剩余床位数,单价)
由于每个宿舍有三个候选码楼号,楼层,宿舍号。所有的非主属性对每一个码都是完全函数依靠;但是不是所有的主属性对每一个不包含它的码也是完全函数依靠。所以该关系模式不满意BCNF,但是是3NF。
4.建议与反馈(学号,详细信息)
由于建议与反馈的候选码为全码,由于不是所有的主属性对每一个不包含它的码也是完全函数依靠。所以该关系模式不满意BCNF,但是是3NF。
5.弟子(学号,暗码,姓名,性别,出生日期,年级,院系,班级,手机,是否入住)
由于每个弟子只有一个候选码编号,所以不存在非主属性对码的部分函数依靠;但是,院系和班级之间存在传递依靠关系,所以该关系模式满意1NF。
6.课程(课程号,课程名,学分,授课教师)
由于每个课程只有一个候选码课程号,所以不存在非主属性对码的部分函数依靠;另外,由于除了候选码以外的所有非主属性每一个都是只有通过候选码推出,因此,也不存在传递依靠,而且因为候选码编号是唯一的决定因素,所以该关系模式也满意BCNF。
7.教师(职工号,教师名,性别,暗码)
由于每个教师只有一个候选码职工号,所以不存在非主属性对码的部分函数依靠;另外,由于除了候选码以外的所有非主属性每一个都是只有通过候选码推出,因此,也不存在传递依靠,而且因为候选码职工号是唯一的决定因素,所以该关系模式也满意BCNF。
8.选课(学号,课程号,成绩)
由于选课的候选码有两个学号和课程号,由于不存在非主属性对码的部分函数依靠;另外,由于除了候选码以外的所有非主属性每一个都是只有通过候选码推出,因此,也不存在传递依靠;但是不符合所有的主属性对每一个不包含它的码也是完全函数依靠,所以该关系模式不满意BCNF,但是是3NF。
9.出入登记(学号,楼号,类别(出/入),时间)
由于出入登记的候选码为全码,由于不是所有的主属性对每一个不包含它的码也是完全函数依靠。所以该关系模式不满意BCNF,但是是3NF。
10.宿舍报修(学号,楼号,楼层,宿舍号,报修详细信息,是否处理惩罚(是/否))
由于宿舍报修的候选码为全码,由于不是所有的主属性对每一个不包含它的码也是完全函数依靠。所以该关系模式不满意BCNF,但是是3NF。
11.入住信息(学号,楼号,楼层,宿舍号,入住时间)
由于入住信息的候选码为全码,由于不是所有的主属性对每一个不包含它的码也是完全函数依靠。所以该关系模式不满意BCNF,但是是3NF。
3.4 联系

实体间的联系如下:
一对一:


[*] 宿舍楼-宿舍管理员
[*] 教师-课程
一对多:


[*] 宿舍楼-宿舍
[*] 宿舍-弟子
[*] 弟子-建议与反馈
[*] 弟子-宿舍楼
[*] 弟子-宿舍
多对多:


[*]弟子-课程
3.5 用户子模式

创建用户子模式,因为宿舍管理员需要频繁查询弟子的入住和报修信息等等,为简化查询,并同时保证弟子暗码及相干隐私信息的安全性。
我们可以通过创建视图。
基于我们计划的基本表,计划了6个视图。
(1)含弟子姓名的住宿信息(学号,姓名,楼号,楼层,宿舍号,入住时间)
https://i-blog.csdnimg.cn/blog_migrate/0557a17e36eb547bdffd37c1194f6153.png
(2)含弟子姓名的出入信息(学号,姓名,楼号,类别,时间)
https://i-blog.csdnimg.cn/blog_migrate/a59a68ddb19d5daa798c767327ba6682.png
(3)含弟子姓名的报修信息(学号,姓名,楼号,楼层,宿舍号,报修详细,是否处理惩罚)
https://i-blog.csdnimg.cn/blog_migrate/081c3511005e8a93b713976e2a4b00c2.png
(4)含弟子姓名的建议与反馈(学号,姓名,详细信息)
https://i-blog.csdnimg.cn/blog_migrate/535f76d9118e86cddf67831dc272225f.png
(5)含楼号的住宿弟子信息(学号,暗码,姓名,性别,出生年份,年级,院系,班级,手机,是否入住,楼号)
https://i-blog.csdnimg.cn/blog_migrate/f2dca9b8f641a52fcdace93492471dc9.png
(6)含弟子姓名和楼号的住宿弟子的建议与反馈(学号,姓名,详细信息,楼号)
https://i-blog.csdnimg.cn/blog_migrate/66c4be25a04ed602f7ed979002f4ed34.png
4. 物理计划

4.1 具体计划

根据优化和调解,末了的逻辑模型如下:
https://i-blog.csdnimg.cn/blog_migrate/304a5095cd55fc36748f5c777a2df71d.png
末了的物理模型如下:
https://i-blog.csdnimg.cn/blog_migrate/00d4c7698c2e01aa2fa6959ab53c0b14.png
4.2 关系实体

一个关系对应一张表,根据末了的物理模型,我们需要十一表来实现关系数据模型。
1.宿舍管理员实体:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/4fbbe2fa7088e12a36230c411088b31b.png
主码为:宿舍管理员编号admin_num;
各属性值的约束
https://i-blog.csdnimg.cn/blog_migrate/64c28e5bb5533548159c477f48e803d0.png
其中宿舍管理员暗码password默认值为’123456’,宿舍管理员性别sex默认值为’男’
2.建议与反馈实体:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/3ff0af82fc853ecdd3236426f35f6e61.png
主码为:学号stu_num和详细信息info;
外码为:学号stu_num;
3.教师实体:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/5eab97f97d01f58d30819bfc0471f1c6.png
主码为:工号tno;
各属性值的约束
其中教师性别tsex默认值为’男’,暗码password默认值为’123456’
4.课程实体:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/85d1393ff4f5ba8b5e25d89a35857e0b.png
主码为:课程号cno;
外码为:教师工号tno;
各属性值的约束
https://i-blog.csdnimg.cn/blog_migrate/662c5fc89a11943b1959adbffd7909ee.png
其中学分score默认值为NULL
5.宿舍楼实体:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/fb6b0cc713cad1a047831d578f2548dc.png
主码为:宿舍楼号floor_num;
外码为:宿舍管理员编号admin_num;
各属性值的约束
https://i-blog.csdnimg.cn/blog_migrate/d3b2d798a818f28578935441b0c30af5.png
其中居住性别sex默认值为’男’
6.宿舍实体:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/cd07596f6be71ba1e7912fc26a32848b.png
主码为:宿舍楼号floor_num,楼层号layer,宿舍号room_num;
外码为:宿舍楼号floor_num;
各属性值的约束
https://i-blog.csdnimg.cn/blog_migrate/2a8b1fdd99569709efb2cb241b9b9d58.png
其中总床位数bed_total默认值为4,剩余床位数bed_surplus默认值为4
7.弟子实体:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/9909532cdeff8ff591519f2f349bfa35.png
主码为:学号stu_num;
各属性值的约束
https://i-blog.csdnimg.cn/blog_migrate/c2d19b3f9cdadda9f44c0ce2a8a62bdb.png
其中暗码password默认值为’123456’,弟子性别sex默认值为’男’
8.弟子-课程(选课)关系:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/d2754ddf964240d9e7ced07ff42dfc36.png
其中成绩mark默认值为NULL
主码为:学号sno,课程号cno;
外码为:学号sno,课程号cno;
9.弟子-宿舍(出入信息)关系:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/c628366f85bf04a623e7e642c661451c.png
主码为:宿舍楼号floor_num,学号stu_num,类别(出/入)category,时间time;
外码为:宿舍楼号floor_num,学号stu_num;
各属性值的约束
https://i-blog.csdnimg.cn/blog_migrate/e9443f5b81ce5c37b47399c7d100efb6.png
10.弟子-宿舍(入住信息)关系:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/fa10cbd53b6305b9ae770e0d51bbbaa2.png
主码为:学号stu_num;
外码为:宿舍楼号floor_num,楼层号layer,宿舍号room_num,学号stu_num;
11.弟子-宿舍(宿舍报修)关系:
各属性类型长度定义
https://i-blog.csdnimg.cn/blog_migrate/b1b7ba03b4f74c2744fab01e22d221e9.png
主码:全码
外码:楼层号layer,宿舍号room_num,宿舍楼号floor_num,学号stu_num
https://i-blog.csdnimg.cn/blog_migrate/59af3dd3e6bd5fc409e9eb2bd9e92c61.png
4.3 存取方式

对于多用户共享系统,对同一个关系要建立多条存取路径才能满意多用户的多种应用要求。数据库管理系同一样平常提供多种存取方法。常用的存取方法分为三类:

[*] 索引方法,重要为 B+树索引方法;
[*] 聚簇方法;
[*] Hash 方法。
在我们的计划中重要采用 B+树索引,利用 using btree 关键字来实现。
代码示例:
https://i-blog.csdnimg.cn/blog_migrate/ef082cea9929c0ab787a5738d8d69b6b.png
4.4 存储布局

​ 在数据库中,数据表的存储布局是由存储引擎决定的。存储引擎可以是 MySQL 的 InnoDB 引擎,也可以是其他的存储引擎。
​ 在我们的存储布局中,使用了 InnoDB 存储引擎,它是一种高效的存储引擎,它支持事务,并且
支持多线程。通过 ENGINE = InnoDB sql 语句来实现。
​ 在我们的存储格式中,使用了 Row_FORMAT 行格式,并采用动态的构造格式,即 Dynamic。通过ROW_FORMAT = Dynamic sql 语句来实现。
​ 对于排序的规则使用的是 utf8mb3_general_ci 字符集,通过 CHARACTER SET = utf8mb3 COLLATE= utf8mb3_general_ci sql 语句来实现。凡是涉及到字符类型比较或排序的地方,都会和 COLLATE有关。
代码示例:
https://i-blog.csdnimg.cn/blog_migrate/76da295c8d6b450ae40b868fc7cff4d2.png
5.运行测试

执行逻辑模型天生的SQL文件,运行成功,结果如下:
https://i-blog.csdnimg.cn/blog_migrate/444b3d344fdfcbfdd4262b248da04e36.png
https://i-blog.csdnimg.cn/blog_migrate/0a384de58857d74e81ef930579800d68.png
1.宿舍管理员信息
https://i-blog.csdnimg.cn/blog_migrate/f35e436c546af3261ead3cb3ca10d4fd.png
我们插入六条记录,分别代表六名管理员,其中宿舍管理员编号为主码,须唯一区分宿舍管理员。
2.管理员–宿舍楼
https://i-blog.csdnimg.cn/blog_migrate/a7151ae12222afc3cce79ef8061de962.png
我们插入六条宿舍楼记录,管理员编号从1001至1006,满意管理员–宿舍楼的一对一关系。
3.宿舍楼–宿舍
https://i-blog.csdnimg.cn/blog_migrate/743cb3016378b9b9b8d6b08a343b4f9a.png
插入多条记录,为宿舍楼分配多个宿舍,其中宿舍楼名以TM开头,第三列为宿舍名,满意宿舍楼–宿舍的一对多关系,且该关系符合现实情况。并且现实中宿舍还存在剩余床位的情况,代表没有弟子入住该床位。
4.弟子信息
https://i-blog.csdnimg.cn/blog_migrate/29257f58aa07a670d57ae1a81dafd40f.png
我们插入多条记录,分别代表多名弟子,其中学号为主码,须唯一区分弟子。
5.弟子–入住–宿舍楼(宿舍)
https://i-blog.csdnimg.cn/blog_migrate/8c81b747ee6c24c7c59167a640ca05fe.png
插入了五条弟子入住信息的记录,其中第二、三条记录的宿舍号均为428,现实中每间寝室可以容纳多个弟子,满意寝室与弟子是一对多关系。
6.弟子出入信息
https://i-blog.csdnimg.cn/blog_migrate/c3edfd51624263af2e7d8dd057170041.png
插入了三条记录,代表弟子出入宿舍楼的情况,其中包含时间记录,包含具体的某时某刻,满意宿舍楼与弟子是一对多关系。每名弟子每出或入一次宿舍楼,就记录一次。
7.宿舍报修情况
https://i-blog.csdnimg.cn/blog_migrate/6702b0cc3d930122448bb6ecde2e3f6c.png
插入了五条宿舍报修记录,报修时需写明缘故起因,并且记录该报修是否处理惩罚。
8.弟子–建议与反馈
https://i-blog.csdnimg.cn/blog_migrate/7ff507ad98814a1b1414307289fbc383.png
插入了三条记录,包含三条建议与反馈信息,每名弟子可以多条提出建议与反馈,满意弟子与反馈与信息是一对多关系。
9.弟子选课信息
https://i-blog.csdnimg.cn/blog_migrate/f037b7e310b4280860b479d78bb94d1f.png
插入了四条记录,代表四条弟子选课信息,可以看到一名弟子可以选修多门课程,每门课程也可以被多名弟子选修,满意弟子与课程的多对多关系,同时教师可以对选修所教授课程的弟子录入成绩,成绩初始值为null。
三、软件计划部分

1. web技能栈



[*]Java
[*]Java.Swing
[*]JDBC
[*]MySQL
技能细节


[*]Java语言: 代码是使用Java编写的,这是一种面向对象的编程语言,特殊实用于跨平台应用程序的开辟。
[*]Swing库: 通过javax.swing包,使用了Swing库来构建GUI界面,包括JFrame、JPanel、JLabel、JButton、JTextField等组件。
[*]数据库连接: 使用了JDBC(Java Database Connectivity)来连接MySQL数据库。这可以看出通过java.sql包中的Connection、DriverManager等类来实现数据库连接。
[*]日志记录: 使用了Java的java.util.logging包进行日志记录。在代码中使用了Logger和LoggerUtil。
[*]MVC模式: 代码中尽大概遵循了MVC(Model-View-Controller)模式,通过分别代码为不同的功能条理,提高了代码的可维护性和可扩展性。
[*]图形界面定制: 使用了Swing库提供的方法对界面进行了定制,包括字体、颜色、布局等方面。
[*]变乱处理惩罚: 使用了Java的变乱处理惩罚机制,例如ActionListener和MouseListener来处理惩罚按钮点击等用户交互变乱。
[*]数据库: 应用程序连接到了MySQL数据库,这涉及到使用MySQL JDBC驱动器和SQL语句执行数据库操纵。
[*]外观切换: 实现了更换应用程序外观的功能,通过调用Swing的updateComponentTreeUI方法革新界面外观。
2. 概要计划(功能)

面向群体



[*]在校宿舍管理员、弟子和教师(有实现超级管理员)
基本要求


[*] 用户登录
[*] 查看个人信息
[*] 查看
功能需求

1.弟子


[*] 登录
[*] 查看个人信息
[*] 选课
[*] 查看我的课程
[*] 进行宿舍报修
[*] 提交宿舍反馈
[*] 修改暗码
[*] 退出弟子模式
2.教师


[*] 登录
[*] 查看个人信息
[*] 查看任教课程
[*] 进行成绩登记
[*] 修改登录暗码
[*] 退出教师模式
3.宿舍管理员


[*] 登录
[*] 查看个人信息
[*] 管理宿舍信息
[*] 管理弟子住宿信息
[*] 管理弟子出入登记信息
[*] 管理弟子宿舍报修信息
[*] 管理弟子建议与反馈
[*] 修改登录暗码
[*] 退出宿舍管理员模式
4.系统管理员


[*] 管理宿舍楼信息
[*] 管理宿舍信息
[*] 管理宿管信息
[*] 管理弟子信息
[*] 管理弟子住宿信息
[*] 进行寝室分配
[*] 管理教师信息
[*] 管理课程信息
[*] 删库跑路
[*] 退出系统管理员模式
3. 详细计划(代码)

3.1 宿舍管理员模块

DorAdminFunction
(1)查看个人信息
宿舍管理员可以查看本身的个人信息,编号,姓名,性别,管理的宿舍楼号等信息。
public JPanel info() { //[个人信息]功能
      String[] admin_info = new String; //宿管信息
      String[] floor_info = {"无", "无", "无", "无", "无"}; //管理的宿舍楼信息
      try {
            String sql = "SELECT * FROM admin WHERE admin_num=" + admin_num; //SQL语句,查询宿管信息
            PreparedStatement ps; //创建PreparedStatement类对象ps,用来执行SQL语句
            ps = HomePage.connection.prepareStatement(sql); //把操作数据库返回的结果保存到ps中
            ResultSet rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            while (rs.next()) {
                admin_info = rs.getString("admin_num");
                admin_info = rs.getString("name");
                admin_info = rs.getString("sex");
                admin_info = rs.getString("phone");
            }
            sql = "SELECT * FROM floor WHERE admin_num=" + admin_num; //SQL语句,查询该宿管管理的宿舍楼信息
            ps = HomePage.connection.prepareStatement(sql); //把操作数据库返回的结果保存到ps中
            rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            if (rs.next()) { //若该宿管有管理的宿舍楼,则获取相应宿舍楼信息
                floor_info = rs.getString("floor_num");
                floor_info = rs.getString("layer_amount");
                floor_info = rs.getString("room_amount");
                floor_info = rs.getString("category");
                floor_info = rs.getString("sex");
            }
            rs.close();
            ps.close();
      } catch (SQLException e) {
            e.printStackTrace();
      }
(2)宿舍管理
查看全部宿舍信息,查看某个宿舍信息,将宿舍信息导出到excel表,添加宿舍信息、修改宿舍信息、删除宿舍信息。
如查看全部宿舍信息:
    public void allDormitory() { //该宿管管理的宿舍楼的所有宿舍
      String[] columnNames = {"楼号", "楼层", "宿舍号", "总床位数", "剩余床位数", "单价", "操作"}; //表格列名
      String[][] rowData = null; //表格数据
      int count = 0; //表的元组总数
      try { //获取dormitory表信息
            String sql = "SELECT * FROM dormitory WHERE floor_num='" + floor_num + "'"; //SQL语句
            PreparedStatement ps; //创建PreparedStatement类对象ps,用来执行SQL语句
            ps = HomePage.connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_FORWARD_ONLY); //把操作数据库返回的结果保存到ps中
            ResultSet rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            rs.last();
            count = rs.getRow(); //获取宿舍元组总数
            if (count == 0) { //若dormitory表无元组
                rowData = new String;
                for (int i = 0; i < 7; i++)
                  rowData = "无";
            } else { //若dormitory表有元组
                rowData = new String;
                rs.first();
                int i = 0;
                do { //获取该宿管管理的宿舍楼的所有宿舍信息
                  rowData = rs.getString("floor_num"); //楼号
                  rowData = rs.getString("layer"); //楼层
                  rowData = rs.getString("room_num"); //宿舍号
                  rowData = rs.getString("bed_total"); //总床位数
                  rowData = rs.getString("bed_surplus"); //剩余床位数
                  rowData = rs.getString("price"); //单价
                  i++;
                } while (rs.next());
            }
            rs.close();
            ps.close();
      } catch (SQLException e) {
            e.printStackTrace();
      }
(3)住宿管理
查看全部弟子住宿信息,查询单个弟子住宿信息,将住宿信息导出到excel表,修改弟子住宿信息,删除弟子住宿信息,添加弟子住宿信息。
如修改弟子住宿信息:
      bt_modify.addActionListener(new ActionListener() { //修改学生信息
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < 10; i++)
                  if (i != 9)
                        tf.setEditable(true);
                if (x == 1) {
                  pn_first_2.remove(bt_modify);
                  pn_first_2.remove(bt_delete);
                  dorAdminJFrame.repaint();
                  pn_first_2.add(bt_save);
                  pn_first_2.add(bt_cancel);
                  dorAdminJFrame.validate();
                } else {
                  pn_second_2.remove(bt_modify);
                  pn_second_2.remove(bt_delete);
                  dorAdminJFrame.repaint();
                  pn_second_2.add(bt_save);
                  pn_second_2.add(bt_cancel);
                  dorAdminJFrame.validate();
                }
            }
      });
(4)出入登记
查看全部弟子出入登记信息,查询单个弟子出入登记信息,将出入登记信息导出到excel表,修改弟子出入登记信息,删除弟子出入登记信息,添加弟子出入登记信息。
如添加弟子出入登记信息:
public void addInoutInfo() { //添加出入信息
      pn_first_2.removeAll();
      pn_first_2.setLayout(null);
      pn_first_2.setBounds(0, 0, 1045, 695);
      pn_first_2.setBorder(BorderFactory.createEtchedBorder());
      JButton bt_back = new JButton("返回", new ImageIcon("image/返回.png"));
      bt_back.setFont(new Font("黑体", 0, 17));
      bt_back.setBounds(1, 10, 92, 25);
      bt_back.setContentAreaFilled(false);
      bt_back.setBorderPainted(false);
      bt_back.setCursor(new Cursor(Cursor.HAND_CURSOR));
      JButton bt_confirm = new JButton("确认添加", new ImageIcon("image/confirm.png"));
      bt_confirm.setFont(new Font("黑体", 0, 17));
      bt_confirm.setBounds(447, 520, 150, 50);
      bt_confirm.setContentAreaFilled(false);
      bt_confirm.setCursor(new Cursor(Cursor.HAND_CURSOR));
      JButton bt_time = new JButton("获取当前时间", new ImageIcon("image/time.png"));
      bt_time.setFont(new Font("黑体", 0, 17));
      bt_time.setBounds(765, 415, 170, 40);
      bt_time.setContentAreaFilled(false);
      bt_time.setCursor(new Cursor(Cursor.HAND_CURSOR));
      JLabel lb_infoImage = new JLabel(new ImageIcon("image/info.png"));
      lb_infoImage.setBounds(750, 205, 200, 200);
      String[] inorout = {"--------请选择--------", "          出", "          入"};
      JComboBox<String> cb_inorout = new JComboBox<String>(inorout);
      cb_inorout.setFont(new Font("黑体", 0, 20));
      cb_inorout.setBounds(392, 360, 260, 40);
      pn_first_2.add(bt_back);
      pn_first_2.add(bt_confirm);
      pn_first_2.add(bt_time);
      pn_first_2.add(lb_infoImage);
      pn_first_2.add(cb_inorout);
      ............
(5)宿舍报修
查看全部宿舍报修信息,查看单个宿舍报修信息,将所有宿舍报修信息导出到excel表,删除宿舍报修信息。
如查看全部宿舍报修信息:
    public void allRepair() { //该宿管管理的宿舍楼的所有宿舍报修
      String[] columnNames = {"学号", "姓名", "楼号", "楼层", "宿舍号", "报修详细", "是否处理", "操作"}; //表格列名
      String[][] rowData = null; //表格数据
      int count = 0; //表的元组总数
      try { //获取student_repair视图信息
            String sql = "SELECT * FROM student_repair WHERE floor_num='" + floor_num + "'"; //SQL语句
            PreparedStatement ps; //创建PreparedStatement类对象ps,用来执行SQL语句
            ps = HomePage.connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_FORWARD_ONLY); //把操作数据库返回的结果保存到ps中
            ResultSet rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            rs.last();
            count = rs.getRow(); //获取报修信息元组总数
            if (count == 0) { //若student_repair视图无元组
                rowData = new String;
                for (int i = 0; i < 8; i++)
                  rowData = "无";
            } else { //若student_repair视图有元组
                rowData = new String;
                rs.first();
                int i = 0;
                do { //获取该宿管管理的宿舍楼的所有报修信息
                  rowData = rs.getString("stu_num"); //学号
                  rowData = rs.getString("name"); //姓名
                  rowData = rs.getString("floor_num"); //楼号
                  rowData = rs.getString("layer"); //楼层
                  rowData = rs.getString("room_num"); //宿舍号
                  rowData = rs.getString("info"); //报修详细
                  if (rs.getString("yes_no").equals("是"))
                        rowData = "<html><font color='green'>是</font></html>";
                  else
                        rowData = "<html><font color='red'>否</font></html>";
                  i++;
                } while (rs.next());
            }
            rs.close();
            ps.close();
      } catch (SQLException e) {
            e.printStackTrace();
      }
(6)建议与反馈
查看所有弟子建议与反馈,查看某个弟子建议与反馈,将所有建议与反馈导出到excel表,删除弟子建议与反馈。
如查看某个弟子建议与反馈:
    public void visitAdviceInfo(String stu_num, String info) { //查看建议与反馈信息,可删除
      pn_first_2.removeAll();
      pn_first_2.setLayout(null);
      pn_first_2.setBounds(0, 0, 1045, 735);
      pn_first_2.setBorder(BorderFactory.createEtchedBorder());
      JButton bt_back = new JButton("返回", new ImageIcon("image/返回.png"));
      bt_back.setFont(new Font("黑体", 0, 17));
      bt_back.setBounds(1, 10, 92, 25);
      bt_back.setContentAreaFilled(false);
      bt_back.setBorderPainted(false);
      bt_back.setCursor(new Cursor(Cursor.HAND_CURSOR));
      JButton bt_delete = new JButton("删除建议与反馈", new ImageIcon("image/delete.png"));
      bt_delete.setFont(new Font("黑体", 0, 17));
      bt_delete.setBounds(805, 410, 190, 40);
      bt_delete.setForeground(Color.red);
      bt_delete.setContentAreaFilled(false);
      bt_delete.setCursor(new Cursor(Cursor.HAND_CURSOR));
      JLabel lb_infoImage = new JLabel(new ImageIcon("image/建议与反馈.png"));
      lb_infoImage.setBounds(800, 200, 200, 200);
      pn_first_2.add(bt_back);
      pn_first_2.add(bt_delete);
      pn_first_2.add(lb_infoImage);
(7)修改暗码
修改自身管理员暗码
    public JPanel changePassword() { //[修改密码]功能
      JPanel pn_changePassword = new JPanel();
      pn_changePassword.setLayout(null);
      pn_changePassword.setSize(1045, 735);
      pn_changePassword.setBorder(BorderFactory.createEtchedBorder());
      JLabel lb_old = new JLabel("旧密码:"), lb_new1 = new JLabel("新密码:"), lb_new2 = new JLabel("确认密码:"), lb = new JLabel("(密码不超过20位)");
      JPasswordField pf_old = new JPasswordField(), pf_new1 = new JPasswordField(), pf_new2 = new JPasswordField();
      .......
(8)退出
退出宿管模式。
      if (lb_tips.getText().equals("是否退出宿管模式?")) { //确定退出宿管模式,返回到欢迎界面
            try {
                HomePage.connection.close(); //关闭数据库连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
            dorAdminJFrame.dispose();
            HomePage.con.removeAll();
            HomePage.mainJFrame.repaint();
            HomePage.welcomePage();
            HomePage.mainJFrame.validate();
            ......
3.2 弟子模块

StudentFunction
(1)个人信息
查看弟子个人信息,如学号,姓名,性别,院系,班级等
private void showInfo() {
      pn_function.removeAll();
      studentJFrame.repaint();
      pn_function.add(info());
      studentJFrame.validate();
    }
(2)选课
选修某门课程并且能查看已选所有课程,将选课记录导出到excel表。
private void showSelectCourse() {
      pn_function.removeAll();
      studentJFrame.repaint();
      pn_function.add(select_course());
      studentJFrame.validate();
    }
(3)我的课程
查看弟子的选课情况及课程分数,将我的课程记录导出到excel表。
private void showMyCourse() {
      pn_function.removeAll();
      studentJFrame.repaint();
      pn_function.add(my_course());
      studentJFrame.validate();
    }
(4)宿舍报修
提交宿舍报修申请。
private void showRepair() {
      pn_function.removeAll();
      studentJFrame.repaint();
      pn_function.add(repair());
      studentJFrame.validate();
    }
(5)宿舍反馈
提交对宿舍的建议与反馈。
private void showAdvise() {
      pn_function.removeAll();
      studentJFrame.repaint();
      pn_function.add(advise());
      studentJFrame.validate();
    }
(6)修改暗码
修改弟子登录暗码。
private void showChangePassword() {
      //lb2.setText("[修改密码]");
      pn_function.removeAll();
      studentJFrame.repaint();
      pn_function.add(changePassword());
      studentJFrame.validate();
    }
(7)退出
退出弟子模式。
private void showExitConfirmation() {
      lb_tips.setText("是否退出学生模式?");
      choiceTips();
    }
3.3 教师模块

TeacherFunction
(1)个人信息
查看教师个人信息,如工号,姓名,性别等。
public JPanel info() { //[个人信息]功能
      String[] teacher_info = new String; //教师信息
      Calendar cal = Calendar.getInstance();
      try {
            String sql = "SELECT * FROM teacher WHERE tno=" + teacher_num; //SQL语句
            PreparedStatement ps; //创建PreparedStatement类对象ps,用来执行SQL语句
            ps = HomePage.connection.prepareStatement(sql); //把操作数据库返回的结果保存到ps中
            ResultSet rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            while (rs.next()) {
                teacher_info = rs.getString("tno");
                teacher_info = rs.getString("tname");
                teacher_info = rs.getString("tsex");
            }
            rs.close();
            ps.close();
      } catch (SQLException e) {
            e.printStackTrace();
      }
      .......
(2)任教课程
查看教师任教课程,将任教课程导出到excel表。
JPanel tp_mycourse = new JPanel();
      JPanel tp_mycourse_1 = new JPanel();
      tp_mycourse.setLayout(null);
      tp_mycourse_1.setLayout(null);

      tp_mycourse.setBounds(0, 0, 1045, 735);
      tp_mycourse_1.setBounds(0, 0, 1045, 50);
      String[] columnNames = {"课程号", "课程名", "选课人数"}; //表格列名
      String[][] rowData = null; //表格数据
      int count = 0; //表的元组总数
      try { //获取course表信息
            String sql = "SELECT cno,cname FROM course WHERE tno=" + teacher_num; //SQL语句
            PreparedStatement ps; //创建PreparedStatement类对象ps,用来执行SQL语句
            ps = HomePage.connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_FORWARD_ONLY); //把操作数据库返回的结果保存到ps中
            ResultSet rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            rs.last();
            count = rs.getRow(); //获取宿舍元组总数
            if (count == 0) { //若dormitory表无元组
                rowData = new String;
                for (int i = 0; i < 3; i++)
                  rowData = "无";
            } else { //若dormitory表有元组
            ......
(3)成绩登记
登记某个弟子所授课程的成绩,将课程成绩记录导入到excel表。
JPanel tp_mycourse = new JPanel();
      JPanel tp_mycourse_1 = new JPanel();
      tp_mycourse.setLayout(null);
      tp_mycourse_1.setLayout(null);

      tp_mycourse.setBounds(0, 0, 1045, 735);
      tp_mycourse_1.setBounds(0, 0, 1045, 50);
      String[] columnNames = {"课程号", "课程名", "学生号", "学生名", "成绩", "操作"}; //表格列名
      String[][] rowData = null; //表格数据
      int count = 0; //表的元组总数
      try { //获取course表信息
            String sql = "SELECT course.cno,cname,stu_num,name,mark FROM course,select_course,student WHERE course.cno=select_course.cno && stu_num=sno && course.tno=" + teacher_num; //SQL语句
            PreparedStatement ps; //创建PreparedStatement类对象ps,用来执行SQL语句
            ps = HomePage.connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_FORWARD_ONLY); //把操作数据库返回的结果保存到ps中
            ResultSet rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            rs.last();
            count = rs.getRow(); //获取元组总数
            if (count == 0) { //若dormitory表无元组
                rowData = new String;
                for (int i = 0; i < 6; i++)
                  rowData = "无";
(4)修改暗码
修改教师登录暗码。
public JPanel changePassword() { //[修改密码]功能
      JPanel pn_changePassword = new JPanel();
      pn_changePassword.setLayout(null);
      pn_changePassword.setSize(1045, 735);
      pn_changePassword.setBorder(BorderFactory.createEtchedBorder());
      JLabel lb_old = new JLabel("旧密码:"), lb_new1 = new JLabel("新密码:"), lb_new2 = new JLabel("确认密码:"), lb = new JLabel("(密码不超过20位)");
      JPasswordField pf_old = new JPasswordField(), pf_new1 = new JPasswordField(), pf_new2 = new JPasswordField();
      ......      
      bt_reset.addActionListener(new ActionListener() { //重置,将密码框内容清空
            public void actionPerformed(ActionEvent e) {
                pf_old.setText("");
                pf_new1.setText("");
                pf_new2.setText("");
            }
      });
      bt_confirm.addActionListener(new ActionListener() { //确认xxxxxxxxxx public JPanel changePassword()
      ......
(5)退出
退出教师模式。
public void yesOperation() { //选择“是”之后,根据提示内容,选择要进行的操作
      if (lb_tips.getText().equals("是否退出教师模式?")) { //退出教师模式,返回到欢迎界面

            teacherJFrame.dispose();
            returnHomepage();
      }
    }
}
3.4 系统管理员模块

SysAdminFunction
(1)弟子管理
查看全部弟子信息,查看某个弟子信息,将弟子信息导出到excel表,添加弟子信息、修改弟子信息、删除弟子信息。
    public JTabbedPane studentManage() { //学生管理
      JTabbedPane tp_student = new JTabbedPane();
      tp_student.setFont(new Font("黑体", 0, 25));
      tp_student.setBounds(0, 0, 1045, 735);
      allStudent();
      tp_student.addTab(" 全部 ", pn_first);
      queryStudentInfo_1();
      tp_student.addTab(" 查询 ", pn_second);
      return tp_student;
    }
       
        //查看所有学生信息
        public void allStudent()       
   
    //查看单个学生信息并进行修改/删除
    public void visitStudentInfo(String stu_num, int x, String query_sql)
      
    //添加学生信息
    public void addStudentInfo()
   
    //查询学生信息
    public void queryStudentInfo_1()
      
    //查询到学生信息的表
    public void queryStudentInfo_2(String sql)
(2)教师管理
查看全部教师信息,查看某个教师信息,将教师信息导出到excel表,添加教师信息、修改教师信息、删除教师信息。
    public JTabbedPane teacherManage() { //教师管理
      JTabbedPane tp_teacher = new JTabbedPane();
      tp_teacher.setFont(new Font("黑体", 0, 25));
      tp_teacher.setBounds(0, 0, 1045, 735);
      allTeacher();
      tp_teacher.addTab(" 全部 ", pn_first);
      queryTeacherInfo_1();
      tp_teacher.addTab(" 查询 ", pn_second);
      return tp_teacher;
    }

        public void allTeacher()
      
    public void visitTeacherInfo(String tno_num, int x, String query_sql)
      
    public void addTeacherInfo()
      
    public void queryTeacherInfo_1()
      
    public void queryTeacherInfo_2(String sql)
(3)课程管理
查看全部课程信息,查看某个课程信息,将课程信息导出到excel表,添加课程信息、修改课程信息、删除课程信息。
    public JTabbedPane courseManage() { //课程管理
      JTabbedPane tp_course = new JTabbedPane();
      tp_course.setFont(new Font("黑体", 0, 25));
      tp_course.setBounds(0, 0, 1045, 735);
      allCourse();
      tp_course.addTab(" 全部 ", pn_first);
      queryCourseInfo_1();
      tp_course.addTab(" 查询 ", pn_second);
      return tp_course;
    }

        public void allCourse()
      
    public void visitCourseInfo(String tno_num, int x, String query_sql)
      
    public void addCourseInfo()
      
    public void queryCourseInfo_1()
      
    public void queryCourseInfo_2(String sql)
(4)选课管理
查看全部弟子选课信息,查看某条弟子选课信息,将弟子选课信息导出到excel表,添加弟子选课信息、修改弟子选课信息、删除弟子选课信息。
    private JTabbedPane select_course_Manage() {
      JTabbedPane tp_teacher = new JTabbedPane();
      tp_teacher.setFont(new Font("黑体", 0, 25));
      tp_teacher.setBounds(0, 0, 1045, 735);
      all_select_course();
      tp_teacher.addTab(" 全部 ", pn_first);
      querySelectCourse();
      //tp_teacher.addTab(" 查询 ", pn_second);
      return tp_teacher;
    }
       
        //查看选课
        private void querySelectCourse()
   
    //查看选课信息
    private void querySelectCourse_1(String sql)
      
    //退选
    private void unselect(String cno, String sno)
   
    //判定是否退选
    private void unselect_course(String cno, String sno)
(5)宿管管理
查看全部宿管信息,查看某个宿管信息,将宿管信息导出到excel表,添加宿管信息、修改宿管信息、删除宿管信息。
    public JTabbedPane adminManage() { //宿管管理
      JTabbedPane tp_admin = new JTabbedPane();
      tp_admin.setFont(new Font("黑体", 0, 25));
      tp_admin.setBounds(0, 0, 1045, 735);
      allAdmin();
      tp_admin.addTab(" 全部 ", pn_first);
      queryAdminInfo_1();
      tp_admin.addTab(" 查询 ", pn_second);
      return tp_admin;
    }
        public void allAdmin()
      
    public void visitAdminInfo(String admin_num, int x, String query_sql)
      
    public void addAdminInfo()
      
    public void queryAdminInfo_1()
      
    public void queryAdminInfo_2(String sql)
      
(6)宿舍管理
查看全部宿舍信息,查看某个宿舍选课信息,将宿舍信息导出到excel表,添加宿舍信息、修改宿舍信息、删除宿舍信息。
    public JTabbedPane dormitoryManage() { //宿舍管理
      JTabbedPane tp_dormitory = new JTabbedPane();
      tp_dormitory.setFont(new Font("黑体", 0, 25));
      tp_dormitory.setBounds(0, 0, 1045, 735);
      allDormitory();
      tp_dormitory.addTab(" 全部 ", pn_first);
      queryDormitoryInfo_1();
      tp_dormitory.addTab(" 查询 ", pn_second);
      return tp_dormitory;
    }

        public void allDormitory()
      
    public void visitDormitoryInfo(String floor_num, String layer, String room_num, int x, String query_sql)
      
    public void addDormitoryInfo()
      
    public void queryDormitoryInfo_1()
      
    public void queryDormitoryInfo_2()
(7)宿舍楼管理
查看全部宿舍楼信息,查看某个宿舍楼信息,将宿舍楼信息导出到excel表,添加宿舍楼信息、修改宿舍楼信息、删除宿舍楼信息。
    public JTabbedPane floorManage() { //宿舍楼管理
      JTabbedPane tp_floor = new JTabbedPane();
      tp_floor.setFont(new Font("黑体", 0, 25));
      tp_floor.setBounds(0, 0, 1045, 735);
      allFloor();
      tp_floor.addTab(" 全部 ", pn_first);
      queryFloorInfo_1();
      tp_floor.addTab(" 查询 ", pn_second);
      return tp_floor;
    }

    public void allFloor()
   
    public void visitFloorInfo(String floor_num, int x, String query_sql)
      
    public void addFloorInfo()
      
    public void queryFloorInfo_1()
      
    public void queryDormitoryInfo_2()
(8)住宿管理
查看全部住宿信息,查看某条住宿信息,将住宿信息导出到excel表,添加住宿信息、修改住宿信息、删除住宿信息。
    public JTabbedPane stayManage() { //住宿管理
      JTabbedPane tp_stay = new JTabbedPane();
      tp_stay.setFont(new Font("黑体", 0, 25));
      tp_stay.setBounds(0, 0, 1045, 735);
      allStay();
      tp_stay.addTab(" 全部 ", pn_first);
      queryStayInfo_1();
      tp_stay.addTab(" 查询 ", pn_second);
      return tp_stay;
    }

        public void allStay()
      
    public void visitStayInfo(String stu_num, int x, String query_sql)
      
    public void addStayInfo()
      
    public void queryStayInfo_1()
      
    public void queryStayInfo_2(String sql)
(9)寝室分配
一键自动分配,一键重新分配。
        //界面设置
        public JPanel allocation() { //寝室分配
      JPanel pn_allocation = new JPanel();
      pn_allocation.setLayout(null);
      pn_allocation.setSize(1045, 735);
      pn_allocation.setBorder(BorderFactory.createEtchedBorder());
      JLabel lb_dorImage = new JLabel(new ImageIcon("image/宿舍.png"));
      
      pn_allocation.add(lb_dorImage);
      pn_allocation.add(lb);
      pn_allocation.add(bt1);
      pn_allocation.add(bt2);
      ......
      ......
      ......
      return pn_allocation;
    }
       
        //自动分配宿舍
        public void automaticallyAllocate() throws SQLException

(10)删库跑路
删除系统数据库。
    public JPanel escape() { //删库跑路
      JPanel pn_escape = new JPanel();
      pn_escape.setLayout(null);
      pn_escape.setSize(1045, 735);
      pn_escape.setBorder(BorderFactory.createEtchedBorder());
      JLabel lb_runImage = new JLabel(new ImageIcon("image/跑.png"));
      ......
      bt_confirm.addActionListener(new ActionListener() { //确认删库跑路
            public void actionPerformed(ActionEvent e) {
                if (String.valueOf(pf.getPassword()).equals("ESCAPE")) { //密码正确
                  lb_tips.setText("是否确定删库跑路?");
                  choiceTips("");
                } else { //密码错误
                  lb_tips.setText("密码错误!");
                  functionTips();
                }
            }
      });
      return pn_escape;
    }

        //跑路弹窗
        public void functionTips()
(11)退出
退出系统管理员模式。
      if (e.getActionCommand().equals("退出")) {
            lb_tips.setText("是否退出系统管理模式?");
            choiceTips("");
      }
3.5 主页模块

HomePage
接待界面,更改外观选项,四个登录选项:弟子登录,宿管登录,教师登录,系统管理员登录。
如四个登录选项:
private static void performLogin(String username, String password) {
      switch (userType) {
            case 1 -> new Login().studentLogin(username, password);
            case 2 -> new Login().dor_adminLogin(username, password);
            case 3 -> new Login().teacherLogin(username, password);
            case 4 -> new Login().adminLogin(username, password);
            default -> System.out.print("Unknown user type");
      }
    }
3.6 登录模块

Login
四种不同的身份登录:弟子登录,宿管登录,教师登录,系统管理员登录
如弟子登录:
    public void studentLogin(String account, String password) { //学生登录
      boolean flag = false; //是否查找到相应账号密码
      String stu_num = null, pass; //学生账号密码
      try {
            String sql = "SELECT stu_num, password FROM student"; //SQL语句
            PreparedStatement ps; //创建PreparedStatement类对象ps,用来执行SQL语句
            ps = HomePage.connection.prepareStatement(sql); //把操作数据库返回的结果保存到ps中
            ResultSet rs = ps.executeQuery(sql); //ResultSet类,用来存放获取的结果集
            while (rs.next()) { //遍历结果集
                stu_num = rs.getString("stu_num");
                pass = rs.getString("password");
                if (account.equals(stu_num) && password.equals(pass)) {
                  flag = true;
                  break;
                }
            }
            rs.close();
            ps.close();
      } catch (SQLException e) {
            e.printStackTrace();
      }
      if (flag) { //若学生账号密码正确,则进入学生功能界面
            lb_tips.setText("登录成功!");
            loginTips();
            new StudentFunction(stu_num);
            HomePage.mainJFrame.dispose();
      } else { //若账号密码错误,则进行提示
            lb_tips.setText("账号或密码错误!");
            loginTips();
            try {
                HomePage.connection.close(); //关闭数据库连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
      }
    }
3.7 各类信息模块

info
定义各种类,用于存储所有信息
如弟子类:
class Student { //学生
    String stu_num; //学号
    String password; //密码
    String name; //姓名
    String sex; //性别
    int birth; //出生日期
    int grade; //年级
    String faculty; //院系
    String clas; //班级
    String phone; //手机号
    String yes_no; //是否入住

    public Student(String stu_num, String password, String name, String sex, String birth, String grade, String faculty, String clas, String phone, String yes_no) {
      this.stu_num = stu_num;
      this.password = password;
      this.name = name;
      this.sex = sex;
      this.birth = Integer.parseInt(birth);
      this.grade = Integer.parseInt(grade);
      this.faculty = faculty;
      this.clas = clas;
      this.phone = phone;
      this.yes_no = yes_no;
    }
}
........
宿管类:
class Admin { //宿管
    String admin_num; //编号
    String password; //密码
    String name; //姓名
    String sex; //性别
    String phone; //手机

    public Admin(String admin_num, String password, String name, String sex, String phone) {
      this.admin_num = admin_num;
      this.password = password;
      this.name = name;
      this.sex = sex;
      this.phone = phone;
    }
}
3.8 导出表模块

JTableToExcel
用于将信息导出到excel表
public class JTableToExcel { //用于将表格导出成Excel文件
    public static void export(File file, JTable table) { //导出方法
      try {
            WritableWorkbook workbook = null; //创建工作薄
            if (file.exists()) { //文件已经存在
                workbook = Workbook.createWorkbook(file, Workbook.getWorkbook(file));
            } else { //文件还不存在
                workbook = Workbook.createWorkbook(file);
            }
            // 创建工作表
            WritableSheet sheet = workbook.createSheet("Sheet1", workbook.getNumberOfSheets());
            // 取得table的行数(rowNum), 列数(colNum)
            int rowNum = table.getRowCount();
            int colNum = table.getColumnCount() - 1;
            // 填写列名
            fillColumnName(sheet, table, colNum);
            // 填写数据
            fillCell(sheet, table, rowNum, colNum);
            // 写入工作表
            workbook.write();
            workbook.close();
            // 导出成功提示框
            int dialog = JOptionPane.showConfirmDialog(null, "表格导出成功!是否现在打开?", "提示", JOptionPane.YES_NO_OPTION);
            if (dialog == JOptionPane.YES_OPTION) { //打开Excel文件
                Runtime.getRuntime().exec("cmd /c start \"\" \"" + file + "\"");
            }
      } catch (FileNotFoundException e) {
            JOptionPane.showMessageDialog(null, "导出数据前请关闭工作表!");
      } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "导出失败!");
      }
    }
    ............
3.9 自定义功能模块

MyButton,MyButtonEditor,MyButtonRender,MyEvent ,MyTableModel,NumLimit
自定义按钮类,编辑器,表格渲染器,表格模型,文本框内容限定等一系列功能。
如:自定义的按钮类,按钮存放了其所在的行列数
public class MyButton extends JButton { //自定义的按钮类,按钮存放了其所在的行列数
    private int row;
    private int column;

    public MyButton() {

    }
自定义的表格渲染器,用于更改外观
public class MyButtonRender implements TableCellRenderer { //自定义的表格渲染器
    private final JButton bt;

    public MyButtonRender(String operation) {
      bt = new JButton(operation);
      bt.setFont(new Font("黑体", 0, 20));
      bt.setForeground(Color.blue);
      bt.setContentAreaFilled(false);
      bt.setBorderPainted(false);
      bt.setCursor(new Cursor(Cursor.HAND_CURSOR));
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      return bt;
    }
}
4. 界面计划(用户阐明)

4.1 主页

运行代码,可以看到主页上发出现接待信息,以及四个不同身份的登录按钮,点击不同的按钮即可进入不同的用户模式。
https://blog.csdn.net/实验陈诉图片/界面计划/主页.png **4.2 **弟子端

1.登录
输入账号,暗码,点击’登录’
https://blog.csdn.net/实验陈诉图片/界面计划/弟子界面登录.png 2.个人信息
点击’个人信息’,即可查看弟子的各项信息,如学号,性别,年级,院系,班级及宿舍信息等。
https://blog.csdn.net/实验陈诉图片/界面计划/弟子个人信息.png 3.选课
点击’选课’,即可查看全部未选课程。
https://blog.csdn.net/实验陈诉图片/界面计划/弟子全部选课.png 点击某门课程的’选课’按钮,再点击’是’,即可选修该课程。
https://blog.csdn.net/实验陈诉图片/界面计划/弟子选课.png 点击’查询’,即可查询到所有课程(包括已经选修的课程)
https://blog.csdn.net/实验陈诉图片/界面计划/弟子查询课程.png 点击本身未选的课程进行’选课’即可选修,若点击已选修的课程进行选课,则会选课失败
https://blog.csdn.net/实验陈诉图片/界面计划/弟子选修已选课程.png 点击导出,即可将所有的课程信息导出为excel表
4.我的课程
点击’我的课程’,可以查看本身选修的课程及分数
https://blog.csdn.net/实验陈诉图片/界面计划/弟子我的课程.png 点击’导出’,即可将所有选修的课程信息导出为excel表
5.宿舍报修
点击’宿舍报修’,输入本身的宿舍信息以及报修详细,即可进行宿舍报修
https://blog.csdn.net/实验陈诉图片/界面计划/弟子进行宿舍报修.png 6.宿舍反馈
点击’宿舍反馈’,可以输入本身的建议与反馈并提交
https://blog.csdn.net/实验陈诉图片/界面计划/弟子宿舍反馈.png 7.修改暗码
点击’修改暗码’,可以修改本身的登录暗码。
https://blog.csdn.net/实验陈诉图片/界面计划/弟子修改暗码.png 8.退出
点击’退出’‘,再点击’是’,即可退出弟子模式。
https://blog.csdn.net/实验陈诉图片/界面计划/弟子退出.png 4.3 教师端

1.登录
输入账号,暗码,点击’登录’
https://blog.csdn.net/实验陈诉图片/界面计划/教师登录.png 2.个人信息
点击’个人信息’,即可查看本身的信息,如工号,姓名,性别等
https://blog.csdn.net/实验陈诉图片/界面计划/教师查看个人信息.png 3.任教课程
点击’任教课程’,即可查看本身所教的课程信息(含课程号、课程名、选课人数)
https://blog.csdn.net/实验陈诉图片/界面计划/教师任教课程.png 点击’导出’,即可将本身的任教课程信息导出到excel表
4.成绩登记
点击’成绩登记’,即可对所有选修所有课程的弟子进行成绩登记
https://blog.csdn.net/实验陈诉图片/界面计划/教师查看成绩信息.png 点击’登记’,输入分数即可
https://blog.csdn.net/实验陈诉图片/界面计划/教师登记成绩.png 点击’导出’,即可将所有该门课程的成绩信息导出到excel表
5.修改暗码
点击’修改暗码’,可以修改本身的登录暗码或重置为初始暗码。
https://blog.csdn.net/实验陈诉图片/界面计划/教师修改暗码.png 6.退出
点击’退出’,再点击’是’,即可退出教师模式。
https://blog.csdn.net/实验陈诉图片/界面计划/教师退出.png 4.4 宿舍管理员端

1.登录
输入账号,暗码,点击’登录’
https://blog.csdn.net/实验陈诉图片/界面计划/宿管1.png 2.个人信息
点击’个人信息’,可以查看本身的各项信息。
https://blog.csdn.net/实验陈诉图片/界面计划/宿管2.png 3.宿舍管理
点击’宿舍管理’,可以看到全部的宿舍信息。
https://blog.csdn.net/实验陈诉图片/界面计划/宿管宿舍管理1.png 点击’查询’,输入相应的楼号可以查询到该宿舍楼的信息。
https://blog.csdn.net/实验陈诉图片/界面计划/宿管宿舍管理2.png 点击’添加’,输入宿舍信息,可以实现添加宿舍功能。
https://blog.csdn.net/实验陈诉图片/界面计划/宿管宿舍管理3.png 对某个宿舍点击’查’看,再点击’修改宿舍信息’,可以对宿舍信息进行修改。点击删除宿舍信息,可以对该宿舍进行删除。
https://blog.csdn.net/实验陈诉图片/界面计划/宿管宿舍管理4.png 点击’导出’,即可将所有宿舍信息导出为excel表
4.住宿管理
点击’住宿管理’,可以查看所有弟子的住宿信息。
https://blog.csdn.net/实验陈诉图片/界面计划/住宿管理管理1.png 点击’查询’,输入学号,可以查询该弟子的住宿信息。
https://blog.csdn.net/实验陈诉图片/界面计划/住宿管理管理2.png 点击’添加’,可以添加指定弟子的住宿信息。
https://blog.csdn.net/实验陈诉图片/界面计划/住宿管理3.png 5.出入登记
点击’出入登记’,可以看到所有出入登记信息。
https://blog.csdn.net/实验陈诉图片/界面计划/出入登记1.png 点击’查询’,输入学号,可以看到该名弟子的出入信息。
https://blog.csdn.net/实验陈诉图片/界面计划/出入登记2.png 点击’添加’,可以添加指定学号的弟子的出入登记信息。
https://blog.csdn.net/实验陈诉图片/界面计划/出入登记3.png 点击’导出’,即可将所有出入登记信息导出到excel表
6.宿舍报修
点击’宿舍报修’,可以看到所有宿舍报修信息。
https://blog.csdn.net/实验陈诉图片/界面计划/宿舍报修1.png 点击’查询’,输入学号,可以看到该名弟子提交的宿舍报修信息。
https://blog.csdn.net/实验陈诉图片/界面计划/宿舍报修2.png 对某条宿舍报修信息点击’查看’,可以对其进行处理惩罚和删除。
https://blog.csdn.net/实验陈诉图片/界面计划/宿舍报修3.png 点击’导出’,即可将所有宿舍报修信息导出到excel表
7.建议与反馈
点击’建议与反馈’,可以看到所有建议与反馈信息。
https://blog.csdn.net/实验陈诉图片/界面计划/建议与反馈1.png 点击’导出’,即可将所有建议与反馈导出到excel表
8.修改暗码
点击’修改暗码’,可以修改本身的登录暗码。
https://blog.csdn.net/实验陈诉图片/界面计划/修改暗码.png 9.退出
点击’退出’,再点击是,即可退出宿管模式。
https://blog.csdn.net/实验陈诉图片/界面计划/退出.png 4.5 系统管理员端


[*]登录
输入账号,暗码,点击’登录’
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员登录.png 2.弟子管理
点击’弟子管理’,接口查看所有弟子信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员弟子管理.png 点击’添加’,可以添加单个弟子信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员添加弟子.png 点击’查询’,可以查询指定学号的弟子
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查询弟子.png 点击某个弟子的’查看’按钮,可以查看该弟子的信息,并且可以点击’修改弟子信息’或’删除弟子信息’按钮修改和删除该弟子的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查看弟子信息.png 点击’导出’,即可将所有弟子信息导出到excel表
3.教师管理
点击’教师管理’,可以查看所有教师的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员教师管理.png 点击’添加’,即可输入教师信息进行添加一名教师
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员添加教师.png 点击’查询’,可以查看指定的教师信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查询教师.png 点击某个教师的’查看’按钮,可以查看该弟子的信息,并且可以点击’修改教师信息’或’删除教师信息’按钮修改和删除该弟子的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查看教师信息.png 点击’导出’,即可将所有教师信息导出到excel表
4.课程管理
点击’课程管理’,即可查看所有课程信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员课程管理.png 点击’添加’,即可输入课程信息进行添加一门课程
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员添加课程.png 点击某门课程的’查看’按钮,可以查看该课程的信息,并且可以点击’修改课程信息’或’删除课程信息’按钮修改和删除该课程的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查看课程信息.png 点击’查询’,可以查询指定的课程信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查询课程.png 点击’导出’,即可将所有课程信息导出到excel表
5.选课管理
点击’选课管理’,即可查看所有选课信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员选课管理.png 点击’导出’,即可将所有选课信息导出到excel表
6.宿管管理
点击’宿管管理’,即可查看所有宿管信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员宿管管理.png 点击’添加’,即可输入宿管信息进行添加一名宿管
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员添加宿管.png 点击某名宿管的’查看’按钮,可以查看该宿管的信息,并且可以点击’修改宿管信息’或’删除宿管信息’按钮修改和删除该宿管的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查看宿管信息.png 点击’查询’,可以查看指定宿管的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查询宿管.png 点击’导出’,即可将所有宿管信息导出到excel表
7.宿舍管理
点击’宿舍管理’,即可查看所有宿舍信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员宿舍管理.png 点击’添加’,即可输入宿舍信息进行添加一个宿舍
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员添加宿舍.png 点击某个宿舍的’查看’按钮,可以查看该宿舍的信息,并且可以点击’修改宿舍信息’或’删除宿舍信息’按钮修改和删除该宿舍的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查看宿舍信息.png 点击’查询’,可以查看指定宿舍的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查询宿舍.png 点击’导出’,即可将所有教师信息导出到excel表
8.宿舍楼管理
点击’宿舍楼管理’,即可查看所有宿舍楼信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员宿舍楼管理.png 点击’添加’,即可输入宿舍楼信息进行添加一栋宿舍楼
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员添加宿舍楼.png 点击某栋宿舍楼的’查看’按钮,可以查看该宿舍楼的信息,并且可以点击’修改宿舍楼信息’或’删除宿舍楼信息’按钮修改和删除该宿舍楼的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查看宿舍楼.png 点击’查询’,可以查看指定宿舍楼的信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查询宿舍楼.png 点击’导出’,即可将所有宿舍楼信息导出到excel表
9.住宿管理
点击’住宿管理’,即可查看所有住宿信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员住宿管理.png 点击’添加’,即可输入住宿信息进行添加一个住宿信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员添加住宿信息.png 点击’查询’,可以查询指定的住宿信息
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员查询住宿信息.png 点击’导出’,即可将所有宿舍楼信息导出到excel表
10.寝室分配
点击’寝室分配’,即可进入寝室分配界面
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员寝室分配.png 点击’一键自动分配’或’一键重新分配’即可对宿舍进行分配。
分配规则如:按照性别、年级、院系、班级进行分配,分配宿舍为平常宿舍
键自动分配:将为系统内未住宿的弟子自动分配宿舍。
键重新分配:将删除所有住宿信息,重新为系统内的弟子自动分配宿舍
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员宿舍分配.png 11.删库跑路
点击’删库跑路’,输入删库跑路专用暗码即可删除数据库
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员删库跑路.png 12.退出
点击’退出’,即可退出系统管理员模式
https://blog.csdn.net/实验陈诉图片/界面计划/系统管理员退出.png四、总结与思考

本次大作业围绕我们在日常学习生活中常见的元素睁开。我们参考教务系统,宿舍管理制度等,完成了一个学校信息管理系统,能处理惩罚四种不同身份的访问者的交互。固然只是一个很小的信息管理系统,但是完整地履历了数据库计划开辟流程,我们确实劳绩了许多。
我们从需求分析开始,绘制出概念布局,抽象出逻辑布局,计划出物理布局,并天生出Sql语言形貌的文件,以此完成数据库计划。之后我们使用java写出可视化界面,通过Mysql语言与数据库发生交互,产生数据的活动和出现,以此完成软件计划。终极我们实现了预期的功能。
通过此次大作业,我们更加了解数据库的紧张性,使用数据库作为数据的存储管理后台,可以极大的提高数据的处理惩罚能力。我们得以在书本的底子上现实运用,在更加真实的环境下运用知识办理问题,展现“经世致用”精神。我们锻炼了现实应用能力,也锻炼了代码能力与逻辑能力。同时,在将所学转化为所用的过程中,我们对于讲义知识也更加融会贯通。
在从零开始到终极计划出一个运用了数据库的应用系统,我们遇到了许多的问题和程序的报错,办理了很多bug,但是团队内的大家都很团结,终极这些问题都在我们的努力下得以办理。团队的意义和公道分工的紧张性在本次开辟的过程中得到了凸显,同时我们也从一个侧面看到了并行办理任务相较于串行办理任务的独特优势。
回望大作业实现的过程,固然办理了很多拦路的难题,但是我们另有很多不敷。特殊是对于前后端的分离,本次实验没有实现。重要是时间受限,我们另有很多想法没有化为现实。别的有一些在企业运用上更为广泛使用的、更好的前后端布局,这些都是需要学习和可以优化的地方,在之后有时间的时间,我们团队会继承探究。
总结来看,我们办理了许多问题,学到了许多知识,但同时也意识到了另有很多不敷。固然在过程中很痛苦,但是终极看到预期的功能得以实现,还是很自大与开心的。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: HNU-数据库系统-大作业-学校信息管理系统