问答题[说明] 银行的自动柜员机(ATM)的功能描述如下: (1)金融卡与信用卡识别:包含伪卡识别以及密码验证; (2)主菜单项:这是一台ATM最主要的人机界面,提供各项功能给客户,具体有:提款、转帐、更改密码以及存款; (3)结束操作:客户执行完“菜单项”的功能后,可以选择“打印单据”或“不打印单据”,选好后就结束此次交易。 注意,ATM除了能处理本行的银行卡外,其他银行的银行卡也应该能处理,通过“金融中心”与其他银行主机进行数据交换。另外,为了方便,ATM还提供快捷提款,并提供代交费功能(代交费是以转帐的方式处理的)。 该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示。
问答题从下列的3道试题(试题五至试题七)中任选1道解答,如果解答的试题数超过1道,则题号小的1道解答有效。试题五(15分)阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]某绘图系统存在Point、Line、Square三种图元,它们具有Shape接口,图元的类图关系如图5-1所示。现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来,它提供的接口不能被系统直接使用。代码5-1既使用了XCircle又遵循了Shape规定的接口,既避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。代码5-2根据用户指定的参数生成特定的图元实例,并对之进行显示操作。绘图系统定义的接口与XCircle提供的显示接口及其功能如下表所示:[图5-1]
问答题[说明]图书馆藏书管理系统,完成用户信息管理,借阅归还信息管理,馆藏书目的信息管理,违规处罚管理和各种查询等功能。系统的用户可分为超级用户和普通用户两类,超级用户负责系统维护,包括对藏书信息,用户信息,借阅和归还信息,违规处罚信息的录入,修改,查询,删除等。普通用户即借阅者则只是具有查询书目信息,查询本人的借阅情况,违规处罚信息和预定书目的权限。用户通过身份验证后进入主界面。主界面为超级用户提供6项选择:图书信息管理,用户信息管理,图书的借阅和归还信息管理,违规处罚信息管理,口令修改。普通用户有4项功能选择:书目查询,借阅归还信息,违规处罚信息,口令修改。图书信息管理:超级用户可以增加,修改,删除图书信息,也可以查看书目信息。用户信息管理:超级用户可以增加,修改,删除用户信息,也可以查找用户信息。借阅归还信息:超级用户可以加入,修改,删除借阅纪录,查看某本书的借阅情况,查询指定的书目借阅和归还信息。违规处罚管理:超级用户可以给普通用户增加,修改,删除违规处罚信息,普通用户如果逾期不还图书,系统将暂时终止普通用户的借阅权利,直到用户接受违规处罚后,方可以恢复正常的借阅权利。口令修改:用户需要输入原口令,并且两次输入新口令一致后,系统即用新口令代替旧口令。图书馆藏书借阅系统信息流如图10-5所示,图书馆藏书管理系统的E-R模型图如图10-6所示。
问答题[说明]一个印制电路板的布线区域可分成n×m个方格,如图1(a)所示,现在需要确定电路板中给定的两个方格的中心点之间的最短布线方案。电路只能沿水平或垂直方向布线,如图1(b)中虚线所示。为了避免线路相交,应将已布过线的方格作成封锁标记,其他线路不允许穿过被封锁的方格。设给定印制电路板的起始方格x与目的方格y尚未布线,求这两个方格间最短布线方案的基本思路是:从起始方格x开始,先考查距离起始方格距离为k的某一个可达方格就是目标方格y时为止,或者由于不存在从x到y的布线方案而终止。布线区域中的每一个方格与其相邻的上、下、左、右4个方格之间的距离为1,依次沿下、右、上、左这4个方向考查,并用一个队列记录可达方格的位置。下表给出了沿这4个方向前进1步时相对于当前方格的相对偏移量。沿4个方向前进1步时相对于当前方格的相对偏移量搜索顺序i方向行偏移量列偏移量0上-101右012上-103左0-1例如,设印制电路板的布线区域可划分为一个6×8的方格阵列,如图2(a)所示,其中阴影表示已封锁方格。从起始方格x(位置[3,2],标记为0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图2(a)所示,目标方格为y(位置[4,7],标记为10),相应的最短布线路径如图2(b)中虚线所示。图3和图4所示的流程图即利用上述思路在电路板方格阵列中进行标记,图中使用的主要符号如下表所示。在图3中,设置电路板初始格局,即将可布线方格置为数值-1、已布线方格(即封锁方格)置为-9。设置方格阵列“围墙”的目的是省略方格位置的边界条件判定,方法是在四周附加格,并将其标记为-9(与封锁标记相同)。图中使用的主要符号符号含义Grid全局二维数组Grid[N+2,M+2]表示电路板方格阵列,初始时数组元素Grid[ij]的值为-1时,表示当前方格可布线;为-9时,表示当前方格不可布线Offset一维数组offset[4]:offset[i](0≤i≤3)的分量为r(行偏移量)和c(列偏移量),按照上表的内容设置其值Startpos、Endpos、Curpos、T分别表示起始方格、目标方格、当前方格和临时方格,其位置用分量度row和col确定Q.insert(s)将方格s的位置信息加入队列Q.delete()删除非空队列的队头元素,并返回该元素Q.empty()若队列Q为空,则返回true;否则返回false供选择的答案:[a]Found≠true[b]Found=true[c]T=EndPos[d]Q.insert(T)[e]T←Q.delete()[f]CurPos=EndPos[g]i≥4[h]CurPos←Q.delete()[i]Grid[T.row,T.col]=-1[j]Grid[T.row,T.col]≠-1
问答题【说明】 类Queue表示队列,类中的方法如下表所示。
isEmpty()
判断队列是否为空。如果队列不为空,返回true;否则,返回false
enqueue(Object newNode)
入队操作
dequeue()
出队操作。如果队列为空,则抛出异常 类Node表示队列中的元素;类EmptyQueueException给出了队列操作中的异常处理操作。 public class TestMain { //主类 public static viod main (String args[]){ Queue q=new Queue(); q.enqueue("first!"); q.enqueue("second!"); q.enqueue("third!"); {{U}} (1) {{/U}}{ while(true) System.out.println(q.dequeue()); } catch({{U}} (2) {{/U}}){ } } public class Queue { //队列 Node m_FirstNode; public Queue(){m_FirstNode=null;} public boolean isEmpty(){ if(m_FirstNode==null)return true; else return false; } public viod enqueue(Object newNode) { //入队操作 Node next=m_FirstNode; if(next==null)m_FirstNode=new Node(newNode); else{ while(next.getNext()!=null)next=next.getNext(); next.setNext(new node(newNode)); } } public Object dequeue(){{U}} (3) {{/U}}{ //出队操作 Object node; if (isEempty()) {{U}} (4) {{/U}}; //队列为空, 抛出异常 else{ node=m_FirstNode.getObject(); m_FirstNode=m_FirstNode.getNext(); return node; } } } public class Node{ //队列中的元素 Object m_Data; Node m_Next; public Node(Object data) {m_Data=data; m_Next=null;} public Node(Object data, Node next) {m_Data=data; m_Next=-next;} public void setObject(Object data) {m_Data=data;} public Object getObject(Object data) {return m_data;} public void setNext(Node next) {m_Next=next;} public Node getNext() {return m_Next;} } public class EmptyQueueException extends{{U}} (5) {{/U}}{ //异常处理类 public EmptyQueueException() { System.out.println("队列已空! "); }}
问答题[说明]以下VisualBasic代码实现了系统登录时对用户进行合法性检查。界面如图9-6所示。阅读下面代码,将{{U}}(n){{/U}}处代码补充完整。[代码7-1]BeginVB.Formform1BackColor=&H00808080&Caption="系统登录"//...窗体描述(略)BeginVB.Labe1Labe12Backstyle=0'TransparentCaption="密码:"//…窗体描述(略)EndBeginVB.Labe1Labe11Backstyle=0'TransparentCaption="操作员:"//...窗体描述(略)End//...窗体描述(略)End[代码7-2]DimTIMAsIntegerDimmydbAsDatabaseDimmyrsAsRecordsetDimsq1AsStringPrivateSubFormACdvate()Setmydb=Workspaces(0).OpenDatabase(App.Path&"/CIUID.mdb")'打开数据库sq1="select操作员fromqxsz"Setmyrs=mydb.OpenRecordset(sq1)If{{U}}(1){{/U}}Thenmyrs.MoveLastIf{{U}}(2){{/U}}Thenmyrs.MoveFirstFori=0TOmyrs.RecordCount-1{{U}}(3){{/U}}{{U}}(4){{/U}}NextiIf{{U}}(5){{/U}}Thenmaster.Listlndex=0myrs.Closemydb.Closemaster.SetFocusEndSub[代码7-3]PrivateSubCmdok_Click()'确认操作员和密码DimMESSAGEAsStringIfmaster.Text<>'''ThenSetmydb=Workspaces(0).OpenDatabase(App.Path&"/CIUID.mdb")Setmyrs=mydb.OpenRecordset("qxsz",dbOpenDynaset)myrs.Findfirst"操作员="+Chr(34)+master.Text+Chr(34)+""'查找操作员If{{U}}(6){{/U}}ThenMsgBox("无此操作员!")ElseIfpassword.Text=myrs.Fields("密码")Then'确认密码MsgBox"系统登录成功!"'系统登录成功ElseIfTIM=3ThenMESSAGE=MsgBox("密码输入错误,请向系统管理员查询!",0,"")IfMESSAGE=vbOKThenEndEndIfMsgBox("密码错误,请重新输入密码!")TIM=TIM+1'密码输入错误次数password.SetFocusEndIfEndIfEndIfEndSub
问答题[问题3](2分)
两个长度分别为n1和n2的已排好序的子数组进行归并,根据上述C代码,则元素之间比较次数为____(9)____。
问答题【说明】某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。1.病人初次来该医院看病,首先购买病历,记录病人基本情况。2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。医院收费系统的顶层图如图3—2所示;医院收费系统的第0层D四图如图3—3所示。其中,加工1的细化图如图3—4所示,加工2的细化图如图3-5所示。假定顶层图是正确的,“定价表”文件已由其他系统生成。【数据流图】
问答题【问题3】 说明输入串(a,a)#是否为G的句子。
问答题请认真阅读以下关于电子政务信息整合的叙述,根据要求回答问题1~问题4。
[说明]
公共服务、社会监督和宏观调控是我国政府的3个主要职能。实施电子政务建设,可以改善政府的公共服务质量,提高社会监管的效率和准确性,加强宏观经济调控的科学性。
某城市企业开业登记并正常经营的流程如下。
申请者先到工商行政管理局(简称工商局)取得营业执照,为此需要填写表4-13;然后到地税局或国税局办理税务登记,获得营业发票,为此需要填写表4-14;表4-14中的组织机构代码信息需要到负责法人(包括企业、事业、机关、社团等)登记的质量技术监督。局(简称质监局)获取,为此需要填写表
4-15;最后,还要到银行办理经营账户开户手续。
{{B}}表4-13 某营业执照申请表{{/B}}
企业名称
住所(或经营场所)
联系电话
邮政编码
法定代表人(负责人、投资人、执行合伙企业事务的合伙人)
注册资本(万元)
经营范围
营业期限
副本数(份)
从业人员
其中,本市人数: 外地人数: 安置下岗失业人数:
企业登记注册号
(该信息由工商局核定)
{{B}}表4-14 某业务发票申请表{{/B}}
纳税人名称
邮政编码
组织机构代码
网站网址
注册地
经营范围
经营地
注册资本
单位电话
法人代表(负责人)
{{B}}表4-15 某企业法人登记申请表{{/B}}
单位名称
单位电话
经营范围
经济行业
单位地址
经济类型
邮政编码
投资国别
行政区划
登记注册号
法人代表
拨款形式
身份证号
职工人数
注册资金
有效期
组织机构代码
(该信息由质量技术监督局核定)
[注]
以上叙述(包括表格内容)为考试而设计,与现实情况不一定完全吻合。
上述单位中的政府部门,都投入了大量资金实施电子政务项目,各自针对表4-13、表4-14和表4-15等信息项目建设了管理信息系统。在企业开业运营后,如要变更相关信息,需要分别到工商局、税务局和质监局办理,因此,在工商管理信息系统中还包括了企业变更信息、注销登记(或吊销登记)信息、企业年检信息等;在税务管理信息系统中还包括企业注销税务登记信息等。
政府对企业监管的重要内容是有效减少漏管户,防止偷逃税;同时政府在企业登记注册、年检、纳税等环节应向企业提供优质服务。
假设该市已经完成了电子政务专网(外网)建设(ATM光纤骨干)和网络应用规划。目前,工商局、质监局、地(国)税局欲在此网络平台上建立自己的电子政务系统。
问答题{{B}}阅读以下说明及图,回答问题。{{/B}}【说明】Web页面与数据库的连接是Web数据库的基本要求。目前基于Web数据库的连接方案主要有服务器端方案和客户端方案两种类型。服务器端方案的实现技术有ASP等,客户端方案的实现技术有JDBC、DHTML等。其中,ASP是微软开发的脚本语言技术,嵌入在IIS中,因此,ASP成为大部分用户的首选脚本语言。图13-10给出了ASP的工作原理。
问答题【说明】 快速排序是一种典型的分治算法。采用快速排序对数组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.合并:快速排序在原地排序,故不需合并操作。
问答题[问题3](4 分)
组装(Composition)和聚集(Aggregation)是UML 中两种非常重要的关系。请说明组装和聚集分别表示什么含义?两者的区别是什么?
问答题[说明]某医院的门诊管理系统实现了为患者提供挂号、处方药品收费的功能。具体的需求及设计如下:1.医院医师具有编号、姓名、科室、职称、出诊类型和出诊费用,其中出诊类型分为专家门诊和普通门诊,与医师职称无关;各个医师可以具有不同的出诊费用,与职称和出诊类型无关。2.患者首先在门诊挂号处挂号,选择科室和医师,根据选择的医师缴纳挂号费(医师出诊费)。收银员为患者生成挂号单,如表2.1所示,其中,就诊类型为医师的出诊类型。3.患者在医师处就诊后,凭借挂号单和医师手写处方到门诊药房交费买药。收银员根据就诊号和医师处方中开列的药品信息,查询药品库(如表2-2所示),并生成门诊处方单(如表2-3所示1。4.由于药品价格会发生变化,因此,门诊管理系统必须记录处方单上药品的单价。根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如图2-1所示。(1)实体联系图(2)关系模式挂号单(就诊号,病患姓名,医师编号,时间,(5))收银员(编号,姓名,级别)医师(编号,姓名,科室,职称,出诊类型,出诊费用)门诊处方((6),收银员,时间)处方明细(就诊号,(7))药品库(药品编码,药品名称,(8))
问答题试题四(15分)阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明]在并发系统设计中,通过对信号量S的P、V操作实现进程的同步与互斥控制。P(S):S:=S-1,若S≥0,则执行P操作的进程继续执行;若S0,则执行V操作的进程继续执行;若S≤0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续执行。
问答题[问题3](3分)
考虑实例n=10,C=10,各个货物的体积为{4,2,7,3,5,4,2,3,6,2}。该实例在最先适宜和最优适宜策略下所需的集装箱数分别为____(9)____和____(10)____。考虑一般的情况,这两种求解策略能否确保得到最优解?____(11)____(能或否)
问答题【程序】下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。intGetMax(intn,intdatalist[])intk=0;for(intj=1;j<n;j++)if(datalist[j]>datalist[k])k=j;returnk;【控制流图】
问答题[说明] 以下C程序实现了将字符串转化为浮点数的功能。例如字符串“1234567”转化为浮点数1234567;字符串“100.02035”转化为浮点数100.02035;字符串“-100.02035”转化为浮点数-100.02035。程序中的部分变量的含义如表9-5。 {{B}}表9-5{{/B}}
变量名
含 义
intpart
字符串转化为浮点数后的整数部分
doublepart
字符串转化为浮点数后的小数部分
kdouble
记录小数部分的阶次
resoult
字符串转化为浮点数后的结果
psign
字符串转化为浮点数后的符号标识 [C程序] double StrToDouble(char*s) { char hexch[]="0123456789"; int i,j,psign=1; DWORD n,k,intpart=0; double doublepart=0,kdouble,resoult; char ch; if (*s=='.' { {{U}} (1) {{/U}}; {{U}} (2) {{/U}}; } char*s1=s,*temp=NULL; temp=strrchr ( s1,'.' ); if (!temp) { k=1; intpart=0; for (i=strlen (s); i>0;i--) { ch=s[i-1]; if (ch>0x3f) ch n=0; for (j=0; j<10; j++) if ( ch==hexch[j]) n=j; intpart+= (n*k); k*=10; } } else { s1=temp+1; kdouble=0.1; doublepart=0; for ({{U}}(3) {{/U}}) { ch=s1[i-1]; if (ch>0x3f) ch n=0; for (j=0; j<10; j++ ) if (ch==hexch[j]) n=j; doublepart+= (n*kdouble); {{U}} (4) {{/U}}; } *temp=NULL; k=1; intpart=0; for ({{U}}(5) {{/U}};) { ch=s[i-1]; if (ch>0x3f) ch n=0; for (j=0; j<10; j++) if (ch==hexch[j]) n=j; intpart+= (n*k); k*=10; }//end else } {{U}} (6) {{/U}}; return resoult; }
问答题【说明】一个图书馆信息管理系统的分析与建模。下面是某图书馆的有关介绍。图书馆雇有若干管理员,各自具有编码、姓名等属性。管理员可上岗,也可下岗。图书馆中备有若干图书,每本图书有书号、书名、出版社、价格等属性。图书馆不定期地购买并注册新图书供读者借阅,也可将报废的旧书注销以停止借阅。图书馆可为众多读者提供服务。每个读者在借阅之前需注册姓名、性别、地址、Email等内容。读者可在终端上查询。每个读者最多可同时借阅5本书。每本图书借期为30天;若有一本书超期,则不可再借其他图书。一本书超期一天罚款0.1元。若一本书超期3个月不归还,则发布通告。若读者的图书丢失,在罚款处理之前不能借书,每本报失的图书罚款该书价的2倍。注册新读者不受限制;在注销读者之前,该读者必须归还所有借阅的图书,或者报失并接受罚款。【用例图】【协作图】1.【问题1】在需求分析阶段,采用UML的用例图描述系统功能需求,如图1-6所示。指出图1-6中(1)(2)、(3)、(4)分别是哪个用例?
问答题[问题2] 收费部门业务活动数据库的部分关系模式设计如下,请根据说明补充完整,并给出其主键。 A.员工( (1) 、姓名、 (2) 、 (3) ) B.队别(队别标志号、队名、 (1) 、 (2) )
