一、问答题
1、【说明】
某公司欲开发一款二手车物流系统,以有效提升物流分发效率,改系统的主要功能是:
(1)订单管理。系统抓取线索,将车辆交易系统中的交易信息抓取为线索,帮买顾问看到有买车线索后,会打电话询问买家是否需要物流,若需要。帮买顾问就将这个线索发起为订单,并在存储系统中存储,然后系统帮买家寻找物流商进行承运。
(2)路线管理。帮买顾问对物流商的路线进行管理,存储的路线信息包括:路线类型、物流商、起止地点。路线分为三种:固定路线、包车路线、竞拍体系。其中固定路线和包车路线是合约制,包车路线的发车时间由公司自行管理,是订单的首选途径。
(3)合约管理。帮买顾问根据公司与物流商确定的合约,对合约内容进行设置,合约信息包括物流商信息、路线起止城市、价格、有效期等。
(4)寻找物流商。系统根据订单的类型(保卖车、全国购和普通二手军)、起止城市,需要的服务模式(买家接、送到买家等)进行自动派发或以竞拍体系方式选择合适的物流商。即:有新订单时,若为保卖车或全国购,则直接分配到竞拍体系中:否则,若符合固定路线和/或包车路线,系统自动分配给合约物流商,若不符合固定路线和包车路线,系统将订单信息分配到竞拍体系中.竞拍体系接收到订单后,将订单信息推送给有相关路线的物流商,物流商对订单进行竞拍出价,最优报价的物流商中标。最后,给承运商的物流商发送物流消息,更新订单的物流信息,给车辆交易系统发送物流信息。
(5)物流商注册:物流商账号的注册开通。
现采用结构化方法对二手车物流系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。
问题1:使用说明中的词语,给出图1-1中的实体E1-E3名称;
问题2:使用说明中的词语,给出图1-2中的数据存储,D1-D5名称;
问题3:根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点;
问题4:根据说明采用结构化语言对“P5寻找物流商”的加工逻辑进行描述。
参考答案:
问题1:
E1:系统帮买商
E2: 车辆交易系统
E3: 物流商
问题2:
D1: 交易线索信息表
D2:订单信息表
D3:路线信息表
D4:合约信息表
D5:物流商信息表
问题3:
发送物流信息:起点P5 终点E2
自动分配:起点P5 终点E3
更新物流信息:起点P5 终点D2
问题4:
略
解析:
问题1中,根据题目描述和系统功能,E1应为系统帮买顾问,E2为车辆交易系统,E3为物流商的管理系统或注册系统。
问题2中,根据数据流图中数据存储的功能描述,D1-D5分别对应交易线索信息存储表、订单信息存储表、路线信息存储表、合约信息存储表和物流商信息存储表(或物流商注册信息表)。
问题3中,根据题目描述和流程图,除了图中已有的数据流,还有发送物流消息、自动派发订单和更新订单物流信息等数据流未显示,这些数据流的起点和终点也已给出。
问题4中,“P5寻找物流商”的加工逻辑描述是根据题目和系统功能进行的概述,涵盖了从订单类型判断、路线匹配、竞拍体系、物流商选择到发送物流消息和更新物流信息的整个过程。
2、【说明】
公司拟开发新入职员工的技能培训管理系统以便使新员工快速胜任新岗位。
1. 部门信息包括:部门号、名称、部门负责人、电话等,部门号唯一标识部门关系中的每一个元组,一个部门有多个员工,但一名员工只属于一个部门,每个部门只有一名负责人,负责部门工作。
2. 员工信息包括员工号、姓名、部门号、岗位、基本工资、电话、家庭住址等,其中员工号是唯一标示员工关系中的每一个元组。岗位有新入职员工,培训师、部门负责人等不同岗位设置不同的基本工资,新入职员工要选择多门课程进行培训,并通过考试取得课程成绩,一名培训师可以讲授多门课程、一门课程可由多名培训师讲授。
3.课程信息包括课程号,课程名称、学时等;其中课程号唯一标识课程关系的每一个元组。
关系模式设计
部门(部门号,部门名,部门负责人,电话)
员工(员工号,姓名,部门号, d ,电话,家庭住址)
课程( (e) ,课程名称,学时)
讲授(课程号,培训师,培训地点)
培训(课程号,(f))
根据需求阶段收集的信息,设计的实体联系图如图2-1所示
问题1:
(1)补充图2-1中的空(a)-(c)
(2)图2-1中是否存在缺失联系,若存在,则说明所缺失的联系和联系类型
问题2:
根据题意,将关系模式中的空(d)-(f)补充完整
问题3:
员工关系模式的主键为(g),外键为(h),讲授关系模式的主键为(i),外键为(j)
问题4:
员工关系是否存在传递依赖?用100字以内的文字说明理由
参考答案:
问题1:
(1)a: 部门负责人 b: 培训师 c: 新员工
(2)存在缺失数据流, 部门和员工之间:1:m (一个部门对应多有员工)
问题2:
d: 岗位基本工资
e: 课程号
f: 员工号或课程成绩
问题3:
员工关系表:g: 主键:员工号外健: 部门号
讲授关系模式:i 主健:课程号 培训师 外健: 课程号、培训师
问题4:
答:存在传递依赖
解析:
问题1:根据题目描述和实体联系图,可以得知a应该是部门负责人,b是培训师姓名,c是新员工的岗位类别或岗位。关于缺失联系的问题,确实存在部门与员工之间的联系缺失在图中表示,这是一个一对多的联系,即一个部门对应多个员工。
问题2:根据题目描述,关系模式中的空需要补充的内容应该是:d表示岗位类别或岗位描述与基本工资的联系;e是课程号与员工号的联系,因为一门课程由多个员工参与培训;f则是员工号与课程成绩的联系,因为员工需要参加多门课程并获取成绩。
问题3:员工关系模式的主键应该是唯一标识员工的属性,即员工号。外键则是参照其他实体的属性,此处应该是部门号。讲授关系模式的主键应该能够唯一标识每一门课程的每一位培训师,所以应该是(课程号,培训师)组合成的元组。此处没有外键。
问题4:员工关系中存在传递依赖。因为员工所在的部门决定了其岗位,而岗位又直接决定了其基本工资。所以,员工号对基本工资有传递依赖的关系。
3、【说明】
某牙科诊所拟开发一套信息系统,用于管理病人基本信息和就诊信息。诊所工作人员包括:医护人员(Dentalstaff)、接待人员(Receptionist)和办公人员(officestaff)等,系统主要功能需求描述如下:
1、记录病人基本信息( Maintain patient info)。初次就诊的病人,由接待员将病人基本信息录入系统。病人基本信息包括病人姓名、身份证号、出生日期、性别、首次就诊时间和最后一次就诊时间等。每位病人与其医保信息( MedicalInsurance)关联。
2、记录就诊信息( Record office visit info)。病人在诊所的每一次就诊,由接待员将就诊信息( Office Visit)录入系统。就诊信息包括就诊时间、就诊费用、支付代码、病人支付费用和医保支付费用等。
3、记录治疗信息( Record dental procedure),病人在就诊时,可能需要接受多项治疗,每项治疗( Procedure)可能由多位医护人员为其服务。治疗信息包括:治疗项目名称,治疗项目描述、治疗的牙齿和费用等。治疗信息由每位参与治疗的医护人员分别向系统中录入。
4、打印发票( Print invoices)。发票( Invoice)由办公人员打印。发票分为两种,给医保机构的发票( InsuranceInvoice)和给病人的发票( PatientInvoice)。两种发票内容相同,只是支付的费用不同。当收到治疗费用后,办公人员在系统中更新支付状态(Enterpayment)。
5、记录医护人员信息( Maintain dental staff info)。办公人员将医护人员信息录入系统。医护人员信息包括姓名、职位、身份证号、家庭住址和联系电话等。
6、医护人员可以查询并打印其参与的治疗项目相关信息( Search and print procedureinto)。
现采用面向对象方法开发该系统,得到如图 3-1 所示的用例图和 3-2 所示的初始类图。
【问题1】(6分)
根据说明中的描述,给出图 3-1中 A1~A3 所对应的参与者名称和 U1~U3所对应的用例名称。
【问题2】(5分)
根据说明中的描述,给出图 3-2中 C1~C5 所对应的类名
【问题3】(4分)
根据说明中的描述,给出图 3-2 中类 C4、C5、 Patient和DentalStaff 的必要属性。
参考答案:
问题1:
A1:Receptionist(接待人员)
A2:Dentalstaff(医护人员)
A3:officestaff(办公人员)
U1: Maintain patient info (记录病人基本信息)
U2: Record office visit info (记录就诊信息)
U3: Print invoices (打印发票)
问题2.
C1: Patient Invoice (病人发票)
C2:Insurance Invoice (医保发票)
C3: Invoice (发票)
C4: Procedure (治疗)
C5:Office Visit (就诊信息)
C4: 治疗项目名称,治疗项目描述、治疗的牙齿和费用、医护人员身份证号、就诊信息。
C5: 就诊时间、就诊费用、支付代码、病人支付费用和医保支付费用、病人身份证号等。
Patient:病人姓名、身份证号、出生日期、性别、医保编号。
Dental staff: 姓名、职位、身份证号、家庭住址、联系电话。
解析:
<问题1>根据题目描述,A1~A3代表的是系统的参与者,分别是接待员、医护人员和办公人员。U1~U3是系统的用例,分别是维护病人信息、记录就诊信息和打印发票。
<问题2>根据题目描述和提供的类图,C1和C2是发票的两种类型,分别是病人发票和医保发票。C3应该是发票的抽象类或接口。C4代表治疗信息,C5代表就诊信息。
<问题3>根据题目描述和提供的类图,C4(治疗)的必要属性包括治疗ID、治疗项目名称、治疗项目描述、治疗的牙齿、费用和治疗医护人员ID。C5(就诊信息)的必要属性包括就诊ID、病人ID、就诊时间、就诊费用、支付代码和支付费用。Patient(病人)的必要属性包括病人ID、姓名、身份证号等基本信息以及医保信息。DentalStaff(医护人员)的必要属性包括医护人员ID、姓名、职位等基本信息以及联系方式。
4、阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
0-1背包问题定义为:给定1个物品的价值v[1....i]、重量w[1....i]和背包容量T,每个
物品装到背包里或者不装到背包里,求最优的装包方案,使得所得到的价值最大。
0-1背创问题具有最优子结构性质,定义c为最优装包方案所获得的最大价值
则可得到如下所示的递归式。
0 若i=0或T=0
C[i][T]= C[i-1][T] 若T<w[i]
max(c[i-1][T-w[i]]+v[i],c[i-1][T]) 若i>0且T≥w[i]
【C代码】
下面是算法的C语言实现
(1)常量和变量说明
T:背包容量
V[]:价值数组
W[]:重量数组
C[][]:c[i][j]表示前i个物品在背包容量为j的情况下最优装包方案所能获得的最大价值
(2)C程序
【问题1】(8分)
根据说明和C代码,填充C代码中的空(1)~(4)
【问题2】(4分)
根据说明和C代码,算法采用了(5)设计策略。在求解过程中,采用了(6)(自底向上或者自顶向下)的方式。
【问题3】(3分)
若5项物品的价值数组和重量数组分别为v[]={0,1,6,18,22,28}和w[]={0,1,2,5,6,7},背包容量为T=11,则获得的最大价值为(7)。
参考答案:
问题1:
1:c[i][j]
2: i>0 && j >= w[i]
3: Calculate_Max_Value(v,w,i-1,j-w[i]) +v[i]
4: c[i][j]=temp
问题2:
动态规划
自顶向下
问题3:
40
解析:
问题1的答案是对C代码中空(1)~空(4)的填充。根据题目描述和递归式,我们可以得知这四个空分别对应的是c[i][j]、递归条件i>0 && j >= w[i]、计算最大价值的递归式c[i][j] = Calculate_Max_Value(v,w,i-1,j-w[i]) +v[i]以及将结果存储在二维数组中的语句c[i][j] = temp。这些空白处是对算法实现的必要补充。
问题2的答案涉及到算法的设计策略和求解方式。题目中的算法是动态规划,这是一种常用的优化技术,适用于具有最优子结构性质的问题。在求解过程中,算法采用了自顶向下的方式,即从最大问题开始逐步分解到可以直接求解的子问题。这是递归的一种常见策略。因此,答案为动态规划、自顶向下。
问题3的答案涉及到具体的计算过程。根据题目给出的物品价值数组和重量数组以及背包容量,我们可以使用提供的算法代码进行计算,得到最大价值为40。这个答案可以通过运行提供的代码进行验证。
5、试题五
import java.util.*
interface Observer{
public (1);
}
interface Subject{
public void Attach(Observer obs);
public void Detach(Observer obs);
public void Notify();
public void setStatus(int staus);
public int getStatus();
}
class OfficeDoc implements Subject{
private List< (2) > myObs;
private String mySubjectName;
private int m_status;
public OfficeDoc (String name){
mySubjectName=name;
this.myObs=new Arraylist<Observer>();
m_status=0;
}
public void Attach(Observer obs);{this.myObs.add(obs);}
public void Detach(Observer obs);{this.myObs.remove(obs);}
public void Notify(){
for(Observer obs:this.myObs){
(3);
}
}
public void setStatus(int status;){
m_status=status;
System out.println("SetStatus Subject["+mySubjectName+"]status:"+status);
}
public int getStatus(){return m_status;}
}
class DocExplorer implements Observer{
private String myObsName;
public DocExplorer(String name, (4) sub){
myObsName=name;
sub (5);
}
public void update(){
System.out.println("update observer["+myObsName+"]" ) ;
}
]
class ObserverTest{
public static void main(String []args) {
System.out.println("Hello World!" ) ;
Observer observerA=new DocExplorer("observerA",subjectA);
subjectA.serStatus(1);
subjectA.Notify();
}
}
参考答案:
(1)void update();
(2)Observer;
(3)obs.update();
(4)Subject;
(5)Attach(this);
解析:
(1)在Observer接口中,观察者通常有一个名为update的方法,该方法用于处理被观察对象发送的通知。因此,在题目的接口Observer中应该填入public void update();。
(2)在OfficeDoc类中,存储观察者对象的列表是一个关键部分。由于这个列表包含了观察者对象,因此类型应该是Observer。所以,在题目中的List<…> myObs应该填入Observer。
(3)在Notify方法中,当通知所有观察者时,应该调用每个观察者的update方法。因此,在题目中的空格里应该填入obs.update()。
(4)在DocExplorer类的构造函数中,需要传递一个Subject类型的参数以便进行附加操作。由于OfficeDoc类实现了Subject接口,因此这里可以填入OfficeDoc或Subject。
(5)在DocExplorer类的构造函数中,使用sub.Attach(this)可以使得当前创建的DocExplorer对象作为观察者被加入到指定的Subject对象中。因此,在题目中的空格里应该填入Attach(this)。
6、阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。
参考答案:
1: void update()
2: Observer
3: obs.update()
4: Subject
5: Attach(this)
解析:
题目要求使用观察者设计模式来实现类OfficeDoc和DocExplorer之间的通信。当OfficeDoc发生变化时,DocExplorer需要更新自身状态。为了实现这一需求,需要按照观察者设计模式的步骤进行设计和编码。具体步骤如下:
- 定义观察者接口或抽象类Observer,通常包含update()方法,用于更新观察者状态。
- 在OfficeDoc类中实现一个或多个通知机制,当状态发生变化时调用所有注册的观察者的update()方法。这通常在被观察者的状态改变方法中实现。
- DocExplorer类作为观察者,需要实现Observer接口或继承自Observer抽象类,并实现update()方法以更新自身状态。同时,DocExplorer需要有一个方法(如Attach(this))将自己注册到OfficeDoc对象上。
4.(n)处的填空都是基于这些设计思路和要求进行填写的。第一处是OfficeDoc中的通知方法;第二处是定义观察者模式的接口或抽象类;第三处是调用观察者的更新方法;第四处是被观察者的一个常见称呼;第五处是DocExplorer注册为观察者的方法。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!