问答题

阅读下列说明和C++代码,在 (n) 处填入正确的字句。
[说明]
某公司的组织结构图如图10.4所示,现采用组合(Composition)设计模式来构造该公司的组织结构,得到如图10.5所示的类图。
其中Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。

[C++代码]
#include <iostream>
#include <list>
#include <string>
using namespace std;
class Company//抽象类
protected:
string name;
public:
Company(string name) (1) =name;
(2) ;//增加子公司、办事处或部门
(3) ;//删除子公司、办事处或部门

class ConcreteCompany: public Company
private:
list< (4) >children;//存储子公司、办事处或部门
public:
ConcreteCompany(string name):Company (name)
void Add (Company*c) (5) .push back (c);
void Delete (Company*c) (6) .remove (c);
;
class HRDepartment: public Company
public:
HRDepartment(string name):Company(name)//其他代码省略

class FinanceDepartment: public Company
public:
FinanceDepartment(string name):Company(name)//其他代码省略

void main()
ConcreteCompany *root=new ComcreteCompany("北京总公司");
root->Add (new HRDepartrnent("总公司人力资源音"));
root->Add(new FinanceDepartment("总公司财务部"));
ConcreteCompany *comp=new ConcreteCompany("上海分公司");
comp->Add (new HRDepartment("上海分公司人力资源部"));
comp->Add(new FinanceDepartment("上海分公司财务部"));
(7) ;
ConcreteCompany *compl=new ConcreteCompany("南京办事处");
comp 1->Add (new HRDepartment("南京办事处人力资源部"));
comp 1->Add (new FinanceDepartment("南京办事处财务部"));
(8) ;//其他代码省略

【参考答案】

(1) this->name
(2) virtual void Add(Company* c)=0
......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
阅读下列说明和Java代码,在 (n) 处填入正确的字句。 [说明] 某公司的组织结构图如图10.6所示,现采用组合(Composition)设计模式来设计,得到如图10.7所示的类图。 其中Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司 办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。 [Java代码] import javA.util.*: (1) Company protected String name; public Company (String name)( (2) =name; public abstract void Add(Company c); 增加子公司、办事处或部门 public abstract void Delete(Company c); 删除子公司、办事处或部门 class ConcreteteCompany extends Company private List< (3) >children-new ArrayList< (4) >(); 存储子公司、办事处或部门 public ConcreteCompany (String name) super (name); public void Add(Company c) (5) .add(c); public void Delete (Company c) (6) .remove (c); class HRDepartment extends Company public HRDepartment (String name) super (name); 其他代码省略 class FinanceDepartment extends Company public FinanceDepartment (String name)( super (name); 其他代码省略 public class Test public static void main(String[] args) ConcreteCompany root=new ConcreteCompany( 北京总公司 ); root.Add (new HRDepartment( 总公司人力资源部 )); root.Add (new FinanceDepartment( 总公司财务部 )); ConcreteCompany comp=new ConcreteCompany( 上海分公司 ); comp.Add (new HRDepartment( 上海分公司人力资源部 )); comp.Add (new FinanceDepartment( 上海分公司财务部 )); (7) ; ConcreteCompany comp1 =new ConcreteCompany( 南京办事处 ); comp1.Add (new HRDepartment( 南京办事处人力资源部 )); comp1.Add (new FinanceDepartment( 南京办事处财务部 ); (8) ; 其他代码省略
问答题
阅读下列说明和图,回答问题。 [说明] 某网上药店允许顾客凭借医生开具的处方,通过网络在该药店购买处方上的药品。该网上药店的基本功能描述如下。 (1)注册。顾客在买药之前,必须先在网上药店注册。注册过程中需填写顾客资料以及付款方式(信用卡或者支付宝账户)。此外顾客必须与药店签订一份授权协议书,授权药店可以向其医生确认处方的真伪。 (2)登录。已经注册的顾客可以登录到网上药房购买药品。如果是没有注册的顾客,系统将拒绝其登录。 (3)录入及提交处方。登录成功后,顾客按照“处方录入界面”显示的信息,填写开具处方的医生的信息以及处方上的药品信息。填写完成后,提交该处方。 (4)验证处方。对于已经提交的处方(系统将其状态设置为“处方已提交”),其验证过程为: ①核实医生信息。如果医生信息不正确,该处方的状态被设置为“医生信息无效”,并取消这个处方的购买请求;如果医生信息是正确的,系统给该医生发送处方确认请求,并将处方状态修改为“审核中”。 ②如果医生回复处方无效,系统取消处方,并将处方状态设置为“无效处方”。如果医生没有在7天内给出确认答复,系统也会取消处方,并将处方状态设置为“无法审核”。 ③如果医生在7天内给出了确认答复,该处方的状态被修改为“准许付款”。 系统取消所有未通过验证的处方,并自动发送一封电子邮件给顾客,通知顾客处方被取消以及取消的原因。 (5)对于通过验证的处方,系统自动计算药品的价格并邮寄药品给已经付款的顾客。 该网上药店采用面向对象方法开发,使用UML进行建模。系统的类图如图10.2所示。 [问题1] 根据说明中的描述,给出图10.2中缺少的C1~C5所对应的类名以及(1)~(6)处所对应的多重度。 [问题2] 图10.3给出了“处方”的部分状态图。根据说明中的描述,给出图10.3中缺少的S1~S4所对应的状态名以及(7)~(10)处所对应的迁移(transition)名。 [问题3] 图10.2中的符号“”和“”在UML中分别示类和对象之间的哪两种关系?两者之间的区别是什么?