一、问答题
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:
略
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:
答:存在传递依赖
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: 姓名、职位、身份证号、家庭住址、联系电话。
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
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);
6、阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。
参考答案:
1: void update()
2: Observer
3: obs.update()
4: Subject
5: Attach(this)
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!