高校学生宿舍管理系统(二)
陈家祺 2009-06-02
3.3.1系统表 1.用户表:登记管理人员的用户名、密码及登录权限。
2.学生基本情况表:详细登记学生基本信息及学生住宿情况。
3.寝室表:登记所有宿舍的详细情况。
4.员工表:登记所有管理人员的详细情况。
5.人员来访表:登记所有来访人员的详细情况。
6.物品出入表:详细登记学生物品出楼信息。
7.楼房表:登记所有住宿楼情况。
8.学期注册表:登记学生每学期的注册情况。
9.学生财产表:登记学生物品情况。
表3.1用户表(LoginIn)
表3.2 学生基本情况表(Student)
Y and F 表3.3寝室表(Dorm)
Y and F
表3.4 员工表(Employee)
Emp_Add 表3.5 人员来访表(Visit)
Emp_Add
Lea_Time 表3.6 物品出入楼表(Goodsmove)
Lea_Time
G_Des 表3.7 楼房表(House)
G_Des
表3.8 学期注册表 (Enroll)
数据长度 Enr_Year 表3.9 学生财产表(Riches)
数据长度
Enr_Year
KeySend 3.3.2 表的说明 本管理系统共用到九个表:用户表(LoginIn)、学生基本情况表(Student)、寝室表(Dorm)、员工表(Employee)、人员来访表(Visit)、物品出入楼表(Goodsmove)、楼房表(House)、学生财产表(Riches)、学期注册表 (Enroll),各表之间均有一定的关系,可以进行关联。
KeySend
1.学生基本情况表(Student)、学生财产表(Riches)、学期注册表 (Enroll)、物品出入楼表(Goodsmove)这四个表里面都有一个相同的字段:学号(Stu_Id),通过学号这个字段就可以将系统的这四个表关联了起来。当某个表发生插入、修改、删除等方面的改动时,相联的表之间也要进行相应的改动。学生基本情况表(Student)和寝室表(Dorm)也有一个相同的字段:寝室号(Dor_Id)将两表相关联。
2.由于员工是负责管理某栋楼房的,因此员工表(Employee),楼房表(House)这两个表之间有一个相同的字段:楼房号(Hou_Id)来进行关联。 3.4具体模块设计
在系统功能模块介绍时,我们把整个系统分为系统管理模块、公寓管理模块、学生管理模块、信息查询模块、出入登记模块、信息修改模块、报表管理模块、关于模块八个基本模块。其中系统管理模块中的用户管理和密码修改、公寓管理模块、信息查询模块、报表管理模块是由我具体来完成的。如下图是我们学生宿舍管理系统的主界面:
图 3.3 宿舍管理系统主界面
3.4.1 用户管理、密码修改模块功能详细设计 1.用户管理
图3.4 用户管理界面
设计思想:
当宿舍管理系统需要加入新管理员时,具有使用该功能权限的超级用户授予新管理员以登录该系统的用户名称、用户密码和用户权限。像我们的后勤服务总公司中的管理人员就应该具有系统管理员的权限,宿舍楼房管理人员就应该具有一般用户的权限。一般用户的权限是系统管理员授予的。当然如果某管理人员离职,那么他将不能再登录该系统,因此管理员有权收回授予其的管理权限。
具体实现:
(1).在实现该功能时,需要用到权限表LoginIn,因此需要添加一个TADOQuery控件实现窗体与数据库之间的相关联。
(2).在新增用户时,考虑到在登录该系统时,用户名及其用户密码是必须输入不能为空的,因此我们在实现具体添加新用户时,不能允许用户名及其密码为空。还有重要一点就是用户权限也是必须选择的,因为这关系到用户在使用宿舍管理系统时所具有权限问题。
(3).在删除用户时,还需要通过编码判断一下系统管理人员所要删除的用户到底存不存在。如果没有该用户那么也许是因为管理人员的输入错误,造成所删用户不存在,可以重新输入,实现删除功能。
2.密码修改
图3.5 密码修改界面
设计思想:
为了防止密码被恶意盗用可以经常性的修改你的密码以增强系统的安全性,密码修改对于所有具有访问该系统的用户来说都可以使用。
具体实现:
(1).首先通过TADOQuery控件实现该功能模块与数据库的关联。
(2).其次为了确保该功能的完整性,在点击确认之后,需要判断一下所有的编辑框中的输入都不能为空。
(3).最后在确认时,还需要编程实现的是判断原始用户名和密码是否一致,只有一致才有权限修改你的密码。同是为了确保新密码的正确性,还添加了一个确认密码框,新密码和确认密码两者所输内容是要求完全一样,方能修改密码成功。
3.4.2 公寓管理模块详细设计 1.楼房管理
图3.6 楼房管理界面
设计思想:
楼房管理是对每栋宿舍楼的基本信息进行录入,在学校建设完新的宿舍楼时可以通过此窗体把该楼房的信息添加到数据库中去。
具体实现:
(1).由于需要和数据库表(楼房表House)相关联,所以也添加了一个TADOQuery控件实现两者之间的关联。
(2).在具体实现时需要设置像楼房号这样的具有唯一确定性的字段是不能为空的。其他字段在输入时没有太大限制,录入人员在录入时需根据自身情况再进行添加。
(3).我们还设置了一个‘备注’字段,是为了方便学校登记该楼房的其他相关情况。 2. 宿舍管理
图3.7 宿舍管理界面
设计思想:
宿舍管理是对每栋楼房所有宿舍的一个详细情况登记,每个宿舍在数据库里面的信息都是就静态的只有里面的实住人数是动态增加的,当某个宿舍增加或减少一个学生实住人数会自动加1或减1,实现动态增减。
具体实现:
(1).首先通过TADOQuery实现数据库和窗体的相关联,再通过TDatasouse控件实现TDBGrid和宿舍表(Dorm)的相关联,那么Dorm表中的数据就会在TDBGrid中显示了,可以随时看到表中数据的动态变化。 (2).在具体设计时,首先将实住人数编辑框属性设为ReadOnly型,因为该字段是动态添加,每当为一个学生分配一个宿舍,那么该宿舍的实住人数会自动加一,无需手工录入。住宿费是必须输入的,因为这和学生注册管理是相关联的。学生在学期注册时,需要根据该生所住的宿舍号来查看其应交的住宿费用。居住性别也要输入,当为某学生分配宿舍时,需要根据该生性别查一下,还能入住男生或女生的宿舍有哪些,根据所查情况再为他们分配宿舍。以免盲目分配,出现错住造成管理混乱。
3. 员工管理
图3.8 员工管理界面
设计思想:
员工管理是对楼房管理人员、清洁工、保卫人员进行的登记管理。该模块是有系统管理员来完成的,普通用户没有使用该项功能的权限。当某栋楼房调来新员工时,系统管理员可以通过此功能来添加员工基本信息。
具体实现:
(1).首先通过TADOQuery实现数据库和功能模块的相关联,再通过TDatasouse控件实现TDBGrid表格和员工信息表(Employee)的相关联,那么员工信息表中的数据就会在TDBgrid中显示了,可以随时看到表中数据添加、删除、修改等的动态变化。
(2).在该功能中需编程将‘楼房号’所对应得下拉列表框中的属性值动态的从楼房信息表(House)中获得的。通过动态添加可以实现当楼房表中每增加一栋楼,在员工窗体的‘楼房号’的下拉列表框中的会自动添加一栋,实现两个表之间的动态关联。
Y
显示查询结果
显示查询结果
结束
结束
图3.9 信息查询流程图
1.按学号进行查询
图3.10 信息查询界面
设计思想:
按学号查询是具体的查询某学生的详细信息,包括学生的基本信息及其住宿情况。在需要调查学生的详细情况时,可以采用该功能来实现。
具体实现:
(1).首先通过TADOQuery控件实现数据库和该功能模块的关联,再通过TDatasourse实现学生信息表(Student)和TDBGrid的关联,把学生信息显示在下面的表格中。
(2).其次我还为窗体添加了一个TDBNavigator控件,可以实现数据的最上一条、上一条、下一条、最下一条浏览查看。当然像按学号来查询的话也许用不到该控件,但要是按班级查询或姓名等其他查询,这个控件是非常有用的。因为通过班级或姓名查出来的学生信息数据量会非常大,所以需要通过该按钮来方便、快捷的查看。
(3).在按学号查询时首先要通过编程判断一下,数据库的学生信息表中是否存在该编号的学生,如果没有系统会提醒你‘学号不存在是不是输入错误,检查一下再重新输入’,所以只有存在学号才能进行查询。
(4).上述完成之后,输入所查询的学号,那么所需学生信息就会在下面表格中显示出来了。上图所显示的是所有学生信息情况。
2.按姓名进行查询
设计思想:按学生姓名实现的查询,虽然这样查出来的学生有可能不止一名,但在有些情况下(比如家人、朋友来访时,只记得学生姓名,在不清楚其学号、宿舍号的情况下,可以通过学生信息中的其它信息确定所要找的学生)可以调用此功能来实现。
3.按班级进行查询
设计思想:实现某个班级所有学生基本信息及住宿情况的查询。通过该功能模块我们可以统计某个班级的宿舍分配情况,这个班级的学生都住在哪些寝室中。 4.按寝室号查询
设计思想:在输入寝室号时可以把该宿舍所住的所有学生的信息都统计出来,方便详细了解某宿舍的学生住宿情况。
5.住宿情况查询
图3.11 住宿情况查询界面
设计思想:
点击多选框里的按楼房号查询按钮可以查看某栋楼房所有宿舍的住宿情况,看看还有哪些宿舍还有空的床位,可以入住学生。还可以查看某个宿舍的详细情况。同时该模块还能够统计某栋楼房的所有学生人数。
具体实现:
(1).首先通过TADOQuery控件实现数据库和该功能模块的关联,再通过TDatasourse实现寝室表(Dorm)和TDBGrid显示表格的关联,把宿舍信息显示在下面的表格中。
(2).其次放置一个复选按钮键,可以方便实现按楼房号和按宿舍号两种方式的查询。在右边放置一个查询框,进行查询条件的输入。在按楼房号查询时,用到了模糊查询。模糊查询的在本部分的基本原理就是:我们在刚开始建库时考虑到管理方便和减少冗余,在对学生进行宿舍号登记时是这么描述的如:6-502,将其楼房号和宿舍号放一个字段中,并没有将其分开操作。所以在查询这部分当需要按楼房号进行查询时,就要注意了。假如我们要查5号楼的住宿情况,那么在TDBGrid表格中的显示就应该是5-***,而6-502虽然也包含了5这个字符,但它不属于5号楼,所以要将其排除在外。因此我们采用了模糊查询,查询结果只显示所需信息。
(3).在住宿统计的实现上,我们使用的SQL集函数SUM()来实现的。它的主要功能就是计算一列值得总和(此列必须是数值型)。将要查的楼房号,输入到查询条件中时,还需要判断该楼房号到底存不存在,如果存在在点击该模块中的‘住宿统计按钮’,那么该楼房所有学生的总人数会在’住宿统计’按钮右边的Memo文本显示控件里面进行显示了,同时该楼房的详细住宿情况会在表格中进行具体显示。
3.4.4 报表管理模块详细设计 报表是数据库应用程序设计中非常重要的一部份,数据库应用程序通常都要生成报表,并且把所需信息打印出来,方便用户存档等得方面上的管理。由于该模块中各小模块实现的都是报表管理,所以宿舍交费情况报表管理、学生信息报表、员工信息报表、学生物品出入报表、住宿信息报表、来访信息报表这六个小功能模块只是在功能思想上不太一样,其具体设计实现时操作基本上是差不多的,因此这里只是详细介绍宿舍交费情况的具体设计实现,其他模块仅介绍其设计思想。
1.宿舍交费情况报表管理
图3.12 宿舍交费情况报表管理界面
设计思想:
该模块实现的是对学生每学期所交纳住宿费的一个详细情况的查询。在学生即将毕业离校时可以通过该功能模块来查询一下,那些同学还欠有学校住宿费,在其交清之前将不准其离校,已交清的同学就可以进行离校手续的办理了。一般来说我们真正需要并且有用的信息就是未交清住宿费的学生清单,在学生毕业时可以通过此单来收取学生补交的住宿费等。
具体实现:
(1).首先通过TADOQuery控件实现数据库和该窗体的关联,再通过TDataSourse实现学生注册表(Enroll)和TDBGrid的关联,把学生交费信息显示在列表中。
(2).在作报表时我使用的是TQuickRep组件,通过该组件可以方便的把报表和代码联系起来,生成美观的图文报表。当然还可以用TQReport页上的控件给一个报表添加标题、页眉、页脚、等功能。还可以自动进行求和、计算均值等统计功能。报表设计时可以点击选中TQuickRep控件快捷菜单的Preview,即可在设计阶段预览打印结果。
(3).我们为每个报表管理窗体设置四个TButton功能按钮:查询、报表预览、打印报表、退出。报表管理,再打印报表之前首先查询一下用户所需信息,查询出来后可以预览一下信息是否正确,确定无误之后可以点击打印按钮,那么所有所需信息就会详细的详细地显示在纸张上,供用户查看了。
(4).在学生注册表里的‘交费情况’字段我们规定它只能选择两种情况:已交清或未交清。在编辑框中输入已交清或未交清两种情况的一种,点击查询按钮,那么所需信息就会详细的显示在窗体表中。防止用户在查询时输入错误,我们需要编程实现提示功能。
下面我们以未交清住宿费的学生为例,演示一下其报表预览情况。
在上述窗体中输入‘未交清’字段,则其报表显示情况如下:
图3.13报表预览图
2.学生信息报表
图3.14 学生信息报表界面
设计思想:能够实现某学生详细基本情况的查询打印。当因为某些原因需要查询某学生信息时,可以调用该功能模块来实现。
3.员工信息报表
设计思想:能够实现某栋楼房所有员工情况的查询打印,如果想了解某宿舍楼工作人员的详细情况,可以调用该模块来实现。
4.学生物品出入报表
设计思, , 想:能够实现查询某学生物品出入宿舍楼房的详细信息。如果想查看一下该学生一段时间内的出楼情况,可以通过该窗口来实现。
5.住宿信息报表
设计思想:能够将某宿舍的详细学生住宿情况打印出来。在某些情况下如果需要查看某个宿舍的详细学生情况可以调用该窗体实现报表打印功能。
6.来访信息报表
设计思想:主要实现的是将某个时间内所有来访人员的详细信息打印出来,以便于查询某些信息。
第四章 系统测试
4.1所遇问题
一个系统功能的实现,需要经过这么几步,首先把大致的骨架给设计好,然后根据系统要求写代码,接着是调试程序,最后完善总结。其中最重要的两步就是中间的两步。在此次毕业设计中,给我印象最深的就是系统的调试。在调试过程中,遇到了不少的问题,不过经过我不断的查阅资料,老师的指导,同学的商讨,这些问题都逐渐得到了解决,现将整个的调试过程总结如下:
1.首先就是SQL Server数据库和Delphi开发环境的相关联。我原先使用的是BDE控件来实现SQL Server数据库和Delphi的关联,这中间要用到ODBC数据源,每次进行数据库和ODBC的相联都会发生许多错误。最后我在看书时发现Delphi中新的数据访问组件都采用了ADO技术,可以不通过BDE就能使用现行的数据控件如TDBGrid和TDBEdit对数据进行直接访问,因此缩短了ADO/OLE-DB的运行时间,更重要的是,使用ADO可以避免用户在使用程序之前手动设置BDE和ODBC属性,以免产生不必要的错误。因些通过ADO我可以方便快捷的将其进行了关联。
2.其次就是查询中出现的错误。假设我们查询5号楼情况(如5-205,6-205,5或6代表5或6号楼,205代表宿舍号),需要程序来判断你所查询的是前面的数字,即使6-205中带有5这个字符也不能将其查询出来,因为我需要是5栋楼的详细信息。刚开始每次都犯上述错误,将6号楼中带5的宿舍也给查出来了,最后我采用了SQL中的模糊查询,模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。但可以使用字符串的任意片段匹配通配符(%或_)。与使用=和!=字符串比较运算符相比,使用通配符可使like运算符更加灵活。通过使用like模糊查询,终于将该功能实现了。
3.在做报表过程中也出现了不少错误。我在TQuickReport组件上放置了一个显示标题的Title Band控件,一个显示数据列名的Column Header Band和显示数据的Detail组件,但在具体实现时每次都是只显示标题和数据,不显示数据列名。最后我发现这是因为TQuickReport中的属性设定错误。我将其Dataset设置为和TADOquery1相关联后,列名终于显示出来了。
在编程过程中虽然遇到了不少困难,但在老师、同学及自己的反复研究下,最后问题都得到了解决。在解决问题的过程中我也是收获不小,同样的问题也许在不同的模块中会重复出现,通过上次调试中的所获,这次我就可以轻松解决。克服一个难题的喜悦是无法用言语可以表达的,它让我感受到了真正学到知识的那种充实感。
4.2 系统测试 经过好几个月的努力,我们的的毕业设计高校学生宿舍管理系统也终于接近了尾声,不过在系统测试时可让我们花了好多功夫,为了使系统变得更加完善,我们测试了一遍又一遍。
在测试之初,由于数据库中的数据都是刚开始编程时随便输入的,一点实用性也没有,所以我们又把数据库中的数据全部清理了一下,输入了一些真实可用的数据,以便完成后面的数据测试。
在系统管理员进行用户的删除时,刚开始时是用户名正确就可以进行删除,测试时才发现也许系统中存在重名的用户名,所以不能只凭借用户名、用户密码、用户权限中的一个或两个正确就可以将该用户删除,必须要三者都对应起来才能完成用户的删除。还进行完善了的一点就是当管理员输入错误的用户名时,系统能够对其进行提示‘本用户信息不存在,注意核对’。
再有一点就是,在员工信息录入窗口中有一个字段‘楼房号’,在开始的系统实现时,我是将学校所有的住宿楼都添在了 ‘楼房号’的下拉列表框的Item属性中,是固定的。在真正系统测试时才发现,如果我们学校新建一栋宿舍楼,并且为其分配管理人员,在具体添加时就不可能为该管理人员找到其应该管理的楼房号,因为以前添加是静态的,并没有将新建宿舍楼房加入进去。所以我将这一部分进行了重新编程,实现了动态添加。当楼房管理模块中新增一栋住宿楼后,员工管理模块的楼房号会自动添加一栋。
当然在系统测试阶段,我还完善了许多细节性的东西。比如在查询模块、报表管理模块里面如果按学号进行查询,刚开始只是判断输入的学号不能为空。后来才发现在用户输入学号后,系统应该还能够进行判断该学号到底存不存在,如果没有就应该提示用户输入了不存在的学号,应该重新进行输入。
经过一段时间的系统测试之后,我们的宿舍管理系统在整体上完善了许多,在设计上也更加具有人性化了,那么对于用户来说会更加容易适应本系统的各项操作。
[1]萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,1983
[2]求是科技.SQL Server 2000数据库开发技术与工程实践[M].北京:人民邮电出版社,2005
[3]侯太平,董爱红.Delphi数据库编程[M].北京:清华大学出版社,2004.6
[4]周绪.SQL Server2000中文版入门提高[M].北京:清华大学出版社,2003
[5]王华. Delphi 5编程实例与技巧[M].北京:机械工业出版社,2000
[6]龙劲松,王俞. Delphi 6 开发人员指南[M].北京:机械工业出版社,2003
[7]徐谡,张雷.Delphi应用与开发安全教程[M].北京:清华大学出版社,2005.1
[8]王业龙,范朝辉,李育龙.Delphi软件工程案例精解[M]. 北京:电子工业出版社,2005.1
[9]黄晓敏,陈强.Delphi程序设计基础[M].北京:清华大学出版社,2004.9
[10]赵晓玲.可视化程序教程[M].北京:机械工业出版社,2005.1
[11](美)Marco Cantu.Delphi7从入门到精通[M]. 北京:电子工业出版社,2003.10
[12](美)Clay Shannon.Delphi程序调试参考手册[M]. 北京:中国电力出版社,2003.9