问答题阅读下列程序和控制流图,将应填入(n)的字句写在答题纸的对应栏内。【程序】下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度+intGetMax(intn,intdatalist[])intk=0;for(intj=1;j<n;j++)if(datalist[j]>datalist[k])k=j;retumk;【控制流图】1.【问题1】该程序的控制流图中A~E分别是什么?
问答题[说明]门禁系统是楼宇安防系统的重要组成部分,也是大厦智能化管理的体现。其工作过程是,如果在入口处的读卡器上刷卡,锁控器(LockController)接收读卡器(FingerReader)的读卡信息并进一步识别,如果为有效卡,则触发控制电控锁(Lock)的继电器,让持卡人通过。锁控器还会将这些读卡及进出事件存储起来,并将相关事件记录传送给上位机。每个锁控器管理1~4个门,每5~8个锁控器接入1条RS-485总线,并转换成RS-232方式与管理主机的串行口。对锁控器进行相关设置后,允许它脱机独立对门禁点进行控制,管理主机或通信线路故障都不会影响它的正常运行。在普通场合通常会设置1个出门按钮,允许已进入的人员按动此按钮以打开电控锁;而对于一些重要场合通常会在门的内外安装两个读卡器,进出门时都需按预设方式进行刷卡。门禁系统中的每个电控锁都有一个唯一的编号。锁的状态有两种:“已锁住”和“未锁住”。在管理主机上可以设置每把锁的安全级别及用户的开锁权限。只有当用户的开锁权限大于或等于锁的安全级别并且锁处于“已锁住”状态时,才能将锁打开。用户的感应卡信息、开锁权限及锁的安全级别都保存在管理主机的数据库中。表2-19给出了门禁系统主要组成部件的作用。表2-19感应门禁系统主要组成部件及其作用表部件名称主要作用(功能)读卡感应器(FingerReader)通过射频感应原理,识别感应卡内置加密卡号锁控器(LockController)存储感应卡权限和刷卡记录,向管理软件上传读卡器送来的信号,并负责和上位机通讯和其他数据存储器协调电控锁(Lock)电动执行机构主机管理软件(Win-PakSoftware)通过计算机对所有单元进行中央管理和监控,进行相应的时钟、授权、统计管理工作RS-485/232信号转换器对所有数据存储器进行联网和远距离通信门禁电源提供系统工作时所需的电源能量感应卡存储用户的不可复制和解密的ID号开门按钮出门时可以设置为按此按钮出门(可选部件)软件开发公司A承担了该门禁控制系统的开发任务,其开发小组采用根据问题领域的模型建立系统结构的面向对象方法完成该系统的设计,系统中的类及类之间的关系用UML类图表示。1.[问题1]如图2-25所示是门禁控制系统的一个不完整类图,根据题干说明中给出的术语,请给出类Lock的主要属性。
问答题[说明] 下面代码实现class C对class A和B的protected成员和public成员的调用。仔细阅读[代码5-1]、[代码5-2],在 (n) 处写出正确的运行结果。 [代码5-1] #include <iostream.h> class A private: int a1; protected: int a2; public: A ( int v1,int v2,int v3 ): a1 ( v1 ) ,a2 ( v2 ) ,a3 ( v3 ) int a3 ; class B : pubiic A private: int b1; protected: int b2; public: B ( int v1,int v2,int v3,int v4,int v5,int v6 ) : A(v1,v2,v3),b1 (v4),b2(v5),b3 (v6) int b3; ; class C : public B private: int c1; protected: int c2; public: int c3; C (int v1,int v2,int v3,int v4,int v5,int v6,int v7,int v8,int v9 ) : B ( v1,v2,v3,v4,v5,v6 ) ,c1 ( v7 ),c2 ( v8 ) ,c3 v9 void disp ( ) cout << "a2 in class C =" << a2 << endl; cout << "a3 in class C =" << a3 << eudl; cout << "b2 in class C =" << b2 << endl; tout << "b3 in class C =" << b3 << endl; ; [代码5-2] voidmain() Cdemo(10,20,30,40,50,60,70,80,90); cout<<"对象demo.a3="<<demo.a3 cout<<"对象demo.b3="<<demo.b3 cout<<"对象demo.c3="<<demo.c3 demo.disp( ); [运行结果] 对象demo.a3= (1) 对象demo.b3= (2) 对象demo.c3= (3) a2 in class C= (4) a3 in class C= (5) b2 in class C= (6) b2 in class C= (7)
问答题[说明]在一些应用场合中,需要对用户的输入数据进行检查监控。以下VisualBasic程序实现了对新添加到List列表的内容进行监控,拒绝向List列表添加重复信息。例如,在List列表中存在元素“a01001;a01002”,如果用户输入数据为“aOl001”或“a01002”,系统则弹出提示信息,拒绝将新数据加入List列表;如果用户输入的数据不同与List列表中的任何一个元素,则作为新元素加入List中。VisualBasic界面显示如图11-5所示。根据程序功能说明,完成程序代码。[代码1]BeginVB.FormForm1Caption=“List列表拒绝添加重复信息”//...窗体描述(略)BeginVB.CommandButtonCommand2Caption=“退出”//...窗体描述(略)EndBeginVB.CommandButtonommand1Caption=“添加”//...窗体描述(略)EndBeginVB.TextBoxText1//...窗体描述(略)EndBeginVB.ListBoxList1Height=1860ItemData="Form1.frx":0000Left=1020List="Form1.frx":0002TabIndex=0Top=525Width=2580EndBeginVB.LabelLabellBackStyle=0'TransparentCaption="请输入编号"//...窗体描述(略)EndEnd[代码2]AttributeVB_Name="Form1"AttributeVB_GlobalNameSpace=FalseAttributeVB_Creatable=FalseAttributeVB_PredeclaredId=TrueAttributeVB_Exposed=FalsePrivateSubForm_Load()Listl.AddItem"a01001"Listl.AddItem"a01002"EndSubPrivateSubCommand1Click()DimMyvalAsLongFori=0To{{U}}(1){{/U}}{{U}}(2){{/U}}If{{U}}(3){{/U}}ThenMsgBox"系统不允许重复输入,请重新输入"ExitSubEndIf{{U}}(4){{/U}}{{U}}(5){{/U}}EndSub
问答题【说明】 存在某鲜花批发系统,系统中处理的信息单元有鲜花和客户,对鲜花使用编号进行唯一标识,鲜花的具体信息包括:名称、颜色、等级。客户包括鲜花种植商,鲜花经销商,客户不使用编号,只需要名称和地址。系统功能如下所述。 (1)当系统统计销存清单时发现某种鲜花当前库存数量少于指定最低库存量时,向鲜花种植商发出采购单,订单中要记录所需鲜花的信息、数量、供应商名称和地址。 (2)收到鲜花种植商的鲜花后,向系统录入归档送货单,要记录交易对应的采购单和实际金额。 (3)当某种鲜花库存数量大于或等于订购数量时,接受鲜花经销商的订货单,并更新销存清单,系统要求订单中标明鲜花的信息和经销商的信息。 (4)鲜花经销商订购的鲜花到达批发环节后,系统生成提货单,包括鲜花信息和经销商信息,然后将提货单发给经销商,等待提货。 (5)系统还要随时可以接受管理人员对于销售和库存的查询,并生成销售与库存情况表,提供给管理人员,包括鲜花信息、本周销售数量、库存数量。 现在假定顶层图是正确的,客户信息文件已经存在并可使用。
问答题【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类Node描述,而链表由类List描述。类List的成员函数有以下几个。
①createList():创建从小到大的有序链表。
②multiplyList(List L1,List L2):将链表L1和链表L2合并。
③print();打印链表。
# include <iostream.h>
class List;
class Node {
friend class List;
public:
Node(int data)
{{{U}} (1) {{/U}}; }
private:
int data;
Node *next;
};
class List {
public:
List( ) {list = NULL;}
void multiplyList(List L1, List L2);
void createList( );
void print( );
private:
Node *list;
};
void List::createList( )
{ Node *p, *u, *pm;
int data;
list = NULL;
while (1)
{ cout<<"输入链表的一项: (小于零,结束链表)"<<end1;
cin >> data;
if(data<0)break; //小于零,结束输入
p = list;
while (p != NULL
p = p->next;
}
u={{U}} (2) {{/U}}:
if(p==list)
list = u;
else
pre->next = u;
{{U}}(3) {{/U}}:
}
void List::multiplyList (List L1, List L2)
{ Node *pL1, *pL2, *pL, *u;
list = NULL;
pL1 = L1.list;
pL2 = L2.1ist;
while (pL1 != NULL
pL1 = pL1 ->next;
}
else
{ u = new Node (pL2->data));
pL2 = pL2->next;
}
if (list==NULL)
list={{U}} (4) {{/U}};
else
{ pL->next = u;
pL =u;
}
}
pL1 = (pL1 != NULL) ? pL1:pL2;
while (pL1 != NULL)
{ u ={{U}} (5) {{/U}};
pL1 = pL1->next;
if (list==NULL)
list=pL=u;
else
{ pL->next = u;
pL = u;
}
}
}
void List::print( )
{ Node *p;
p = list;
while (p != NULL)
{ cout << p->data << "/t";
p = p->next;
}
cout << end1;
}
void main ( )
{ List L1, L2, L;
cout << "创建第一个链表/n"; L1.createList ( );
cout << "创建第二个链表/n"; L2.createList ( );
L1.print ( ); L2.print ( );
L.multiplyList (L1, L2);
L.print ( );
}
问答题阅读以下说明和表,回答问题1~4问题。
[说明] 一个描述学校的部分关系模式的结果描述如下:
1.一个系有若干学生,但一个学生只能在一个系; 2.一个系只有一名主任;
3.一个学生可以选修多门课程,每门课程有若干学生选修; 4.每个学生所学的每门课程都有一个成绩;
5.“学生”和“课程表”及“选课表”的关系示例分别如表9-1、表9-2、表9-3所示。
Student(学生表)的字段按顺序为学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所属院系(Sdept)、系主任(Smaster);
Course(课程表)的字段按顺序为课程编号(Cno)、课程名(Cname)、先行课程(Cpno)、课程学分
(Ccredit); SC(选课表)的字段按顺序为学号(Sno)、课程号(Cno)、成绩(Grade)。
各表的记录如下:
{{B}}表9-1 Student{{/B}}
Sno
Sname
Ssex
Sage
Sdept
Smaster
95001
李勇
男
20
CS
王平
95002
刘晨
女
19
IS
周言
95003
王明
女
18
MA
展评
95004
张立
男
19
IS
周言 {{B}}表9-2
Course{{/B}}
Cno
Cname
Cpno
Ceredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL
6
4 {{B}}表9-3
SC{{/B}}
Sno
Cno
Grade
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95003
3
80
问答题[说明]某订单管理系统的部分UML类图如下图所示。在图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。请完善类Order的成员函数getOrderedAmount()类SalesSystem的statistic()方法,各个类的属性及部分方法定义参见下面的C++代码。[C++程序]classProduct{//产品类private:stringpid;//产品识别码stringdescription;//产品描述doubleprice;//产品单价public:voidsetProductPrice(doubleprice);//设置产品单价stringgetProductId();//获取产品以别码stringgetProductDescription();//获取产品描述doublegetProductPrice();//获取产品单价//其他成员省略};classProductList//产品列表类{private:vector<Product>products;public:ProductList();ProductgetProductByIndex(inti);//获得产品列表中的第i件产品voidaddProduct(Productt);//在产品列表中加入一件产品Product*getProductByID(stringpid);//获得识别码为pid的产品指针unsignedintgetProductAmount();//获得产品列表中的产品数量};classOrderItem{//订单条目类private:Product*productPtr;//指向被订购产品的指针intquantity;//订购数量public:OrderItem(Product*,int);Product*getProductptr();//获取指向被订购产品的指针intgetQuantity();//获取被订购产品的数量};classOrder{//订单类private:unsignedintorderid;//订单识别号vector<OrderItem>items;//订单内容(订单项)public:Order(unsignedintorderid);//获得识别码为tid的产品在当前订单中被订购的数量intgetOrderedAmount(stringtid);voidadditem(Product*productPtr,unsignedintn);//在订单中增加一个订单项//其他成员省略};classOrderList{//订单列表类private:vector<Order>orders;public:OrderList();//Begin()返回指向订单列表第一个元素的迭代器(指针)virtualvector<Order>::iteratorOrderList::Begin();//End()返回指向订单列表最后一个元素之后的迭代器(指向一个不存在的元素)virtualvector<Order>::iteratorOrderList::End();voidaddOrder(Ordert);//在订单列表中加入一份订单//其他成员省略};classSalesSystem{private:ProductListcatalog;//产品目录OrderListsales;//订单列表public:SalesSystem();voidstatistic();//统计所有产品的订购情况//其他成员省略};//在订单中查找识别码为tid的产品的订购数量,若该产品没有被订购,则返回0intOrder::getOrderedAmount(stringtid){for(intk=0;k<items.SiZe();k++){if(______==tid)return______;}return0;}//方法statistic()依次统计产品目录中每个产品的订购总量,并打印输出//每个产品的识别码、描述、订购总量和订购金额voidSalesSystem::statistic(){unsignedintk,t,ordered_qty=0;vector<Order>::iteratorit;Productp;cout<<"产品识别码/t描述/t/t订购数量/t金额"<<end1;for(k=0;k<catalog.getProductAmount();k++){//搜索产品列表P=______;//A产品列表取得一件产品信息存入变量Pordered_qty=0;//通过迭代器变量it搜索订单列表中的每一份订单for(it=sales.Begin();it<______;it++){//根据产品识别码获得产品P在当前订单中被订购的数量t=______(p.getProductId());ordered_qty+=t;}cout<<p.getProductId()<<"/t/t"<<p.getProductDescription()<<"/t/t";cout<<ordered_qty<<"/t/t"<<p.getProductPrice()*ordered_qty<<end1;}}
问答题[说明]本流程图描述了某子程序的处理流程,现要求用白盒测试法对其进行测试。
问答题【说明】 在一个航空公司的航班管理系统中,有以下一些事实。 (1)一个航班可能是一个或多个乘客的运输工具,每个乘客可能是一个或多个航班的旅客。 (2)一个且仅一个飞行员必须对每个航班负责,每个飞行员可能负责一个或多个航班。 (3)一个或多个飞行员必须对每个乘客负责,每个飞行员必须对一个或多个乘客负责。 现有飞行员的实体如下: 飞行员(飞行员编号,航班编号,姓名,工资,起飞地,到达地,飞行信用时间) 说明:飞行信用时间是一个特定的航班分配给一名飞行员,授权他可以驾驶管理这个航班。
问答题
问答题[说明]某房屋租赁公司欲建立一个房屋租赁服务系统,统一管理房主和租赁者的信息,从而快速地提供租赁服务。该系统具有以下功能。(1)登记房主信息。对于每名房主,系统需登记其姓名、住址和联系电话,并将这些信息写入房主信息文件。(2)登记房屋信息。所有在系统中登记的房屋都有一个唯一的识别号(对于新增加的房屋,系统会自动为其分配一个识别号)。除此之外,还需登记该房屋的地址、房型(如平房、带阳台的楼房、独立式住宅等)、最多能够容纳的房客数、租金及房屋状况(待租赁、已出租)。这些信息都保存在房屋信息文件中。一名房主可以在系统中登记多个待租赁的房屋。(3)登记租赁者信息。所有想通过该系统租赁房屋的租赁者,必须首先在系统中登记个人信息,包括姓名、住址、电话号码、出生年月和性别。这些信息都保存在租赁者信息文件中。(4)租赁房屋。已经登记在系统中的租赁者可以得到一份系统提供的待租赁房屋列表。一旦租赁者从中找到合适的房屋,就可以提出看房请求。系统会安排租赁者与房主见面。对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中。(5)收取手续费。房主登记完房屋后,系统会生成一份费用单,房主根据费用单缴纳相应的费用。(6)变更房屋状态。当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将根据房主的请求,修改房屋信息文件。图1和图2分别给出了该系统的顶层数据流图和0层数据流图。
问答题阅读以下说明,将应填入(n)处的字句写在答卷纸的对应栏内。【说明】下面的程序为堆排序程序,其中函数adjust(i,n)是把以R[i](1≤i≤┕i/2┙)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的,是在主函数中说明的结构数组,它含有要排序的n个记录。【程序】Voidadjust(i,n)Inti,n;ihtk,j;elementextr;extr=r[i];k=i;j=2*i;while(j<=n)if((j<n)if(extr.key<r[j].key)r[k]=r[j];k=j;(2);else(3);r[k]=extr;/*让i从┗i/2┛逐步减到1,反复调用函数adjust,便完成建立初始堆的过程。*/voidheapsort(r,n)listr;intn;inti,1;elementextr;for(i=n/2;i>=1;--i)(4);/*建立初始堆*/for(k--n;k>=2;k--)extr=r[1];r[1]=r[k];r[k]=extr;(5);
问答题图中缺少了一条关联,请指出这条关联两端所对应的类以及每一端的多重度。类多重度
问答题[问题4]
试说明逻辑数据流图(logical data flow diagram)和物理数据流图(physical data flow diagram)之间的主要差别。
问答题[说明] 快速排序是一种典型的分治算法。采用快速排序对数组A[p..r]排序的3个步骤如下。 1.分解:选择一个枢轴(pivot)元素划分数组。将数组A[p..r]划分为两个子数组(可能为空)A[p..q-1]和A[q+1..r],使得A[q]大于等于A[p..q-1]中的每个元素,小于A[q+1..r]中的每个元素。q的值在划分过程中计算。 2.递归求解:通过递归的调用快速排序,对子数组A[p..q-1]和A[q+1..r]分别排序。 3.合并:快速排序在原地排序,故无需合并操作。
问答题[说明]某企业餐厅为了方便员工用餐,开发了一个订餐系统(CafeteriaOrderingSystem,COS),企业员工可通过企业内联网使用该系统。企业的任何员工都可以查看菜单和当日特价。系统的顾客是注册到系统的员工,可以订餐(如果未登录则需先登录)、注册工资支付、预约规律的订餐,在特殊情况下可以覆盖预订。餐厅员工是特殊顾客,可以进行备餐、生成付费请求和清求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。菜单管理员是餐厅特定员工,可以管理菜单。送餐员可以打印送餐说明、记录送餐信息(如送餐时间)及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。顾客的订餐过程如下。(1)顾客请求查看菜单。(2)系统显示菜单和当日特价。(3)顾客选菜。(4)系统显示订单和价格。(5)顾客确认订单。(6)系统显示可送餐时间。(7)顾客指定送餐时间、地点和支付方式。(8)系统确认接受订单,然后发送E-mail给顾客以确认订餐,同时发送相关订餐信息通知给餐厅员工。系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图和一次订餐的活动图初稿分别如图1和图2所示。
问答题阅读下列说明以及图示(如图1所示),回答问题1~3。【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成,绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程,同时指定2门侯选课程以备主选课程未选上。每门课程最多不能超过10人,最少不能低于3人,低于3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。【用例图】 {{B}}表1学生课程注册系统的实体类{{/B}}实体类说明Professor学校中讲课的教师student学校中注册课程的学生Schedule学生在新学期选择登记的课程列表CourseCatalog学校所有课程的目录Course课程的基本信息CourseOffering新学期课程的开设信息,如讲课教师、时间、地点等信息 {{B}}表2学生课程注册系统的边界类{{/B}}边界类说明LoginForm为教师、学生和注册管理员提供登录的操作RegisterCoursesForm为学生提供选课注册的操作ViewReportForm为学生提供成绩查询的操作selecrTeachCoursesForm为教师提供查看学生选课情况的操作SubmitCradesForm为教师提供登记成绩的操作MaintainProfessorsForm为注册管理员提供维护教师信息的操作MaintainStudentsForm为注册管理员提供维护学生信息的操作MaintainCoursesForm为注册管理员提供维护课程信息的操作CloseRegistrationForm为注册管理员提供关闭注册的操作BillingSystemNotice提供与收费系统的信息交换接口 {{B}}表3学生课程注册系统的控制类{{/B}}控制类说明RegisterCoursesControl负责新学期学生的选课登记ViewReportControl负责学生成绩的查询SelectTeachCoursesControl负责新学期课程的学生选择情况SubmitGradesControl负责学生成绩的登记CloseRegistrationControl负责关闭课程注册【协作图】【时序图】注释1:学生打算注册新的课程。注释2:一张这学期可选择的课程列表。注释3:显示一张为学生选课用的空白登记表。
问答题[说明]
某学校建立了一个网上作业提交与管理系统,基本功能描述如下。
(1)账号和密码。任课老师用账号和密码登录系统后,提交所有选课学生的名单。系统自动为每个选课学生创建登录系统的账号和密码。
(2)作业提交。学生使用账号和密码登录系统后,可以向系统申请所选课程的作业。系统首先检查学生的当前状态,如果该学生还没有做过作业,则从数据库服务器申请一份作业。若申请成功,则显示需要完成的作业。学生需在线完成作业,单击“提交”按钮上交作业。
(3)在线批阅。系统自动在线批改作业,显示作业成绩,并将该成绩记录在作业成绩统计文件中。
