问答题使用说明中的词语,给出下图中的数据存储D1~D5的名称。
问答题问题:3.3 (3分)
在图3-1采用了何种设计模式?以100字以内文字说明采用这种设计模式的原因。
问答题阅读下列说明,回答问题1至问题3。
【说明】 关于一位花商有以下一些事实。
(1)销售在不同地区生长的花,这些地区一年的最低气温在一定范围内变化。
(2)想用编号来表示发货类型。 (3)要出售某些类型的花。
假定已经通过SQL语句建立了基本表: CREATE TABLE Zone(ID CHAR(2) PRIMARY
KEY,
LowerTemp NUMERIC(3),
UpperTemp NUMERIC(3)); CREATE TABLE
Delivery(ID CHAR (2) PRIMARY KEY,
Category CHAR(5),
DelSize
NUMERIC(5,3)); CREATE TABLE FlowerInfo(ID CHAR (3),
ComName
CHAR(25),
LatName CHAR(30),
Czone NUMERIC(3),
Hzone
NUMERIC(3),
Delivered NUMERIC(3),
SunNeed CHAR(3),
PRIMARY
KEY(ID)); 地区(ID,最高温度,最低温度)
发货(ID,发货类型,发货规格)
花的信息(ID,普通名,拉丁名,花能够生长的最冷地区,花能够生长的最热地区,发货类型,日光需求)
问答题试题四(共15分)阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。[说明]用两台处理机A和B处理n个作业。设A和B处理第i个作业的时间分别为ai和bi。由于各个作业的特点和机器性能的关系,对某些作业,在A上处理时间长,而对某些作业在B上处理时间长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现要找出一个最优调度方案,使得n个作业被这两台处理机处理完毕的时间(所有作业被处理的时间之和)最少。
问答题【说明】某汽车数字仪表板将完成下述功能:(1)通过模/数转换,实现传感器和微处理器的接口。(2)在发光二极管面板上显示数据。(3)指示速度(mph)、行驶里程、油耗(mpg)等。(4)指示加速或减速。以下是经分析得到的数据流图,有些地方有待填充,假定顶层数据流图是正确的。图9-14是顶层数据流图,图9-15是第0层数据流图,图9-16是第1层数据流图,其中A是加工1的细化图,B是加工2的细化图。图中,△sps表示转速sps的瞬时变化值,若△sps>0则汽车加速,△sps<0则减速,△sps=0则匀速。假定题中提供的顶层图是正确的,请回答下列问题。
问答题【问题1】
请采用说明中的词汇,给出数据确认处理所需的数据流在第1层图中的全部可选起点(第0层图和第1层图中均未给出)。
问答题【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过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:显示一张为学生选课用的空白登记表。
问答题[问题2]
在UML中,重复度(multiplicity)定义了某个类的一个实例可以与另一个类的多个实例相关联。通常把它写成一个表示取值范围的表达式或者一个具体的值。例如,图4-5中的类InternetClient和CustomerList,InternetClient端的“0...*”表示:1个 CustomerList的实例可以与0个或多个InternetClient的实例相关联;CustomerList端的“1”表示:1个InternetClient的实例只能与1个CustomerList的实例相关。
指出图4-5中(1)~(4)处的重复度分别为多少?
问答题问题:3.3 根据订单处理过程的描述,在图 3-2 中S1~S5处分别填入对应的状态名称。
问答题[问题3] 根据说明中的叙述,抽象出如下表所示的方法,请指出上图中的类Customer- InformationSystem和
功能描述
方法名
向系统中添加客户
addCustomer
根据给定的客户标识,在系统中查找该客户
getCustomer
根据给定的客户标识,从系统中删除该客户
removeCustomer
创建新的联系人
addContact
在系统中查找指定的联系人
getContact
从系统中删除指定的联系人
removeContact
问答题【说明】现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DF2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-7显示了各个类间的关系。这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是C++语言实现,能够正确编译通过。【C++代码】classDP1public:staticvoiddraw_a_line(doublex1,doubley1,doublex2,doubley2)//省略具体实现);classDP2public:staticvoiddrawline(doublex1,doublex2,doubley1,doubley2)//省略具体实现;classDrawingpublic:(1)voiddrawLine(doublex1,doubley1,doublex2,doubley2)=0;;classV1Drawing:publicDrawingpublic:voiddrawLine(doublex1,doubley1,doublex2,doubley2)DP1::draw_a_line(x1,y1,x2,y2);;classV2Drawing:publicDrawingpublic:voiddrawLine(doublex1,doubley1,doublex2,doubley2) (2);;classShapeprivate:(3)_dp;public:Shape(Drawing*dp);virtualvoiddraw()=0;voiddrawLine(doublex1,doubley1,doublex2,doubley2);;Shape::Shape(Drawing*dp)_dp=dp;voidShape::drawLine(doublex1,doubley1,doublex2,doubley2)//画一条直线 (4);classRectangle:publicShapeprivate:double_x1,_y1,_x2,_y2;public:Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2);voiddraw();;Rectangle::Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2):(5)_x1=x1;_y1=y1;_x2=x2;_y2=y2;voidRectangle::draw()//省略具体实现
问答题[程序4]
START
PRUGBC LD GR0,DATA
LEA GR1,0
LEA GR3,48
LOOP1 CPL GR0,WDT,GR1
JP2 LOOP2
ST GR3,BTASC,GR1
LEA GR1,1,GR1
LEA GR2,-4,GR1
JN2 LOOP1
{{U}} (1) {{/U}}
LOOP2 LEA GR2,48
LOOP3 CPL GR0,WDT,GR1
JMI NEXT
{{U}} (2) {{/U}}
LEA GR2,1,GR2
JMP LOOP3
NEXT {{U}} (3) {{/U}}
LEA GR1,1,GR1
LEA GR2,-4,GR1
JNZ LOOP2
LAST {{U}} (4) {{/U}};处理个位数
{{U}} (5) {{/U}}
EXIT
C48 DC 48
WDT DC 10000
DC 1000
DC 100
DC 10
BTASC DS 5
DATA DC #FA59H
END
问答题试题一至试题四是必答题试题一(共15分)阅读以下说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下:1.每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程结束后进行期末考试,其成绩作为这门课程的考试成绩。2.学生的平时成绩和考试成绩均由每门课程的主讲教师上传给成绩管理系统。3.在记录学生成绩之前,系统需要验证这些成绩是否有效。首先,根据学生信息文件来确认该学生是否选修这门课程,若没有,那么这些成绩是无效的;如果他的确选修了这门课程,再根据课程信息文件和课程单元信息文件来验证平时成绩是否与这门课程所包含的单元相对应,如果是,那么这些成绩是有效的,否则无效。4.对于有效成绩,系统将其保存在课程成绩文件中。对于无效成绩,系统会单独将其保存在无效成绩文件中,并将详细情况提交给教务处。在教务处没有给出具体处理意见之前,系统不会处理这些成绩。5.若一门课程的所有有效的平时成绩和考试成绩都已经被系统记录,系统会发送课程完成通知给教务处,告知该门课程的成绩已经齐全。教务处根据需要,请求系统生成相应的成绩列表,用来提交考试委员会审查。6.在生成成绩列表之前,系统会生成一份成绩报告给主讲教师,以便核对是否存在错误。主讲教师须将核对之后的成绩报告返还系统。7.根据主讲教师核对后的成绩报告,系统生成相应的成绩列表,递交考试委员会进行审查。考试委员会在审查之后,上交一份成绩审查结果给系统。对于所有通过审查的成绩,系统将会生成最终的成绩单,并通知每个选课学生。现采用结构化方法对这个系统进行分析与设计,得到如图1-1所示的顶层数据流图和图1-2所示的0层数据流图。图1-1顶层数据流图图1-20层数据流图
问答题【说明】设有下列关于图书借阅系统的E—R图。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列SQL语言建立了基本表:CREATETABLEReaders(RaoCHAR(6)PRIMARYKEY,RnameCHAR(20)NOTNULL,RaddressCHAR(200),RphoneCHAR(15));CREATETABLEBooks(BrioCHAR(6)PRIMARYKEY,RnameCHAR(50)NOTNULL);CREATETABLEAdministrators(AnoCHAR(6)PRIMARYKEY,AnameCHAR(20)NOTNULL);CREATETABLEBorrows(RnoCHAR(6)NOTNULL,BnoCHAR(15)NOTNULL,AnoCHAR(6)NOTNULL,BdateDATE,RdateDATE,PRIMARYKEY(Rno,Bno,Ano),FOREGINKEY(Rno)REFERENCEReaders(Rno),FOREGINKEY(Bno)REFERENCEBook(Bno)FOREGINKEY(Ano)REFERENCEAdministrators(Ano));CREATETABLEReaders(RaoCHAR(6)PRIMARYKEY,RnameCHAR(20)NOTNULL,RaddressCHAR(200),RphoneCHAR(15));CREATETABLEBooks(BrioCHAR(6)PRIMARYKEY,RnameCHAR(50)NOTNULL);CREATETABLEAdministrators(AnoCHAR(6)PRIMARYKEY,AnameCHAR(20)NOTNULL);CREATETABLEBorrows(RnoCHAR(6)NOTNULL,BnoCHAR(15)NOTNULL,AnoCHAR(6)NOTNULL,BdateDATE,RdateDATE,PRIMARYKEY(Rno,Bno,Ano),FOREGINKEY(Rno)REFERENCEReaders(Rno),FOREGINKEY(Bno)REFERENCEBook(Bno)FOREGINKEY(Ano)REFERENCEAdministrators(Ano));为了答题的方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只需写出英文名即可。【系统E-R图】1.【问题1】填写下列SQL程序中的(1)~(6),使它们分别完成相应的功能。程序1:查没有借阅过编号为111111图书的所有读者名单。SELECTRno,Rname,address,phoneFROMReadersWHERERno(1)(SELECT(2)FROMBorrowWHEREBno='llllll');程序2:统计在2005年1月1日借书的读者人数。SELECT(3)FROMBorrowWHERE(4);程序3:查借书证号为123456的读者所借过的所有图书。SELECTBno,BnameFROMBooksWHERE(5)(SELECT*FROMBorrowWHERE(6)ANDRno='123456';
问答题[说明]一个新的音像商店准备向比较广泛的人群出租录像带和光碟。该商店的管理决定在计算机系统的支持下来运作。音像商店在货架上存放着题材广泛的当前流行的电影库。由于同一个电影片名可能有于不同的导演而有不同的版本,因此电影用电影代码区分,而不用电影片名;同一个版本有多份拷贝,因此音像制品用一个唯一的编号标识。某个特定的电影可以存放在录像带或光碟上,录像带和光碟的租金不同。录像带要么是Beta格式要么是VHS格式;光碟为DVD格式,容量比较大,一张光碟可以存储同一电影片名的不同版本。每个电影都有特定的租用期(用天表示),并带有在租用期内的租金。音像商店必须能够立即回答关于某个电影的库存和有多少供租用的带子或光碟。音像商店的店员负责定购音像、联系客户、音像上架,并对客户的询问给出答复。该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图1-1是该系统的用例图,图1-2是该系统的类图的一部分。[图1-1][图1-2]1.根据题意,给出“电影”类的主要属性。
问答题[说明] 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。 以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式中,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。以下是C++语言实现,能够正确编译通过。 [C++代码] class Hand private: int handvalue; static Hand *hand0; static Hand *hand1; static Hand *hand2; (1) ; Hand(int handvalue) this->handvalue = handvalue; public: (2) Hand* getHand(int handvalue) /*省略具体实现*/ ; Hand *Hand::hand0 = new Hand(0); Hand *Hand::hand1 = new Hand(1); Hand *Hand::hand2 = new Hand(2); class Strategy public: (3) Hand* nextHand() = 0; ; class WinningStrategy : public Strategy private: bool won; Hand *prevHand; public: winningStrategy() won = false; Hand* nextHand() if(!won) prevHand = Hand::getHand(rand()%3); return prevHand; ; class probstrategy : public Strategy public: Hand* nextHand() int handvalue = 0; /*省略具体实现*/ return Hand::getHand(handvalue); ; class Player private: string name; Strategy* strategy; public: Player(string name, (4) strategy) this->name = name; this->strategy = strategy; Hand *nextHand()(//向战略请示手势 return (5) ; ;
问答题【说明】一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。例如,图10-8(a)所示的树的孩子-兄弟表示如图10-8(b)所示。函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对图10-1所示的树进行层序遍历时,结点的访问次序为DBAEFPC。对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示:函数原型说 明 VoidInitQueue(Queue*Q) 初始化队列 BoolIsEmpty(QueueQ) 判断队列是否为空,若是则返回TRUE,否则返回FALSE VoidEnQueue(Queue*Q,TreeNodep) 元素入队列 VoidDeQueue(Queue*Q,TreeNode*p) 元素出队列Bool、Status类型定义如下:typedefenum{FALSE=0,TRUE=1}Bool;typedefenum{OVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1}Status;树的二叉链表结点定义如下:typedefstructNode{chardata;structNode*firstchild,*nextbrother;}Node,*TreeNode;【函数】StatusLevelTraverse(TreeNoderoot){/*层序遍历树,树采用孩子-兄弟表示法,root是树根结点的指针*/QueuetempQ;TreeNodeptr,brotherptr;if(!root)returnERROR;InitQueue(&tempQ);{{U}}(1){{/U}};brotherptr=root->nextbrother;while(brotherptr){EnQueue(&tempQ,brotherptr);{{U}}(2){{/U}};}/*end-while*/while({{U}}(3){{/U}}){{{U}}(4){{/U}};printf("%c\t",ptr->data);if({{U}}(5){{/U}})continue;{{U}}(6){{/U}};brotherptr=ptr->firstchild->nextbrother;while(brotherptr){EnQueue(&tempQ,brotherptr);{{U}}(7){{/U}};}/*end-while*/}/*end-while*/returnOK;}/*LevelTraverse*/
问答题[说明]
以下代码实现了当用户推出界面时,判断TextEdit中的文字是否发生改变,弹出对话框判断,让用户选择选择是否保存文件或取消退出界面操作。阅读下面代码,补充完整。
[代码7-1]
Begin VB.Form Forml
//...窗体描述(略)
Begin VB.TextBox TextEdit
Height = 1830
Left = 180
TabIndex = 0
Text = "TextEdit"
Top = 360
Width = 3885
End
//...窗体描述(略)
End
[代码 7-2]
Dim txtchange As Boolean
Dim myval As String
Private Sub Form Load ( )
TextEdit.Text = "CIU, 中国软考联盟!
txtchange = False
End Sub
[代码 7-3]
Private Sub TextEdit_Change ( )
Static notchange As Boolean
{{U}} (1) {{/U}}
{{U}} (2) {{/U}}
End Sub
Private Sub Form_Unload ( Cancel As Integer )
Dim myval As String
If {{U}}(3) {{/U}} Then
myval = MsgBox ( "保存文件的更改吗?", vbYesNoCancel, "提示信息" )
If {{U}}(4) {{/U}} Then
MsgBox "保存成功"
End
End If
If {{U}}(5) {{/U}} Then End
If {{U}}(6) {{/U}} Then Cancel = 1
End If
End Sub
问答题[说明]背包问题就是有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,而且选中物品的价值之和为最大。背包问题是一个典型的NP完全难题。对该问题求解方法的研究无论是在理论上,还是在实践中都具有一定的意义。如管理中的资源分配、投资决策、装载问题等均可建模为背包问题。常用的背包问题求解方法很多,但本题中采用了一种新的算法来求解背包问题。该算法思想为:首先要对物品进行价重比排序,然后按价重比从大到小依次装进包裹。这种方法并不能找到最佳的方案,因为有某些特殊情况存在,但只要把包中重量最大的物品取出,继续装入,直到达到limitweight,这时的物品就是limitweight的最大价值。这种算法不需要逐个进行试探,所以在数据非常大时,执行效率主要由排序的时间复杂度决定。该算法的流程图为下图。仔细阅读程序说明和C程序流程图及源码,回答问题1和问题2。[流程图][程序说明]structThing:物品结构typedefstructBag:背包结构类型input():将物品按序号依次存入数组函数inbag():物品按物价比入包函数init():初始化函数sort():对物品按价格重量比排序函数outbag():取出包中weiht最大的物品函数print():最佳方案输出函数[C程序]#defineN255structThingdoubleweight;doublevalue;doubledens;thing[N];typedefstmctBagThingthing[N];doubleweighttmp;doublesumvalue;bag,best;inbag()dobag.thing[i]=thing[i](1)(2)i++;while((3))init()for(inti=0;i<N;i++)input(thing[i].weight,thing[i].value)thing[i].dens=thing[i].value/thing[i].weight;;main()init();sort();inbag();dobest=bag;//把包中物品放入暂存数组outbag();//取出包中weight最大的物品(4)while((5))print(best);//输出temp因为是最佳方案
问答题[说明]假设某大型商业企业由商品配送中心和连锁超市组成,其中商品配送中心包括采购、财务、配送等部门。为了实现高效管理,设计了商品配送中心信息管理系统,其主要功能描述如下。(1)系统接受由连锁超市提出的供货请求,并将其记录到供货请求记录文件。(2)在接到供货请求后,从商品库存记录文件中进行商品库存信息查询。如果库存满足供货请求,则给配送处理发送配送通知;否则,向采购部门发出缺货通知。(3)配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件。(4)采购部门接到缺货通知后,与供货商洽谈,进行商品采购处理,合格商品入库,并将采购清单记录至采购清单记录文件,向配送处理发出配送通知,同时通知财务部门给供货商支付货款。该系统采用结构化方法进行开发,得到待修改的数据流图如下图所示。
