问答题【程序说明】 对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如.管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人员类又从管理人员类中派生。 下面的程序1完成上述各个类的定义,并建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。将“程序1”中的成员函数定义为内联函数,pay成员函数定义为虚函数,重新完成上述要求。 【程序1】 //普通雇员类 class Employee public: Employee(char*theName,float thePayRate); char * getName()const; float getPayRate()const; float pay(float hoursWorked)const: protected: char*name; //雇员名称 float payRate; //薪水等级 ; Employee::Employee(char * theName,float thePayRate) name=theName; payRate=thePayRate; char*Employee::getName()const return name; float Employee::getPayRate()const return payRate; float Employee::pay(float hoursWorked)const return hoursWorked * payRate; //管理人员类 Class Manager:public Employee public: //isSalaried付薪方式:true付薪固定工资,false按小时付薪 Manager(char * theName,float thePayRate,bool isSalaried); bool getSalaried()const; float pay(float hoursWorked)const; protected: bool Salaried; ; Manager::Manager(Char*theName,float thePayRate,bool isSalaried) :Employee(theName,thePayRate) salaried=isSalaried; bool Manager::getSalaried() const return Salaried; float Manager::pay(float hoursWorked)const 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 getBouns()constreturn bouns; float pay(float hoursWorked)const return (2) protected: float bouns; #include" iostream.h" void main() Employee e("Jack",50.00); Manager m("Tom",8000.00, true); Supervior s("Tanya",8000.00,8000.00); cout<<"Name:" <<e.getName()<<endl; cout<<"Pay:"<<e.pay(80)<<endl; //设每月工作80小时 tout<<"Nabe:" <<m.getName()<<end,; cout<<"Pay:" <<m.pay(40)<<endl; cout<<"Nabe:" <<s.getName()<<endl; cout<<"Pay:"<<s.pay(40)<<endl; //参数40在这里不起作用 【程序2】 #include "employee.h" //普通雇员类 class Employee public: //构造函数 Employee(String theName,float thePayRate): name(theNabe),payRate(thePayRate) //取雇员姓名 String getNabe() constreturnname; //取雇员薪水等级 float getPayRate()constreturn payRate; //计算雇员薪水 virtual float pay(float hoursWorked)const return (3) ; protected: String name; //雇员名称 float payRate; //薪水等级 ; //管理人员类 //继承普通雇员类 class Manager:public Employee public: //构造函数 //isSalaried标识管理人员类的付薪方式 //true按阶段付薪(固定工资) //false按小时付薪 Manager(String theName,float thePayRate,bool isSalaned): Employee(theName,thePayRate),Salaried(isSalarled) //取付薪方式 bool getSalarled()constreturn 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 getBouns()constreturn bouns; //计算薪水 virtual float pay(float hoursWorked)const retum payRate+bouns; (7) float bouns; #include "employee.h" #include"jostream.h" void main() (8) * ep[3]; ep[0]=new Employee("Jack","50.00"); ep[1]=Flew Manager("Tom","8000.00",true); ep[2]=new Superwor("Tanya","8000.00","8000.00"); for(int i=0;i<3;i++) cout<<"Name:"<< (9) <<endl; cout<<"Pay:"<< (10) <<endl; //设每月工作80小时
问答题[说明]移动电话是传统固定式电话的延伸,通过无线电网络可以与千里之外的朋友沟通而不受电话线的束缚。现在的移动电话功能更全面,除了作为电话使用外,还可以发送短信,可以管理电话簿,可以下载铃声、图案。手机由键盘、显示屏以及移动通信设备组成,移动通信设备负责发送和接收信号,与基站进行连线。打电话的流程如下:(1)用户拨电话号码,每按下一个数字键显示屏上显示相应数字;(2)按OK键进行连线,显示屏上显示“连线中…”,请连接基站,基站通过移动电话网络连接到对方手机,若有误则返回相关信息;(3)接通后,显示屏显示“连线成功”;(4)打电话结束后,按Cancel送出断线信号,通知移动电话基站断线,基站切断连接,显示屏显示“断线成功”。该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图1是该系统的用例图,图2是该系统的类图,图3描述了打电话(包括断开)的序列图。图1图2图3
问答题【说明】下面是一个用C编写的快速排序算法。为了避免最坏情况,取基准记录pivot时,采用从left、right和mid=[(left+right)/2]中取中间值,并交换到right位置的办法。数组a存放待排序的一组记录,数据类型为T,left和right是待排序子区间的最左端点和最右端点。
void quicksort (int a[], int left, int right) {
int temp;
if (left<right) {
hat pivot = median3 (a, left, right); //三者取中子程序
int i = left, j = right-1;
for(;;){
while (i <j
while (i <j
if(i<j){
temp = a[i]; a[j] = a[i]; a[i] = temp;
i++; j--;
}
else break;
}
if (a[i] > pivot)
{temp = a[i]; a[i] = a[right]; a[right] = temp;}
quicksort({{U}} (1) {{/U}}); //递归排序左子区间
quieksort(a,i+1 ,right); //递归排序右子区间
}
}
void median3 (int a[], int left, int right)
{ int mid={{U}} (2) {{/U}};
int k = left;
if(a[mid] < a[k])k = mid;
if(a[high] < a[k]) k = high; //选最小记录
int temp = a[k]; a[k] = a[left]; a[left] = temp; //最小者交换到 left
if(a[mid] < a[right])
{temp=a[mid]; a[mid]=a[right]; a[right]=temp;}
}
消去第二个递归调用 quicksort (a,i+1,right)。 采用循环的办法:
void quicksort (int a[], int left, int right) {
int temp; int i,j;
{{U}}(3) {{/U}}{
int pivot = median3(a, left, right); //三者取中子程序
i = left; j = righi-1;
for (;; ){
while (i<j
while (i<j
if(i <j) {
temp = a[i]; a[j]; = a[i]; a[i]=temp;
i++; j--;
}
else break;
}
if(a[i]>pivot){{{U}} (4) {{/U}};a[i]=pivot;}
quicksoft ({{U}} (5) {{/U}}); //递归排序左子区间
left = i+1;
}
}
问答题[说明]某图书管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位和地址等)一起写入读者文件。该系统的图书管理功能主要分为购入新书、读者借书、读者还书及图书注销4个方面。(1)购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。(2)读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过10本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。(3)读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。(4)注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息查询功能主要包括读者信息查询和图书信息查询。其中,读者信息查询可得到读者的基本信息及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。该图书管理系统的顶层数据流图,如图2-21所示;该图书管理系统的第0层DFD图,如图2-22所示;其中加工2的细化图,如图2-23所示。
问答题阅读以下某工厂人事信息管理系统数据库的设计说明,根据要求回答问题1~问题4。
[说明]
某工厂有多个部门,每个部门有多位职工,每位职工属于并且仅属于一个部门,每个部门有一位负责人,每个办公室有一部电话。每位职工的月工资大致是:800≤月工资≤4500元。
软件开发公司A为该工厂开发的信息管理数据库的部分关系模式如下所示。
职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)
部门(部门号,部门名,负责人代码,任职时间) 其中“职工”和“部门”的关系示例分别见表5-17和表5-18。
{{B}}表5-17“职工”关系示例表{{/B}}
{{B}}职工号{{/B}}
{{B}}姓名{{/B}}
{{B}}年龄{{/B}}
{{B}}月工资{{/B}}
{{B}}部门号{{/B}}
{{B}}电话{{/B}}
{{B}}办公室{{/B}}
1001
郑俊华
26
1000
1
8001234
主楼201
1002
王平
27
1100
1
8001234
主楼201
2001
王晓华
38
1300
2
8001235
1号楼302
2002
李力
24
800
2
8001236
1号楼303
3001
黎运军
42
1300
3
8001237
主楼202
4001
李源
24
800
3
8001245
2号楼102
4002
李兴民
36
1200
4
8001246
2号楼103
5001
赵欣
25
0
Null
…
…
…
…
…
…
…
…
…
{{B}}表5-18“部门”关系示例表{{/B}}
{{B}}部门号{{/B}}
{{B}}部门名{{/B}}
{{B}}负责人代码{{/B}}
{{B}}任职时间{{/B}}
1
人事处
1002
2004-8-3
2
机关
2001
2004-8-3
3
销售科
4
生产科
4002
2003-6-1
5
车间
问答题[说明]
现需在某城市中选择一个社区建一个大型超市,使该城市的其他社区到该超市的距离总和最小。用图模型表示该城市的地图,其中顶点表示社区,边表示社区间的路线,边上的权重表示该路线的长度。
现设计一个算法来找到该大型超市的最佳位置,即在给定图中选择一个顶点,使该顶点到其他各顶点的最短路径之和最小。算法首先需要求出每个顶点到其他任一顶点的最短路径,即需要计算任意两个顶点之间的最短路径;然后对每个顶点,计算其他各顶点到该顶点的最短路径之和;最后,选择最短路径之和最小的顶点作为建大型超市的最佳位置。
问答题[说明]学生信息管理系统旨在用微型计算机对全校的学生事务进行管理,其内容包括新生管理、成绩管理、重修管理、毕业资格审定以及随机查询和打印报表等。教务人员在进入系统时,系统通过注册登录来提供用户的访问权限,系统会检查用户的合法性,如不合法,系统拒绝用户进入,如是合法用户,则根据命令要求类型处理。本系统主要有新生管理、成绩管理、重修处理、资格审定四大功能,分别进行不同的管理。新生管理首先按照各专业录入新生信息,录入时若录入的信息不完整,则给出提示信息,要求用户录入完整信息;若新生库中已经存在该生信息了,则给出提示信息,保证不重复录入新生信息。在录入阶段,会显示新生库中的记录,可以进行浏览、删除、修改等操作,以便用户录入正确无误的新生信息。录入完毕后,打印编好学号和分好班次的新生名单并将新生记录写入学生信息库。成绩管理使用一般方法和特殊方法对学生成绩进行管理。分别按照这两种方法进行成绩的录入和计算。成绩处理完毕后,合并到学生成绩库,可以对学生成绩总库进行浏览、修改、删除、插入、查找等操作,同时提供成绩查询功能,可按照学号、姓名、课程号、课程名称、专业班级查询学生成绩,最后打印各种形式的学生成绩单。重修处理首先对学生重修总体情况进行浏览,可以查询未交费学生重修情况、某个学生重修情况等,打印各种形式的重修单和重修证。另外进行重修交费登记,输入某个重修学生学号,则显示该生相关信息(姓名、专业等)、重修课程信息、重修总学分、应交金额等,交费登记后,写入重修表和交费表。资格审定主要对毕业生的毕业资格进行审定,计算毕业生的已修学分,审定后填写资格库,显示审定结果,打印毕业生资格表和毕业证书等。学生信息管理系统顶层图如图10-1所示;学生信息管理系统的第0层DFD图如图10-2所示,其中,加工3的细化图如图10-3所示,加工4的细化图如图10-4所示。[数据流图10-1][数据流图10-2][数据流图10-3][数据流图10-4]
问答题阅读下列说明和数据流图,回答问题1至问题3。[说明]图书管理系统旨在用计算机对图书进行管理,包括图书的购入、借阅、归还以及注销。管理人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出统计表格,以便掌握图书的流通情况。系统要实现以下四方面的功能:购入新书、读者借书、读者还书以及图书注销。(1)购入新书:需要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书日期等信息,写入图书目录文件中。(2)读者借书:填写借书单,包括读者号、欲借图书分类目录号,系统首先检查该读者号是否有效,若无效,则拒绝借书,否则进一步检查该读者所借图书是否超过最大限制数,若已达到最大借阅数,则拒绝借书,否则读者可以借出该书,登记图书分类目录号、图书流水号、读者号和借阅日期等,写回到借书文件中去。(3)读者还书:根据图书流水号,从借书文件中读出和该图书相关的借阅记录,表明还书日期,再写回借书文件中;如果图书逾期未还,则处以相应罚款。(4)图书注销:将一些过时或无保留价值的图书注销,从图书文件中删除相关记录。(5)流通查询:管理员可以对图书流通情况进行查询,包括某位读者、某种图书和全局图书,给出流通情况统计表。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1-1是顶层数据流图,图1-2是第0层数据流图,图1-3是第1层数据流图。[图1-1][图1-2][图1-3][数据字典](1)数据流条目图书管理要求=[入库单|借书单|还书单|注销单]入库单=分类目录号+数量+书名+作者+内容摘要+价格+购书日期借书单=读者号+(d)+借阅日期还书单=(e)+还书日期(2)文件说明文件名:目录文件组成:分类目录号+书名+作者+内容摘要+价格+入库日期+总数+库存数+(f)1.根据题意,指出数据流图中缺失的数据流(a)的名称,并指出该数据流的起点。
问答题【说明】某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。1.病人初次来该医院看病,首先购买病历,记录病人基本情况。2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。医院收费系统的顶层图如图3—2所示;医院收费系统的第0层D四图如图3—3所示。其中,加工1的细化图如图3—4所示,加工2的细化图如图3-5所示。假定顶层图是正确的,“定价表”文件已由其他系统生成。【数据流图】1.【问题1】指出哪张图的哪些文件可以不必画出。
问答题[说明]某订单管理系统的部分UML类图如下图所示。在图中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,OrderItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如下表所示。各个类的部分属性和方法说明类成员说明ProductListArrayList<Product>productsProductStringcode产品编号Stringdescription产品描述doubleprice产品单价Booleanequals(Objectobject)若两个产品相同则返回true,否则返回falseOrderItemProductproduct订单项中的产品intquantity产品的订购数量ProductgetProduct()获取订单项中的产品OrderArrayList<OrderItem>items订单中包含的订单项OrderListArrayList<Order>orders订单voidaddOrder(Orderorder)向订单列表中添加新订单intgetNumberOfOrders()获取订单列表中的订单总数SalesSystemProductListcatalog产品目录OrderListsales订单列表voidstatistic()依次统计产品目录中每个产品的订购总量,并打印出每个产品的编号、说明、订购总量和订购金额可以使用类java.util.ArrayList<E>来实现对象的聚集关系,如上图中OrderList与Order之间的聚集关系。for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接受集合中每个元素的变量,其语法格式如下:for(用来接受集合中元素的变量:需要遍历的对象集合)如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口java.util.Iterable<T>。下面的Java程序1和Java程序2分别给出了类OrderList和方法statistic的Java代码。[Java程序1]importjava.util.*;publicclassOrderList______{privateArrayList<Order>orders;publicOrderList(){this.orders=newArrayList<Order>();}publicvoidaddOrder.(Orderorder){this.orders.add(order);}publicIterator<Order>iterator(){return______;}publicintgetNumberOfOrders()}returnthis.orders.size();}}[Java程序2]importJava.util.*;publicclassSalesSystem{privateProductListcatalog;privateOrderListsales;privatestaticPrintWriterstdOut=newPrintWriter(System.out,true);publicvoidstatistic(){for(Productproduct:______){intnumber=0;for(Orderorder:______){for(______:order){if(product.equals(item.getProduct()))number+=item.getQuantity();}}stdOut.println(product.getCode()+""+product.getDescription()+""+number+""+number*product.getPrice());}}//其余的方法未列出}
问答题【算法说明】下面是一段插入排序的程序,将R[k+1]插入到R[1...k]的适当位置。R[0]=R[k+1];j=k;while(R[j]>R[0])R[j+1]=R[j];j--;R[j+1]=R[0];【流程图】【测试用例设计】(while循环次数为0、1、2次)表3测试用例表1.【问题1】指出算法的流程图中(1)~(3)处的内容。
问答题[说明] 以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。 [JAVA代码] //定义自己的异常类 class CCircleException extends Exception // 定义类 CCircle class CCircle private double radius; public void setRadius ( double r ) (1) if ( r<0 ) (2) else (3) Public void show ( ) System. out. println ( "area="+3.14*radius*radius ); public class ciusample public static void main ( String args[] ) CCircle cir=new CCircle( ); (4) cir. setRadius ( -2.0 ) (5) System. out. println ( e+" throwed" ) ; cir. show( ) ;
问答题[说明]某地区举行篮球比赛,需要开发一个比赛信息管理系统来记录比赛的相关信息。[需求分析结果]1.登记参赛球队的信息。记录球队的名称、代表地区、成立时间等信息。系统记录球队的每个队员的姓名、年龄、身高、体重等信息。每个球队有一个教练负责管理球队,一个教练仅负责一个球队。系统记录教练的姓名、年龄等信息。2.安排球队的训练信息。比赛组织者为球队提供了若干个场地,供球队进行适应性训练。系统记录现有的场地信息,包括:场地名称、场地规模、位置等信息。系统可为每个球队安排不同的训练场地,如表3-9所示。系统记录训练场地安排的信息。表3-9训练安排表球队名称场地名称训练时间解放军一号球场2008-06-0914:00-18:00解放军一号球场2008-06-1209:00-12:00解放军二号球场2008-06-1114:00-18:00山西一号球场2008-06-1009:00-12:003.安排比赛。该赛事聘请有专职裁判,每场比赛只安排一个裁判。系统记录裁判的姓名、年龄、级别等信息。系统按照一定的规则,首先分组,然后根据球队、场地和裁判情况,安排比赛(每场比赛的对阵双方分别称为甲队和乙队)。记录参赛球队、比赛时间、比分、场地名称等信息,如表3-10所示。表3-10比赛安排表A组:甲队…乙队场地名称比赛时间裁判比分解放军…北京一号球场2008-06-1715:00李大明天津…山西一号球场2008-06-1719:00胡学梅B组甲队…乙队场地名称比赛时间裁判比分上海…安徽二号球场2008-06-1715:00丁鸿平山东…辽宁二号球场2008-06-1719:00郭爱琪4.所有球员、教练和裁判可能出现重名情况。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如下。1.实体联系图(图3-20)2.关系模式教练(教练编号,姓名,年龄)队员(队员编号,姓名,年龄,身高,体重,(a)球队(球队名称,代表地区,成立时间,(b)场地(场地名称,场地规模,位置)训练记录((c))裁判(裁判编号,姓名,年龄,级别)比赛记录((d))1.[问题1]根据问题描述,补充4个联系,完善图3-20的实体联系图。
问答题[说明] 干部信息管理系统(CMIS)是用于对干部信息进行管理的特定系统。利用该系统,干部科可以对本单位干部信息进行管理,根据不同命令对信息进行增、删、改、内部调动,打印人事表格,进行统计、检索。干部科输入的系统命令需要合法性检查才能被接受、处理。系统命令可以是检索命令、统计命令、打印命令、维护命令中的任何一种。干部科的输入的干部信息数据包括输入信息、检索项、统计项、打印项、维护项等条目。一个完整的输入信息应包括干部的档号、干部的姓名、干部的性别、干部的年龄、干部的级别、干部的职称、干部的政治面貌等内容。系统进行检索处理时可以根据干部的档号、姓名或年龄进行简单检索,也可以根据“档号+姓名”或者“性别+年龄”进行组合检索。系统进行统计处理时,可以根据干部的性别、年龄或职称进行简单统计,也可以根据“年龄+职称”或“性别+职称”进行综合统计。通过系统授权,用户可以对系统进行维护。当用户需要对系统进行维护时,输入维护命令,得到合法性确认后,可以对系统数据库信息进行修改维护。维护命令包括:增加命令,根据输入信息增加干部信息;修改命令,根据修改项修改干部信息;检索命令,根据检索项检索干部信息。系统可以输出统计信息、人事表格、检索信息以供干部科用户使用。 干部信息管理系统的顶层图如图9-1所示;干部信息管理系统的第0层DFD图如图9-2所示,其中,加工3的细化图如图9-3所示。1. [问题1] 数据流图9-1缺少了一条数据流(在图9-2中也未给出该数据流),请给出此数据流的起点和终点,并采用说明中的词汇给出此数据流名。
问答题【说明】图书管理系统详细记录图书库存情况、读者信息及读者借阅记录(包括借书日期和还书日期)。新书入库时要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书日期。同一个书名由于版次、作者等不同有可能存在多“种”图书,其间用“分类目录号”区分。系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。一个读者最多可以同时借阅5本图书。借阅图书时,新添借阅记录,并将对应的“归还标记”字段置为“false”,表示“尚未归还”;归还图书时,将相应的“归还标记”字段置为“true”,表示“已经归还”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。如图9-17所示为该系统的E-R图。1.【问题1】实体间的联系有“一对一”、“一对多”和“多对多”,指出“借阅”联系属于哪一种?“借阅”关系模式的外键是什么?有主键吗?为什么?
问答题阅读下列说明和图,回答问题1至问题3。【说明】某汽车数字仪表板将完成下述功能:(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则匀速。假定题中提供的顶层图是正确的,请回答下列问题。
问答题
问答题【说明】某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预订、入住登记、账务结算、退房,以及将服务项目记入客人账单。旅客包括散客和团体,散客预订或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预订和维修。·客人入住后,客房处于占用状态。·客人退房后,客房处于空闲状态。·客人预订后,客房处于已预订状态。·预订客人入住后,客房处于占用状态。·预订客人取消预订后客房处于空闲状态。·需要维修时客房处于维修状态。·维修完成后客房处于空闲状态。该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图9-12所示是该系统的类图的一部分,图9-13描述了客房状态的转变情况。1.【问题1】请用如图9-12所示的属性和方法的名称给出客人类的属性和方法(注意;团体类中的负责人姓名等与散客的对应属性含义相同,不必区分)。
问答题[说明]0-1背包问题可以描述为:有n个物品,对i=1,2,…,n,第i个物品价值为vi,重量为wi(vi和wi为非负数),背包容量为W(W为非负数),选择其中一些物品装入背包,使装入背包物品的总价值最大,即,且总重量不超过背包容量,即,其中,xi∈{0,1),xi=0表示第i个物品不放入背包,xi=1表示第i个物品放入背包。
问答题阅读下列算法说明和流程图,根据回答下列问题。[说明]某机器上需要处理n个作业job1,job2,…,jobn,其中:(1)每个作业jobi(1≤i≤n)的编号为i,jobi有一个收益值p[i]和最后期限值d[i];(2)机器在一个时刻只能处理一个作业,而且每个作业需要一个单位时间进行处理,一旦作业开始就不可中断,每个作业的最后期限值为单位时间的正整数倍;(3)job1~jobn的收益值呈非递增顺序排列,即p[1]≥p[2]≥...≥p[n];(4)如果作业jobi在其期限之内完成,则获得收益p[i];如果在其期限之后完成,则没有收益。为获得较高的收益,采用贪心策略求解在期限之内完成的作业序列。图8-22是基于贪心策略求解该问题的流程图。(1)整型数组J[]有n个存储单元,变量k表示在期限之内完成的作业数,J[1..k]存储所有能够在期限内完成的作业编号,数组J[1..k]里的作业按其最后期限非递减排序,即d[J[1]]≤...≤d[J[k]]。(2)为了便于在数组J中加入作业,增加一个虚拟作业job0,并令d[0]=0,J[0]=0。(3)算法大致思想是:先将作业job1的编号1放入J[1],然后,依次对每个作业jobi(2≤i≤n)进行判定,看其能否插入到数组J中。若能,则将其编号插入到数组J的适当位置,并保证J中作业按其最后期限非递减排列;否则不插入。jobi能插入数组J的充要条件是:jobi和数组J中已有作业均能在其期限之内完成。(4)流程图中的主要变量说明如下。i:循环控制变量,表示作业的编号。k:表示在期限内完成的作业数。r:若jobi能插入数组J,则其在数组J中的位置为r+1。q:循环控制变量,用于移动数组J中的元素。