问答题【问题1】
对文法G进行改写,然后对每个非终结符写出不带回溯的递归于程序。
问答题[说明]某汽车维修站拟开发一套小型汽车维修管理系统,对车辆的维修情况进行管理。(1)对于新客户及车辆,汽车维修管理系统首先登记客户信息,包括客户编号、客户名称、客户性质(个人、单位)、折扣率、联系人、联系电话等信息;还要记录客户的车辆信息,包括车牌号、车型、颜色等信息。一个客户至少有一台车。客户及车辆信息如表1所示。(2)记录维修车辆的故障信息,包括维修类型(普通、加急)、作业分类(大、中、小修)、结算方式(自付、三包、索赔)等信息。维修厂的员工分为维修员和业务员。车辆维修首先委托给业务员。业务员对车辆进行检查和故障分析后,与客户磋商,确定故障现象,生成维修委托书,如下表2所示。表1 客户及车辆信息客户编号GS0051客户名称××公司客户性质单位折扣率95%联系人杨浩东联系电话82638779车牌号**0765车型帕萨特颜色白色车辆类别微型车表2 维修委托书No.20070702003 登记日期:2007-07-02车牌号**0765客户编号GS0051维修类型普通作业分类中修结算方式自付进厂时间2007070211:09业务员张小江业务员编号012预计完工时间故障描述车头损坏,水箱漏水(3)维修车间根据维修委托书和车辆的故障现象,在已有的维修项目中选择并确定一个或多个具体维修项目,安排相关的维修工及工时,生成维修派工单。维修派工单如下表所示。维修派工单No.200700702003维修项目编号维修项目工时维修员编号维修员工种012维修车头5.00012机修012维修车头2.00023漆工015水箱焊接补漏1.00006焊工017更换车灯1.00012机修(4)客户车辆在车间修理完毕后,根据维修项目单价和维修派工单中的工时计算车辆此次维修的总费用,并记录在委托书中。[概念结构设计]根据需求阶段收集的信息,设计的实体联系图(不完整)如下图所示。图中的业务员和维修工是员工的子实体。[逻辑结构设计]逻辑结构设计阶段设计的关系模式(不完整)如下。客户(______,折扣率,联系人,联系电话)车辆(车牌号,客户编号,车型,颜色,车辆类别)委托书(______,维修类型,作业分类,结算方式,进厂时间,预计完工时间,登记日期,故障描述,总费用)维修项目(维修项目编号,维修项目,单价)派工单(______,工时)员工(______,工种,员工类型,级别)
问答题
阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。 [说明]
某汽车数字仪表系统将完成下述功能: (1)通过模一数转换,实现传感器和微处理器的接口。
(2)在发光二极管面板上显示数据。 (3)指示速度(mph)、行驶里程、油耗(mpg)等。
(4)指示加速或减速。
以下是经分析得到的数据流图,有些地方有待填充,假定顶层数据流图是正确的。图1-1是顶层数据流图,图1-2是第0层数据流图,图1-3是第1层数据流图,其中A是加工1的细化图,B是加工2的细化图。图中,△sps表示转速sps的瞬时变化值,若△sps>0则汽车加速,△sps<0则减速,△sps=0则匀速。假定题中提供的顶层图是正确的,请回答下列问题。
[图1-1]
[图1-2] [图1-3]
问答题【说明】 本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式 (A-(B*C+D)*E)/(F+G)) 的后缀表示为 ABC*D+E*-FG+/ 为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下: 数组 IN[]存储中缀表达式; 数组 POLISH[]存储其后缀表达式; 数组 S[]是一个后进先出栈; 函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2: 表2 CHAR PRIOR(XHAR) */ + - ( ) 4 3 2 1
问答题【说明】 流程图描述了某高校图书订购与编目系统的处理流程。全校的图书典藏在校图书馆和各系的资料室中。学校每年分若干批向出版单位订购图书,同一批订购的图书将陆续邮寄到学校。出版单位在寄出图书的同时附上到书清单和发票,发票上仅给出一份到书清单中书的总册数和总金额。学校收到图书和发票后,先参照订购单验收,然后进行编目,并把有关信息存放在书种文件、书名文件、作者文件和复本文件中,以供读者检索。 书种文件记录了每种书的有关信息。所谓一种书是指同一作者、同一书名、同一出版单位和同一出版年份出版的书。例如,2004年张明在科技出版社出版了《软件工程》(印数8000册)和《数据库基础》(印数5000册),则张明在2004年出版了两种书。在全校的藏书中,如果一种书只有一册,则该书的信息存放在书种文件中:如果一种书有多册,则其中一册书的信息存放在书种文件中,其余的书作为复本将信息存放在复本文件中。复本文件的结构与书种文件的结构相同,每种书都有一个书号,书号唯一地标识了一种书。在书库中,每册书有一个登录号,登录号唯一地标识了一册书。此外,为了图书检索的方便,将图书按学科分类,分类号用来标识不同的学科领域。 各类单据和文件的结构如下所示。 订购单:订购批号、书名、作者名、出版单位、出版年份、单价、订购册数、订购部门代码、订购日期。 到书清单:订购批号、书名、作者名、出版单位、出版年份、单价、册数。 发票:订购批号、发票号、总册数、总金额。 书种文件:分类号、登录号、书名代码、作者代码、出版单位、出版年份、单价、复本标志、典藏部门代码、借出标志。 其中,复本标志用来指示该种书在书库中有没有复本:对于书名相同的若干种书,书名代码是相同的。 书名文件:书名代码、书名。 作者文件:作者代码、作者名。
问答题层次模型不能直接表示多对多联系,为什么?可采用哪些方法进行多对多联系的表示。
问答题【说明】下面是一个Applet程序,其功能是建立2个文本区域,一个为编辑区,一个为只读区;建立2个按钮,一个实现将编辑区中被鼠标选定的文本内容拷贝到只读区中,一个实现将只读区的全部文本内容清空。程序运行结果如图3所示。importjava.awt.*;importjava.applet.*;/*<appletcode="ex3_6.class"width=800height=400></applet>*/publicclassex3_6extendsAppletprivateButtonokBtn,clearBtn;privateStringstrMessage;privateTextAreatArea1,tArea2;publicvoidinit()strMessage="Hello!Welcometothetest!/n"+"Wishyougoodluck!";tArea1=newTextArea(10,25);(1);tArea2=newTextArea(10,25);(2);OkBtn;newButton("Copy");dearBtn=(3);add(tArea1);add(tArea2);add(okBtn);add(clearBtn);publicbooleanaction(Evente,Objecto)if(e.target==okBtn)tArea2,setText((4));elseif(e.target==clearBtn)(5);returntrue;ex3_6.htm|<HTML><HEAD><TITLE>ex3_6</TITLE></HEAD><BODY><appletcode="ex3_6.class"Width=800height=400></applet></BODY></HTML>
问答题【说明】某汽车数字仪表板将完成下述功能:(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层数据流图(如图9-15所示)中有一条缺失的数据流,请指出该数据流的起点和终点。加工1的细化图(如图9-16中的A所示)中有一条缺失的数据流,请指出该数据流的起点和终点。
问答题【说明】
①定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。
②完成类Table的成员函数print()的定义,该函数以“x*y=z”的格式打印出九九表中的一个乘法算式,请使用格式化输出函数printf实现。
③完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕。
④补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。
源程序文件test8_3.cpp清单如下:
#include <iostream, h >
#include < stdio, h >
class Table
}
{{U}} (1) {{/U}}
int z;
public:
void print (int x,int y,int z);
};
void Table::print (int x,int y,int z)
{
{{U}} (2) {{/U}}
}
Class Table9:public Table
{
public:
void print();
};
void Table9::print()
{
{{U}} (3) {{/U}}
int x,y,z;
for(i=1;i<10;i++)
{
for(j=1;j<i+1;j++)
{
x=i;
y=j;
z=i*j;
Table::print(y,x,z);
}
printf("/n");
}
}
main()
{
//* *4* *
return 0;
}
问答题阅读以下说明,回答问题1至问题3,将解答写在对应栏内。
【说明】 有如下关系数据库:
S(SNO,SN,STATUS,CITY) P(PNO,PN,COLORS,WEIGHT)
J(JNO,JN,CITY) SPJ(SNO,PNO,JNO,QTY)
其中,S为供应单位,P为零件,J为工程项目,SPJ为工程订购零件的订单,其语义为:某供应单位供应某种零件给某个工程,请用SQL完成下列操作。
问答题[问题3]根据数据流图的设计原则,阅读下图所示的数据流图,找出其中的错误之处。
问答题[说明]已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万~10万元(不包括10万元)的采购单,董事长可以审批10万~50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。采用责任链设计模式(ChainofResponsibility)对上述过程进行设计后得到的类图如下图所示。[Java程序]classPurchaseRequest{publicdoubleAmount;//一个采购的金额publicintNumber;//采购单编号publicStringPurpose;//采购目的};classApprover//审批者类{publicApprover(){successot=null;}publicvoidProcessRequest(PurchaseRequestaRequest){if(successor!=null){successor.______;}}publicvoidSetSuccessor(ApproveraSuccesssor){successor=aSuccesssor;}private______successor;};classCongressextendsApprover{publicvoidProcessRequest(PurchaseRequestaRequest){if(aRequest.Amount>=500000){/*决定是否审批的代码省略*/}else______.ProcessRequest(aRequest);}};classDirectorextendsApprover{publicvoidProcessRequest(PurchaseRequestaRequest){/*此处代码省略*/}};classPresidentextendsApprover{publicvoidProcessRequest(PurchaseRequestaRequest){/*此处代码省略*/}};classVicePresidentextendsApprover{publicvoidProcessRequest(PurchaseRequestaRequest){/*此处代码省略*/}};publicclassrs{publicstaticvoidmain(String[]args)throwsIOException{CongressMeeting=newCongress();VicePresidentSam=newVicePresident();DirectorLarry=newDirector();PresidentTammy=newPresident();//构造责任链Meeting.SetSuccessor(null);Sam.SetSuccessor(______);Tammy.SetSuccessor(______);Larry.SetSuccessor(______);//构造一采购审批请求PurchaseRequestaRequest=newPurchaseRequest();BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));aRequest.Amount=Double.parseDouble(br.readLine());______.ProcessRequest(aRequest);//开始审批return;}}
问答题[说明]已知对某载客车辆(Car)进行类建模,如图4-20所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。[Java代码]
问答题[问题3](7 分)
根据系统功能和数据流图填充下列数据字典条目中的(1)和(2):
查询请求信息=[查询读者请求信息| 查询图书请求信息]
读者情况=读者号+姓名+所在单位+{借书情况}
管理工作请求单= (1)
入库单= (2)
问答题【说明】 (1)流程图描述某大型商店商品销售的数据处理流程。 (2)商店设有若干柜台,同一种商品可能在几个柜台上销售,各柜台每天提供一组日销售数据,其格式如下: 日期、柜台号、商品代码、销售数量、商品代码、销售数量…… (3)数据处理系统每日产生一份反映各柜台当日销售金额和商店日销售金额的“日销售金额报告”,必要时还产生一份“商品请购报告”,给出那些低于最低库存量的商品代码、商品名称、最低库存量和实际库存量。处理过程中产生存档的“日销售文件”和临时工作文件“日销售量文件”和“旧销售金额文件”。 (4)系统中所用到的数据均来自数据文件。 (5)流程图中的商品库存文件的记录已按关键字“商品代码”排序。
问答题[问题1] 试画出ER图,并在图上注明属性、联系类型、实体标识符;
问答题【说明】设某城市有n个车站,并有m条公交线路连接这些车站,设这些公交车都是单向的,这n个车站被顺序编号为0至n-1。本程序,输入该城市的公交线路数、车站个数,以及各公交线路上的各站编号,求得从站0出发乘公交车至站n-1的最少换车次数。 程序利用输入信息构建一张有向图G(用邻接矩阵g表示),有向图的顶点是车站,若有某条公交线路经i站到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<i,j>。如果这样,从站点x至站点y的最少上车次数便对应图G中从点x到点y的最短路径长度。而程序要求的换车次数就是上车次数减1。 #include <stdio.h> #define M 20 #define N 50 int a[N+1]; /*用于存放一条线路上的各站编号*/ int g[N][N]; /*严存储对应的邻接矩阵*/ int dist[N]; /*严存储站0到各站的最短路径*/ int m, n; void buildG() int i, j, k, sc, dd printf(“输入公交线路数,公交站数/n”); scanf("%d%d",&m,&n); for (i=0;i<n;i++) /*邻接矩阵清0*/ for(j=0;j<n;j++) g[i][j]=0; for(i=0;i<m;i++) printf("沿第%d条公交线路的各站编号(0<=编号<=%d,-1结束):/n)",i+1,n-1); sc=0; /* 当前线路站计数器*/ while(1) scanf("%d",&dd); if(dd=-1)break; if(dd>=0 && dd<n) (1) ; a[sc]=-1; for(k=1;a[k]>=0;k++) /*处理第i+1条公交线路*/ for(j=0;j<k;j++) g (2) =1; int minLen() int j,k; for(j=0;j<n;j++) dist[j]=g[0][j]; dist[0]=1; do for(k=-1,j=0;j<n;j++) /*找下一个最少上车次数的站*/ if(dist[j]>0 &&(k==-1||dist[j]<dist[k])) k=j; if(k<0||k==n-1) break; dist[k]=-dist[k]; /*设置k站已求得上车次数的标记*/ for (j=1;j<n;j++) /*调整经过k站能到达的其余各站的上车次数*/ if( (3) && (dist[j]=0||-dist[k]+1<dist[j])) dist[j]= (4) ; while(1); j=dist[n-1]; return (5) ;void main() int t; buildG(); if((t=minLen())<0) printf("无解!/n");else printf(“从0号站到%d站需换车%d次/n”,n-1,t);
问答题[说明]
某餐厅供应各种标准的营养套餐。假设菜单上共有n项食物m
1
,m
2
,…,m
n
每项食物m
i
的营养价值为v
i
,价格为p
i
,其中i=1,2,…,n,套餐中每项食物至多出现一次。客人常需要一个算法来求解总价格不超过M的营养价值最大的套餐。
问答题【说明】 算法2-1是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如下所示: 文件 提示信息 (1+2) abc) 缺少对应左括号:第2行,第4列 ((def)gx) 缺少对应左括号:第3行,第10列 (((h) ij)(k (1ml) 缺少对应右括号:第5行,第4列;第4行,第1列 在算法2-1中,stack为一整数栈。算法中各函数的说明见表4。 表4 函数名 函数功能 push (int i) 将整数i压人栈stack中 pop( ) stack的栈顶元素出栈 empty( ) 判断stack栈是否为空。若为空,函数返回1,否则函数返回0 nextch( ) 读取文本文件中的下—个字符,井返回该字符的ASCII值,将字 符所在的行号以及字符在行中的位置分别存储到变量row和col 中,若遇到文件结束符,则将变量EOF置为true kind (char ch) 判断字符ch是左括号还是右括号,若是左括号,函数返回1, 若是右括号,函数返回2,若两者都不是,函数返回。 【算法2-1】将栈stack 置空,置EOF为falsech < - nextch();while( not EOF) k < - kind(CH); if(k== (1) ) push( (2) );push( (3) ); elseif(k== (4) ) if(not empty()) pop( ) ;pop( ); else 显示错误信息(缺少对应左括号或右括号); 显示行号row;显示列号col; endif endif ch < - nextch( ); endwhileif(not empty()) 显示错误信息(缺少对应左括号或右括号); while(not empty()) row < - pop() ; col <- pop(); 显示行号row; 显示列号col; endwhile endif 为了识别更多种类的括号,对算法2-1加以改进后得到算法2-2。算法2-2能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(char ch)的参数及其对应的返回值见表5。 表五 ch ( ) [ ] 其他 返回值 1 2 3 4 5 6 0 【算法2-2】 将栈stack置空,置EOF为false ch< -nextch(); while(not EOF) k <-kind(ch); if( k >0) if( 判断条件1 ) push( (5) );push( (6) );push( (7) ); elseif( 判断条件2 and 判断条件3 ) pop() ;pop() ;pop(); else 显示行号row; 显示列号col; endif endif ch < - nextch();endwhileif(not empty( ) ) 显示错误信息(缺少对应左括号或右括号); while( not empty( ) ) pop( ); row←pop( ); col←pop( ); 显示行号row;显示列号col; endwhileendif
问答题[说明]某大学城图书馆需要在无线阅览厅的某些位置上放置无线接入点AP(AccessPoin)。假设每个无线AP覆盖范围的半径是6米,因此必须使得每台笔记本电脑上的无线网卡到某个无线AP的直线距离不超过6米。为了简化问题,假设所有无线网卡在同一直线上,并且无线AP沿该直线放置。该问题可以建模为如图1-13所示,其中直线表示无线网卡所在的直线,实心正方形表示无线网卡。现采用贪心策略实现用尽可能少的无线AP覆盖所有的无线网卡。实现贪心算法的流程如图1-14所示。其中,①d[i](1≤i≤N)表示第i张无线网卡到通道A端的距离,N表示无线网卡的总数,无线网卡的编号按照无线网卡到通道A端的距离从小到大进行编号:②s[k]表示第k(k≥1)个无线AP到通道A端的距离。算法结束后k的值为无线AP的总数。
