问答题阅读以下技术说明,根据要求回答问题1~问题4。[说明]某汽车停车场欲建立一个信息系统,已经调查到的需求如下。1.在停车场的入口和出口分别安装一个自动栏杆、一台停车卡打印机、一台读卡器和一个车辆通过传感器等,其示意图见如图3-21所示。2.当汽车到达入口时,驾驶员按下停车卡打印机的按钮获取停车卡。当驾驶员拿走停车卡后,系统命令栏杆自动抬起;汽车通过入口后,入口处的传感器通知系统发出命令,栏杆自动放下。3.在停车场内分布着若干个付款机器。驾驶员将在入口处获取的停车卡插入付款机器,并缴纳停车费。付清停车费之后,将获得一张出场卡,用于离开停车场。4.当汽车到达出口时,驾驶员将出场卡插入出口处的读卡器。如果这张卡是有效的,系统命令栏杆自动抬起;汽车通过出口后,出口传感器通知系统发出命令,栏杆自动放下。若这张卡是无效的,系统不发出栏杆抬起命令而发出告警信号。5.系统自动记录停车场内空闲的停车位的数量。若停车场当前没有车位,系统将在入口处显示“车位已满”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。根据上述描述,采用面向对象方法对其进行分析与设计,得到如表3-11所示的类/用例/状态列表,如图3-22所示的用例图,如图3-23所示的初始类图以及如图3-24所示的描述入口自动栏杆行为的UML状态图。{{B}}表3-11类/用例/状态列表{{/B}}{{B}}用例名{{/B}}{{B}}说明{{/B}}{{B}}类名{{/B}}{{B}}说明{{/B}}{{B}}状态名{{/B}}{{B}}说明{{/B}}Carentry汽车进入停车场CentralComputer停车场信息系统Idle空闲状态,汽车可以进入停车场Carexit汽车离开停车场PaymentMachine付款机器Disable没有车位ReportStatistics记录停车场的相关信息CarPark停车场,保存车位信息AwaitEntry等待汽车进入Barrier自动护栏AwaitTicketTake等待打印停车卡Carentrywhenfull没有车位时,汽车请求进入停车场EntryBarrier入口的护栏AwaitEnable等待停车场内有空闲车位ExitBarrier出口的护栏
问答题[说明] 下面代码实现class C对class A和B的protected成员和public成员的调用。仔细阅读[代码5-1]、[代码5-2],在{{U}} (n) {{/U}}处写出正确的运行结果。 [代码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={{U}} (1) {{/U}} 对象demo.b3={{U}} (2) {{/U}} 对象demo.c3={{U}} (3) {{/U}} a2 in class C={{U}} (4) {{/U}} a3 in class C={{U}} (5) {{/U}} b2 in class C={{U}} (6) {{/U}} b2 in class C={{U}} (7) {{/U}}
问答题【说明】银行客户需要从ATM取100元,他向ATM的读卡机插卡,读卡机读取他的卡号,然后ATM屏幕初始化,ATM提示输入密码,客户输入密码(123456),ATM打开他的账户,密码有效,因此ATM提示选择事务,客户选择取钱,ATM提示输入金额,客户输入100元,ATM验证账户上有足够的钱,就从账上减去100元,ATM吐出100元,并退出的卡。【问题】根据上面的描述,在下面填写,完成未完成的协作图。1.插卡(客户一读卡机)2._(____→____)3._(____→____)4.提示输入PIN(123456)(ATM显示屏→客户)5._(____→____)6._(____→____)7.验证PIN(__→__)8.提示选择事务(__→__)9._(客户→ATM屏幕)10.提示金额(ATM屏幕→客户)11.输入金额(客户→ATM屏幕)12.取钱(ATM屏幕→的账户)13._(____→____)14._(____→____)15._(____→____)16.提供收据(客户的账户→取钱机)17._(____→____)
问答题[说明]现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计,所得类图如下图所示。采用该设计模式的原因在于:系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。[Java程序]classMatrix{//各种格式的文件最终都被转化为像素矩阵//此处代码省略};abstractclassImageImp{publicabstractvoiddoPaint(Matrixm);//显示像素矩阵m};classWinImpextendsImageImp{publicvoiddoPaint(Matrixm){/*调用Windows系统的绘制函数绘制像素矩阵*/}};classLinuxImpextendsImageImp{publicvoiddoPaint(Matrixm){/*调用Linux系统的绘制函数绘制像素矩阵*/}};abstractclassImage{publicvoidsetImp(ImageImpimp){______=imp;}publicabstractvoidparseFile(StringfileName);protected______imp;};classBMPextendsImage{publicvoidparseFile(StringfileName){//此处解析BMP文件并获得一个像素矩阵对象m______;//显示像素矩阵m}};classGIFextendsImage{//此处代码省略};classJPEGextendsImage{//此处代码省略};publicclassjavaMain{publicstaticvoidmain(String[]args){//在Windows操作系统上查看demo.bmp图像文件Imageimage1=______;ImageImpimageImp1=______;______;image1.parseFile("demo.bmp");}}现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix和类iavaMain,若采用桥接设计模式,则至少需要设计______个类。
问答题阅读下列程序说明,将应填入 (n) 处的字句写在答卷纸的对应栏内。 【程序说明】 对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如,管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人员类又从管理人员类中派生。 下面的程序1完成上述各个类的定义,并建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。将“程序1”中的成员函数定义为内联函数,pay成员函数定义为虚函数,重新完成上述要求。 【程序1】 //普通雇员类 class Employee public: Employee(char *theName, float thePayRate); char *getName0 const; float getPayRate0 const; float pay,(float hours Worked) eonst; protected: ehar *name; //雇员名称 float payRate; //薪水等级 ; Employee::Employee(char *theName, float thePa~Rate) name = the Name; payRate = the PayRate; char *Employee::getName0 eonst return name; float Employee::getPayRate0 const return payRate; float Employee::pay(float hoursWorked) const return hours Worked * payRate; class Manager: public Employee public: //is Salaried 付薪文方式:true 付薪固定工资,false 按小时付薪 Manager(char *the Name, float the Pay Rate, bool is Salaried); bool getSalaried0 const; float pay(float hoursWorked) const; protected: bool salaried; ; Manager::Manager(ehar *theName,fioat thePayRate,bool isSalaried) : Employee(theName, thePayRate) salaried = isSalaried; bool Manager::getSalaried0 eonst return salaried; float Manager::pay(float hoursWorked) eonst if (salaried) return payRate; /* else */ return Employee::pay(hoursWorked); //主管人员类 class Supervisor: public Employee public: Supervisor(char *theName, float thePayRate, float theBouns): Employee (theName, thePayRate, (1) .) ,bouns(theBouns) float getBouns0 const return bouns; float pay(float hoursWorked) const return (2) ; protected: float houris; #include "iostream.h" void main() Employee e("Jack",50.00); Manager m("Tom",8000.00,tme); Supervior sCTanya",8000.00,8000.00); cout<<"Name:"<<e.getName0<<endl; cout <<"Pay: "<<e.pay(80)<<endl; //设每月工作80小时 cout <<"Name: "<<m.getName0<<endl; cout <<"Pay: "<<m.pay(40)<<endl; cout <<"Name: "<<s.getName0<<endl; cout <<"Pay: "<<s.pay(40)<<endl; //参数40在这里不起作用 #include "employee.h" class Employee public: Employee(string theName, float thePayRate): name(theName),payRate(thePayRate) string getName0 const return name; float getPayRate0 const return payRate; virtual float pay(float hoursWorked) const return (3) ; protected:, string name; //雇员名 Boat payRate; //薪水等级 ; //管理人员类 //继承普通雇员类 class Manager: public Employee public: //构造函数 //isSalaried标识管理人员类的付薪方式 //true 按阶段付薪(固定工资) //false 按小时付薪 Manager(string theName, float thePayRate, bool isSalaried): Employee(theName,thePayRate),salaried(isSalaried) bool getSalaried0 const return salaried; virtual float pay(float (4) ) const; protected: bool salaried; ; float Manager ::pay(float hoursWorked) const if (salaried) //固定付薪方式 return payRate; else //按小时付薪 return (5) ; //主管人员类 class Supervisor: (6) public: //构造函数 Supervisor (string theName, float thePayRate, float theBouns) : Manager(theName, thePayRate, true), bouns(theBouns) //取奖金数额 float getBouns0 const return bouns; //计算薪水 virtual float pay(float hours Worked) const (7) float bouns; #include "employee.h" #nclude "iostream.h" void main() (8) *ep[3]; ep[0]=new Employee("Jack" ,"50.00"); ep[1]=new Manager("Tom", "8000.00",true); ep[2]=new Supervior("Tanya","8000.00","8000.00"); for (int i=0;i<3;i++) Cout<<"Name: "<< (9) <<endl; Cout<<"Pay: "<< (10) <<endl; //设每月工作80小时
问答题[说明] 在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。 程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。 函数中使用的预定义符号如下: typedef struct TreeNode/*二叉排序树节点*/ char *word; struct TreeNode *left, *right; BNODE; [函数] int getWord(FILE *fpt, char *word) /*从文件fpt中读取单词到word中,到达文件结束时返回0*/ char c; c = fgetc(fpt); if(c == EOF)return 0; /*跳过单词间的非字母字符*/ while(!(tolower(c) >= 'a' if(c == EOF)return 0; /*不区分大小写*/ while(tolower(c) >= 'a' c = fqetc(fpt); *word = '/0'; return 1; void BTree(BNODE **t, char *word) BNODE *ptr, *p; int compres; p = NITLL; (1) ; while(ptr) compres = strcmp(word, (2) ); if(!compres) return; else (3) ; ptr = compres > 0 ? ptr->right : ptr->left; ptr = (BNODE*)malloc(sizeof ptr); ptr->left = ptr->right = NULL; ptr->word = (char*)malloc(strlen(word) + 1); strcpy(ptr->word, word); if(p == NULL) (4) ; else if(compres > 0) p->right = ptr; else p->left = ptr; int main() FILE *fpt; char word[40]; BNODE *root = NULL; if((fpt = fopen("text.in", "r")) == NULL) printf("不能打开文件text.in! /n"); return 1; while(getWord(fpt, word) == 1) BTree (5) ; fclose(fpt); return 0;
问答题【说明】 下面给出的是某高级公寓管理系统的一套分层数据流图。其功能描述如下所述。 (1)系统随时根据住户送来的入住单更新住户基本信息文件。 (2)每月初系统根据物业管理委员会提供的月附加费(清洁费、保安费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出数据给住户。 (3)系统定期向物业管理委员会提供住房分配表和交费情况表。 (4)住户因分户或换房,在更新账户基本信息文件的同时,系统应立即对这些住户做月租费计算,以了结分尸或换房前的房租。 假定题中提供的顶层图是正确的,请回答下列问题。
问答题问题:4.3 (3分)
上述C代码的输出为:(7) 。
问答题
问答题
问答题[问题1]收费部门业务活动数据流图如图8-6所示,图中缺少了与“票根上缴”相关的数据流,请指出该数据流的起点和终点。图8-6收费部门业务数据流图□数据来源和去向;○过程处理;=需要存储的信息
问答题[说明]某银行已有一套基于客户机/服务器模式的储蓄系统A和一套建账软件。建账软件主要用于将储蓄所手工处理的原始数据转换为储蓄系统A所需的数据格式。该建账软件具有以下功能。(1)分户账录入。手工办理业务时建立的每个分户账数据均由初录员和复录员分别录入,以确保数据的正确性。(2)初录/复录比对。将初录员和复录员录入的数据进行一一比较,并标记两套数据是否一致。(3)数据确认。当上述两套数据完全一致后,将其中任一套作为最终进入储蓄系统A的原始数据。(4)汇总、核对和打印。对经过确认的数据进行汇总,并和会计账目中的相关数据进行核对,以确保数据的整体正确性。打印输出经过确认的数据,为以后核查可能的错误提供依据。(5)数据转换。将经过确认的数据转换为储蓄系统A需要的中间格式数据。(6)数据清除。为加快初录和复录的处理速度,在数据确认之后,可以有选择地清除初录员和复录员录入的数据。该软件的数据流图如图1~图3所示。图中部分数据流数据文件的格式如下。初录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质复录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质初录数据=手工分户账+一致性标志复录数据=手工分户账+一致性标志会计账目=储蓄所号+总户数+总余额操作结果=初录操作结果+比对操作结果+复录操作结果软件需要打印的分户账清单样式如下表所示。分户账清单样式表储蓄所账号开户日户名其他分户账数据储蓄所1储蓄所1合计共×××户,总余额9999999.99元储蓄所2储蓄所2合计共×××户,总余额9999999.99元
问答题[说明]某大学欲开发一个基于Web的课程注册系统,该系统的主要功能如下:1.验证输入信息(1)检查学生信息:检查学生输入的所有注册所需信息。如果信息不合法,返回学生信息不合法提示;如果合法,输出合法学生信息。(2)检查学位考试结果:检查学生提供的学位考试结果。如果不合法,返回学位考试结果不合法提示;如果合法,检查该学生注册资格。(3)检查学生注册资格:根据合法学生信息和合法学位考试结果,检查该学生对欲选课程的注册资格。如果无资格,返回无注册资格提示;如果有注册资格,则输出注册学生信息(包含选课学生标识)和欲注册课程信息。2.处理注册申请(1)存储注册信息:将注册学生信息记录在学生库。(2)存储所注册课程:将选课学生标识与欲注册课程进行关联,然后存入课程库。(3)发送注册通知:从学生库中读取注册学生信息,从课程库中读取所注册课程信息,给学生发送接受提示;给教务人员发送所注册课程信息和已注册学生信息。现采用结构化方法对课程注册系统进行分析与设计,获得如图1所示的0层数据流图和图2所示的1层数据流图。图1某课程注册系统0层数据流图图2某课程注册系统1层数据流图
问答题[说明] 以下程序实现了利用鼠标任意移动圆形的位置,仔细阅读代码和相关注释,将程序补充完整。 [代码6-1] import java.awt.*; import java.awt.event.*; public class CIUSAMPLE extends Frame implements MouseMotionListener, MouseListener static CIUSAMPLE frm=new CIUSAMPLE ( ); int x=70,y=60,posX=70,posY=60,dx,dy; public static void main (String args[]) frm.setTitle ("Dragging a circle"); frm.setSize (200,150); (1) ffm.addMouseMotionListener (frm); frm.setVisible (true); public void mousePressed (MouseEvent e) (2) dy=e.getY ( ) -posY; public void mouseDragged (MouseEvent e) (3) y=e.getY ( ) -dy; if(dx>0 (4) public void paint (Graphics g) g.setColor (Color.pink); //设置绘图颜色为粉红 g.fillOval(x,y,50,50); //以基准点为图形在左上角绘出圆形 (5) posY=y; public void mouseMoved (MouseEvent e) public void mouseReleased (MouseEvent e) public void mouseEntered (MouseEvent e) public void mouseExited (MouseEvent e) public void mouseClicked (MouseEvent e)
问答题[说明] 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为: m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2] 其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、1表示负数。 运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减情况。注意,不考虑溢出情况,即数组足够大。 [函数] int cmp(int *LA, int *LB); /*比较长整数LA与LB的绝对值大小*/ /*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/ int ADD (int *LA, int *LB, int *LC) /*计算长整数LA与LB的和,结果存储于LC中*/ /*注意:正数与负数的和相当于正数与负数绝对值的差*/ /*数据有误返回0,正常返回1*/ if(LA == NULL || LB == NULL || LC == NULL)return 0; int *pA, *pB, i, N, carry, flag; flag = LA[0] + LB[0]; switch(flag) /*根据参与运算的两个数的符号进行不同的操作*/ case 0: case 2: Lc[0] = LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/ pA = LA; pB = LB; (1) ; break; case 1: /*LA与LB异号*/ /*比较两者的绝对值大小,结果符号与较大者相同*/ flag = (2) ; if(flag > 0) /*LA较大*/ LC[0] = LA[0]; pA = LA; pB = LB; else if(flag LC[0] = LB[0]; pA = LB; pB = LA; else/*LA与LB相等*/ LC[0] = 0; LC[1] = 0; return 1; flag = -1; break; default: return 0; break; /*switch*/ /*绝对值相加减*/ /*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减情况*/ (3) ; N = LA[1] > LB[1] ? LA[1] : LB[1]; for(i = 0; i if(i >= pA[1])/*LA计算完毕*/ carry += flag * pB[i+2]; else if(i >= pB[1])/*LB计算完毕*/ carry += pA[i+2]; else carry += pA[i+2] + flag * pB[i+2]; LC[i+2] = carry % 10; carry /= 10; if( (4) )/*需要借位,针对减法*/ LC[i+2] += 10; carry--; /*for*/ if( (5) )/*最高进位,针对加法*/ LC[i+2] = carry; i++; if(LC[i+1] == 0) i--; /*若最高位为零,针对减法*/ LC[1] = i; return 1; ;/*ADD*/
问答题[说明]为了有效记录交通事故情况,欲设计一个交通事故记录系统。一辆汽车有一个唯一的“车牌号”,车主购买汽车时需要提供相关信息,包括身份证、姓名、年龄、性别、地址等。一个车主可以拥有多辆汽车,而一辆汽车只有一个车主。驾驶员不一定是车主,因此记录交通事故时要记录驾驶员身份证号,同时记录事故发生时刻。图2-1描绘了人、汽车、交通事故三个实体类型及实体间联系的一个E-R图。[图2-1]对应的关系模式为:·人(身份证号,姓名,性别,年龄,地址)·汽车(车牌号,型号)·事故(车牌号,身份证号,时刻,损失,描述)·拥有(身份证号,车牌号)1.指出每种关系模式的主键。
问答题【说明】下面是一个Applet程序,其功能是将完整的图像显示于Applet的区块中,然后可以通过拖动鼠标让图像随着鼠标拖动的轨迹而移动。程序运行结果如图5所示。importjava.applet.*;importjava.awt.*;/*<appletcode="ex4_7.class",width=800height=400></applet>*/publicclassex4_7extendsApplet{private|mageilmg;privateintxPos,yPos;publicvoidinit(){xPos=yPos={{U}}(1){{/U}};ilmg=getlmage({{U}}(2){{/U}}"ex4_7.jpg");}publicvoidpaint(Graphicsg){g.drawlmage(ilmg,xPos,yPos,{{U}}(3){{/U}});}publicboolean{{U}}(4){{/U}}(Evente,intx,inty){xPos=x;yPos=y;{{U}}(5){{/U}};returntrue;}}ex4_7.html<HTML><HEAD><TITLE>ex4_7</TITLE></HEAD><BODY><appletcode="ex4_7.class"width=800height=400></applet></BODY></HTML>
问答题【说明】
供应商—零件—工程项目数据库由以下4个关系模式构成:
S(SNO,SNAME,STATUS,CITY)
P(PNO,PNAME,COLOR,WEIGHT,CITY)
J(JNO,TNAME,CITY)
SPJ(SNO,PNO,JNO,QTY)
其中,供应商S,零件P和工程项目J分别由供应商号(SNO),零件号(PNO)和工程项目号(JNO)唯一标识。供货SPJ是指由某个供应商向某个工程项目供应某些数量的某种零件。 【问题1】
请用SQL语言完成如下的操作。
①找出给北京的工程项目提供不同的零件号:
②将没有供货的所有工程项目从J中删除;
③查询这样的工程项目号:供给该工程项目的零件P1的平均供应量大于供给工程项目n的任何一种零件的最大供应量。
【问题2】
定义一个视图,它由所有这样的工程项目(工程项目号与所在城市名称)组成:它们由供应商S1供货且使用零件P1。
问答题 阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。
【说明】 某营销企业拟开发一个销售管理系统,其主要功能描述如下:
1.接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理:修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理:将缺货订单录入缺货记录文件。
2.根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。
3.根据采购部门提供的进货通知单进行进货处理:修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。
4.根据保留的客户订单进行销售统计,打印统计报表给经理。
现采用结构化方法对销售管理系统进行分析与设计,获得如下图所示的顶层数据流图和0层数据流图。