问答题【问题3】(2分)
若将元素10插入到堆A=(15,13,9,5,12,8,7,4,0,6,2,1)中,调用maxHeaplnsert函数进行操作,则新插入的元素在堆A中第(9)个位置(从1开始)。
问答题[说明]
以下JAVA程序实现了在接口interface iShape2D的定义和应用,仔细阅读代码和相关注释,将程序补充完整。
[代码6-1]
interface iShape2D //定义接口
{
{{U}} (1) {{/U}}
{{U}} (2) {{/U}}
}
{{U}} (3) {{/U}} //实现CRectangle类
{
int width, height;
{{U}} (4) {{/U}}CRectangle (int w,int h) {
width=w;
height=h;
}
public void area ( ){ //定义area( )的处理方式
System. out.println ("area="+width*height);
}
}
{{U}} (5) {{/U}} //实现CCircle类
{
double radius;
{{U}} (6) {{/U}} CCircle (double r) {
radius=r;
}
public void area ( ) { //定义area( )的处理方式
System.out.println ("area="+pi*radius*radius);
}
}
[代码6-2]
public class app10_4
{
public static void main(String args[])
{
CRectangle rect=new CRectangle (5,10);
rect.area ( ); //调用CRectangle类里的area ( ) method
CCircle cir=new CCircle (2.0);
cir.area ( ); //调用CCircl类里的area ( ) method
}
}
问答题【说明】
以下C++程序的功能是计算三角形、矩形和正方形的面积并输出。程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述3种图形面积的通用接口。
#include<iostream.b>
#include<math.h>
class Figure{
public:
virtual double getArea0=0; //纯虚拟函数
};
class Rectangle:{{U}} (1) {{/U}}{
protected:
double height;
double width;
public:
Rectangle(){};
Rectangle(double height, double width){
This->height=height;
This->width=width;
}
double getarea(){
return{{U}} (2) {{/U}};
}
};
class Square:{{U}} (3) {{/U}}{
public:
Square(double width){
{{U}} (4) {{/U}};
}
};
class Triangle:{{U}} (5) {{/U}}{
double la;
double lb;
double lc;
public:
Triangle(double la, double lb, double lc){
this->la=la; this->lb; this->lc;
}
double getArea(){
double s=(la+lb+lc)/2.0;
return sqrt(s*(s-la)**(s-lb)*(s-lc));
}
};
viod main(){
Figure* figures[3]={
new Triangle(2,3,3), new Rectangle(5,8), new Square(5));
for(int i=0;i<3;i++){
cout<<"figures["<<i<<"]area="<<(figures[i])->getarea()<<endl;
}
}
问答题【说明】本程序实现功能:读入两个整数,第1个数除以第2个数,声明当除数为零时抛出异常类DivideByZeroException。 public class DivideByZeroException (1) public DivideByZeroException ( ) super("Attcmpted to divide by zero"); import java.io. *;public class Example private static int quotient(int numerator, in)/”t denominator) throws DivideByZeroException if (denominator==0) throw (2) ; return(numerator / denominator); public static void main(String args[]) int number1=0, number2=0, result0; try System.out.print1n("Enter the first number:"); number1 = Integer. valueOf(Keyboard.getString()).intValue(); System.out.print1n("Enter the second number:"); number2 = Integer. Va1ueOf(Keyboard.getString()).intValue(); result = quotient(number1,number2); catch (NumberFormatException e) System.out.print1n("Invalid integer entered!"); System. exit(-1); catch ( (3) ) System.out.print1n(e.to String()); System.exit(-1); Systcm.out.pfint1n(number1 + "/" + number2 + "=" + result); 其中, Keyboard类的声明为: import java.io.*; public class Keyboard static BufferedReader inputStream = (4) (new InputStreamReader(System.in)); public static int getInteger() try( return (Intoger.valueOf(inputStream.readLine().trim()).intValue()); catch (Exception e) e.printStackTrace(); return 0; public static String getString() try return (inputStream.readLine()); catch ( (5) ) return "0";
问答题问题:6.1 【java代码】
class invoice{
public void printInvoice(){
System.out.println ( "This is the content of the invoice!");
}
}
class Decorator extends Invoice {
protected Invoice ticket;
public Decorator(lnvoice t){
ticket = t;
}
public void printInvoice(){
if(ticket != null)
(1) ;
}
}
class HeadDecorator extends Decorator{
public HeadDecorator(lnvoice t){
super(t);
}
public void printInvoice (){
Systent.out.println( "This is the header of the invoice! ");
(2) ;
}
}
class FootDecorator extends Decorator {
public FootDecorator(Invoice t){
super(t);
}
public void printlnvoice(){
( 3) ;
Systent.out.println( "This is the footnote of the invoice! ");
}
}
Class test {
public static void main(String[] args){
Invoice t =new Invioce();
Invoice ticket;
ticket= (4) ;
ticket.printInvoice();
Systent.out.println(“------------------“);
ticket= (5) ;
ticket.printInvoice();
}
}
程序的输出结果为:
This is the header of the invoice!
This is the content of the invoice!
This is the footnote of the invoice!
----------------------------
This is the header of the invoice!
This is the footnote of the invoice!
问答题[说明]某高等院校的教学管理具有选课管理和成绩管理两大功能。选课管理主要完成以下工作:(1)录入与生成新学期课程表;(2)学生选课注册;(3)查询,学生、教师、教学管理员可以查询课程表,获得课程信息、学生选课信息和学生、教师信息;(4)选课注册信息的统计与报表生成。成绩管理主要的功能为:(1)成绩录入:教学管理员录入学生考试成绩;(2)成绩查询:教师、教学管理员可以查询学生考试成绩。。学生只允许查询自己的考试成绩,不允许查询他人的成绩;(3)成绩统计与报表生成:教学管理员进行成绩统计,打印统计报表。把学生选课注册信息传送给财务系统,以便计算学生应交纳的费用。根据需要,系统设计的用例有“选课管理”、“成绩管理”、“查询课程信息”、“选课注册”、“管理开设课程”等用例。其中部分用例说明如下:“查询课程信息”:学生、教师或教学管理员启动查询课程信息时,该用例开始运行。根据输入的查询要求(查询主题或关键字),显示有关的课程信息;“选课注册”。当学生登录进行选课注册时,该用例开始运行,它提供了选择课程、注册、修改注册、删除注册等功能。学生登录需要用户标识(ID)和口令;“管理开设课程”。当教学管理员登录系统进行产生选课信息操作时,该用例开始运行。它首先检查用户标识(ID)和口令,然后从数据库中取出学生的选课注册数据,按照要求进行分类统计,生成选课注册报表。活动者“学生”与用例“选课注册”的交互关系如下:当“学生”登录系统进入选课注册活动时,首先要输入用户标识(ID)和口令,经系统的“注册表单”接口对象验证,如果正确无误,则“学生”可以进行查询活动或选课活动,否则拒绝进入。若“学生”发出“查询”请求,系统的“选课注册表单”接口对象响应信息给“学生”,及发送增加或删除学生选课数据的消息。“开设课程”对象响应该消息,找出数据库中的相关数据,增加或删除学生的姓名和所选的课程名,或做相应的修改,并把增加或删除学生课操作成功或失败的信息反馈给“选课注册表单”接口对象,“选课注册表单”接口对象再反馈给“学生”。如果“学生”按下“确认”键,则选课操作得到确认,发出提交请求。“选课注册表单”接口对象响应该请求,并发出“存储”消息。“开设课程”对象响应“存储”消息,进行数据库存储操作,选课数据存入数据库。若“学生”结束选课,发出“退出”系统请求,“注册表单”接口对象响应请求,关闭系统。图1为系统的顶层UML用例图。图2为选课注册顺序图。图1图2
问答题
阅读下列说明和图,回答问题1至问题2,将解答填入对应栏内。 [说明]
银行的自动柜员机(ATM)的功能描述如下: (1)金融卡与信用卡识别:包含伪卡识别以及密码验证;
(2)主菜单项:这是一台ATM最主要的人机界面,提供各项功能给客户,具体有:提款、转帐、更改密码以及存款;
(3)结束操作:客户执行完“菜单项”的功能后,可以选择“打印单据”或“不打印单据”,选好后就结束此次交易。
注意,ATM除了能处理本行的银行卡外,其他银行的银行卡也应该能处理,通过“金融中心”与其他银行主机进行数据交换。另外,为了方便,ATM还提供快捷提款,并提供代交费功能(代交费是以转帐的方式处理的)。
该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示。
问答题【说明】某绘图系统存在point、line、square三种图元,它们具有Shape接口,图元的类图关系如图13-12所示。现要将circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来的,它提供的接口不能被系统直接使用。代码13-2既使用了XCircle又遵循了Shape规定的接口,既避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。代码13-3根据用户指定的参数生成特定的图元实例,并对之进行显示操作。绘图系统定义的接口与XCircle提供的显示接口及其功能如表13-5所示。表13-5接口及其功能ShapeXCircle功能display()DisplayIt()显示图元【代码13-2】classCircle(1)private(2)pxc;publicCircle()pxc=new(3);publicvoiddisplay()pxc.(4);【代码13-3】publicclassFactorypublic(5)getShapeInstance(inttyoe)//生成特定类实例switch(type)case0:returnnewpoint();case1:returnnewRectangle();case2:returnnewline();case3:returnnewCircle();default:returnnull;publicclassApppublicstaticviodmain(Stringargv[)if(argv.length!=1)system.out.println("errorparameters!");Return;inttype=(newInteger(argv[0)).intValue();Factoryfactory=newFactory();shapes;s=factory.(6);if(s==null)system.out.println("Errorgetinstance!");Return;s.display();return;
问答题[问题3]图8-7是固定资产管理E-R模型。请根据说明补充完整。图8-7固定资产管理E-R图□实体;○属性(属性引线上短重线表示此属性是实体主键);□联系
问答题【说明】下面是一个Applet程序,其功能是根据给出的小时,分钟和秒数计算相等的秒数,即将1分钟化为60秒,依此类推。要求建立一个时间类,时间参数均作为类的成员变量,并且给出换算时间的方法,也作为这个类的成员函数,可以供外部对象进行调用。同时还需要在输出窗口中显示换算结果,并且将结果写到out3_3.txt文件中,本题给出确定的时间为4小时23分47秒,要求换算成以秒做单位的时间。程序运行结果如图11所示。importjava.io.*;importjava.awt.*;impOrtjava.applet.*;/*<appletcode=ex7_7.classwidth=800height=400></applet>*/publicclassex7_7extendsAPPletpublicvoidpaint(Graphicsg)intnSum;classmyTime7_7publicinth;publicintm;publicints;publicintout;publicintcaculateSecond()(1);returnout;myTime7_7objTime7_7=newmyTime7_7();ObjTime7_7.h=4;ObjTime7_7.m=23;ObjTime7_7.s=47;nSum=objTime7_7.(2);g.drawString("时:"+objTime7_7.h,20,30);g.drawString("分:"+objTime7_7.m,20,50);g.drawString("秒:"+objTime7_7.s,20,70);g.drawString((3));tryFileOutputStreamfos7_7=newFileOutputStream("out7_7.txt");BufferedOutputStreambos7_7=newBufferedOutputStream(fos7_7,1024);PrintStreamps7_7=newPrintStream(bos7_7,false);SyStem.setOut(ps7_7);System.out.println((4));ps7_7.close();catch(|OExceptionioe)(5)(ioe);ex7_7.htm|<HTML><HEAD><TITLE>ex7_7</TITLE></HEAD><BODY><appletcode="ex7_7.class"width=800height=400></applet></BODY></HTML>
问答题[说明]某快递公司为了方便管理公司物品运送的各项业务活动,需要构建一个物品运送信息管理系统。[需求分析结果](1)快递公司有多个分公司,分公司信息包括分公司编号、名称、经理、办公电话和地址。每个分公司可以有多名员工处理分公司的日常业务,每名员工只能在一个分公司工作。每个分公司由一名经理负责管理分公司的业务和员工,系统需要记录每个经理的任职时间。(2)员工信息包括员工号、姓名、岗位、薪资、手机号和家庭地址。其中,员工号唯一标识员工信息的每一个元组。岗位包括经理、调度员、业务员等。业务员根据客户提交的快件申请单进行快件受理事宜,一个业务员可以受理多个客户的快件申请,一个快件申请只能由一个业务员受理。调度员根据已受理的申请单安排快件的承运事宜,例如:执行承运的业务员、运达时间等。一个业务员可以执行调度员安排的多个快件的承运业务。(3)客户信息包括客户号、单位名称、通信地址、所属省份、联系人、联系电话、银行账号。其中,客户号唯一标识客户信息的每一个元组。当客户要寄快件时,先要提交快件申请单,申请号由系统自动生成。快件申请信息包括申请号、客户号、发件人、发件人电话、快件名称、运费、发出地、收件人、收件人电话、收件地址。其中,一个申请号对应唯一的一个快件申请,一个客户可以提交多个快件申请,但一个快件申请由唯一的一个客户提交。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图(下图)和关系模式(不完整)如下:某物品运送信息管理系统实体联系图(不完整4)[关系模式设计]分公司(分公司编号,名称,经理,办公电话,地址)员工(员工号,姓名,______,岗位,薪资,手机号,家庭地址)客户(客户号,单位名称,通信地址,所属省份,联系人,联系电话,银行账号)申请单(______,发件人,发件人电话,发件人地址,快件名称,运费,收件人,收件人电话,收件地址,受理标志,业务员)安排承运(______,实际完成时间,调度员)
问答题【说明】 银行客户需要从ATM取100元,他向ATM的读卡机插卡,读卡机读取他的卡号,然后ATM屏幕初始化,ATM提示输入密码,客户输入密码(123456),ATM打开他的账户,密码有效,因此ATM提示选择事务,客户选择取钱,ATM提示输入金额,客户输入100元,ATM验证账户上有足够的钱,就从账上减去100元,ATM吐出100元,并退出的卡。
问答题下面是一个Applet程序,其功能是在绘图区域中通过鼠标的移动来绘制直线,并且有清除绘图区域按钮,用来清除已经绘制的图像。程序运行结果如图5所示。importjava.awt.*;importjava.applet.*;/*<appletcode=ex6_7.classwidth=800height=400></applet>*/publicclassex6_7extendsAppletprivateButtonbtn;privatebooleanbDraw,bClear;privateintupX,upY,downX,downY;publicvoidint()setLayout(null);bClear=false;bDraw=false;btn=newButton("clear");btn.reshape(250,150,70,30);add(btn);publicvoidpaint(Graphicsg)if(bClear)g.clearRect(0,0,getSize().width,getSize().height);(1);if(bDraw)g.drawLine((2));bDraw=false;publicvoidupdate(Graphicsg)(3);publicbooleanmouseDown(Eventevent,intx,inty)downX=x;downY=y;returntrue;publicbooleanmouseup(Eventevent,intX,inty)upX=x;upY=y;(4);repaint();returntrue;publicbooleanaction(Eventevent,Objectobject)if((5))bClear=true;repaint();returntrue;ex6_7.html<HTML><HEAD><TITLE>ex6_7</TITLE></HEAD><BODY><appletcode="ex6_7.class"width=800height=400></applet></BODY></HTML>
问答题[说明]图12-5中显示一张交通违章处罚通知书。每一个交通违章通知书有一个惟一的编号。交通违章通知书包含了收到处罚的违章者记录、涉及违章的机动车记录、违章记录、处罚记录以及经办警察记录等信息。所根据这张通知书所提供的信息回答下面问题。1.[问题1]根据这张通知书所提供的信息,设计了一个E-R模型,如图12-6所示。请将(n)处补充完整。
问答题[问题1]
请用120字以内文字,从业务的继承性、升级成本(时间、工作量)和扩展性三个方面简要说明开发人员所提方案的优点。
问答题阅读以下说明和表,回答问题1至问题3。
[说明]
图12-5中显示一张交通违章处罚通知书。每一个交通违章通知书有一个惟一的编号。交通违章通知书包含了收到处罚的违章者记录、涉及违章的机动车记录、违章记录、处罚记录以及经办警察记录等信息。所根据这张通知书所提供的信息回答下面问题。
问答题[说明]下面的流程图(如图3所示)用N-S盒图形式描述了数组A中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于A[i],并且数组中下标小于i的元素的值均小于基准数,下标大于i的元素的值均大于基准数。设数组A的下界为low,上界为high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以4为基准数的划分过程如下:[流程图][算法说明]将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数intp(intA[],intlow,inthieh)实现了上述流程图的划分过程并返回基准数在数组A中的下标。递归函数voidsort(intA[],intL,intH)的功能是实现数组A中元素的递增排序。[算法]voidsort(intA[],intL,intH)if(L<H)k=p(A,L,R);//p()返回基准数在数组A中的下标sort((4));//小于基准敷的元素排序sort((5));//大于基准数的元素排序
问答题【说明】在一个分布网络中,资源(石油、天然气、电力等)可从生产地送往其他地方。在传输过程中,资源会有损耗。例如,天然气的气压会减少,电压会降低。我们将需要输送的资源信息称为信号。在信号从信源地送往消耗地的过程中,仅能容忍一定范围的信号衰减,称为容忍值。分布网络可表示为一个树型结构,如图10-9所示。信号源是树根,树中的每个节点(除了根)表示一个可以放置放大器的子节点,其中某些节点同时也是信号消耗点,信号从一个节点流向其子节点。每个节点有一个d值,表示从其父节点到该节点的信号衰减量。例如,在图10-9中,节点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)+M(k)大于容忍值,则应在k处放置放大器,否则,从节点i到某叶子节点的信号衰减量会超过容忍值,使得到达该叶子节点时信号不可用,而在节点i处放置放大器并不能解决到达叶子节点的信号衰减问题。例如,在图10-9中,从节点p到其所有叶子节点的最大衰减值为4。若容忍值为3,则必须在s处放置信号放大器,这样可使得节点p的M值为2。同样,需要在节点小v处放置信号放大器,如图10—10阴影节点所示。若在某节点放置了信号放大器,则从该节点输出的信号与信号源输出的信号等价。函数placeBoosters(TreeNode*root)的功能是:对于给定树型分布网络中各个节点,计算其信号衰减量的最大值,并确定应在树中的哪些节点放置信号放大器。全局变量Tolerance保存信号衰减容忍值。树的节点类型定义如下:typedefstructTreeNode{intid;/*当前节点的识别号*/intChildNum;/*当前节点的子节点数目*/intd;/*父节点到当前节点的信号衰减值*/structTreeNode**childptr;/*向量,存放当前节点到其所有子节点的指针*/intM;/*当前节点到其所有子节点的信号衰减值中的最大值*/boolboost;/*是否在当前节点放置信号放大器的标志*/}TreeNode;【C语言函数】voidplaceBoosters(TreeNode*root){/*计算root所指节点处的衰减量,如果衰减量超出了容忍值,则放置放大器*/TreeNode*p;inti,degradation;if({{U}}(1){{/U}}){degradation=0;root->M=0;i=0;if(i>=root->ChildNum)return;p={{U}}(2){{/U}};for(;i<root->ChildNum&&p;i++,p={{U}}(3){{/U}}){p->M=0;{{U}}(4){{/U}};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={{U}}(5){{/U}};}}
问答题【函数3说明】 函数DeleteNode(Bitree * r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为: typedef struct Tnode int data; /*结点的键值*/ struct Tnode * Lchild,*Rchild; /*指向左、右子树的指针*/ * Bitree; 在二叉查找树上删除一个结点时,要考虑三种情况: ①若待删除的结点p是叶子结点,则直接删除该结点; ②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点P; ③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。 【函数3】 int DeleteNode(Bitree * r,int e) Bitree p=*r,pp,s,c; while( (1) ) /*从树根结点出发查找键值为e的结点*/ pp=p; if(e<p->data)p=p->Lchild; else p=p->Rchild; if(!p)return-1; /*查找失败*/ if(p->Lchild &&p->Rchild)/*处理情况③*/ s= (2) ; pp=p; while( (3) )pp=s;s=s->Rchild; p->data=s->data;p=s; /*处理情况①、②*/ if( (4) )c=p->Lchild; else c=p->Rchild; if(p==*r)*r=c; else if( (5) )pp->Lchild=c; else pp->Rchild=c; free(p); return 0;
问答题[说明]已知对某载客车辆(Car)进行类建模,如图4-19所示。其中,类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。[C++代码]car.run();}
