问答题[问题2] 请用IDEF0。图描绘该功能的需求。
问答题[说明]现有n(n<1000)节火车车厢,顺序编号为1,2,3,…,n,按编号连续依次从A方向的铁轨驶入,从B方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到A方向的铁轨上;一旦车厢驶入B方向铁轨就不能再回到车站,如下图所示,其中Station为栈结构,初始为空且最多能停放1000节车厢。下面的C程序判断能否从B方向驶出预先指定的车厢序列,程序中使用了栈类型STACK,关于栈基本操作的函数原型说明如下。voidInitStack(STACK*s):初始化栈。voidPush(STACK*s,inte):将一个整数压入栈,栈中元素数目增1。voidPop(STACK*s):栈顶元素出栈,栈中元素数目减1。intTop(STACKs):返回非空栈的栈顶元素值,栈中元素数目不变。intIsEmpty(STACKs):若是空栈则返回1;否则返回0。[C程序]#include<stdio.h>/*此处为栈类型及其基本操作的定义,省略*/intmain(){STACKstation;intstate[1000];intn;/*车厢数*/intbegin,i,j,maxNo;/*maxNo为A端正待入栈的车厢编号*/printf("请输入车厢数:");Scanf("%d",&n);printf("请输入需要判断的车厢编号序列(以空格分隔):");if(n<1=return-1;for(i=0;i<n;i++)/*读入需要驶出的车厢编号序列,存入数组state[]*/scanf("%d",______;/*初始化栈*/maxNo=1;for(i=0;i<n;={/*检查输出序列中的每个车厢号state[i]是否能从栈中获取*/if(______){/*当栈不为空时*/if(state[i]=Top(station)){/*栈顶车厢号等于被检查车厢号*/printf("%d",Top(station));Pop(i++;}elseif(______){printf("error\n");return1;}else{begin=______;for(j=begin+1;j<=state[i];j++){Push(}}}else(/*当栈为空时*/begin=maxNo;for(j=begin;j<=state[i];j++){Push(}maxNo=______;}}printf("OK");return0;}
问答题阅读以下说明和数据流图,根据要求回答下列问题。[说明]现准备为某银行开发一个信用卡管理系统CCMS,该系统的基本功能如下。1.信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS。如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。2.信用卡激活。信用卡客户向CCMS提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功激活。3.信用卡客户信息管理。信用卡客户的个人信息可以在CCMS中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。4.交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在CCMS中。信用卡客户可以通过CCMS查询并核实其交易信息(包括信用卡交易记录及交易额)。图1和图2分别给出了该系统的顶层数据流图和0层数据流图的初稿。图1图2
问答题[说明]某供销系统接受顾客的订货单,当库存中某配件的数量小于订购量或库存量低于一定数量时,向供应商发出采货单;当某配件的库存量大于或等于订购量时,或者收到供应商的送货单时并更新了库存后,向顾客发出提货单。该系统还可随时向总经理提供销售和库存情况表。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1是顶层数据流图,图2是第0层数据流图,图3是第1层数据流图,其中(A)是加工1的子图,(B)是加工2的子图。图1图2图3[数据字典](1)数据流条目订货单=配件号+配件名+规格+数量+顾客名+地址提货单=订货单+金额采货单=配件号+配件名+规格+数量+供应商名+地址送货单=配件号+配件名+规格+数量+金额(2)文件说明文件名:配件库存组成:配件号+配件名+规格+数量+允许的最低库存量
问答题【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程,同时指定2门侯选课程以备主选课程未选上。每门课程最多不能超过10人,最少不能低于3人,低于3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。【用例图】【表】表3-1学生课注册系统的实体类实体类说明Professor学校中讲课的教师Strdent学校中注册课程的学生Schedule学生在新学期选择登记的课程列表CourseCatalog学校所有课程的目录Course课程的基本信息CourseOffering新学期课程的开设信息,如课课教师、时间、地点等信息表3-2学生课程注册系统的边界类边界类说明LoginForm为教师、学生和注册管理提供登录的操作RegisterCoursesForm为学生提供选课注册的操作ViewReportForm为学生提供成绩查询的操作SelectTeachCoursesForm为教师提供查看学生选课情况的操作SubmitGradesForm为教师提供登记成绩的操作MaintainProfessorsForm为注册管理员提供维护教师信息的操作MaintainStudentsForm为注册管理员提供维护学生信息的操作MaintainCoursesForm为注册管理员提供维护课程信息的操作CloseRegistrationForm为注册管理员提供关闭注册的操作BillingSystemNotice提供与收费系统的信息交换接口表3-3学生课程注册系统的控制类控制类说明RegisterCoursesControl负责新学期学生的选课登记ViewReportControl负责学生成绩的查询SelectTeachCoursesControl负责新学期课程的学生选择情况SubmitGradesControl负责学生成绩的登记CloseRegistrationControl负责关闭课程注册【协作图】【时序图】注释1:学生打算注册新的课程。注释2:一张这学期可选择的课程列表。注释3:显示一张为学生选课用的空白登记表。1.【问题1】在UML中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有哪些的特征,并指出用例图中(1)~(3)处表示的内容。
问答题{{B}}试题1~试题4是必答题{{/B}}阅读以下某图书管理系统的技术说明和数据流图,根据要求回答问题1~问题4。[说明]某图书管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位和地址等)一起写入读者文件。该系统的图书管理功能主要分为购入新书、读者借书、读者还书及图书注销4个方面。(1)购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。(2)读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过10本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。(3)读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。(4)注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息查询功能主要包括读者信息查询和图书信息查询。其中,读者信息查询可得到读者的基本信息及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。该图书管理系统的顶层数据流图,如图2-21所示;该图书管理系统的第0层DFD图,如图2-22所示;其中加工2的细化图,如图2-23所示。
问答题【说明】Point是平面坐标系上的点类,Line是从Point派生出来的直线类。
#include <iostream.h>
class Point
{public:
Point (int x, int y) ;
Point (Point
~Point();
void set (double x, double y) ;
void print();
private:double X,Y;
};
Point::Point (int x, int y) //Point 构造函数
{X=x; Y=y; }
Point::Point ({{U}} (1) {{/U}}) //Point 拷贝构造函数
{X=p.X; Y=p.Y;}
void Point::set (double x, double y)
{X=x; Y=y; }
void Point::print()
{cout<<' ('<<X<<","<<Y<<") "<<endl; }
Point::~Point()
{cout<<"Point 的析构函数被调用! "<<endl;
class Line: public Point
{public:
Line (int x, int y, int k) ;
Line (Line
~Line();
void set (double x, double y, double k)
void print();
private:double K;
};
{{U}} (2) {{/U}}//Line 构造函数实现
{ K=k;}
{{U}} (3) {{/U}} //Line 拷贝构造函数实现
{K=s.K;}
void Line::set (double x, double y, double k)
{{{U}} (4) {{/U}};
K=k;
}
void Line::print()
{cout<<" 直线经过点";
{{U}} (5) {{/U}};
cout<<"斜率为: k="<<K<<endl;
}
Line: :~Line()
{cout<<"Line 析构函数被调用! "<<endl;
}
void main()
{Line 11 (1,1,2) ;
11 .print();
Linel2 (11) ;
12.set (3,2,1) ;
12.print();
}
问答题[说明]某航空公司会员积分系统(CFrequentFlyer)的主要功能描述如下:乘客只要办理该航空公司的会员卡,即可成为普卡会员(CBasic)。随着飞行里程数的积累,可以从普卡会员升级到银卡会员(CSilvet)或金卡会员(CCold)。非会员(CNonMember)不能累积里程数。每年年末,系统根据会员在本年度累积的里程数对下一年会员等级进行调整。普卡会员在一年内累积的里程数若满25,000英里但不足50,000英里,则自动升级为银卡会员;若累积的里程数在50,000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50,000英里以上,则自动升级为金卡会员。若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员;若累积的里程数达到25,000英里,但是不足50,000英里,则自动降级为银卡会员。银卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员。采用面向对象方法对会员积分系统进行分析与设计,得到如图1所示的状态图和图2所示的类图。图1某会员积分系统状态图图2某会员积分系统类图
问答题【问题5】
请使用数据字典条目定义形式,给出第0层DFD中的“手工分户账”数据流和第1层DFD中的“初录分户账”、“复录分户账”的关系。
问答题[说明]
以下程序实现了利用鼠标任意移动圆形的位置,仔细阅读代码和相关注释,将程序补充完整。
[代码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);
{{U}} (1) {{/U}}
ffm.addMouseMotionListener (frm);
frm.setVisible (true);
}
public void mousePressed (MouseEvent e)
{
{{U}} (2) {{/U}}
dy=e.getY ( ) -posY;
}
public void mouseDragged (MouseEvent e)
{
{{U}} (3) {{/U}}
y=e.getY ( ) -dy;
if(dx>0
{{U}} (4) {{/U}}
}
}
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) {}
}
问答题阅读下列程序说明和C程序,将应填入{{U}} (n) {{/U}}处的字句写在答卷纸的对应栏内。
【程序说明】
该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。
【程序】
#include <stdio.h>
void strmerge(char *a,char *b,char *c) //将字符串a,b合并到字符串c
{
char t,*w;
W=c;
while({{U}} (1) {{/U}})
{
//找到字符串a,b当前字符中较小的字符
if(*a<*b)
{
t=-*a,
{{U}}(2) {{/U}}
}
else if(*a>*b)
{
t=*b;
{{U}}(3) {{/U}}
}
else //字符串a,b 当前字符相等
{
t=-*a;
a-H-;
b-H-;
}
if({{U}} (4) {{/U}}) //开始,可直接赋值
*w=t;
else if(t!=*w)
//如果a,b中较小的当前字符与c中当前字符不相等,才赋值
{{U}} (5) {{/U}}
}
if(*a!='/O') //如果字符串a还没有结束,则将a的剩余部分赋给c
while(*a!='/0')
if(*a!=*w)
{
*(++w)=*a;
a++;
}
else
{{U}} (6) {{/U}}
if(*b!=",'/0') //如果字符串b 还没有结束,则将 b 的剩余部分赋给 c
while(*b !='/0')
if(*b!=*w)
{
*(++w)=*b;
b++;
}
else
b++;
{{U}}(7) {{/U}}
}
void strsort(char *s) //将字符串 s 中的字符排序
{
int i,j,n;
char t,*w;
w=s;
for(n=O;*w!='/O';n++) //得到字符串长度 n
w++;
for(i=O;i<n-1;i++) //对字符串 s 进行排序,按字母先后顺序
forO=i+ 1 ;j<n;j++)
if({{U}} (8) {{/U}}
{
t=s[i];
s[i]=s[j];
{{U}}(9) {{/U}}
}
}
void mainO
{
char s1 [100],s2[100],s3[100];
prinff("/nlPlease input the first string:");
scanfC("% s",s1 );
prinff("/nPlease input the second string:");
scanf("%s",s2);
strsort(s1); //将字符串s1 排序
strson(s2); //将字符串 s2 排序
prinff("%s/n',s1);
printfC % sW',s2);
s3[0]='/O'; //字符串 s3 的第一个字符先置'/0'结束标志
{{U}} (10) {{/U}}; //将s1和s2合并,按照字母顺序排列,
prinff("%s",s3);
}
问答题创建Athlete表时,ANo使用CHAR(6)并且唯一,AName使用CHAR(20),ASex使用CHAR(1),ATeam使用CHAR(20)。请在下列用于创建表Athelete的SQL语句空缺处填入正确的内容。 CREATE TABLE Athlete(ANo CHAR(6) NOT NULL, AName CHAR(20), ASex CHAR(1), ATeam CHAR(20) NOT NULL, ______);
问答题阅读下列说明和数据流图,回答问题1至问题3,将解答填入对应栏内。[说明]下面给出的是某房产管理系统的一套分层数据流图。其功能描述如下:(1)系统随时根据住房送来的入住单更新住户基本信息文件;(2)每月初系统根据物业管理委员会提供的月附加费(例如清洁费、保安费、大楼管理费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出收据给住户;(3)系统定期向物业管理委员会提供住房分配表和交费清况表;(4)住户因分户或换房,在更新住户基本信息文件的同时,系统应立即对这些住户做月租费计算,以了结分户或换房前的房租。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1是项层数据流图,图2是第0层数据流图,图1-3是第1层数据流图,其中A是加工1的细化图,B是加工2的细化图。假定题中提供的顶层图是正确的,请回答下列问题。[图1][图2][图3]
问答题试题四(15分)阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。[说明]假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,但费用不同。下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配1个不同的任务。程序中,N个任务从0开始依次编号,N个工人也从0开始依次编号,主要的变量说明如下:
问答题[说明]
某单位资料室需要建立一个图书管理系统,初步的需求分析结果如下。
(1)资料室有图书管理员若干名,他们负责已购入图书的编目和借还工作,每名图书管理员的信息包括工号和姓名。
(2)读者可在阅览室读书,也可通过图书流通室借还图书,读者信息包括读者ID、姓名、电话和E-mail,系统为不同读者生成不同的读者ID。
(3)每部书在系统中对应唯一的一条图书在版编目数据(CIP,以下简称书目),书目的基本信息包括ISBN号、书名、作者、出版商、出版年月,以及本资料室拥有该书的册数(以下简称册数),不同书目的ISBN号不同。
(4)资料室对于同一书目的图书可拥有多册(本),图书信息包括图书ID、ISBN号、存放位置、当前状态,每一本书在系统中被赋予唯一的图书ID。
(5)一名读者最多只能借阅10本图书,且每本图书最多只能借两个月,读者借书时需由图书管理员登记读者ID、所借图书ID、借阅时间和应还时间,读者还书时图书管理员在对应的借书信息中记录归还时间。
(6)当某书目的可借出图书的数量为零时,读者可以对其进行预约登记,即记录读者ID、需要借阅图书的ISBN号、预约时间等。
某书目的信息如表1所示,与该书目对应的图书信息如表2所示。
表1 书目信息
书 名
作者
出版商
ISBN号
出版年月
册数
经办人
数据结构
严蔚敏
吴伟民
清华大学出版社
ISBN 7-302-02368-9
1997.4
4
01
表2 图书信息
图书ID
ISBN号
存放位置
状态
经办人
C832.1
ISBN 7-302-02368-9
图书流通室
已借出
01
C832-2
ISBN 7-302-02368-9
图书阅览室
不外借
01
C832.3
ISBN 7-302-02368-9
图书流通室
未借出
01
C832.4
ISBN 7-302-02368-9
图书流通室
已预约
01
系统的主要业务处理如下。
(1)入库管理。图书购进入库时,管理员查询本资料室的书目信息,若该书的书目尚未建立,则由管理员编写该书的书目信息并录入系统;否则修改该书目的册数,然后编写并录入图书信息。对于进入流通室的书,其初始状态为“未借出”;而送入阅览室的书,其状态始终为“不外借”。
(2)借书管理。读者借书时,若有,则由管理员为该读者办理借书手续,并记录该读者的借书信息,同时将借出图书的状态修改为“已借出”。
(3)预约管理。若图书流通室没有读者要借的书,则可为该读者建立预约登记,需要记录读者ID、书的ISBN号、预约时间和预约期限(最长为10天)。一旦其他读者归还这种书,就自动通知该预约读者,系统将自动清除超出预约期限的预约记录并修改相关信息。
(4)还书管理。读者还书时,则记录相应借还信息中的“归还时间”,对于超期归还者,系统自动计算罚金(具体的计算过程此处省略)。系统同时自动查询预约登记表,若存在其他读者预约该书的记录,则将该图书的状态修改为“已预约”,并将该图书ID写入相应的预约记录中(系统在清除超出预约期限的记录时解除该图书的“已预约”状态);否则,将该图书的状态修改为“未借出”。
(5)通知处理。对于已到期且未归还的图书,系统通过E-mail自动通知读者;若读者预约的书已到,系统则自动通过E-mail通知该读者来办理借书手续。
问答题阅读下列说明和图,回答问题。[说明]某城市的各国家公园周边建造了许多供游客租用的小木屋和营地,为此该城市设置了一个中心售票处和若干个区域售票处。游客若想租用小木屋或营地,必须前往中心售票处进行预定并用现金支付全额费用。所有的预定操作全部由售票处的工作人员手工完成。现欲开发一信息系统,实现小木屋和营地的预定及管理功能,以取代手工操作。该系统的主要功能描述如下:(1)管理预定申请。游客可以前往任何一个售票处提出预定申请。系统对来自各个售票处的预定申请进行统一管理。(2)预定。预定操作包含登记游客预定信息、计算租赁费用、付费等步骤。(3)支付管理。游客付费时可以选择现金和信用卡付款两种方式。使用信用卡支付可以享受3%的折扣,现金支付没有折扣。(4)游客取消预定。预定成功之后,游客可以在任何时间取消预定,但需支付赔偿金,剩余部分则退还给游客。赔偿金的计算规则是,在预定入住时间之前的48小时内取消,支付租赁费用10%的赔偿金;在预定入住时间之后取消,则支付租赁费用50%的赔偿金。(5)自动取消预定。如果遇到恶劣天气(如暴雨、山洪等),系统会自动取消所有的预定,发布取消预定消息,全额退款。(6)信息查询。售票处工作人员查询小木屋和营地的预定情况和使用情况,以判断是否能够批准游客的预定申请。现采用面向对象方法开发上述系统,得到如表1所示的用例列表和表2所示的类列表。对应的用例图和类图分别如图1和图2所示。图1用例图图2类图表1用例列表用例名说明用例名说明Managelnquiries管理预定申请ManageCashPayment现金支付MakeReservation预定ManageCrCardPayment信用卡支付ManagePayment支付管理GetDiscount计算付款折扣CancelReservation游客取消预定AutoCancelReservation系统自动取消预定CheckAvailability信息查询CalculateRefund计算取消预定的赔偿金PublishMessage发布取消预定消息表2类列表用例名说明用例名说明NationalParlk国家公园Customer游客Reservation预定申请ReservationItem预定申请内容TicketingOfficer售票处CampSite营地Bungalow小木屋Payment付款Discount付款折扣CashPayment现金支付CreditCardPayment信用卡支付Rate租赁费用
问答题
问答题[说明]某汽车停车场欲建立一个信息系统,已经调查到的需求如下。1.在停车场的入口和出口分别安装一个自动栏杆、一台停车卡打印机、一台读卡器和一个车辆通过传感器等,其示意图见如图3-21所示。2.当汽车到达入口时,驾驶员按下停车卡打印机的按钮获取停车卡。当驾驶员拿走停车卡后,系统命令栏杆自动抬起;汽车通过入口后,入口处的传感器通知系统发出命令,栏杆自动放下。3.在停车场内分布着若干个付款机器。驾驶员将在入口处获取的停车卡插入付款机器,并缴纳停车费。付清停车费之后,将获得一张出场卡,用于离开停车场。4.当汽车到达出口时,驾驶员将出场卡插入出口处的读卡器。如果这张卡是有效的,系统命令栏杆自动抬起;汽车通过出口后,出口传感器通知系统发出命令,栏杆自动放下。若这张卡是无效的,系统不发出栏杆抬起命令而发出告警信号。5.系统自动记录停车场内空闲的停车位的数量。若停车场当前没有车位,系统将在入口处显示“车位已满”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。根据上述描述,采用面向对象方法对其进行分析与设计,得到如表3-11所示的类/用例/状态列表,如图3-22所示的用例图,如图3-23所示的初始类图以及如图3-24所示的描述入口自动栏杆行为的UML状态图。表3-11类/用例/状态列表用例名说明类名说明状态名说明Carentry汽车进入停车场CentralComputer停车场信息系统Idle空闲状态,汽车可以进入停车场Carexit汽车离开停车场PaymentMachine付款机器Disable没有车位ReportStatistics记录停车场的相关信息CarPark停车场,保存车位信息AwaitEntry等待汽车进入Barrier自动护栏AwaitTicketTake等待打印停车卡Carentrywhenfull没有车位时,汽车请求进入停车场EntryBarrier入口的护栏AwaitEnable等待停车场内有空闲车位ExitBarrier出口的护栏
问答题试题七(共15分)阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。采用责任链设计模式(ChainofResponsibility)对上述过程进行设计后得到的类图如图7-1所示。图7-1设计类图
问答题【说明】本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。
程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点的内容输出。
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
#include <string.h>
#define INF "text.in"
#define OUTF "wotd.out"
typedef struct treenode{
char *word;
int count;
struct treenode *left,*right;
}BNODE
int getword (FILE *fpt,char *word)
{ char c;
c=fgetc (fpt);
if ( c=EOF)
return 0;
while(!(tolower(c)>='a'
}
void binary_tree(BNODE **t,char *word)
{ BNODE *ptr,*p;int compres;
P=NULL;{{U}} (1) {{/U}};
while (ptr) /*寻找插入位置*/
{ compres=strcmp (word,{{U}} (2) {{/U}});/*保存当前比较结果*/
if (!compres)
{ {{U}} (3) {{/U}};return;}
else
{ {{U}} (4) {{/U}};
ptr=compres>0? ptr->right:ptr->left;
}
}
ptr= (BNODE*) malloc (sizeof (BNODE)) ;
ptr->left = ptr->right = NULL;
ptr->word= (char*) malloc (strlen (word) +1) ;
strcpy (ptr->word, word);
ptr->count - 1;
if (p==NULL)
{{U}} (5) {{/U}};
else if (compres > 0)
p->right = ptr;
else
p->left = ptr;
}
void midorder (FILE **fpt, BNODE *t)
{ if (t==NULL)
return;
midorder (fpt, t->left);
fprintf (fpt, "%s %d/n", t->word, t->count)
midorder (fpt, t->right);
}
void main()
{ FILE *fpt; char word[40];
BNODE *root=NULL;
if ((fpt=fopen (INF,"r")) ==NULL)
{ printf ("Can't open file %s/n", INF )
return;
}
while (getword (fpt, word) ==1 )
binary_tree (
fclose (fpt);
fpt = fopen (OUTF, "w");
if (fpt==NULL)
{ printf ("Can't open file %s/n", OUTF)
return;
}
midorder (fpt, root);
fclose(fpt);
}
