重做《机房收费系统》——概要设计(UI)
系统的概要设计大致涉及到UML图的包图和类图。是从系统的大体框架上进行设计。利用分层的思想将该程序进行切分,使得程序更有条理性,不同的层次负责不同的工作。这样才能实现利益的最大化。
我们已经学过了‘三层架构’‘MVC’,起码是听说过了。里面大概的包含什么东西已经知道了。接下来的就是运用实际的项目来促进对这些知识的深入了解和理解。
三层架构和MVC是存在差别的,这些差别影响不了我们对程序整体的把控,只是从不同的角度进行分层的。基本思想是相同的。
对于该系统我们就按照‘三层架构’的分层方法来进行分层。看看目标程序应该怎样拆分,各层当中(各包当中)应该包含哪些类,这些类都具哪些相同之处!
针对‘三层架构’来说,UI层是用来界面层主要是获得用户需求的。用户通过界面和程序进行交互。将用户的需求转换成机器可以读懂的需求,这就是UI层的作用,就像是一个饭馆里的服务员,KFC的前台工作人员
UI层要和控制层(BLL层)进行交互(UI层向BLL层发出指令),而BLL层需要完成的工作就是分配任务。对界面传进来的需求进行分析,再将任务分配给”各单位”进行处理。
DAL层是用来完成数据处理的。直接和数据库进行交流,对数据进行操作来完成程序响应功能。
下面就《机房收费系统》用‘三层架构’的思想进行分层:
这是传统的三层架构模型,如图所示,我们对程序设计,可以就按照这样的模型设计,也可以在此基础上做一些修改(例如:添加一些接口,增加一些其他作用的包,都是允许的)。要针对不同的程序进行不同的设计。
有了这个大体的框架了就好办了,剩下的工作就是要结合系统的实际情况进行处理了。首先要对程序进行一下分析。
我们先看实体,实体是用来传递的参数。应与数据库表相互对应,通过属性进行封装。传递到目的模块时在利用属性进行处理。
我们首先来设计一下UI层。界面层应该是和用例是一一对应的,(也有可能不对应,看界面是怎样设计的了)。
我们首先来设计一下窗体,看看应该定义哪些类。我们应该按照以角色为标准画的用例图来设计界面、设计类。窗体的显示要以角色的不同来控制。
我是这样设计程序界面的。首先有三个不同的主界面,分别是:MdiFrmTeacher、MdiFrmAccountant和 MdiFrmAdministrator。不同的角色登录后显示相对应的主界面,在主界面上通过菜单来调出自己需要的功能。
再 从各自的菜单项引出需要定义的类,首先从教师的角度进行阐述。
我们需要从这些菜单项中提炼出一些需要建立窗体的和需要新建的类。
在教师的主界面当中有一个“DataGridView”控件,很多信息都需要此控件显示。所以也会省去很多看起来差不多的窗体。下面我们来逐一分析一下这些菜单项。
这五个菜单中列出了教师具有的所有功能。通过点击来实现相应的操作。
首先看一下“文件”菜单下的内容:
这里只有修改密码需要新建一个窗体来实现(FrmChPwd),其余的显示都只需要在“DataGridView”控件中显示就可以了。用MdiFrmTeacher的方法实现。
在“查询”菜单下的功能是查询功能,所以可以设计在同一个窗体中(FrmFindRecord),模仿Microsoft word 中的查找对话框设计我的查询窗体。如图所示:
在不同的选项卡下有不同的内容,这里就不一一展示了。需要强调 的是,查询结果需在“DataGridView”控件中显示。
图中显示的是“操作”菜单下的功能。图中上、下机的功能是需要有一个子窗体(FrmOnDownline)来显示其功能的。其窗体如下图显示:
(FrmOnDownline)对于不同的用户还有些细微的变化,如果是在册的固定用户,那么只要显示用户的信息就可以了。如果是临时用户,就需要教师为临时用户办理充值工作了。(教师不执行固定用户的充值业务)
除了这个变化还有一些其他的改变,就不细说了。
管理下机(全部下机),就直接用MdiFrmTeacher的方法实现了,不用再单独设计窗体了。(选定下机)通过右击 “DataGridView”的快捷菜单实现。
而“工作日记本”还没有设计好,但是他必须要有一个窗体来实现其功能。(此功能如果在时间和精力允许的条件下,才会考虑)
接下来我们继续看一下菜单。“账”菜单下有两个功能,这两个功能可以使用同一个窗体,也可以将“查看账务明细”这个功能在主窗体显示。
我们这里就按后者来设计,给结账设计一个窗体(FrmSettleAccounts)。
最后再设计一个帮助窗体(FrmHelp)就ok了
接下来从Accountant的角度来设计界面:
MdiFrmAccountant基本上和Teacher的一样。只是在菜单项有所不同。
我们详细的看一下这个窗体有什么样的功能,需要什么新建哪些窗体?
看一下它的菜单项。
如图所示,在开始菜单下,只有“修改密码”需要建立窗体, 不过在分析MdiFrmTeacher时已经建好了,就不用再建立了。
在操作菜单下的,充值、注册、退卡都需要新建新建窗体,我为这些操作已经预先建好了。如下图所示:
这就是那三个窗体,分别是FrmEntry、FrmRecharge、FrmCancellation。
查询和老师的查询是完全相同的,只是在工作记录上有些差异,一个是接收老师的数据,一个是接受会计的数据。
在账中,我们应该做一个界面FrmSettleAccountsA.它包含有日结,月结和年结,我们通过这些菜单调节时间,也可以再进入结账状态下调整时间。
“查看账务明细”我们建立一个较大的窗体,查看账务。
这样我们就可以根据我们自己的需要来进行查询了。无论是老师,还是会计的结账都在掌握之中。
MdiFrmAccountant会计的窗体也已近建立完毕了。基本上可以完成任务了。 下面剩下的是级别最高的管理员了。我们还需要详细的设计其窗体。
MdiFrmAdministrator主窗体建立如下:
管理员的工作主要是考虑系统的管理。怎样将机房上机这项工作开展好。从人员的配备上,还有收费制度上,要有一个明确的规划。
除此之外,还要对教师和会计的工作进行监督。包括两个方面:1.值班信息进行查询 2. 结账款项进行查询
另外还要了解机房上机的这项工作的开展情况,了解学生来上机的情况。所以对学生也要有一定的控制。
我们看一下各菜单。
文件菜单下只需要再添加一个窗体就够了(FrmAddUser),其他的已经在上面添加好了。
财务管理,用原来那个就可以了。而对教师或会计的工作记录查询就需要重新安排了,FrmWorkInfo。
教师值班安排:FrmSetRota,(窗体大致形式如图所示。在中间加一个可以读取可以写入的控件即可。)
基础数据设定FrmSetBasalData。