问答题阅读下列说明和数据流图,回答问题1至问题3,将解答填入对应栏内。[说明]某供销系统接受顾客的订货单,当库存中某配件的数量小于订购量或库存量低于一定数量时,向供应商发出采货单;当某配件的库存量大于或等于订购量时,或者收到供应商的送货单时并更新了库存后,向顾客发出提货单。该系统还可随时向总经理提供销售和库存情况表。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1-1是顶层数据流图,图1-2是第0层数据流图,图1-3是第1层数据流图,其中(A)是加工1的子图,(B)是加工2的子图。[图1-1][图1-2][图1-3][数据字典](1)数据流条目订货单=配件号+配件名+规格+数量+顾客名+地址提货单=订货单+金额采货单=配件号+配件名+规格+数量+供应商名+地址送货单=配件号+配件名+规格+数量+金额(2)文件说明文件名:配件库存组成:配件号+配件名+规格+数量+允许的最低库存量
问答题[问题2]
该图书管理系统的主要关系模式如下,请补充“借还记录”和“预约登记”关系中的空缺。
管理员(工号,姓名)
读者(读者ID,姓名,电话,E-mail)
书目(ISBN号,书名,作者,出版商,出版年月,册数,经办人)
图书(图书ID,ISBN号,存放位置,状态,经办人)
借还记录( {{U}} (a) {{/U}},借出时间,应还时间,归还时间)
预约登记( {{U}}(b) {{/U}},预约时间,预约期限,图书ID)
注:时间格式为“年.月.日 时:分:秒”。
问答题【程序说明】
该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。
【程序】
#include<stdio.h>
void strmerge(char,a,char *b,char *c) //将字符串a,b合并到字符串c中
{
char t,*w;
w=c;
while({{U}} (1) {{/U}})
{//找到字符串a,b当前字符中较小的字符
if(*a< *b)
{
t= *a;
{{U}} (2) {{/U}};
{
else if (*a>*b)
{
t= *b;
{{U}} (3) {{/U}};
}
else //字符串a,b当前字符相等
{
t= *a;
a++;
b++;
}
if({{U}} (4) {{/U}}) //开始,可直接赋值
*w=t;
else if(t!=*w)
//如果a,b中较小的当前字符与c中当前字符不相等,才赋值{{U}} (5) {{/U}};
}
if(*a!=/'/0') //如果字符串a还没有结束,则将a的剩余部分赋给C
while(*a!='/0')
if(*a!=*w)
{
*(++w)=*a;
a++;
}
else
{{U}} (6) {{/U}};
if(*6!='/0') //如果字符串b还没有结束,则将b的剩余部分赋给c
while(*b!='/0')
if(*b! = *w)
{
*(++w)=*b;
b++;
}
else
b++;
{{U}} (7) {{/U}};
}
void strsort(char*s) //将字符串S中的字符排序
{
int i,j,n;
char t,*w;
W=S;
for(n=0;*w!='/0';n++) //得到字符串长度n
w++;
for(i=0;i<n-1;i++) //对字符串s进行排序,按字母先后顺序
for(j=i+1;j<n;j++)
if({{U}} (8) {{/U}})
{
t=s[i];
s[i]=s[j];
{{U}} (9) {{/U}};
}
}
void main()
{
char s1[100],s2[100],s3[100];
printf("/nPlease,input the first string:");
scanf("%s",s1);
printf("/nPlease input the second string:");
scanf("%s",s2);
strsort(s1); //将字符串s1排序
strsort(s2); //将字符串s2排序
printf("%s/n",s1);
printf("%s/n",s2);
s3[0]='/0'; //字符串s3的第一个字符先置'/0'结束标志
{{U}}(10) {{/U}} //将s1和s2合并,按照字母顺序排列,
//且要删去相同字符,存入s3中
printf("%s",s3);
}
问答题[说明]某汽车停车场欲建立一个信息系统,已经调查到的需求如下。(1)在停车场的入口和出口分别安装一个自动栏杆、一台停车卡打印机、一台读卡器和一个车辆通过传感器,示意图如下图所示。(2)当汽车到达入口时,驾驶员按下停车卡打印机的按钮获取停车卡。当驾驶员拿走停车卡后,系统命令栏杆自动抬起;汽车通过入口后,入口处的传感器通知系统发出命令,栏杆自动放下。(3)在停车场内分布着若干个付款机器。驾驶员将在入口处获取的停车卡插入付款机器,并缴纳停车费。付清停车费之后将获得一张出场卡,用于离开停车场。(4)当汽车到达出口时,驾驶员将出场卡插入出口处的读卡器。如果这张卡是有效的,系统命令栏杆自动抬起;汽车通过出口后,出口传感器通知系统发出命令,栏杆自动放下。若这张卡是无效的,系统不发出栏杆抬起命令而发出警告信号。(5)系统自动记录停车场内空闲的停车位的数量。若停车场当前没有车位,系统将在入口处显示“车位已满”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。根据上述描述,采用面向对象方法对其进行分析与设计,得到了下表所示的类/用例/状态列表、图1所示的用例图、图2所示的初始类图以及图3所示的描述入口自动栏杆行为的UML状态图。类/用例/状态列表用例名说明类名说明状态名说明Carentry汽车进入停车场CentralComputer停车场信息系统Idle空闲状态,汽车可以进入停车场Carexit汽车离丌停车场PaymentMachine付款机器Disable没有车位Reportsatistics记录停车场的相关信息CarPark停车场,保存车位信息AwaitEntry等待汽车进入Barrier自动护栏AwaitTicketTake等待打印停车卡Carentrywhenfull没有车位时,汽车请求进入停车场EntryBarrier入口的护栏AwaitEnable等待停车场内有空闲车位ExitBarrier出口的护栏
问答题【说明】设有关于银行借贷管理系统的E-R图。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。为了答题的方便,图中的实体和属性同时给出了中英文说明,回答问题时只需写出英文名即可。
问答题【问题 3】 (3 分)
为了使商场有紧急事务时能联系到轮休的员工,要求每位员工必须且只能登记一位紧急联系人的姓名和联系电话,不同的员工可以登记相同的紧急联系人。则在图2-1中还需添加的实体是(1),该实体和图2-1中的员工存在(2)联系(填写联系类型)。给出该实体的关系模式。
问答题【说明】流程图描述了某高校图书订购与编目系统的处理流程。全校的图书典藏在校图书馆和各系的资料室中。学校每年分若干批向出版单位订购图书,同一批订购的图书将陆续邮寄到学校。出版单位在寄出图书的同时附上到书清单和发票,发票上仅给出一份到书清单中书的总册数和总金额。学校收到图书和发票后,先参照订购单验收,然后进行编目,并把有关信息存放在书种文件、书名文件、作者文件和复本文件中,以供读者检索。书种文件记录了每种书的有关信息。所谓一种书是指同一作者、同一书名、同一出版单位和同一出版年份出版的书。例如,2004年张明在科技出版社出版了《软件工程》(印数8000册)和《数据库基础》(印数5000册),则张明在2004年出版了两种书。在全校的藏书中,如果一种书只有一册,则该书的信息存放在书种文件中:如果一种书有多册,则其中一册书的信息存放在书种文件中,其余的书作为复本将信息存放在复本文件中。复本文件的结构与书种文件的结构相同,每种书都有一个书号,书号唯一地标识了一种书。在书库中,每册书有一个登录号,登录号唯一地标识了一册书。此外,为了图书检索的方便,将图书按学科分类,分类号用来标识不同的学科领域。各类单据和文件的结构如下所示。订购单:订购批号、书名、作者名、出版单位、出版年份、单价、订购册数、订购部门代码、订购日期。到书清单:订购批号、书名、作者名、出版单位、出版年份、单价、册数。发票:订购批号、发票号、总册数、总金额。书种文件:分类号、登录号、书名代码、作者代码、出版单位、出版年份、单价、复本标志、典藏部门代码、借出标志。其中,复本标志用来指示该种书在书库中有没有复本:对于书名相同的若干种书,书名代码是相同的。书名文件:书名代码、书名。作者文件:作者代码、作者名。【问题1】指出验收文件至少应由哪些数据项组成。【问题2】由于处理5和处理6的分类,可能导致分类后的文件中一张发票无法找到与它对应的那些书,从而当一组发票的金额之和与一组到书清单中的书价之和不等时,无法知道是哪一张发票和哪一份清单不一致。如果仍使用原流程图,那么当到书清单文件的结构做何改动后,能找出不一致的发票和相应的书目。【问题3】若在书种文件中增加数据项“书号”,则如何重新设计复本文件的结构,使数据冗余最小。
问答题【问题1】 假设当前该旅馆各个房间的情况见表3。
序号i
ROOM
RANK
NBED
STATUS
1
101
3
4
0
2
102
3
4
1
3
201
2
3
0
4
202
2
4
1
5
301
1
6
0 当输入M=4,R=0时,该算法的输出是什么?
问答题试题六(共15分)阅读下列说明和Java代码,将应填入____(n)____处的字句写在答题纸的对应栏内。[说明]现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQLServer和Access两种数据库以及系统中的数据库表Department为例,其类图如图6-1所示。
问答题[问题1]
请使用说明中的术语,给出上图中类Customer和类Person的属性。
问答题【说明】某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如表10-7所示:{{B}}表10-7{{/B}}为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图10-12所示:其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;接口FlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下代码中的空缺。【Java代码】{{U}}(1){{/U}}FlyBehavior{publicvoidfly();};{{U}}(2){{/U}}QuackBehavior{publicvoidquack();};classFlyWithWingsimplementsFlyBehavior{publicvoidfly(){System.out.println(“使用翅膀飞行!”);}};classFlyNoWayimplementsFlyBehavior{publicvoidfly(){System.out.println(“不能飞行!”);}};classQuackimplementsQuackBehavior{publicvoidquack(){System.out.println(“发出/‘嘎嘎/’声!”);}};classSqueakimplementsQuackBehavior{publicvoidquack(){System.out.println(“发出空气与橡皮摩擦声!”);}};classQuackNoWayimplementsQuackBehavior{publicvoidquack(){System.out.println(“不能发声!”);}};abstractclassDuck{protectedFlyBehavior{{U}}(3){{/U}};protectedQuackBehavior{{U}}(4){{/U}};publicvoidfly(){{{U}}(5){{/U}};}publicvoidquack(){{{U}}(6){{/U}};};public{{U}}(7){{/U}}voiddisplay();};classRubberDuckextendsDuck{publicRubberDuck(){flyBehavior=new{{U}}(8){{/U}};quackBehavior=new{{U}}(9){{/U}};}publicvoiddisplay(){/*此处省略显示橡皮鸭的代码*/}};//其他代码省略
问答题阅读下列说明和图,回答问题。[说明]某网上购物平台的主要功能如下:(1)创建订单。顾客(Customer)在线创建订单(Order),主要操作是向订单中添加项目、从订单中删除项目。订单中应列出所订购的商品(Product)及其数量(quantities)。(2)提交订单。订单通过网络来提交。在提交订单时,顾客需要提供其姓名(Name)、收货地址(Address)以及付款方式(FormofPayment)(预付卡、信用卡或者现金)。为了制定送货计划以及安排送货车辆,系统必须确定订单量(Volume)。除此之外,还必须记录每种商品的名称(Name)、造价(CostPrice)、售价(SalePrice)以及单件商品的包装体积(CubicVolume)。(3)处理订单。订单处理人员接收来自系统的订单;根据订单内容,安排配货,制定送货计划。在送货计划中不仅要指明发货日期(DelivelyDate),还要记录每个订单的限时发送要求(DeliveryTimeWindow)。(4)派单。订单处理人员将已配好货的订单转交给派送人员。(5)送货/收货。派送人员将货物送到顾客指定的收货地址。当顾客收货时,需要在运货单(DeliverySlip)上签收。签收后的运货单最终需交还给订单处理人员。(6)收货确认。当订单处理人员收到签收过的运货单后,会和顾客进行一次再确认。现采用面向对象方法开发上述系统,得到如图1所示的用例图和如图2所示的类图。图1用例图2图2类图2
问答题【说明】StringEditor类的功能是:已知一个字符串,返回将字符串中的非字母字符都删除后的字符串。
public{{U}} (1) {{/U}}{
public static String removeNonLetters({{U}} (2) {{/U}}){
StringBuffer aBuffer={{U}} (3) {{/U}};
char aCharacter;
for(int i=0; i<original.length();i++){
aCharacter={{U}} (4) {{/U}};
if(Character.isLetter(aCharacter))
aBuffer.append({{U}} (5) {{/U}});
}
return new String(aBuffer);
}
}
public class StringEditorTester{
public static void main(String args[]){
String original="Hi!, My Name is Mark, 234I think you are my classmate?!!";
System.out.println(StringEditor.removeNonLetters(original));
}
}
问答题[说明] 一个描述学校的部分关系模式的结果描述如下: 1.一个系有若干学生,但一个学生只能在一个系; 2.一个系只有一名主任; 3.一个学生可以选修多门课程,每门课程有若干学生选修; 4.每个学生所学的每门课程都有一个成绩; 5.“学生”和“课程表”及“选课表”的关系示例分别如表1、表2、表3所示。 Student(学生表)的字段按顺序为学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所属院系(Sdept)、系主任(Smaster); Course(课程表)的字段按顺序为课程编号(Cno)、课程名(Cname)、先行课程(Cpno)、课程学分 (Ccredit); SC(选课表)的字段按顺序为学号(Sno)、课程号(Cno)、成绩(Grade)。 各表的记录如下: 表1 Student Sno Sname Ssex Sage Sdept Smaster 95001 李勇 男 20 CS 王平 95002 刘晨 女 19 IS 周言 95003 王明 女 18 MA 展评 95004 张立 男 19 IS 周言 表2 Course Cno Cname Cpno Ceredit 1 数据库 5 4 2 数学 2 3 信息系统 1 4 4 操作系统 6 3 5 数据结构 7 4 6 数据处理 2 7 PASCAL 6 4 表3 SC Sno Cno Grade 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95003 3 80
问答题[问题1](6 分)
(1) 数据流图1-1 缺少了一条数据流(在图1-2 中也未给出该数据流),请给出此数据流的起点和终点,并采用说明中的词汇给出此数据流名。
(2) 数据流图1-2 中缺少了与“查询房屋”加工相关的数据流,请指出此数据流的起点和终点。
问答题【函数1说明】 函数compare(SqList A, SqList B)的功能是:设A=(al,…,am)和B=(b1,…,bn)均为顺序表,“比较”,两个顺序表A和B的大小。设A’ 和B’ 分别为A和B中除去最大共同前缀后的子表(例如,A=(y,x,x,z,x,z),B=(y,x,x,2,y,x,x,z),则两者中最大的共同前缀为 (y,x,x,z),在两表中除去最大共同前缀后的子表分别为A'=(x,z)和B'=(y,x,x,z))。若 A'=B'=空表,则A=B;若A'=空表,而B'≠空表,或者两者均不为空表,且A'的首元小于 B'首元,则A<B:否则A>B。 提示:算法的基本思想为:若相等,则j+1,之后继续比较后继元素;否则即可得出比较结果。显然,j的初值应为0,循环的条件是j不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有3种可能出现的情况需要区分。 【函数1】int compare ( SqListA, SqList B){//若A<B,则返回-1;若A=B,则返回0:若A>B,则返回1j =0;while(i<{{U}} (1) {{/U}}else{{U}} (2) {{/U}};if(A. length == B. length) return(0);else if(A. length<B. length)return(-1);else return(1)}//compare //函数1的时间复杂度是{{U}} (3) {{/U}}。 【函数2说明】 函数exchanse_L(SLnk&L,int m)的功能是:用尽可能少的辅助空间将单链表中前m个结点和后n个结点的互换。即将单链表(a1、a2…,am,b1,b2,…,bn)改变成(b1,b2,…,bn,a1, a2,…,am,)。【函数2】void exchange_L(SLink k=1; while( k < m++k; } if({{U}} (6) {{/U}} //以指针ha记a1结点的位置 L -> next = p -> next; //将B1结点链接在头结点之后 p -> next = NULL; //设am的后继为空 q={{U}} (7) {{/U}}; //令q指向b1结点 while(q->next)q ={{U}} (8) {{/U}}; //查找bn结点 q->>next={{U}} (9) {{/U}}; //将a1结点链接到bn结点之后 }}}//函数2的时间复杂度是{{U}} (10) {{/U}}。
问答题【问题3】如果限制该算法最多输出K个可供选择的房间号,则在流程图1的。所指的判断框应改成什么处理?[流程图1](如图2所示)
问答题[说明]在一个分布网络中,资源(石油、天然气、电力等)可从生产地送往其他地方。在传输过程中,资源会有损耗。例如,天然气的气压会减少,电压会降低。我们将需要输送的资源信息称为信号。在信号从信源地送往消耗地的过程中,仅能容忍一定范围的信号衰减,称为容忍值。分布网络可表示为一个树型结构,如图1所示。信号源是树根,树中的每个节点(除了根)表示一个可以放置放大器的子节点,其中某些节点同时也是信号消耗点,信号从一个节点流向其子节点。每个节点有一个d值,表示从其父节点到该节点的信号衰减量。例如,在图1中,节点w、p、q的d值分别为2、1、3,树根节点表示信号源,其d值为0。每个节点有一个M值,表示从该节点出发到其所有叶子节点的信号衰减量的最大值。显然,叶子节点的M值为0。对于非叶子节点j,M(j)=max{M(k)+d(k)|k是j的子节点}。在此公式中,要计算节点的M值,必须先算出其所有子节点的M值。在计算M值的过程中,对于某个节点i,若其有一个子节点k满足d(k)+Mfk)大于容忍值,则应在k处放置放大器,否则,从节点i到某叶子节点的信号衰减量会超过容忍值,使得到达该叶子节点时信号不可用,而在节点i处放置放大器并不能解决到达叶子节点的信号衰减问题。例如,在图1中,从节点P到其所有叶子节点的最大衰减值为4。若容忍值为3,则必须在s处放置信号放大器,这样可使得节点p的M值为2。同样,需要在节点q、v处放置信号放大器,如图2阴影节点所示。若在某节点放置了信号放大器,则从该节点输出的信号与信号源输出的信号等价。函数placeBoosters(TreeNode*root)的功能是:对于给定树型分布网络中的各个节点,计算其信号衰减量的最大值,并确定应在树中的哪些节点放置信号放大器。全局变量Tolerance保存信号衰减容忍值。树的节点类型定义如下:typedefstructTreeNode{intid;/*当前节点的以别号*/intChildNum;/*当前节点的子节点数目*/intd;/*父节点到当前节点的信号衰减值*/structTreeNode**childptr;/*向量,存放当前节点到其所有子节点的指针*/intM;/*当前节点到其所有子节点的信号衰减值中的最大值*/boolboost;/*是否存当前节点放置信号放大器的标志*/}TreeNode;[C程序]voidplaceBooster(TreeNode*root){/*计算root所指节点处的衰减量,如果衰减量超出了容忍值,则放置放大器*/TreeNode*P;inti,degradation;if(______){degradation=0;root→M=0;i=0;if(i>=root→ChildNum)return;p=______;for(;i<root→ChildNumi++,p=______){p→M=0;______;if(p→d+p→M>Tolerance)/*在p所指节点中放置信号放大器*/{p→boost=true;P→M=0;}if(p→d+p→M>degradation)degradation=p→d+p→M;}Root→M=______;}}
问答题某城市拟开发一个基于Web的城市黄页,公开发布该城市重要的组织或机构(一下统称为客户)的基本信息,方便城市生活。该系统的主要功能描述如下:(1)搜索信息:任何使用Internet的网络用户都可以搜索发布在城市黄页中的信息,例如客户的名称、地址、联系电话等。(2)认证:客户若想在城市黄页上发布信息,需通过系统的认证。认证成功后,该客户成为系统授权用户。(3)更新信息:授权用户登录系统后,可以更改自己在城市黄页中的相关信息,例如变更联系电话等。(4)删除客户:对于拒绝继续在城市黄页上发布信息的客户,有系统管理员删除该客户的相关信息。系统采用面向对象方法进行开发,在开发过程中认定出如下表所示的类。系统的用例图和类图分别如图1和图2所示。类列表类名说明InternetClient网络用户CustomerList客户集.维护城市黄页上的所有客户信息Customer客户信息,记录单个客户的信息RegisteredClient授权用户Administrator系统管理员
问答题问题:6.1 (15分)
阅读上述说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
