UML类图和用例图练习

一、问题描述

一个公司可以雇佣多个人,某个人在同一时刻只能为一家公司服务。每个公司只有一个总经理,总经理下有多个部门经理管理公司的雇员,公司的雇员只归一个经理管理。请为上面描述的关系建立类模型,注意捕捉类之间的关联并标明类之间的多重性。

问题分析

根据题目描述在各个类之间建立关联关系:公司与总经理之间为一对一关系,总经理和部门经理之间为一对多关系,部门经理与普通雇员之间也为一对多关系,其中普通雇员、部门经理、总经理都可以由统一的员工泛化而来。
在这里插入图片描述


二、问题描述

在某出版系统中,存在出版社、图书、作者三个实体类。绘制简单类图来描述三者之间的关系。

问题分析

根据题干,首先创建出版社、图书、作者三个实体类。随后,根据常识,在图书和出版社以及图书和作者之间建立关联关系,然后填写合适的多重性:一个出版社可能出版多本图书,一本书只能归属于一个出版社;一本图书可能有一个及以上的作者,一个作者也可能出版很多本书。
在这里插入图片描述


三、问题描述

某银行储蓄系统需求说明如下:

①开户。客户可填写开立账户申请表,然后交由工作人员验证并输入系统。系统会建立账户记录,并会提示客户设置密码(若客户没做设置,则会有一个默认密码)。如果开户成功,系统会打印一本存折给客户。

② 密码设置。在开户时客户即可设置密码。此后,客户在经过身份验证后,还可修改密码。

③ 存款。客户可填写存款单,然后交由工作人员验证并输入系统。系统将建立存款记录,并在存折上打印该笔存款记录。

④取款。客户可按存款记录逐笔取款,由客户填写取款单,然后交由工作人员验证并输入系统。系统首先会验证客户身份,根据客户的账户、密码,对客户身份进行验证。如果客户身份验证通过,则系统将根据存款记录累计利息,然后注销该笔存款,并在存折上打印该笔存款的注销与利息累计。

请根据以上信息绘制出系统的用例图

问题分析

1.识别参与者:工作人员和客户;
2.确定用例模型:
(1)工作人员作为客户与系统交互的代理有申请开户、存款及取款用例。打印存折用例作为申请开户的扩展用例存在。
(2)客户有输入密码用例,分别作为取款用例以及申请开户用例的包含用例存在。
在这里插入图片描述


四、问题描述

机票预订系统是某航空公司推出的一款网上购票系统。其中,未登录的用户只能查询航班信息,已登录的用户还可以网上购买机票,查看行程,也可以退订机票。系统管理员可以安排系统中的航班信息。此外,该购票系统还与外部的一个信用评价系统有交互,当用户一个月内退订2次及以上的机票时,需要降低该用户在信用评价系统中的信用等级。当信用等级过低时,则不允许该用户再次购买机票。
根据机票预订系统,画出系统的用例图,类图,对象图

问题分析

1.确定参与者:
系统主要有3类参与者,用户,管理员,信用评价系统。用户又包括了未注册用户和注册用户。所以用户应该是一个抽象的参与者。
2.确定用例:
未注册用户:可以注册,查询航班。
注册用户:登录系统,查询航班,购买机票,退订机票,查看行程。
管理员:登录系统,设定航班安排。
信用评价系统:修改信用等级,检查信用等级。(2个用例并不是由信用评价系统触发的,是由其它用例触发的。)

用例图:
在这里插入图片描述


类图:

确定类元素:用户,管理员,机票,航班,机场
在这里插入图片描述


对象图:
在这里插入图片描述

为了描述这个关系,我们可以创建三个主要的:公司(Company)、员工(Employee)经理(Manager)。这里是一个简单的模型示例: 1. **Company** : - 属性:公司名称(name),总经理(generalManager) - 方法:雇佣员工(hireEmployee) ```java class Company { private String name; private Manager generalManager; public Company(String name) { this.name = name; this.generalManager = new Manager("General Manager"); } // 其他方法... public void hireEmployee(Employee employee) { employee.setManager(generalManager); } } ``` 2. **Manager** : - 继承自 Employee (因为每个经理也是员工) - 属性:职位(title),下属(subordinates) - 方法:添加下属、删除下属等 ```java class Manager extends Employee { private List<Employee> subordinates; public Manager(String title) { super(title); // 继承 Employee 构造函数 this.subordinates = new ArrayList<>(); } // 添加/删除下属方法... public void addSubordinate(Employee subordinate) { subordinate.setManager(this); subordinates.add(subordinate); } // 删除下属方法... } ``` 3. **Employee** : - 基本属性:姓名(name),所属经理(manager) - 方法:设置经理、获取经理等 ```java class Employee { private String name; private Manager manager; public Employee(String name) { this.name = name; } public void setManager(Manager manager) { this.manager = manager; } // 其他方法... public Manager getManager() { return manager; } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值