问答题[说明]某房屋租赁公司欲建立一个房屋租赁服务系统,统一管理房主和租赁者的信息,从而快速地提供租赁服务。该系统具有以下功能。(1)登记房主信息。对于每名房主,系统需登记其姓名、住址和联系电话,并将这些信息写入房主信息文件。(2)登记房屋信息。所有在系统中登记的房屋都有一个唯一的识别号(对于新增加的房屋,系统会自动为其分配一个识别号)。除此之外,还需登记该房屋的地址、房型(如平房、带阳台的楼房、独立式住宅等)、最多能够容纳的房客数、租金及房屋状况(待租赁、已出租)。这些信息都保存在房屋信息文件中。一名房主可以在系统中登记多个待租赁的房屋。(3)登记租赁者信息。所有想通过该系统租赁房屋的租赁者,必须首先在系统中登记个人信息,包括姓名、住址、电话号码、出生年月和性别。这些信息都保存在租赁者信息文件中。(4)租赁房屋。已经登记在系统中的租赁者可以得到一份系统提供的待租赁房屋列表。一旦租赁者从中找到合适的房屋,就可以提出看房请求。系统会安排租赁者与房主见面。对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中。(5)收取手续费。房主登记完房屋后,系统会生成一份费用单,房主根据费用单缴纳相应的费用。(6)变更房屋状态。当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将根据房主的请求,修改房屋信息文件。图1和图2分别给出了该系统的顶层数据流图和0层数据流图。
问答题阅读以下说明,将应填入(n)处的字句写在答卷纸的对应栏内。【说明】下面的程序为堆排序程序,其中函数adjust(i,n)是把以R[i](1≤i≤┕i/2┙)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的,是在主函数中说明的结构数组,它含有要排序的n个记录。【程序】Voidadjust(i,n)Inti,n;ihtk,j;elementextr;extr=r[i];k=i;j=2*i;while(j<=n)if((j<n)if(extr.key<r[j].key)r[k]=r[j];k=j;(2);else(3);r[k]=extr;/*让i从┗i/2┛逐步减到1,反复调用函数adjust,便完成建立初始堆的过程。*/voidheapsort(r,n)listr;intn;inti,1;elementextr;for(i=n/2;i>=1;--i)(4);/*建立初始堆*/for(k--n;k>=2;k--)extr=r[1];r[1]=r[k];r[k]=extr;(5);
问答题图中缺少了一条关联,请指出这条关联两端所对应的类以及每一端的多重度。类多重度
问答题[问题4]
试说明逻辑数据流图(logical data flow diagram)和物理数据流图(physical data flow diagram)之间的主要差别。
问答题[说明] 快速排序是一种典型的分治算法。采用快速排序对数组A[p..r]排序的3个步骤如下。 1.分解:选择一个枢轴(pivot)元素划分数组。将数组A[p..r]划分为两个子数组(可能为空)A[p..q-1]和A[q+1..r],使得A[q]大于等于A[p..q-1]中的每个元素,小于A[q+1..r]中的每个元素。q的值在划分过程中计算。 2.递归求解:通过递归的调用快速排序,对子数组A[p..q-1]和A[q+1..r]分别排序。 3.合并:快速排序在原地排序,故无需合并操作。
问答题[说明]某企业餐厅为了方便员工用餐,开发了一个订餐系统(CafeteriaOrderingSystem,COS),企业员工可通过企业内联网使用该系统。企业的任何员工都可以查看菜单和当日特价。系统的顾客是注册到系统的员工,可以订餐(如果未登录则需先登录)、注册工资支付、预约规律的订餐,在特殊情况下可以覆盖预订。餐厅员工是特殊顾客,可以进行备餐、生成付费请求和清求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。菜单管理员是餐厅特定员工,可以管理菜单。送餐员可以打印送餐说明、记录送餐信息(如送餐时间)及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。顾客的订餐过程如下。(1)顾客请求查看菜单。(2)系统显示菜单和当日特价。(3)顾客选菜。(4)系统显示订单和价格。(5)顾客确认订单。(6)系统显示可送餐时间。(7)顾客指定送餐时间、地点和支付方式。(8)系统确认接受订单,然后发送E-mail给顾客以确认订餐,同时发送相关订餐信息通知给餐厅员工。系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图和一次订餐的活动图初稿分别如图1和图2所示。
问答题阅读下列说明以及图示(如图1所示),回答问题1~3。【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成,绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程,同时指定2门侯选课程以备主选课程未选上。每门课程最多不能超过10人,最少不能低于3人,低于3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。【用例图】 {{B}}表1学生课程注册系统的实体类{{/B}}实体类说明Professor学校中讲课的教师student学校中注册课程的学生Schedule学生在新学期选择登记的课程列表CourseCatalog学校所有课程的目录Course课程的基本信息CourseOffering新学期课程的开设信息,如讲课教师、时间、地点等信息 {{B}}表2学生课程注册系统的边界类{{/B}}边界类说明LoginForm为教师、学生和注册管理员提供登录的操作RegisterCoursesForm为学生提供选课注册的操作ViewReportForm为学生提供成绩查询的操作selecrTeachCoursesForm为教师提供查看学生选课情况的操作SubmitCradesForm为教师提供登记成绩的操作MaintainProfessorsForm为注册管理员提供维护教师信息的操作MaintainStudentsForm为注册管理员提供维护学生信息的操作MaintainCoursesForm为注册管理员提供维护课程信息的操作CloseRegistrationForm为注册管理员提供关闭注册的操作BillingSystemNotice提供与收费系统的信息交换接口 {{B}}表3学生课程注册系统的控制类{{/B}}控制类说明RegisterCoursesControl负责新学期学生的选课登记ViewReportControl负责学生成绩的查询SelectTeachCoursesControl负责新学期课程的学生选择情况SubmitGradesControl负责学生成绩的登记CloseRegistrationControl负责关闭课程注册【协作图】【时序图】注释1:学生打算注册新的课程。注释2:一张这学期可选择的课程列表。注释3:显示一张为学生选课用的空白登记表。
问答题[说明]
某学校建立了一个网上作业提交与管理系统,基本功能描述如下。
(1)账号和密码。任课老师用账号和密码登录系统后,提交所有选课学生的名单。系统自动为每个选课学生创建登录系统的账号和密码。
(2)作业提交。学生使用账号和密码登录系统后,可以向系统申请所选课程的作业。系统首先检查学生的当前状态,如果该学生还没有做过作业,则从数据库服务器申请一份作业。若申请成功,则显示需要完成的作业。学生需在线完成作业,单击“提交”按钮上交作业。
(3)在线批阅。系统自动在线批改作业,显示作业成绩,并将该成绩记录在作业成绩统计文件中。
问答题【问题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元,并退出的卡。
