问答题 阅读以下说明,回答问题1至问题3,将解答写在对应栏内。
【说明】 下面是某医院信息管理系统中需要的信息。
科室:科名、科地址、科电话、医生姓名。 病房:病房号、床位号、所属科室名。
医生:姓名、职称、所属科室名、年龄、工作证号。 病人:病历号、姓名、性别、诊断、主管医生、病房。
其中,一个科室有多个病房,多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但可以负责多个病人的诊治,一个病人的主管医生只有一个。
问答题[说明]假设某大型商业企业由商品配送中心和连锁超市组成,其中商品配送中心包括采购、财务、配送等部门。为实现高效管理,设计了商品配送中心信息管理系统,其主要功能描述如下:1.系统接收由连锁超市提出的供货请求,并将其记录到供货请求记录文件。2.在接到供货请求后,从商品库存记录文件中进行商品库存信息查询。如果库存满足供货请求,则给配送处理发送配送通知;否则,向采购部门发出缺货通知。3.配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件。4.采购部门接到缺货通知后,与供货商洽谈,进行商品采购处理,合格商品入库,并记录采购清单至采购清单记录文件、向配送处理发出配送通知,同时通知财务部门给供货商支付货款。该系统采用结构化方法进行开发,得到待修改的数据流图如下图所示。
问答题[说明] 以下代码实现了当用户推出界面时,判断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 (1) (2) End Sub Private Sub Form_Unload ( Cancel As Integer ) Dim myval As String If (3) Then myval = MsgBox ( "保存文件的更改吗?", vbYesNoCancel, "提示信息" ) If (4) Then MsgBox "保存成功" End End If If (5) Then End If (6) Then Cancel = 1 End If End Sub
问答题【说明】
在一个航空公司的航班管理系统中,有以下一些事实。
(1)一个航班可能是一个或多个乘客的运输工具,每个乘客可能是一个或多个航班的旅客。
(2)一个且仅一个飞行员必须对每个航班负责,每个飞行员可能负责一个或多个航班。
(3)一个或多个飞行员必须对每个乘客负责,每个飞行员必须对一个或多个乘客负责。
现有飞行员的实体如下:
飞行员(飞行员编号,航班编号,姓名,工资,起飞地,到达地,飞行信用时间)
说明:飞行信用时间是一个特定的航班分配给一名飞行员,授权他可以驾驶管理这个航班。 【问题1】
实体“飞行员”是否符合1NF,如果不符合,如何将它规范化。
【问题2】
由问题1得到的实体“飞行员”是否符合2NF,如果不符合,如何将它规范化。
【问题3】
指出最后得到关系模式的候选码。
问答题 阅读以下说明和流程图(如图1所示),回答问题1至问题4。
【说明】 本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式
(A-(B*C+D)*E)/(F+G)) 的后缀表示为
ABC*D+E*-FG+/
为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:
数组 IN[]存储中缀表达式; 数组
POLISH[]存储其后缀表达式; 数组 S[]是一个后进先出栈;
函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:{{B}}
表2{{/B}}
CHAR
PRIOR(XHAR)
*/+ -()
4321
问答题下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<malloc.h>#include<string.h>#include<conio.h>#defineN10typedefstructsscharnum[10];intorder;STU;STU*fun(STUa[],intm)STUb[N],*tt;inti,j,k;(1);for(i=0;i<N;i++)b[i]=a[i];for(k=0;k<m;k++)for(i=j=0;i<N;i++)if((2))j=i;tt[k]=b[j];b[j].order=0;return(3);outresult(STUa[],FILE*pf)inti;for(i=0;i<N;i++)fprintf(pf,"No=%sMark=%d/n",a[i].num,a[i].order);fprintf(pf,"/n/n");main()STU[N]="A01",80,"A02",79,"A03",66,"A04",82,"A05",87,"A06",93,"A07",78,"A08",60,"A09",85,"A10",73;STU*p_order;inti,m;clrscr();printf("***TheOrigialdata***/n");outresult(a,stdout);printf("/nGivethenumeberofthestudentswhohavebetterscore:");scanf("%d",&m);while(m>10)printf("/nGivethenumberofthestudetswhohavebetterscore:");scanf("%d",&m);p_order=fun(a,m);printf("***THERESULT***/n");printf("***Thetopstudents***/n");for(i=0;i<m;i++)printf("%s%d/n",p_order[i].num,p_order[i].order);free(p_order);
问答题假定Games表存储参赛情况,如下的SQL语句是委员会用于查询“队名为‘China’的各个运动员各自夺取得的总积分”的不完整语句,请在空缺处填入正确的内容。 SEl3ECT (1) FROM Games WHERE ANo (2) (SELECT ANo FROM (3) WHERE ATeam="China") GROUP BY ANo;
问答题[说明] ①为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员 radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。 ②为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序 Circle c; c. SetRadius(5); c. Print(); 将输出:The circle has radius of 5! ③完成友元函数void CompareR(Circle *c1,Circle *c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用if - else结构完成。 输出结果如下: The circle has radus of 5 ! The circle has radius of 10 ! cl <c2 源程序文件test7_3, cpp 清单如下: #include < iostream, h > class Circle public: Circle( ) :radius(5) (1) void SetRadius(int r) radius = r; int GetRadius() return radius; (2) friend void CompareR(Circle * c1,Circle * c2); private: int radius; ; void CompareR(Circle * c! ,Circle * c2) (3) cout << "c1 > c2" << endl; else if ( (c1 -> GetRadius( )) == (c2 -> GetRadius( ))) tout < <"c1=c2' < < endl; else if ( (c1 -> GetRadius( )) < ( c2 -> GetRadius( ))) cout <<"c1<c2" <<endl; void main( ) Circle c1 c1. SetRadius(5) c1. Print( ) Circle c2(10); c2. Print( ) CompareR(
问答题【流程图】1. 【问题1】 上面程序的功能是什么?
问答题【说明】某公司要开发一个销售管理系统,该系统的主要功能是:处理客户和销售员送来的订单;工厂是根据订货安排生产的,交出货物同时开出发票,收到客户付款后,根据发票存根进行应收款处理。每张订单由订单号,若干头信息和订单细节组成。一张订单可定购多种产品,工厂对大宗订货给予优惠。每种产品都规定了不同订货数量的折扣。根据—上述要求公司的销售部王经理写下了以卜数据表结构:客户:(客户号,客户名,地址,电话)订单:(订单号,客户号,产品号,订货数,订货日期,交货日期,金额)应收账款:(客户号,订单号,发票号,应收金额,支付日期,支付金额,当前余额)产品描述:(产品号,产品名,单价,重量)折扣规则:(产品号,订货量,折扣)
问答题阅读以下某旅馆客房管理系统的算法说明和程序流程图,根据要求回答问题1~问题4。[算法说明]某旅馆共有N间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组ROOM、RANK、NBED和STATUS中。房间等级值为1、2或3。房间的状态值为0(空闲)或1(占用)。客房是以房间(不是床位)为单位出租的。程序流程图(见图6-21)所反映的算法是,根据几个散客的要求预订一间空房。程序的输入为:人数M,房间等级要求R(R=0表示任意等级都可以)。程序的输出为:所有可供选择的房间号。
问答题[说明]下面给出的是某房产管理系统的一套分层数据流图。其功能描述如下:(1)系统随时根据住房送来的入住单更新住户基本信息文件;(2)每月初系统根据物业管理委员会提供的月附加费(例如清洁费、保安费、大楼管理费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出收据给住户;(3)系统定期向物业管理委员会提供住房分配表和交费情况表;(4)住户因分户或换房,在更新住户基本信息文件的同时,系统应立即对这些住户做月租费计算,以了结分户或换房前的房租。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1是顶层数据流图,图2是第0层数据流图,图3是第1层数据流图,其中A是加工1的细化图,B是加工2的细化图。假定题中提供的顶层图是正确的,请回答下列问题。图1图2图3
问答题[说明]在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式进行组合将小对象组合,成复杂的对象。以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图6-1显示了各个类间的关系。以下是Java语言实现,能够正确编译通过。[Java代码]//Builder.java文件public(1)classBuilderpublicabstractvoidmakeTitle(Stringtitle);publicabstractvoidmakeString(Stringstr);publicabstractvoidmakeItems(String[]items);publicabstractObjectgetResult();//Director.java文件publicclassDirectorprivate(2)builder;publicDirector(Builderbuilder)this.builder=builder;publicObjectconstruct()builder.makeTitle("Greeting");builder.makeString("从早上到白天结束");builder.makeItems(newString[]"早安","午安",);builder.makeString("到了晚上");builder.makeItems(newString[]("晚安","好梦",);returnbuilder.getResult();//TextBuilder.java文件publicclassTextBuilder(3)BuilderprivateStringBufferbuffer=newStringBuffer();publicvoidmakeTitle(Stringtitle)buffer.append("『"+title+"』"/n/n");publicvoidmakeString(Stringstr)buffer.append('■'+str+"/n/n");publicvoidmakeItems(String[]items)for(inti=0;i(4);i++)buffer.append('·'+items[i]+"/n");buffer.append("/n");publicObjectgetResult()returnbuffer.toString();//Main.java文件publicclassMainpublicstaticvoidmain(String[]args)Directordirector=newDirector(newTextBuilder());Stringresult=(String)director.(5);System.out.println(result);
问答题[说明] 以下程序实现了在applet里移动图形文件,仔细阅读代码和相关注释,将程序补充完整。 [代码6-1] import j ava. awt. *; import j ava.awt.event.*; import java.applet. Applet; public class AppCIU extends Applet implements MouseMotionListener, MouseListener Image img; // 声明 Image 类类型的变量 img int x=70,y=60,posX=70,posY=60,dx,dy; public void init ( ) img=getImage ( getCodeBase ( ) ,"mouse.gif" ); //载入影像 addMouseListener ( this ); addMouseMotionListener ( this ); public void mousePressed ( MouseEvent e ) dx=e.getX()-posX; //取得按下之点与基准点X方向的距离 dy=e.getY()-posY; //取得按下之点与基准点Y方向的距离 public void mouseDragged ( MouseEvent e ) (1) (2) if ( dx>0 (3) public void paint ( Graphics g ) (4) (5) (6) 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 ) ;
问答题[问题4]
请从下面关于摘要函数的说法中选出所有正确的描述。
[a]很容易使不同的输入数据生成相同的输出数据。
[b]根据输入数据获取输出数据的时间非常短。
[c]根据输入数据获取输出数据的时间非常长。
[d]输出数据的长度比输入数据的长度要长。
[e]根据输出数据无法还原出输入数据。
问答题阅读下列程序说明,将应填入{{U}} (n) {{/U}}处的字句写在答卷纸的对应栏内。
【程序说明】
对于一个公司的雇员来说,无非有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,{{U}} (1) {{/U}}.) ,bouns(theBouns) { }
float getBouns0 const { return bouns; }
float pay(float hoursWorked) const
return{{U}} (2) {{/U}};
}
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{{U}} (3) {{/U}}; }
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{{U}} (4) {{/U}}) const;
protected:
bool salaried;
};
float Manager ::pay(float hoursWorked) const
{
if (salaried) //固定付薪方式
return payRate;
else //按小时付薪
return{{U}} (5) {{/U}};
}
//主管人员类
class Supervisor:{{U}} (6) {{/U}}
{
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
{
{{U}} (7) {{/U}}
float bouns;
#include "employee.h"
#nclude "iostream.h"
void main()
{
{{U}} (8) {{/U}}*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: "<<{{U}} (9) {{/U}}<<endl;
Cout<<"Pay: "<<{{U}} (10) {{/U}}<<endl; //设每月工作80小时
}
}
问答题
阅读下列说明和图,回答问题1至问题3。 [说明]
某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预定、入住登记、帐务结算、退房,以及将服务项目记入客人帐单。
旅客包括散客和团体,散客预定或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。
旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。
旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。
为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预定和维修。 ·
客人入住后,客房处于占用状态; · 客人退房后,客房处于空闲状态; ·
客人预定后,客房处于已预定状态; · 预定客人入住后,客房处于占用状态; ·
预定客人取消预定后客房处于空闲状态; · 需要维修时客房处于维修状态; ·
维修完成后客房处于空闲状态。
该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图3-1是该系统的类图的一部分,图3-2描述了客房状态的转变情况。
[图3-1] [图3-2]
问答题【说明】某网络故障诊断系统使用故障代理(agent、SNMPTrap等)来检测各种意外情况,如大幅丢包、路由冲突、广播风暴等。网络管理员可以在安装该系统时配置安全监控程序(如故障代理程序、实时诊断程序、报警器等),也可以在系统运行时修改配置,通过网络状态采集器和故障特征数据库,并通过控制面板上的键盘与系统进行信息交互。在安装过程中,系统给每个故障代理赋予一个编号(即ID)和类型,并设置管理员密码以启动和关闭系统,设置故障代理事件发生时应自动拨出的电话号码。当系统检测到一个故障代理事件时,就激活警报,拨出预置的电话号码,并报告位置和检测到的事件的性质等信息。该网络故障诊断系统的顶层图如图13-16所示,0层图如图13-17所示,加工4的子图如图13-18所示。【问题1】将顶层图中的(1)和(2)空填充完整。【问题2】0层图中的数据文件“配置信息”是多余的吗?若是,请说明理由;若不是,请指出它会影响。层图中的哪些(哪个)加工(除加工“1系统配置”之外)?【问题3】指出图13-18所示的加工4的子图中遗漏的数据流。注意:书写格式为“缺少从××到××的数据流××”或“××缺少输入(出)数据流××”。若未按格式书写,将被扣分。
问答题
