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