问答题【说明】 (1)流程图描述某大型商店商品销售的数据处理流程。 (2)商店设有若干柜台,同一种商品可能在几个柜台上销售,各柜台每天提供一组日销售数据,其格式如下: 日期、柜台号、商品代码、销售数量、商品代码、销售数量…… (3)数据处理系统每日产生一份反映各柜台当日销售金额和商店日销售金额的“日销售金额报告”,必要时还产生一份“商品请购报告”,给出那些低于最低库存量的商品代码、商品名称、最低库存量和实际库存量。处理过程中产生存档的“日销售文件”和临时工作文件“日销售量文件”和“旧销售金额文件”。 (4)系统中所用到的数据均来自数据文件。 (5)流程图中的商品库存文件的记录已按关键字“商品代码”排序。1.【问题1】 ①指出商品库存文件的记录中必须包括哪些数据项? ②分别指出在日销售文件,日销售量文件和日销售金额文件的记录中至少应包括哪些数据项,同时不产生数据冗余? ③错误清单可能指出哪些错误?
问答题【说明】软件设计师东方飞龙利用UML设计了一个迷你小型复数类,其类图如图13-11所示。【代码13-l】/*___________________________________*//*********文件MiniComplex.h*********//*___________________________________*/#include<iostream>usingnamespacestd;classMiniComplex{{{U}}(1){{/U}}://重载流插入和提取运算符{{U}}(2){{/U}}ostreamisObject>>complex.realPart>>ch>>complex.imagPart>>ch;returnisObject;}MiniComplex(doublereal=0,doubleimag=0);//构造函数MiniComplexoperator+(constMiniComplex/*_______________________________________________________*//*********文件MiniComplex.cpp**********//*_______________________________________________________*/#include"MiniComplex.h"boolMiniComplex::operator==(constMiniComplex}MiniComplex::MiniComplex(doublereal,doubleimag){realPart=real;imagPart=imag!}MiniComplexMiniComplex::operator+(constMiniComplextemp.realPart=realPart+otherComplex.realPart;temp.imagPart=imagPart+otherComplex.imagPart;returntemp;}MiniComplexMiniComplex::operator--(constMiniComplextemp.realPart=realPart-otherComplex.realPart;temp.imagPart=imagPart-otherCompler.imagPart;returntemp;}MiniComplexMiniComplex::operator*(constMiniComplextempimagPart=(realPart*otherComplex.imagPart)+(imag-Part*otherComplex.realPart);returntemp,}MiniComplexMiniComplex::operator/(constMiniComplexfloattt;tt=1/(otherComplex.realPart*otherComplex.realPart+otherComplex.imagPart*otherComplex.imagPart);temp.realPart=((realPart*otherComplex.realPart)+(imagPart*otherComplex.imagPart))*tt;temp.imagPart=((imagPart*otherComplex.realPart)-(realPart*otherComplex.imagPart))*tt;returntemp;}/*__________________________________________________*//********主函数所在文件main.cpp********//*_________________________________________________*/#include<iostream>#include"{{U}}(5){{/U}}"usingnamespacestd;intmain(void){MiniComplexnum1(23,34),num2;cin>>num2;cout<<"InitialValueofNuml="<<num1<<"/nInitialValueofNum2="<<num2<<end1;cout<<num1<<"+"<<num2<<"="<<num1+num2<<end1;//使用重载的加号运算符cout<<num1<<"-"<<num2<<"="<<num1-num2<<end1;//使用重载的减号运算符cout<<num1<<"*"<<num2<<"-"<<num1*num2<<end1;//使用重载的乘号运算符cout<<num1<<"/"<<num2<<"="<<num1/num2<<end1;//使用重载的除号运算符return0;}
问答题[问题3]将数据流图4-3(加工4的细化图)中的数据流补充完整,并指明加工名称、数据流的方向(输入/输出)和数据流名称。
问答题阅读下列说明和E-R图,回答问题1~3。【说明】设有关于银行借贷管理系统的E-R图(如图4所示)。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。为了答题的方便,图中的实体和属性同时给出了中英文说明,回答问题时只需写出英文名即可。
问答题【说明】下面是一个Applet程序,其功能是建立一个图形用户界面的窗口,包括一个文本显示区和一个按钮,点击按钮,可以在文本区已有的文本基础上追加显示10条"WelcometoChina"信息,并且文本区由滚动条控制文本的上下滚动。程序运行结果如图4所示。importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;/*<appletcode="ex5_6.class"width=800height=400></applet>*/publicclassex5_6extendsJAppletJButtonjb=newJButton("AddText");JTextPanejtp=newJTextPane();publicvoidinit()jb.addActionListener(newActionListener())publicvoidactionPerformed(ActionEvente)for(inti=1;i<10;i++)(1)+"WelcometoChina!/n";;Containercp=(2);cp.add(newJScrollPane(jtp));cp.add((3));publicstaticvoidmain(String[]args)ex5_6obj5_6=newex5_6();Stringstr=obj5_6.getClass().toString();if(str.indexOf("class")!=-1)str=str.Substring(6);JFramefrm=newJFrame(str);frm.addWindowListener(new(4)publicvoidwindowClosing(WindowEventwe)System.exit(0););(5).add(ex5_6);frm.setSize(300,400);frm.setVisble(true);ex5_6.htm|<HTML><HEAD><TITLE>ex5_6</TITLE></HEAD><BODY><appletcode="ex5_6.class"Width=800height=400></applet></BODY></HTML>
问答题[说明]职工信息管理系统是用于对职工相关信息进行检索、统计、工资管理、内部调动管理等的系统。利用该系统,人事科可以对本单位职工信息进行管理,根据不同命令对信息进行增、删、改、内部调动,打印人事表格,进行统计、检索。人事科输入的系统命令需要合法性检查才能被接受、处理。系统命令包括档案维护、数据检索、统计报表、打印命令、代码维护。人事科的输入信息包括个人资料、检索选项、统计选项、代码资料、新增档案字段、档案修改资料等条目。完整的个人资料应包括职工的档案编号、姓名、工作单位、性别、出生日期、技术职称以及学历。通过系统授权,用户可以进行对职工信息数据进行查询检索,检索的条件可以是姓名、工作单位、,性别、技术职称等组合。通过系统授权,超级用户还可以对职工档案进行维护。当超级用户需要对档案进行维护时,输入档案维护命令,得到合法性确认后,可以对系统数据库档案信息进行维护,否则将拒绝执行。档案维护操作可以是增加档案、修改档案、删除档案、增加档案字段中的任何一种操作。档案维护成功后要及时更新职工信息数据文件,保存维护结果。职工管理信息系统的顶层图如图12-1所示;职工管理信息系统的第0层DFD图如图12-2所示,其中,加工3的细化图如图12-3所示,加工3.2的细化图如图12-4所示。[数据流图12-1][数据流图12-2][数据流图12-3][数据流图12-4]1.[问题1]数据流图12-2缺少了两条数据流,请采用说明中的词汇给出此数据流名称,并指出方向。
问答题[说明]图3-1描述某超市销售数据的部分处理流程。超市中有若干台收款机和若干名收款员。这里,我们把一个收款员开始使用一台收款机到离开这台收款机称为该收款员的一次作业。作业开始时,收款员先在收款机上输入收款员号和作业前金额。作业前金额是为了销售时的找零而在作业前预先放入钱柜的金额数。作业结束时,收款员要打开钱柜,取走全部现金,并把这些现金的金额数(称为作业后金额)输入收款机。当作业前金额+本次作业售货总金额-本次作业退货总金额≠作业后金额时,表示这次作业存在金额差错。本流程图已作简化,并作以下假定;该超市只有现金交易(不用信用卡和礼券);一个收款员因某种原因(如吃饭)在一天中可以有多个作业;销售方式只有售货和退货两种。整个超市分成若干部门(如食品部、服装部),系统按部门统计一个月中各类货物的销售数量和金额,最后根据月销售计划文件分析各部门完成销售计划的情况。系统还统计每个收款员的差错情况和退货情况。图中处理4和处理8每月的最后一天执行一次(营业结束后),其他处理每天执行一次。图中部分数据、文件的记录格式如下:日销售数据:收款机号+收款员号+作业前金额+(售货标记|退货标记)+货号+数量+单价+金额+作业后金额日销售文件记录:(作业开始标记+收款机号+收款员号+作业前金额)|((售货标记|退货标记)+货号+数量+金额)|(作业结束标记+收款机号+收款员号+作业后金额)部门目销售文件记录:部门号+(售货标记|退货标记)+货号+数量+金额部门月销售计划文件记录:部门号+月计划金额收款员差错月报:月份+收款员号+差错作业数+差错总金额收款员退货月报:月份+收款员号+退货次数+退货总金额其中w表示w重复出现多次;a|b表示a或b;a+b表示a与b。[图3-1]
阅读下列说明和数据流图,回答问题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)供应商代码不能为空,且是值唯一的,供应商的名也是唯一的。(2)零件号不能为空,且值是唯一的,零件号不能为空。(3)一个供应商可以供应多个零件,而一个零件可以由多个供应商供应。图是该系统的E-R图。
[说明]当一元多项式中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:函数中使用的预定义符号如下:#defineEPSI1e-6structNode/*多项式中的一项*/doublec;/*系数*/inte;/*指数*/structNode*next;;typedefstruct/*多项式头节点*/intn;/*多项式不为零的项数*/structNode*head;POLY;[函数]voidDel(POLY*C,structNode*p)/*若p是空指针则删除头节点,否则删除p节点的后继*/structNode*t;/*C是空指针或C没有节点*/if(C==NULL||C->head==NULL)return;if((1))(/*删除头节点*/t=C->head;C->head=t->next;return;/*if*/t=p->next;p->next=t->next;;/*Del*/voidInsert(POLY*C,struetNode*pC)/*将pC节点按指数降序插入到多项式C中*//*若C中存在pC对应的指数项,则将系数相加;若其结果为零,则删除该节点*/structNode*t,*tp;/*pC为空指针或其系数近似为零*/if(pC==NULL||fabs(pC->c)if(C->head==NULL)/*若C为空,作为头节点插入*/C->head=pC;pC->next=NULL;C->n++;return;/*if*//*若pC的指数比头节点的还大,插入到头节点之前*/if(pC->e>C->head-)e)(2);C->head=pC;C->n++;return;/*if*/(3);t=C->head;while(t!=NULL)if(t->e>pC->e)tp=t;t=t->next;elseif(t->e==pC->e)/*C中已经存在该幂次项*/t->c+=pC->c;/*系数相加*/if(fabs(t->c)(4);/*删除对应节点*/C->n--;(5);elset=NULL;/*C中已经不存在该幂次项*//*while*/if(t==NULL)/*适当位置插入*/pC->next=tp->next;tp->next=pC;C->n++;/*if*/;/*Insert*/
[说明]图1是某医院组织的结构图。该医院分为多个病区,每个病区有一个唯一的编号,一个病区包括多个病房,多名医生;每位医生有一个唯一的编号,负责管辖其主治病人的所有病房;病人住院后给以一个唯一的编号,根据“患何病科”住在相应病区的某个病房里,有且仅有一位医生担任主治医生,除主治医生外其他医生不对其负责。现假定病区名称有“内科”和“外科”,“内科”病区又细分为多个病区,以编号区分,名称都为“内科”;“外科”病区亦然。图2是经分析得到的E-R图。图1图2
[说明]有个关于运动会的管理系统,在该系统中,委员会为每一个参赛的运动员赋以一个唯一的编号“运动员号”,同时记录姓名、性别、年龄和队名,姓名和队名必须填写。一个运动员属于且只属于一个队,一个运动员可以参赛多个项目。运动员参加比赛取得一个成绩,相应有一个积分:第一名积分6分,第二名积分4分,第三名积分2分,其他的没有积分。一个队的总积分是该队的所有队员的积分之和。下图是该系统的E-R图。图中的实体和属性同时给出了中英文两种名字,回答问题时只需写出英文名即可。
[说明]某商业银行已有一套基于客户机/服务器(C/S)模式的储蓄系统X和一套建账软件Y。建账软件Y主要用于将储蓄所手工处理的原始数据转换为系统X所需的数据格式。该建账软件具有以下功能。(1)分户账录入:手工办理业务时建立的每个分户账数据均由初录员和复录员分别录入,以确保数据的正确性。(2)初录/复录比对:将初录员和复录员录入的数据进行一一比较,并标记两套数据是否一致。(3)数据确认:当上述两套数据完全一致后,将其中任一套作为最终进入系统X的原始数据。(4)汇总核对和打印:对经过确认的数据进行汇总,并和会计账目中的相关数据进行核对,以确保数据的整体正确性,并打印输出经过确认的数据,为以后核查可能的错误提供依据。该建账软件需要打印的分户账清单样式如表3-8所示。表3-8分户账清单样式表储蓄所账号开户日户名其他分户账数据储蓄所A64361357200820109992008-08-15小郭……………储蓄所A合计共XXXX户,总余额YYYYYYY.YY元储蓄所B84361357200820098882008-08-25小谢…………储蓄所B合计共XXXX户,总余额YYYYYYY.YY元……储蓄所N……………………储蓄所N合计共XXXX户,总余额YYYYYYY.YY元(5)数据转换:将经过确认的数据转换为储蓄系统X需要的中间格式数据。(6)数据清除:为加快初录和复录的处理速度,在数据确认之后,可以有选择地清除初录员和复录员录入的数据。该软件的数据流图如图3-17~图3-19所示,图中部分数据流数据文件的格式如下。初录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质复录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质会计账目=储蓄所号+总户数+总余额操作结果=初录操作结果+比对操作结果+复录操作结果1.[问题1]不考虑数据确认处理(加工2),请指出图3-17~图3-19数据流图中可能存在的错误。
【说明】图书管理系统旨在用计算机对图书进行管理,包括图书的购入、借阅、归还及注销。管理人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出统计表格,以便掌握图书的流通情况。系统要实现以下4方面的功能:购入新书、读者借书、读者还书及图书注销。(1)购入新书:需要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书日期等信息,写入图书目录文件中。(2)读者借书:填写借书单,包括读者号、欲借图书分类目录号,系统首先检查该读者号是否有效,若无效,则拒绝借书,否则进一步检查该读者所借图书是否超过最大限制数,若已达到最大借阅数,则拒绝借书,否则读者可以借出该书,登记图书分类目录号、图书流水号、读者号和借阅日期等,写回到借书文件中去。(3)读者还书:根据图书流水号,从借书文件中读出和该图书相关的借阅记录,表明还书日期,再写回借书文件中;如果图书逾期未还,则处以相应罚款。(4)图书注销:将一些过时或无保留价值的图书注销,从图书文件中删除相关记录。(5)流通查询:管理员可以对图书流通情况进行查询,包括某位读者、某种图书和全部图书,给出流通情况统计表。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。如图9-1所示是顶层数据流图,如图9-2所示是第0层数据流图,如图9-3所示是第1层数据流图。【数据字典】(1)数据流条目图书管理要求=[入库单|借书单|还书单|注销单]入库单=分类目录号+数量+书名+作者+内容摘要+价格+购书日期借书单=读者号+(d)+借阅日期还书单=(e)+还书日期(2)文件说明文件名:目录文件组成:分类目录号+书名+作者+内容摘要+价格+入库日期+总数+库存数+(f)
阅读下列说明和图,回答问题1到问题3,将解答填入对应栏内。 [说明] 操作系统中,死锁(Deadlock)是指多个进程在运行的过程中因争夺资源而造成的一种僵局。当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 面对死锁问题有两个解决方案:预防死锁和避免死锁。 预防死锁是一种较简单和直观的事先预防方法。该方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或多个,以此来预防死锁的发生。预防死锁由于较易实现,已被广泛应用,但由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量的降低。 避免死锁同样是属于事先预防的策略,但它无须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。 银行家算法(Banker's algorithm)是Dijkstra于1965年提出的一个经典的避免死锁的算法。形象地描述银行发放贷款不能使有限可用资金匮乏而导致整个银行无法运转的思路,也就是说每次请求贷款,银行要考虑他能否凭着贷款完成项目,并还清贷款使银行运转正常。令Request(i)是进程P(i)请求向量,如果Request(i)[j]=k则进程P(i)希望请韵类资源k个。具体算法步骤如下: (1)如果Request(i)>Need(i)则出错(请求量超过申报的最大量),否则转到(2); (2)如果Request(i)>Available则P(i)等待,否则转(3); (3)系统对P(i)所请求的资源实施试探分配,并更改数据结构中的数值; (4)Available=Available-Request(i); A1location(i) =Allocation(i) +Request(i); Need(i)=Need(i)-Request(i); (5)执行安全性算法,如果是安全的,则承认试分配,否则废除试分配,让进程P(i)继续等待。 所谓系统是安全的,是指系统中的所有进程能够按照某一种次序分配资源,并且依次运行完成,这种进程序列P1,P2,…,Pn)就是安全序列。如果存在这样一个安全序列,则系统是安全的;如果系统不存在这样一个安全序列,则系统是不安全的。
[说明]某商业银行已有一套基于客户机/服务器(C/S)模式的储蓄系统X和一套建账软件Y。建账软件Y主要用于将储蓄所手工处理的原始数据转换为系统X所需的数据格式。该建账软件具有以下功能。(1)分户账录入:手工办理业务时建立的每个分户账数据均由初录员和复录员分别录入,以确保数据的正确性。(2)初录/复录比对:将初录员和复录员录入的数据进行一一比较,并标记两套数据是否一致。(3)数据确认:当上述两套数据完全一致后,将其中任一套作为最终进入系统X的原始数据。(4)汇总核对和打印:对经过确认的数据进行汇总,并和会计账目中的相关数据进行核对,以确保数据的整体正确性,并打印输出经过确认的数据,为以后核查可能的错误提供依据。该建账软件需要打印的分户账清单样式如表3-8所示。表3-8分户账清单样式表储蓄所账号开户日户名其他分户账数据储蓄所A64361357200820109992008-08-15小郭……………储蓄所A合计共XXXX户,总余额YYYYYYY.YY元储蓄所B84361357200820098882008-08-25小谢…………储蓄所B合计共XXXX户,总余额YYYYYYY.YY元……储蓄所N……………………储蓄所N合计共XXXX户,总余额YYYYYYY.YY元(5)数据转换:将经过确认的数据转换为储蓄系统X需要的中间格式数据。(6)数据清除:为加快初录和复录的处理速度,在数据确认之后,可以有选择地清除初录员和复录员录入的数据。该软件的数据流图如图3-17~图3-19所示,图中部分数据流数据文件的格式如下。初录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质复录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质会计账目=储蓄所号+总户数+总余额操作结果=初录操作结果+比对操作结果+复录操作结果
填空题 如下的SQL语句是用于查询“每个学生的选修课程数、总成绩、平均成绩”的不完整语句,请在空缺处填入正确的内容。
SELECT Student.SNo,{{U}} (1)
{{/U}},SUM(Grade),AVG(Grade) FROM
Student,Grade WHERE Student.SNo=Grade.SNo,
GROUP BY{{U}} (2) {{/U}};
填空题[问题2] 张三到图书馆借阅一本书,两个月后,他把这本逾期的书返还给图书馆。画出这个场景的时序图。
填空题[说明] 利用c++的各种控制语句编写一个万年历程序,要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一般挂历上的格式。本程序包含如下两个函数:Leap ()用于判定指定的年份是闰年,Week ()用于计算year年份的1月1日是星期几,其判定规则为:(1) 如果year 年份为1994年,则为星期六。(2) 如果year 年份大于1994年,则星期值weekno 按下列公式计算:differ=(year-1994)*(365%6)+(year-1993)/4-(year-2001)/100+(year-2001)/400 date=6+differ%7weekno=(date6)? date-7:date(3) 如果year 年份小于1994年,则星期值weekno 按下列公式计算:differ=(1994-year)*(365%7)+(1996-year)/4-(2001-year)/100+(2000-year)/400 weekno=6-dder%7 # include "iostream. h" # include "iomanip. h" int leap(int n) if( (1) ) return 0 else return 1; int week( int year ) int a1, differ, date, weekno; if (year = = 1994) a1 =0; else if (year > 1994) a1=1; else a1= -1; switch(a1) case 0: return 6; break; case 1: (2) date = 6 + differ% 7; weekno = ( date > 6) ? date - 7 date; return weekno; break; case - 1: differ = ( 1994 - year) * (365%7) + (1996 - year)/4 - (2001 - year)/100 + (2000 - year)/400; weekno =6-differ%7; return weekno; break; void main( ) int i,year,m2,n,j; cout < < “Please input 某年数:”; cin> >year; if ( ! leap(year) ) (3) ; else m2 =28; int month [12]: 31 ,m2,31,30,31,30,31,31,30,31,30,31 ; (4) for ( i=0; i<12; i+ + ) cout< < < <end1< <setw(4*n) < <"; for(j=1 ;j< =month [i] ;j+ +) cout< <setw(4) < <j; n+ +; if(n> =7) (5) cout < < end1;
填空题[问题3] 如果将上述应用的数据库设计为如下三个关系模式: R1 (A#,A1,A2,A3) R2 (B#,B1,B2) R3 (A#,B#,D1) 那么关系模式R2是否一定满足第3范式?为什么?
