问答题[问题3](3分)
电子商务公司的主营业务是销售各类家电,对账户有余额的客户,还可以联合第三方基金公司提供理财服务,为此设立客户经理岗位。客户通过电子商务公司的客户经理和基金公司的基金经理进行理财。每名客户只由一名客户经理和一名基金经理负责,客户经理和基金经理均可负责多名客户。请根据该要求,对图2-1进行修改,画出修改后的实体间联系和联系的类型。
问答题[问题2] 根据说明结合问题1的解答,指出在该系统的顶层数据流图中应有哪些数据流。请采用说明中的词汇给出这些数据流的起点、终点以及数据流名称,下表给出了数据流的部分信息,请填充空缺处。
序号
起点
终点
数据流名称
1
{{U}}(1) {{/U}}
网上作业提交与管理系统
申业申请
2
{{U}}(2){{/U}}
网上作业提交与管理系统
提交的作业
3
网上作业提交与管理系统
{{U}}(3){{/U}}
需完成的作业
4
网上作业提交与管珲系统
{{U}}(4){{/U}}
{{U}}(5){{/U}}
5
网上作业提交与管理系统
{{U}}(6){{/U}}
作业申请
6
网上作业提交与管理系统
{{U}}(7){{/U}}
{{U}}(8){{/U}}
7
{{U}}(9){{/U}}
网上作业提交与管理系统
选课学生名单
8
{{U}}(10){{/U}}
网上作业提交与管理系统
{{U}}(11){{/U}}
9
{{U}}(12){{/U}}
网上作业提交与管理系统
账号和密码
10
{{U}}(13){{/U}}
网上作业提交与管理系统
账号和密码
问答题【说明】某公司要开发一个销售管理系统,该系统的主要功能是:处理客户和销售员送来的订单;工厂是根据订货安排生产的,交出货物同时开出发票,收到客户付款后,根据发票存根进行应收款处理。每张订单由订单号,若干头信息和订单细节组成。一张订单可定购多种产品,工厂对大宗订货给予优惠。每种产品都规定了不同订货数量的折扣。根据—上述要求公司的销售部王经理写下了以卜数据表结构:客户:(客户号,客户名,地址,电话)订单:(订单号,客户号,产品号,订货数,订货日期,交货日期,金额)应收账款:(客户号,订单号,发票号,应收金额,支付日期,支付金额,当前余额)产品描述:(产品号,产品名,单价,重量)折扣规则:(产品号,订货量,折扣)1.【问题1】上表中带下划线的为主码。请为还没有确定主码或是主码不合理的数据表选定最合适的主码。
问答题某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表所示。咖啡及配料的种类和价格表咖啡价格/杯配料价格/份蒸馏咖啡(Espresso)25摩卡(Mocha)10深度烘焙咖啡(DarkRoast)20奶泡(Whip)8现采用装饰器(Decorator)模式来实现计算费用的功能,得到如图所示的类图。用类图[Java代码]importjava.util.*;{{U}}{{U}}{{/U}}{{/U}}classBeverage{//饮料Stringdescription="UnknownBeverage";public{{U}}{{U}}{{/U}}{{/U}}(){returndescription;)public{{U}}{{U}}{{/U}}{{/U}};}abstractclassCondimentDecoratorextendsBeverage{//配料{{U}}{{U}}{{/U}}{{/U}};}classEspressoextendsBeverage;//蒸馏咖啡privatefinalintESPRESSO_PRICE=25;publicEspress0(){description="Espresso";}publicintcost()(returnESPRESSO_PRICE;}}classDarkRoastextendsBeverage{//深度烘焙咖啡privatefinalintDARKROASTPRICE=20;publicDarkRoast0{description="DarkRoast";}publicintcost(){returnDARKROASTPRICE;}}classMochaextendsCondimentDecorator{//摩卡privatefinalintMOCHAPRICE=10;publicMocha(Beveragebeverage){this.beverage=beverage;}publicStringgetDescription(){returnbeverage.getDescription0+",Mocha";}publicintcost()(returnMOCHA_PRICE+beverage.cost();}}classWhipextendscondimentDecorator{//奶泡privatefinalintWHIPPRICE=8;publicWhip(Beveragebeverage){this.beverage=beverage;}publicStringgetDescription(){returnbeverage.getDescription()+",Whip";}publicintcost()(returnWHIP_PRICE+beverage.cost();}}publicclassCoffee{publicstaticvoidmain(Stringargs[]){Beveragebeverage=newDarkRoast();beverage=newMocha{{U}}{{U}}{{/U}}{{/U}};beverage=newWhip{{U}}{{U}}{{/U}}{{/U}};System.out.println(beverage.getDescription0+"¥"+beverage.cost());}}编译运行上述程序,其输出结果为:DarkRoast,Mocha,Whip¥38
问答题[说明] 很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(singleton)模式。但在多线程情况下,singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是C++语言实现,能够正确编译通过。 [C++代码] class USTax ______: USTax( ) ; //构造函数 public: static USTax* getInstance(); private: static USTax* instance; ; ______ = NULL; USTax* USTax∷getInstance() if (instance == NULL) //进行某种同步 cout<<"实例暂时不存在"<<endl; if(______) cout<<"实例不存在,创建实例... "<<endl; instance = ______; cout <<"实例创建成功 "<<endl; else cout <<"实例已被创建了"<<endl; else cout<<"实例已经存在" <<endl; return ______;
问答题【说明】 某公司要开发一个销售管理系统,该系统的主要功能是:处理客户和销售员送来的订单;工厂是根据订货安排生产的,交出货物同时开出发票,收到客户付款后,根据发票存根进行应收款处理。每张订单由订单号,若干头信息和订单细节组成。一张订单可定购多种产品,工厂对大宗订货给予优惠。每种产品都规定了不同订货数量的折扣。 根据上述要求公司的销售部王经理写下了以下数据表结构: 客户:(客户号,客户名,地址,电话) 订单:(订单号,客户号,产品号,订货数,订货日期,交货日期,金额) 应收账款:(客户号,订单号,发票号,应收金额,支付日期,支付金额,当前余额) 产品描述:(产品号,产品名,单价,重量) 折扣规则:(产品号,订货量,折扣)
问答题问题:2.3 (3分)
【关系模式设计】中的“客房”关系模式是否存在规范性问题,请用100字以内文字解释你的观点(若存在问题,应说明如何修改“客房”关系模式)。
问答题现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计所得类图如图所示。采用该设计模式的原因在于:系统解析BMP、GIF与/PEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。[C++代码]classMatrix{//各种格式的文件最终都被转化为像素矩阵┇//此处代码省略};classImageImp{public;virtualvoiddoPaint(Matrixm)=0;//显示像素矩阵m};classWinImp:publicImageImp{public;voiddoPaint(Matrixm){/*调用Windows系统的绘制函数绘制像素矩阵*/)};classLinuxImp:publicImageImp{public;voiddoPaint(Matrixm){/*调用Linux系统的绘制函数绘制像素矩阵*/)};classImage{public:voidsetImp(ImageImp*imp){{{U}}{{U}}{{/U}}{{/U}}=imp;}virtualvoidparseFile(stringfileName)=0;protected:{{U}}{{U}}{{/U}}{{/U}}*imp;};classBMP:publicImage{public:voidparseFile(stringfileName){//此处解析BMP文件并获得一个像素矩阵对象m{{U}}{{U}}{{/U}}{{/U}};//显示像素矩阵m}};classGIF:publicImage{//此处代码省略};classJPEG:publicImage{//此处代码省略};voidmain(){//在windows操作系统上查看demo.bmp图像文件Image*imagel={{U}}{{U}}{{/U}}{{/U}};ImageImp*imageImpl={{U}}{{U}}{{/U}}{{/U}};{{U}}{{U}}{{/U}}{{/U}};image1->parseFile("demo.bmp");}现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix,若采用桥接设计模式则至少需要设计{{U}}{{U}}{{/U}}{{/U}}个类。
问答题[说明] 目前大多数操作系统都采用虚拟存储技术,这样可在较小的可用内存中执行较大的用户程序,可在内存中容纳更多程序并发执行。 引入虚拟存储技术,其基本思想是利用大容量的外存来扩充内存,产生一个比有限的实际空间大得多、逻辑的虚拟内存空间,以便能够有效地支持多道程序系统的实现和大型程序运行的需要,从而增强系统的处理能力。 虚拟存储技术主要分为虚拟页式存储管理和虚拟段式存储管理。 虚拟页式存储管理中,在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。在简单页式存储管理的基础上,增加请求调页和页面置换功能。 使用虚拟页式存储管理时需要在页表中增加以下内容:页号、驻留号、内存块号、外存地址、访问位、修改位。其中,驻留位,又称中断位,表示该页是在内存还是在外存;访问位表示该页在内存期间是否被访问过;修改位表示该页在内存中是否被修改过。访问位和修改位可以用来决定置换哪个页面,具体由页面置换算法决定。
问答题阅读以下某门禁控制系统的技术说明,根据要求回答问题1~问题3。
[说明]
门禁系统是楼宇安防系统的重要组成部分,也是大厦智能化管理的体现。其工作过程是,如果在入口处的读卡器上刷卡,锁控器(LockController)接收读卡器(FingerReader)的读卡信息并进一步识别,如果为有效卡,则触发控制电控锁(Lock)的继电器,让持卡人通过。锁控器还会将这些读卡及进出事件存储起来,并将相关事件记录传送给上位机。每个锁控器管理1~4个门,每5~8个锁控器接入1条RS-485总线,并转换成RS-232方式与管理主机的串行口。对锁控器进行相关设置后,允许它脱机独立对门禁点进行控制,管理主机或通信线路故障都不会影响它的正常运行。在普通场合通常会设置1个出门按钮,允许已进入的人员按动此按钮以打开电控锁;而对于一些重要场合通常会在门的内外安装两个读卡器,进出门时都需按预设方式进行刷卡。
门禁系统中的每个电控锁都有一个唯一的编号。锁的状态有两种:“已锁住”和“未锁住”。在管理主机上可以设置每把锁的安全级别及用户的开锁权限。只有当用户的开锁权限大于或等于锁的安全级别并且锁处于“已锁住”状态时,才能将锁打开。用户的感应卡信息、开锁权限及锁的安全级别都保存在管理主机的数据库中。表2-19给出了门禁系统主要组成部件的作用。
{{B}}表2-19 感应门禁系统主要组成部件及其作用表{{/B}}
{{B}}部件名称{{/B}}
{{B}}主要作用(功能){{/B}}
读卡感应器(FingerReader)
通过射频感应原理,识别感应卡内置加密卡号
锁控器(LockController)
存储感应卡权限和刷卡记录,向管理软件上传读卡器送来的信号,并负责和上位机通讯和其他数据存储器协调
电控锁(Lock)
电动执行机构
主机管理软件(Win-Pak Software)
通过计算机对所有单元进行中央管理和监控,进行相应的时钟、授权、统计管理工作
RS-485/232信号转换器
对所有数据存储器进行联网和远距离通信
门禁电源
提供系统工作时所需的电源能量
感应卡
存储用户的不可复制和解密的ID号
开门按钮
出门时可以设置为按此按钮出门(可选部件)
软件开发公司A承担了该门禁控制系统的开发任务,其开发小组采用根据问题领域的模型建立系统结构的面向对象方法完成该系统的设计,系统中的类及类之间的关系用UML类图表示。
问答题[问题1] 画出该问题的风险决策树,你会选择玩哪个游戏?
问答题【说明】请设计一个图书馆数据库,此数据库中对每个借阅者保存的读者记录包括:读者号、姓名、地址、性别、年龄、单位。对每本书存有:书号、书名、作者、出版社。对每本书被借出的书存有读者号、借出日期和应还日期。【问题1】给出E-R图【问题2】转换成关系模型【问题3】给其中任何一个表用SQL语句建表。
问答题[说明]建立一个分数类,使之具有下述功能:建立构造函数,它能防止分母为0,当分数不是最简形式时进行约分以及避免分母为负数。如经过类Num(3,-6)的处理,转换为;经过类Num(8,10)的处理后,转换为。[C++代码]#include<iostream.h>#include<math.h>classNum{public:Num(inta,intb);private:intnum1;intnum2;}:Num::Num(inta,intb){if({{U}}(1){{/U}}){cout<<"ERROR"<<endl;return;}intmin=fabs(a)<fabs(b)?fabs(a):fabs(b);intx=1;for(inti=1;i<=min;i++)if({{U}}(2){{/U}})x=i;a/=X;b/=x;if({{U}}(3){{/U}}){a=-a;b=-b;}{{U}}(4){{/U}}{{U}}(5){{/U}}}
问答题[说明]以下[C程序]完成从指定数据文件中读入职工的工号和他完成产品个数的数据信息,对同一职工多次完成的产品个数进行累计,最后按表5-22所示的格式输出职工完成产品数量的名次(ORDER)。该名次是按每位职工完成的产品数量(QUANTITY)排序,之后同一名次的职工人数(COUNT)和他们的职工号(NUMBER,同一名次的职工号以从小到大的顺序输出)。{{B}}表5-22职工完成产品数量名次输出格式表{{/B}}{{B}}ORDER{{/B}}{{B}}QUANTITY{{/B}}{{B}}COUNT{{/B}}{{B}}NUMBER{{/B}}139831020214256235619219716721114…………以下[C程序]采用链表结构存储有关信息,链表中的每个表元对应一位职工。在数据输入同时,形成一个有序链表(按完成的产品数量和工号排序)。当一个职工有新的数据输入,在累计他的完成数量时会改变原来链表的有序性,为此应对链表进行删除、查找和插入等处理。[C程序]
问答题实体间的联系有“一对一”、“一对多”和“多对多”,指出图2-2中各联系分别属于哪一种。
问答题[说明]某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预定、入住登记、帐务结算、退房,以及将服务项目记入客人帐单。旅客包括散客和团体,散客预定或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预定和维修。·客人入住后,客房处于占用状态;·客人退房后,客房处于空闲状态;·客人预定后,客房处于已预定状态;·预定客人入住后,客房处于占用状态;·预定客人取消预定后客房处于空闲状态;·需要维修时客房处于维修状态;·维修完成后客房处于空闲状态。该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图1是该系统的类图的一部分,图2描述了客房状态的转变情况。图1图2
问答题【说明】设某城市有n个车站,并有m条公交线路连接这些车站,设这些公交车都是单向的,这n个车站被顺序编号为0至n-1。本程序,输入该城市的公交线路数、车站个数,以及各公交线路上的各站编号,求得从站0出发乘公交车至站n-1的最少换车次数。
程序利用输入信息构建一张有向图G(用邻接矩阵g表示),有向图的顶点是车站,若有某条公交线路经i站到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<i,j>。如果这样,从站点x至站点y的最少上车次数便对应图G中从点x到点y的最短路径长度。而程序要求的换车次数就是上车次数减1。
#include <stdio.h>
#define M 20
#define N 50
int a[N+1]; /*用于存放一条线路上的各站编号*/
int g[N][N]; /*严存储对应的邻接矩阵*/
int dist[N]; /*严存储站0到各站的最短路径*/
int m, n;
void buildG()
{ int i, j, k, sc, dd
printf(“输入公交线路数,公交站数/n”);
scanf("%d%d",&m,&n);
for (i=0;i<n;i++) /*邻接矩阵清0*/
for(j=0;j<n;j++)
g[i][j]=0;
for(i=0;i<m;i++)
{ printf("沿第%d条公交线路的各站编号(0<=编号<=%d,-1结束):/n)",i+1,n-1);
sc=0; /* 当前线路站计数器*/
while(1)
{ scanf("%d",&dd);
if(dd=-1)break;
if(dd>=0 && dd<n) {{U}}(1) {{/U}};
}
a[sc]=-1;
for(k=1;a[k]>=0;k++) /*处理第i+1条公交线路*/
for(j=0;j<k;j++)
g{{U}} (2) {{/U}}=1;
}
}
int minLen()
{ int j,k;
for(j=0;j<n;j++)
dist[j]=g[0][j];
dist[0]=1;
do{
for(k=-1,j=0;j<n;j++) /*找下一个最少上车次数的站*/
if(dist[j]>0 &&(k==-1||dist[j]<dist[k]))
k=j;
if(k<0||k==n-1)
break;
dist[k]=-dist[k]; /*设置k站已求得上车次数的标记*/
for (j=1;j<n;j++) /*调整经过k站能到达的其余各站的上车次数*/
if({{U}} (3) {{/U}}&& (dist[j]=0||-dist[k]+1<dist[j]))
dist[j]= {{U}}(4) {{/U}};
}while(1);
j=dist[n-1];
return {{U}}(5) {{/U}};
}
void main()
{ int t;
buildG();
if((t=minLen())<0)
printf("无解!/n");
else
printf(“从0号站到%d站需换车%d次/n”,n-1,t);
}
问答题阅读下列说明,回答问题。[说明]某物流公司为了整合上游供应商与下游客户,缩短物流过程,降低产品库存,需要构建一个信息系统以方便管理其业务运作活动。[需求分析结果](1)物流公司包含若干部门,部门信息包括部门号、部门名称、经理、电话和邮箱。一个部门可以有多名员工处理部门的日常事务,每名员工只能在一个部门工作。每个部门有一名经理,只需负责管理本部门的事务和人员。(2)员工信息包括员工号、姓名、职位、电话号码和工资;其中,职位包括:经理、业务员等。业务员根据托运申请负责安排承运货物事宜,例如:装货时间、到达时间等。一个业务员可以安排多个托运申请,但一个托运申请只由一个业务员处理。(3)客户信息包括客户号、单位名称、通信地址、所属省份、联系人、联系电话、银行账号,其中,客户号唯一标识客户信息的每一个元组。每当客户要进行货物托运时,先要提出货物托运申请。托运申请信息包括申请号、客户号、货物名称、数量、运费、出发地、目的地。其中,一个申请号对应唯一的一个托运申请;一个客户可以有多个货物托运申请,但一个托运申请对应唯一的一个客户号。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如图所示。[关系模式设计]部门(部门号,部门名称,经理,电话,邮箱)员工(员工号,姓名,职位,电话号码,工资,{{U}}(a){{/U}})客户({{U}}(b){{/U}},单位名称,通信地址,所属省份,联系人,联系电话,银行账号)托运申请({{U}}(c){{/U}},货物名称,数量,运费,出发地,目的地)安排承运({{U}}(d){{/U}},装货时间,到达时间,业务员)
问答题【说明】一条直线是由两个点组成的,代码如下。 public class Point private int x, y; //coordinate public Point (int x, int y) (1) =x; (2) ; public int GetX() return x; public int GetY() return y; class Line //line segment private (3) ; //extremc points Line (Point a, Point b) //constructor p1 = (4) ; p2= (5) ; public double Length() return Math.sqrt (Math.pow (p2.GetX()-pl.GetX(),2) +Math.pow (p2.GetY()-p1.GetY(),2)) ;
问答题[说明]图3-1描述某超市销售数据的部分处理流程。超市中有若干台收款机和若干名收款员。这里,我们把一个收款员开始使用一台收款机到离开这台收款机称为该收款员的一次作业。作业开始时,收款员先在收款机上输入收款员号和作业前金额。作业前金额是为了销售时的找零而在作业前预先放入钱柜的金额数。作业结束时,收款员要打开钱柜,取走全部现金,并把这些现金的金额数(称为作业后金额)输入收款机。当作业前金额+本次作业售货总金额-本次作业退货总金额≠作业后金额时,表示这次作业存在金额差错。本流程图已作简化,并作以下假定;该超市只有现金交易(不用信用卡和礼券);一个收款员因某种原因(如吃饭)在一天中可以有多个作业;销售方式只有售货和退货两种。整个超市分成若干部门(如食品部、服装部),系统按部门统计一个月中各类货物的销售数量和金额,最后根据月销售计划文件分析各部门完成销售计划的情况。系统还统计每个收款员的差错情况和退货情况。图中处理4和处理8每月的最后一天执行一次(营业结束后),其他处理每天执行一次。图中部分数据、文件的记录格式如下:日销售数据:收款机号+收款员号+作业前金额+(售货标记|退货标记)+货号+数量+单价+金额+作业后金额日销售文件记录:(作业开始标记+收款机号+收款员号+作业前金额)|((售货标记|退货标记)+货号+数量+金额)|(作业结束标记+收款机号+收款员号+作业后金额)部门目销售文件记录:部门号+(售货标记|退货标记)+货号+数量+金额部门月销售计划文件记录:部门号+月计划金额收款员差错月报:月份+收款员号+差错作业数+差错总金额收款员退货月报:月份+收款员号+退货次数+退货总金额其中w表示w重复出现多次;a|b表示a或b;a+b表示a与b。[图3-1]1.分别写出收款员日销售文件、商品文件、部门日销售汇总文件至少应包含哪些数据项。