问答题【问题 3】(2 分 ) 解释图3-1中用例U3和用例Withdraw、Deposit等四个用例之间的关系及其内涵。
问答题[说明] 给出一个接收三个数a、b、c作为三角形边长并输出三角形的类型的程序。程序代码如下所示:
结点 源代码行
A read a, b, c
B type = "scalene"
C if(a = = b || b = = c|| a = = c)
D type = "isosceles"
E if (a = = b && b= =c)
F type = "equilateral"
G if (a> =b+ c || b> =a+ c||c> =a+ b)
H type = "not a triangle"
I if (a< =0 || b< =0 ||c< =0)
J type = "bad inputs"
K print type
给出上面三角形伪码中的所有可行路径,进行每条路径测试。并找出达到C0和C1覆盖的最小测试案例集合。
问答题对于教学数据库的三个基本表S(S#,SNAME,AGE,SEX),SLLS#,C#,GRADE),C(C#, CNAME,TEACHER)。现根据查询条件填充下面SQL语句空白的部分。
1.检索LIU老师所授课程的课程号和课程名。
2.检索至少选修LIU老师所授课程中一门课程的女学生姓名。
3.检索WANG同学不学的课程的课程名。
4.检索全部学生都选修的课程的课程号与课程名。
5.检索选修课程包含LIU老师所授课程的学生学号。
[说明]
1.SELECT{{U}} (1) {{/U}}FROM C WHERE TEACHER='LIU'
2. SELECT S. SNAME FROM S,SC
WHERE S.S#=SC.S#AND S. SEX='F'AND SC.C#={{U}} (2) {{/U}}
(SELECTC# FROM C WHERE TEACHER = 'LIU')
3. SELECT CNAME FROM C
wHEREc#< >{{U}} (3) {{/U}}(SELECTSC. C# FROM S,SCWHERE S.S#=SC.S#AND S. SNAME=' WANG')
4. 由题知,该问题是在表C中找课程号和课程名,要求这门课被全部学生所选。
SELECT C#,CNAME
FROM C
WHERE NOT EXISTS
(SELECT *
FRoM S
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE{{U}} (4) {{/U}}
5. SELECT DISTINCT S#
FROM SC
WHERE{{U}} (5) {{/U}}
(SELECT C#
FROM C
WHERE TEACHER = 'LIU'
问答题阅读下列说明和图,回答问题1至问题3。[说明]某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预定、入住登记、帐务结算、退房,以及将服务项目记入客人帐单。旅客包括散客和团体,散客预定或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预定和维修。·客人入住后,客房处于占用状态;·客人退房后,客房处于空闲状态;·客人预定后,客房处于已预定状态;·预定客人入住后,客房处于占用状态;·预定客人取消预定后客房处于空闲状态;·需要维修时客房处于维修状态;·维修完成后客房处于空闲状态。该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图3-1是该系统的类图的一部分,图3-2描述了客房状态的转变情况。[图3-1][图3-2]
问答题[问题3]
按照图3-2中的方法发送邮件时,使用不同的密码体制加密消息和消息摘要,请用 150字以内文字简要说明这样做的理由。
问答题
问答题【说明】数据排序。将给定的n个整数分别按照升序和降序进行排列。
class SortInt_1
{
int i, j, k, temp;
void SortInt(int a1, a2[]){//升序排序
for(i=0; i<a1-1; i++){
k=i;
for(j=i+1 ;j<a1 ;j++)
if ({{U}} (1) {{/U}}) k=j;
if(k!=i){
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
}
}
}
}
class Sortlnt_2{{U}} (2) {{/U}}
{
int i, j, k, temp;
void Sortlnt(int a1,a2[]){//降序排序
for(i=0;i<a1-1 ;i++) {
k=i;
for(j=i+1 ;j<a1 ;j++)
if ({{U}} (3) {{/U}}) k=j;
if(k!=i){
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
}
}
}
}
Class TestOverLoad {
Public static void main(String args[])
{
int a[]={10,55,100,35,87,90,100,16};
Sortlnt_1 newlnt1={{U}} (4) {{/U}};
Newlnt1. SortInt(a. length, a);//调用SortInt_1类的方法
System. out. println("升序排列的数据");
For(int i=0;i<8;i++)
System. out. print(a[i]+" ");
system. out. println();
SortInt_2 newInt2=new sortint_2(); //创建类SortInt_2的对象
{{U}} (5) {{/U}};
System. out. println("降序排列的数据: ");
For(int i=0;i<8;i++)
System. out. print(a[i]+" ");
}
}
问答题问题:1.4 用 200 字以内文字,说明建模图 1-1 和图 1-2 时如何保持数据流图平衡。
问答题【说明】某汽车制造工厂有两条装配线。汽车装配过程如图10-6所示,即汽车底盘进入装配线,零件在多个工位装配,结束时汽车自动完成下线工作。(1)e0和e1表示底盘分别进入装配线0和装配线1所需要的时间。(2)每条装配线有n个工位,第一条装配线的工位为S0,0,S0,1,…,S0,n-0,第二条装配线的工位为S1,0,S1,1,…,S1,n-1。其中S0,k和S1,k(0≤k≤n-1)完成相同的任务,但所需时间可能不同。(3)aij表示在工位Sij处的装配时间,其中i表示装配线(i=0或i=1),j表示工位号(0≤j≤n-1)。(4)tij表示从Sij处装配完成后转移到另一条装配线下一个工位的时间。(5)X0和X1表示装配结束后,汽车分别从装配线0和装配线1下线所需要的时间。(6)在同一条装配线上,底盘从一个工位转移到其下一个工位的时间可以忽略不计。图10-7所示的流程图描述了求最短装配时间的算法,该算法的输入为;n:表示装配线上的工位数;e[i]:表示e1和e2,i取值为0或1:a[i][j]:表示ai,j,i的取值为0或1,j的取值范围为0~n-1;t[i][j]:表示ti,j,i的取值为0或1,j的取值范围为0~n-1;x[i]:表示X0和X1,i取值为0或1。算法的输出为:fi:最短的装配时间;li:获得最短装配时间的下线装配线号(0或者1)。算法中使用的f[i][j]表示从开始点到Si,j处的最短装配时间。
问答题阅读下列说明和数据流图,回答问题1-问题3。【说明】某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。1.病人初次来该医院看病,首先购买病历,记录病人基本情况。2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。医院收费系统的顶层图如图2所示;医院收费系统的第0层DFD图如图3所示。其中,加工1的细化图如图4所示,加工2的细化图如图5所示。假定顶层图是正确的,“定价表”文件已由其他系统生成。【数据流图】
问答题假定Games表存储参赛情况,如下的SQL语句是委员会用于查询“队名为‘China’的各个运动员各自夺取得的总积分”的不完整语句,请在空缺处填入正确的内容。
SEl3ECT{{U}} (1) {{/U}}
FROM Games
WHERE ANo{{U}} (2) {{/U}} (SELECT
ANo FROM{{U}} (3)
{{/U}} WHERE
ATeam="China") GROUP
BY ANo;
问答题[说明]以下是某图像二元树存储与还原算法的主要思想描述。设一幅2n×2n的二值图像,以:“1”表示黑像素点,以“0”表示白像素点。图像二元树结构表示依赖于图像的二元分割,即交替在X轴方向和Y轴方向上分割。先进行水平分割,分成两个2n-1×2n图像子块,然后进行垂直分割,分成4个2n-1×2n-1的正方形块,如此分割,直到子块只含同一像素点为止。如图8-8为一“E”字的二值图像,对其进行二元分割,相应的二元树如图8-9所示。根据图像二元树的0叶结点和1叶结点的数目,删除多者,保留少者。如“E”字图像的二元树0叶结点较多,裁剪后如图8-10所示。图8-8图8-10裁剪后的“E”字图像的二元树裁剪后图像二元树有4类结点,分别用二进制编码如下:◆左右儿子都有的结点,编码为11;◆仅有左儿子的结点,编码为10;◆仅有右儿子的结点,编码为01;◆叶结点,编码为00。存储时,先存储剩余叶结点的类型编码,二进制码00表示0叶结点,11表示1叶结点。再按层次顺序,自左至右存储裁剪后图像二元树各结点的编码。图像二元树的存储算法用C语言描述所定义的数据结构及函数如下:structNode/*图像二元树结点*/streetNode*Left;streetNode*Right;charPixel;structNodeQueue[MaxLen];/*队列*/InitQueue()/*初始化队列Queue的函数;*/EmptyQueue()/*判断队列Queue是否为空的数,若空返回1,否则返回0;*/AddQueue(Item)/*将Item加到队列Queue的数;*/GetQueue()/*取队列Queue第一个元素的函数;*/PutCode(Code)/*写2位二进制码Code到文件的函数*/还原算法是存储算法的逆过程,将文件中的二进制码序列转换成图像二元树。还原算法的数据结构与函数与存储算法的相同,还原算法新增了一个函数GetCode()。GetCode()/*从文件中读2位二进制码的函数*/[C程序]存储算法voidBackup(charCutPixel,structNodeImageTree)'/*CutPixel=0表示裁剪0叶结点*/InitQueue();AddQueue(ImageTree);PutCode(1-CutPixel);While(!EmptyQueue())TreeNode=GetQueue();if(TreeNode→Left==NULL)PutCode(0);continue:Tl=TreeNode→Left;Tr=TreeNode→Right;if(Tl→Left==NULLelse(1);AddQueue(Tl);if(Tr→Left==NULLelse(2)AddQueue(T);(3)还原算法voidRestore(structNode*TreeRoot)TreeRoot=(strutNode*)malloc(sizeof(structNode)InitQueue();AddQueue(TreeRoot);CutPixel=1-GetCode();while(!EmptyQueue())TrecNode=GetQueue(Queue);NodeCode=GetCode();switch(NodeCode)case0:TreeNode→Left=NULL;TreeNode→Right=NULLTreePixel=(4);break;case1:Tr=(structNode*)mallocsizeof(structNode)TreeNode→Right=Tr;AddQueue(Tr);TI=(structNode*)mallocsizeof(structNode)Tl→Lefi-NULL;Tl→RightNULL;Tl→Pixel=CutPixel;break;case2:T1=(structNode*)mallocsizeof(structNode)TreeNode→Left=Tl;(5);Tr=(structNode*)malloc(sizeof(streetNode)Tr→Left=-NULL;Tr→Right=NULL,,Tr→Pixel=CutPixel;break;case3:T1=(structNode*)malloc(sizeof(structNode)TreeNode→Right=Tl;AddQueue(T1);Tr=(structNode*)malloc(sizeof(structNodeTreeNode→Right=Tr;AddQueue(Tr);break;
问答题[问题2] 请用IDEF0。图描绘该功能的需求。
问答题[说明]现有n(n<1000)节火车车厢,顺序编号为1,2,3,…,n,按编号连续依次从A方向的铁轨驶入,从B方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到A方向的铁轨上;一旦车厢驶入B方向铁轨就不能再回到车站,如下图所示,其中Station为栈结构,初始为空且最多能停放1000节车厢。下面的C程序判断能否从B方向驶出预先指定的车厢序列,程序中使用了栈类型STACK,关于栈基本操作的函数原型说明如下。voidInitStack(STACK*s):初始化栈。voidPush(STACK*s,inte):将一个整数压入栈,栈中元素数目增1。voidPop(STACK*s):栈顶元素出栈,栈中元素数目减1。intTop(STACKs):返回非空栈的栈顶元素值,栈中元素数目不变。intIsEmpty(STACKs):若是空栈则返回1;否则返回0。[C程序]#include<stdio.h>/*此处为栈类型及其基本操作的定义,省略*/intmain(){STACKstation;intstate[1000];intn;/*车厢数*/intbegin,i,j,maxNo;/*maxNo为A端正待入栈的车厢编号*/printf("请输入车厢数:");Scanf("%d",&n);printf("请输入需要判断的车厢编号序列(以空格分隔):");if(n<1=return-1;for(i=0;i<n;i++)/*读入需要驶出的车厢编号序列,存入数组state[]*/scanf("%d",______;/*初始化栈*/maxNo=1;for(i=0;i<n;={/*检查输出序列中的每个车厢号state[i]是否能从栈中获取*/if(______){/*当栈不为空时*/if(state[i]=Top(station)){/*栈顶车厢号等于被检查车厢号*/printf("%d",Top(station));Pop(i++;}elseif(______){printf("error\n");return1;}else{begin=______;for(j=begin+1;j<=state[i];j++){Push(}}}else(/*当栈为空时*/begin=maxNo;for(j=begin;j<=state[i];j++){Push(}maxNo=______;}}printf("OK");return0;}
问答题阅读以下说明和数据流图,根据要求回答下列问题。[说明]现准备为某银行开发一个信用卡管理系统CCMS,该系统的基本功能如下。1.信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS。如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。2.信用卡激活。信用卡客户向CCMS提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功激活。3.信用卡客户信息管理。信用卡客户的个人信息可以在CCMS中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。4.交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在CCMS中。信用卡客户可以通过CCMS查询并核实其交易信息(包括信用卡交易记录及交易额)。图1和图2分别给出了该系统的顶层数据流图和0层数据流图的初稿。图1图2
问答题[说明]某供销系统接受顾客的订货单,当库存中某配件的数量小于订购量或库存量低于一定数量时,向供应商发出采货单;当某配件的库存量大于或等于订购量时,或者收到供应商的送货单时并更新了库存后,向顾客发出提货单。该系统还可随时向总经理提供销售和库存情况表。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1是顶层数据流图,图2是第0层数据流图,图3是第1层数据流图,其中(A)是加工1的子图,(B)是加工2的子图。图1图2图3[数据字典](1)数据流条目订货单=配件号+配件名+规格+数量+顾客名+地址提货单=订货单+金额采货单=配件号+配件名+规格+数量+供应商名+地址送货单=配件号+配件名+规格+数量+金额(2)文件说明文件名:配件库存组成:配件号+配件名+规格+数量+允许的最低库存量
问答题【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程,同时指定2门侯选课程以备主选课程未选上。每门课程最多不能超过10人,最少不能低于3人,低于3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。【用例图】【表】表3-1学生课注册系统的实体类实体类说明Professor学校中讲课的教师Strdent学校中注册课程的学生Schedule学生在新学期选择登记的课程列表CourseCatalog学校所有课程的目录Course课程的基本信息CourseOffering新学期课程的开设信息,如课课教师、时间、地点等信息表3-2学生课程注册系统的边界类边界类说明LoginForm为教师、学生和注册管理提供登录的操作RegisterCoursesForm为学生提供选课注册的操作ViewReportForm为学生提供成绩查询的操作SelectTeachCoursesForm为教师提供查看学生选课情况的操作SubmitGradesForm为教师提供登记成绩的操作MaintainProfessorsForm为注册管理员提供维护教师信息的操作MaintainStudentsForm为注册管理员提供维护学生信息的操作MaintainCoursesForm为注册管理员提供维护课程信息的操作CloseRegistrationForm为注册管理员提供关闭注册的操作BillingSystemNotice提供与收费系统的信息交换接口表3-3学生课程注册系统的控制类控制类说明RegisterCoursesControl负责新学期学生的选课登记ViewReportControl负责学生成绩的查询SelectTeachCoursesControl负责新学期课程的学生选择情况SubmitGradesControl负责学生成绩的登记CloseRegistrationControl负责关闭课程注册【协作图】【时序图】注释1:学生打算注册新的课程。注释2:一张这学期可选择的课程列表。注释3:显示一张为学生选课用的空白登记表。1.【问题1】在UML中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有哪些的特征,并指出用例图中(1)~(3)处表示的内容。
问答题{{B}}试题1~试题4是必答题{{/B}}阅读以下某图书管理系统的技术说明和数据流图,根据要求回答问题1~问题4。[说明]某图书管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位和地址等)一起写入读者文件。该系统的图书管理功能主要分为购入新书、读者借书、读者还书及图书注销4个方面。(1)购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。(2)读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过10本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。(3)读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。(4)注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息查询功能主要包括读者信息查询和图书信息查询。其中,读者信息查询可得到读者的基本信息及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。该图书管理系统的顶层数据流图,如图2-21所示;该图书管理系统的第0层DFD图,如图2-22所示;其中加工2的细化图,如图2-23所示。
问答题【说明】Point是平面坐标系上的点类,Line是从Point派生出来的直线类。
#include <iostream.h>
class Point
{public:
Point (int x, int y) ;
Point (Point
~Point();
void set (double x, double y) ;
void print();
private:double X,Y;
};
Point::Point (int x, int y) //Point 构造函数
{X=x; Y=y; }
Point::Point ({{U}} (1) {{/U}}) //Point 拷贝构造函数
{X=p.X; Y=p.Y;}
void Point::set (double x, double y)
{X=x; Y=y; }
void Point::print()
{cout<<' ('<<X<<","<<Y<<") "<<endl; }
Point::~Point()
{cout<<"Point 的析构函数被调用! "<<endl;
class Line: public Point
{public:
Line (int x, int y, int k) ;
Line (Line
~Line();
void set (double x, double y, double k)
void print();
private:double K;
};
{{U}} (2) {{/U}}//Line 构造函数实现
{ K=k;}
{{U}} (3) {{/U}} //Line 拷贝构造函数实现
{K=s.K;}
void Line::set (double x, double y, double k)
{{{U}} (4) {{/U}};
K=k;
}
void Line::print()
{cout<<" 直线经过点";
{{U}} (5) {{/U}};
cout<<"斜率为: k="<<K<<endl;
}
Line: :~Line()
{cout<<"Line 析构函数被调用! "<<endl;
}
void main()
{Line 11 (1,1,2) ;
11 .print();
Linel2 (11) ;
12.set (3,2,1) ;
12.print();
}
问答题[说明]某航空公司会员积分系统(CFrequentFlyer)的主要功能描述如下:乘客只要办理该航空公司的会员卡,即可成为普卡会员(CBasic)。随着飞行里程数的积累,可以从普卡会员升级到银卡会员(CSilvet)或金卡会员(CCold)。非会员(CNonMember)不能累积里程数。每年年末,系统根据会员在本年度累积的里程数对下一年会员等级进行调整。普卡会员在一年内累积的里程数若满25,000英里但不足50,000英里,则自动升级为银卡会员;若累积的里程数在50,000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50,000英里以上,则自动升级为金卡会员。若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员;若累积的里程数达到25,000英里,但是不足50,000英里,则自动降级为银卡会员。银卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员。采用面向对象方法对会员积分系统进行分析与设计,得到如图1所示的状态图和图2所示的类图。图1某会员积分系统状态图图2某会员积分系统类图
