分房管理系统Rose模型设计过程

news2024/11/14 19:26:52

文章目录

一、模型总体设计

1 创建系统的Use Case 视图

2 创建系统的 Logical 视图

3 创建系统的 Class 框图

4 创建系统的 StateChart 框图

5 创建系统的 Activity 框图

二、软件模块结构图设计

1 根据系统功能进行第一级分解

2 完成第二级分解

3 完成第三级分解

4 整合得到完整的软件系统模块图

三、程序流程图设计

1 软件系统重要模块的详细设计

2 程序描述

四、数据库设计

1 软件数据流图设计

2 软件系统数据字典

五、后言


一、模型总体设计

1 创建系统的Use Case 视图

Use Case框图显示系统中的使用案例与角色及其相互关系,角色是与所建系统交互的对象(人或物),使用案例是系统提供的高级功能模块,演示了人们如何使用案例。首先创建主Use Case框图,显示系统的总体视图。

下图是该分房管理系统的普通用户用例图,表示用户使用的系统案例有申请住房、申请调房、申请退房和申请其他服务,还有如果申请的是住房需填写申请表。

 

图1.1

图1.2描述了系统的另一个方面的功能——系统管理的功能,他(业务员)可以做的事情包括包括处理申请表,处理住房,处理调房,处理其他业务,

 

图1.2

图1.3描述该系统的最高级别管理者——老板在该系统的功能,可以对业务员进行增加,删除,修改信息和查询业务员的信息及这个系统的所有信息等。用到的系统用例有增加业务员,删除业务员,更新业务员,查询信息。

 

图1.3

2 创建系统的 Logical 视图

首先在Logical视图中创建Sequence框图,也就是Interaction框图。Interaction框图一步一步显示使用案例的流程。包括:流中需要什么对象;对象相互发送什么消息;什么角色启动流;消息按什么顺序发送。图1.4是系统处理申请入住表的Sequence 框图。

在处理表信息的时候要查找表格式是否有错误,如果没有的话则进行处理,入住申请表包含各种信息,比如说用户信息,要入住的房间信息等,成功处理表信息的会对相关文件进行更新

图1.4

图1.5是系统添加住房信息的Senquence框图,展示了业务员如何进行房间添加操作。

业务员添加入住房间时,首先要输入房间信息,然后检查业务员是否本人操作,确认信息无误后更新住房文件,删除空房文件,增加住房链表,更新空房链表,这里就涉及到对文件数据库操作。

而对于增加住房链表,更新空房链表是对于成功入住的;没有入住成功则处于等待状态,不执行操作。

图1.5

图1.6是系统添加业务员的Senquence框图,操作对象是老板,因为只有老板才可以对业务员进行操作。

首先‘老板’要进行登录验证,因为是最高级别,验证要求要比其余要复杂一点,先进行登录,登录成功后还需要输入验证‘老板’专属的密码,这样才能确保是‘老板’本人在进行操作。登录成功后,输入业务员信息、更新业务员文件、添加员工总人数,添加总工资,因为这两方面对以后导出数据需要和‘老板’进行统一管理的方便。

图1.6 

3 创建系统的 Class 

Class框图显示系统中所有类,提供系统组件及其相互关系的静态图形。Class框图是项目开发小组的良好设计工具,有助于开发人员在编码之前显示和计划系统结构,保证系统一开始就设计合理。

图1.7是系统业务员进行申请住房需要用到的class 框图,缺点是在于没有用到包思想去构造类图,而是采取了按照应用类型来构造类图。这个方式的缺点就是不够直观明显。

 

图1.7

File接口是封装了一些文件类需要经常用到的方法,比如说增加文件,删除文件,更新文件信息,查询文件信息等业务层方法。这个接口的优点在于降低了业务的耦合度,实现了多态。

DBUtil是所有数据库操作的最顶层接口。

Apply是处理用户申请的顶层接口。

LiveRoomFile类就是File接口的实现类,对File接口的方法进行了重写,根据业务需求进行实现。体现了多态思想。里面的方法除了要实现的方法还新增了根据Id选择需要查找的信息和查询全部住房房间信息。里面包含的成员变量还有id和sum,sum指代的是住房房间的总数,此变量应为静态变量。

NullRoomFile类也是File接口的实现类,同样重写了File接口的方法,同样新增了根据id查询空房信息,查询所有空房信息,更新文件信息等方法。里面包含的变量同样是id和sum,id是成员变量,每一个Room的id都不一样,这里的sum是空房的总数,也应当作为一个静态变量。

ApplyForm类是申请入住表的实体类,里面包含有User用户类,sum:住房总人数,scope入住分数。该三个变量都应作为成员变量;scope是如果当前房屋住满的情况下,则需要进行排队入住处理,而这个分数则刚好作为排队顺序的依靠。该分数通过方法countScope()计算分数方法获得。

ApplyLive类是业务员处理申请入住的实体类,主要变量包括id和ApplyForm,id必然是入住者的id这个在构造方法的时候就应当初始化,ApplyForm,进行入住处理则用户申请表也必然不可或缺。包含的方法有进行分数排序、检查已经居住的房屋、安排房间入住、添加到客户要入住的房间到链表中、更新住房文件信息。

User类是普通用户实体类成员属性和业务员表一样。具有Id,Name,Phone,Password等属性。

DBUser是需要对User进行数据库处理的数据库操作类。根据User类需求进行重写DBUtil接口的方法

图1.8就是根据系统需要进行调房需要用到的类而画的class 框图。

由于在上面已经介绍了三个接口File,DBUtil,Apply接口,在这里就不进行重复介绍了,只介绍新建的类。

ApplySwap类是处理用户申请换房的类,该类属性包含User用户类,roomId房间号,flag对方是否同意标志。如果需要换房的房间没有人入住则flag恒为true,即同意换房,否则需要根据别人意愿是否进行换房。而方法包含检查标志,即是否可以换房、交换房间、更新文件信息等方法。

ApplyOut类是处理用户申请退房的类,该类包含的属性有User u,roomId等。包含的方法有检查住房时间是否正常,即用户是否在规定时间内退房、退房处理、更新有关文件信息等方法。

Manger类是业务员实体类成员属性和业务员表一样。具有Id,Name,Phone,Password等属性。

DBUser是需要对Manger进行数据库处理的数据库操作类。根据Manger类需求进行重写DBUtil接口的方法。

 

图1.8

图1.9是系统根据‘老板’所需要操作的对象进行制作class框图。

MangerFile类是新增的业务员文件类,同样实现了File接口。里面包含业务员的所有信息,属性有sum即总员工数,totalSalary总工资数和Manger类对象。包含的方法除了需要重写File接口的方法还新增了获得总业务员数和总工资数。和设置总人数和总工资等方法。

Boss类是业务员实体类成员属性和业务员表一样。具有Id,Name,Password,Ratio等属性。这个Ratio就是‘老板’专属的验证密码。

DBUser是需要对Boss类进行数据库处理的数据库操作类。根据Boss类需求进行重写DBUtil接口的方法。

 

图1.9

4 创建系统的 StateChart 

状态图描述一个特定对象的所有可能的状态以及引起状态转换的事件。大多数面向对象技术都用状态图表示单个对象在其生命期中的行为。一个状态图包括一系列状态、事件以及状态之间的转移。

图1.10展示了用户申请表对象的状态图。

 

图1.10

在图1.10中我们可以直观感受到初态时填写入住表,然后处理表数据、提交后台排队,有两种可能。第一种就是无需排队,也就是说此时有空闲房子;第二种就是需要排队,并且每隔一段时间重复刷新值,直到有空闲房间可以入住。

图1.11展示了在房间有人住的情况下进行换房申请的申请状态对象图。

 

图1.11

在图1.11中,初态,用户提交换房申请,此时对方接受到换房申请,然后对方可以选择同意和不同意,终态就是返回自己的结果。这个状态图比较简单且易理解。

图1.12是用户提交退房申请后的申请对象的状态图。

图1.12 

在图1.12中,初态为用户提交退房申请,此时的状态是未处理,业务员看见退房申请后,业务员处理申请则退房成功,清理有关数据,比如说住房文件有些房间信息需要删除,而空房文件则需要添加有关信息。

5 创建系统的 Activity 

在用例模型中,活动图用来捕捉用例的活动,用框图的方式显示动作及其结果,活动图是一个流图,描述了从活动到活动的流u。它是一种描述交互的方式,描述了采取何种动作、动作的结果是什么(动作状态改变)、何时发生(动作序列)以及在何处发生(泳道)。

可以将一个转移分解为两个或者更多的转移,从而导致并发的动作。所有的并行转移在合并之前必须被执行。一条粗黑线表示将转移分解成多个分支,同样用粗黑线来表示分支的合并,粗黑线表示同步棒。

图1.13展示了添加房屋信息用例的活动图。

 

图1.13

在图1.13中,有三个接口分别是用户接口、业务逻辑接口、数据库接口。在用户接口中就相当于用户能看得到的东西,首先这里指代的用户是业务员,只有业务员才可以对房屋信息进行增加。

在用户接口中业务员可以看得到的信息就是输入房屋信息,等待后台处理,处理完成后显示房屋信息,否则将继续输入房间信息。

在业务逻辑接口中要处理的东西就比较复杂。先验证输入的房屋信息格式和内容是否有误,如果有误则将继续输入,否则进入下一层,获取验证码,然后输入验证码,验证码如果输入错误则需要重新输入,否则进入数据库接口,修改房屋文件。

而在数据库接口中只做三件事,第一是修改房屋信息,第二是添加插入记录,最后返回活动给业务逻辑层接口修改房屋文件,再由业务逻辑层接口返回给用户接口层显示房屋信息。

至此,添加房屋信息用例活动结束。

图1.14显示用户申请入住用例活动图

 

图1.14

在图1.14中,同样存在三个接口。

在用户接口中先填写入住表,等待后台处理有关信息,然后告知用户接口处理是否成功。

业务逻辑接口中收到入住表,先对入住表信息进行验证,如果表信息不正确则重新输入,反之,验证成功则开始处理表信息,同样,如果处理表信息出错也是需要用户重新填写入住表,否则处理完入住表,得到入住分数,转移到数据库接口进行活动。

在数据库接口中需要做的事情同样只有三件,第一件是修改住房文件;第二件是添加房间到入住链表;最后返回信息给业务逻辑接口打印入住清单。

在业务逻辑接口再返回到用户接口,如果入住成功则直接显示入住成功,否则显示排队列表。

图1.15则显示用户换房用例的活动图

 

图1.15

在图1.15中涉及到的用例还有用户接受申请处理用例。

在用户接口上,用户首先填写换房申请,等待业务逻辑接口和数据库接口返回结果。

在业务逻辑接口中先处理换房信息,如果信息不合法则返回用户接口,提示用户再次填写调房申请。否则需要查看该房间是否为空,如果不为空则向被调房的房主发送调房申请,该用户再发送结果给业务逻辑接口,如果该用户不同意换房则直接返回用户接口显示结果,否则进入可以换房阶段,转到数据库接口层执行相应的活动。如果该房间为空也是直接转到数据库接口执行相应的活动。

在数据库接口上,修改住房文件,添加交换记录,然后把结果返回业务逻辑层打印交换记录,再转移到用户接口层显示结果。

二、软件模块结构图设计

主要解决实现该系统需求的程序模块设计问题。(包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。)

1 根据系统功能进行第一级分解

 

图2.1

2 完成第二级分解

对上图的“房屋信息维护”“处理用户申请表”和“住房信息处理”进行分解。

房屋信息维护模块分解:

 

图2.2

处理用户申请表模块分解:

 

图2.3

住房信息模块处理:

 

图2.4

3 完成第三级分解

对上图的“分房申请处理”“调房申请处理”“退房申请处理”和“统计住房信息”进行分解。

分房申请模块分解:

 

图2.5

调房申请模块分解:

 

图2.6

退房申请处理模块分解:

 

图2.7

统计住房信息模块分解:

 

图2.8

4 整合得到完整的软件系统模块图

将上面三部分整合在一起得到初始的软件结构图:

 

图2.9

三、程序流程图设计

1 软件系统重要模块的详细设计

  1. 房屋信息维护程序流程图

 

图3.1

  1. 处理空房文件程序流程图

 

图3.2

  1. 处理住房信息统计的程序流程图

 

图3.3

2 程序描述

  1. 房屋信息维护程序流程图:管理员在界面点击房屋信息维护菜单,进入程序入口,然后再分别提供输入新房,删除房屋,进行排序三个子菜单供用户选择。如果用户选择了输入新房子菜单,则需要用户输入新房的信息,如果管理员输入的信息不合法则需要重新输入。
  2. 处理空房文件程序流程图:这个程序是同时适用于其他模块处理空房文件的,里面包括了管理员可对空房进行增加,删除,查看等操作。

(3)住房信息统计程序流程图:给管理员提供了查询住房信息,统计住房信息,打印住房信息等功能,同时统计住房信息里面又包含三个小功能分别是对住房文件进行增删改等操作,更方便于管理员管理住房信息。

四、数据库设计

1 软件数据流图设计

(1)顶层数据流图 

 

图4.1

(2)1层数据流图 

 

图4.2

(3)2 层数据流图 

  • 分房申请的数据流图:

 

图4.3

  • 调房申请的数据流图:

 

图4.4

  • 退房申请的数据流图:

图4.5

2 软件系统数据字典

(1)数据流条目 :以分房申请的数据流图为例

数据流名:分房申请

简述:根据申请者情况(年龄、工龄、职称、职务、家庭人口等)计算其分数, 高于阀值的进行排队。分房时,读空房文件,把好房优先分给排在分房队列前面的人, 并将房屋信息与申请者一起写入住房文件中。

组成:房屋信息和申请者

来源:作为用户分房申请表数据源的外部实体

去向:作为住房文件数据汇点的外部实体。

(2)加工条目 :以计入的加工为例

加工名:计入

编号:4.2

简述:用户退房后把房屋信息记入空房文件

输入:房屋信息

输出:空房文件

加工逻辑:得到用户退房的房屋信息之后先把该房屋信息从住房文件中删除,然后再把该房屋信息计入空房文件。

(3)文件条目 :以住房文件为例

文件名:住房文件

简述:存放的是用户居住的房屋信息

组成:房屋信息和申请者信息

输入:从住房申请获取数据

输出:由退房申请使用数据

存取方式:直接存取

存取频率:一个月

3 数据库表设计

  1. 用户信息表

字段序号

字段名

字段类型

字段长度

是否非空

是否主键

1

userId

varchar

18

2

userPassword

varchar

18

3

userName

varchar

30

4

userSex

varchar

3

5

userNumber

integer

11

表4.1

  1. 管理员信息表

字段序号

字段名

字段类型

字段长度

是否非空

是否主键

1

rootId

varchar

18

2

rootName

varchar

30

3

rootNumber

integer

11

表4.2

  1. 房屋信息表

字段序号

字段名

字段类型

字段长度

是否非空

是否主键

1

roomId

varchar

6

2

maxPeoples

integer

3

3

roomType

varchar

8

表4.3

  1. 住房信息表

字段序号

字段名

字段类型

字段长度

是否非空

是否主键

1

userId

varchar

18

2

userName

vrachar

30

3

roomId

varchar

6

4

userNumber

integer

11

5

roomNumber

integer

3

6

roomType

varchar

8

表4.4

  1. 空房信息表

字段序号

字段名

字段类型

字段长度

是否非空

是否主键

1

roomId

varchar

6

2

roomType

varchar

8

3

maxPeoples

integer

3

表4.5

  1. 用户申请表

字段序号

字段名

字段类型

字段长度

是否非空

是否主键

1

userId

varchar

18

2

userName

varchar

30

3

userNumber

integer

11

4

peoples

integer

3

5

grade

integer

3

五、后言

         这也是我自己的课程设计论文,其中我觉得排版还可以,然后放上C站去,但是里面内容可能不是很严谨,请各位看官老爷子按照自己需求对着看一下找到适合自己就可以了,如有错漏,也欢迎大家在评论区指正啊!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始的python基础教程

一、Getting Started 如果使用的是mac或linux系统,需要输入 python3 比如运行 python3 app.py 可以直接在终端的>>>符号后执行python代码 print("*" * 10) 1、实现 在相关终端当运行“python”为CPython,这是python的默认实现 Jy…

大数据--spark

什么是SparkApache Spark 的架构基础是弹性分布式数据集 (RDD),这是一种只读的多组数据项,分布在机器集群上,以容错方式维护。[2] Dataframe API 作为 RDD 之上的抽象发布,随后是 Dataset API。在 Spark 1.x 中,RDD 是…

39-剑指 Offer 41. 数据流中的中位数

题目 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如, [2,3,4] 的中位…

50个常用的 Numpy 函数详解

目录 一、创建数组 1、Array 2、Linspace 3、Arange 4、Uniform 5、Random.randint 6、Random.random 7、Logspace 8、zeroes 9、ones 10、full 11、Identity 二、数组操作 12、min 13、max 14、unique 15、mean 16、medain 17、digitize 18、reshape 19、…

详解1247:河中跳房子(二分经典例题)

1247:河中跳房子【题目描述】每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和…

《Unity Shader 入门精要》第6章 Unity 中的基础光照

第6章 Unity 中的基础光照 6.1 我们是如何看到这个世界的 通常来说我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象: 首先,光线从光源(light source)中被发射出来然后,光线和场景中的一些物…

JavaScript while 循环

文章目录JavaScript while 循环while 循环do/while 循环比较 for 和 while笔记列表JavaScript while 循环 只要指定条件为 true,循环就可以一直执行代码块。 while 循环 while 循环会在指定条件为真时循环执行代码块。 语法 while (条件) {需要执行的代码 }本例中…

Redis内部的阻塞式操作以及应对方法

Redis之所以被广泛应用,很重要的一个原因就是它支持高性能访问,也正因为这样,我们必须要重视所有可能影响Redis性能的因素,不仅要知道具体的机制,尽可能避免异常的情况出现,还要提前准备好应对异常的方案。…

MySQL进阶篇之索引2

02、索引 前四节内容:https://blog.csdn.net/kuaixiao0217/article/details/128753999 2.5、SQL性能分析 2.5.1、查看执行频次 1、SQL执行频率 MySQL客户端连接成功后,通过show [session|global] status命令可以提供服务器状态信息。 通过如下指令…

Computer architecture Cyber security Quantum computing交友

如果您也是computer architecture方向的博士硕士,希望交个朋友,欢迎后台私信。 当然,如果您也是 Cyber SecurityQuantum ComputingHigh Performance Computing 方向的博士硕士,想要交流,也可以私信。

学习记录669@项目管理之项目合同管理

有效合同原则 有效合同应具备以下特点: (1)签订合同的当事人应当具有相应的民事权利能力和民事行为能力。 (2)意思表示真实。 (3)不违反法律或社会公共利益 与有效合同相对应,需要避免无效合同。无效合同通常需具备下列任一情形: (1)一方以欺诈、胁迫的手段订立合…

【模拟CMOS集成电路】电路失调与CMRR—— 随机失调与系统失调分析(1)

电路失调与CMRR—— 随机失调与系统失调分析(1)前言1.1失调1.2失调电路模型1.2.1随机失调电路模型(1)电阻失配(2)跨导失配(3)电流镜的随机失调1.2.2系统失调前言 本文主要内容是失调…

深入剖析JVM垃圾收集器

文章目录前言1、新生代垃圾收集器1.1、Serial1.2、ParNew1.3、Parallel Scavenge2、老年代垃圾收集器2.1、Serial Old2.2、Parallel Old2.3、CMS(Concurrent Mark Sweep)3、全堆垃圾收集器3.1、Garbage First(G1)前言 参考资料&am…

ConfigurationProperties将配置绑定到bean的过程分析

概述 ConfigurationProperties是一个大家常用的注解。有一些系统配置,经常放在yml中,然后通过spring注入到bean中。 一般这些配置都是通过在spring生命周期的某一个环节,将属性注入进去的。 ConfigurationProperties就是利用了org.springf…

AC500 基于 Profinet 通讯连接变频器

硬件连接 使用 PM583-ETH 作为 Profinet 通讯的主站,ACS800 变频器 RETA-02 作为 Profinet 通讯的从站 2 ABB 变频器设置 以安装有 RETA-02 总线适配器的 ACS800 变频器为例,参照下表进行参数设定。详 细内容请参考变频器手册和 RETA-02 用户手册。表中…

Python 超强命令行解析工具 argparse !

在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse, getopt, argparse。这里面功能最强大的莫过于 argparse,下面就来看看它用法。import argparse# 使用 argpa…

计算机视觉OpenCv学习系列:第七部分、图像操作-3

第七部分、图像操作-3第一节、图像统计信息1.像素值统计2.函数支持说明3.代码练习与测试第二节、图像直方图1.图像直方图定义2.直方图函数3.代码练习与测试第三节、图像直方图均衡化1.直方图均衡化2.直方图均衡化函数3.代码练习与测试学习参考第一节、图像统计信息 1.像素值统…

零基础学JavaWeb开发(二十一)之 spring框架(4)

3、AOP详解 3.1、Aop常用术语 1.连接点(Join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。类中的哪些方法可以被增强,这些…

详解动态规划01背包问题--JavaScript实现

对其他动态规划问题感兴趣的,也可以查看详解动态规划最少硬币找零问题--JavaScript实现详解动态规划最长公共子序列--JavaScript实现一开始在接触动态规划的时候,可能会云里雾里,似乎能理解思路,但是又无法准确地表述或者把代码写…

车辆占用应急车道识别抓拍系统 opencv

车辆占用应急车道识别抓拍系统通过opencvpython人工智能识别技术,对高速公路应急车道进行不间断实时监测,当监测到应急车道上有车辆违规占用时,立即告警提醒后台人员及时处理避。OpenCV的全称是Open Source Computer Vision Library&#xff…