专业软件设计师网站|培训机构|服务商(加客服微信:cnitpm或QQ:800184589进软件设计师学霸群)

软题库 培训课程
当前位置:信管网 >> 软件设计师 >> 案例分析 >> 文章内容
2006年上半年软件设计师下午案例分析真题文字版
来源:信管网 2021年05月17日 【所有评论 分享到微信

免费下载软件设计师历年真题:http://www.cnitpm.com/zhenti/rs.html
该套题在线考试:http://www.cnitpm.com/exam/examam.aspx?t1=2&sid=535632
1、 试题一

阅读下列说明以及数据流图,回答问题1、问题2和问题3。
[说明]
某学校建立了一个网上作业提交与管理系统,基本功能描述如下:
(1)账号和密码。任课老师用账号和密码登录系统后,提交所有选课学生的名单。系统自动为每个选课学生创建登录系统的账号和密码。
(2)作业提交。学生使用账号和密码登录系统后,可以向系统申请所选课程的作业。系统首先检查学生的当前状态,如果该学生还没有做过作业,则从数据库服务器申请一份作业。若申请成功,则显示需要完成的作业。学生需在线完成作业,单击“提交”按钮上交作业。
(3)在线批阅。系统自动在线批改作业,显示作业成绩,并将该成绩记录在作业成绩统计文件中
[问题1]
如果将数据库服务器(记为db.作为一个外部实体,那么在绘制该系统的数据流图时,还应有哪些外部实体和数据存储?
[问题2]
根据说明结合问题1的解答,指出在该系统的顶层数据流图中应有哪些数据流。请采用说明中的词汇给出这些数据流的起点、终点以及数据流名称,下表给出了数据流的部分信息,请填充空缺处。

3、[问题3]
根据数据流图的设计原则,阅读下图所示的数据流图,找出其中的错误之处。





信管网参考答案:
查看解析:www.cnitpm.com/st/2453621253.html


2、 试题二

阅读下列说明以及uml类图,回答问题1、问题2和问题3。
[说明]
某客户信息管理系统中保存着两类客户的信息。
(1)个人客户,对于这类客户,系统保存了其客户标识(由系统生成)和基本信息 (包括姓名、住宅电话和e-mail)。
(2)集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识(由系统生成)之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、e-mail、办公电话以及职位。
该系统除了可以保存客户信息之外,还具有以下功能:
(1)向系统中添加客户(addcustomer);
(2)根据给定的客户标识,在系统中查找该客户(getcustomer):
(3)根据给定的客户标识,从系统中删除该客户(removecustomer):
(4)创建新的联系人(addcontact):
(5)在系统中查找指定的联系人(getcontact);
(6)从系统中删除指定的联系人(removecontact)。
该系统采用面向对象方法进行开发。在面向对象分析阶段,根据上述描述,得到如下表所示的类。

描述该客户信息管理系统的uml类图如下图所示。

[问题1]
请使用说明中的术语,给出上图中类customer和类person的属性。
[问题2]
识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图中的(1)~(6)。
[问题3]
根据说明中的叙述,抽象出如下表所示的方法,请指出上图中的类customer- informationsystem和

信管网参考答案:
查看解析:www.cnitpm.com/st/2453726703.html


3、 试题三

阅读下列说明,回答问题1、问题2和问题3。
[说明]
某单位资料室需要建立一个图书管理系统,初步的需求分析结果如下:
(1)资料室有图书管理员若干名,他们负责己购入图书的编目和借还工作,每名图书管理员的信息包括工号和姓名;
(2)读者可在阅览室读书,也可通过图书流通室借还图书,读者信息包括读者d、姓名、电话和e-mail,系统为不同读者生成不同的读者id;
(3)每部书在系统中对应唯一的一条图书在版编目数据(cip,以下简称书目),书目的基本信息包括isbn号、书名、作者、出版商、出版年月,以及本资料室拥有该书的册数(以下简称册数),不同书目的isbn号不相同:
(4)资料室对于同一书目的图书可拥有多册(本),图书信息包括图书id、isbn号、存放位置、当前状态,每一本书在系统中被赋予唯一的图书id:
(5)一名读者最多只能借阅十本图书,且每本图书最多只能借两个月,读者借书时需由图书管理员登记读者①、所借图书d、借阅时间和应还时间,读者还书时图书管
理员在对应的借书信息中记录归还时间;
(6)当某书目的可借出图书的数量为零时,读者可以对其进行预约登记,即记录读者id、需要借阅的图书的isbn号、预约时间。
某书目的信息,以及与该书目对应的图书信息,如下表所示。

系统的主要业务处理如下。
(1)入库管理:图书购进入库时,管理员查询本资料室的书目信息,若该书的书目尚未建立,则由管理员编写该书的书月信息并输入系统,然后编写并输入图书信息;否则,修改该书目的册数,然后编写并输入图书信息,对于进入流通室的书,其初始状态为“未借出”,而送入阅览室的书的状态始终为“不外借”。
(2)借书管理:读者借书时,若有,则由管理员为该读者办理借书手续,并记录该读者的借书信息,同时将借出图书的状态修改为“已借出”。
(3)预约管理:若图书流通室没有读者要借的书,则可为该读者建立预约登记,需要记录读者id、书的isbn号、预约时间和预约期限(最长为10天)。一旦其他读者归还这种书,就自动通知该预约读者。系统将自动清除超出预约期限的预约记录并修改相关信息。
(4)还书管理:读者还书时,则记录相应借还信息中的“归还时间”,对于超期归还者,系统自动计算罚金(具体的计算过程此处省略)。系统同时自动查询预约登记表,若存在其他读者预约该书的记录,则将该图书的状态修改为“已预约”,并将该图书id写入相应的预约记录中(系统在清除超出预约期限的记录时解除该图书的“已预约”状态);否则,将该图书的状态修改为“未借出”。
(5)通知处理:对于己到期且未归还的图书,系统通过e-mail自动通知读者:若读者预约的书已到,系统则自动通过e-mail通知该读者来办理借书手续。
[问题1]
根据以上说明设计的实体联系图如下图所示,请指出读者与图书、书目与读者、书目与图书之间的联系类型。

[问题2]
该图书管理系统的主要关系模式如下,请补充“借还记录”和“预约登记”关系中的空缺。
管理员(工号,姓名)
读者(读者id,姓名,电话,e-mail)
书目(isbn号,书名,作者,出版商,出版年月,册数,经办人)
图书(图书id,isbn号,存放位置,状态,经办人)
借还记录(  (a)  ,借出时间,应还时间,归还时间)
预约登记(   (b)  ,预约时间,预约期限,图书id.
注:时间格式为“年.月.日 时:分:秒”。
[问题3]
请指出问题2中给出的读者、书目关系模式的主键,以及图书、借还记录和预约登记关系模式的主键和外键。
信管网参考答案:
查看解析:www.cnitpm.com/st/245388453.html


4、 试题四

阅读以下说明,回答问题1、问题2和问题3。
[说明]
某单位正在使用一套c/s模式的应用软件系统,现在需要升级为b/s应用模式,但需要保持业务的连续性。开发人员提出用web service作为中间层的接口进行开发。
[问题1]
请用120字以内文字,从业务的继承性、升级成本(时间、工作量)和扩展性三个方面简要说明开发人员所提方案的优点。
[问题2]
web service的三个基本技术是wsdl、soap、uddi,它们都是以xml为基础定义的。请用120字以内文字,简要说明wsdl、soap和uddi的作用。
[问题3]
服务注册中心、服务提供者和服务请求者之间的交互和操作构成了web service的体系结构,如下图所示。请用180字以内文字,说明这三者的主要功能及其交互过程。

信管网参考答案:
查看解析:www.cnitpm.com/st/2453915560.html


5、 试题五

阅读下列说明、图和c代码。
[说明5-1]
b树是一种多叉平衡查找树。一棵m阶的b树,或为空树,或为满足下列特性的m叉树:
①树中每个结点最多有m棵子树;
②若根结点不是叶子结点,则它至少有两棵子树;
⑧除根之外的所有非叶子结点至少有[m/2]棵子树;
④所有的非叶子结点中包含下列数据信息:
(n,a0,k1,a1,k2,a2,  …,kn,an)其中:ki(i=1,2,…,n)为关键字,且ki<ki+1(i=1,2,…,n-1);ai(i=0,1,…,n)为指向子树根结点的指针,且指针ai-1,所指子树中所有结点的关键字均小于ki,ai+1,所指子树中所有结点的关键字均大于ki,n为结点中关键字的数目。
⑤所有的叶子结点都出现在同一层次上,并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。
例如,一棵4阶b树如下图所示(结点中关键字的数目省略)。

b树的阶m、bool类型、关键字类型及b树结点的定义如下:
#define  m  4                                    /*b树的阶*/
typedef enum {false=0,true=1}bool;
typedef int elemkeytype;
typedef struct btreenode {
int numkeys;                                 /*结点中关键字的数日*/
struct btreenode*parent;                    /*指向父结点的指针,树根的父结点指针为空*/
struct btreenode *a[m];                    /*指向子树结点的指针数组*/
elemkeytype  k[m];                          /*存储关键字的数组,k[0]闲置不用*/
}btreenode;
函数searchbtree(btreenode*root,elemkcytypeakey,btreenode:*pb)的功能是:在给定的一棵m阶b树中查找关键字akey所在结点,若找到则返回true,否则返回 false。其中,root是指向该m阶b树根结点的指针,参数ptr返回akey所在结点的指针,若akey不在该b树中,则ptr返回查找失败时空指针所在结点的指针。例如,在上图所示的4阶b树中查找关键字25时,ptr返回指向结点e的指针。
注;在结点中查找关键字akey时采用二分法。
[函数5-1]
bool searchbtree(btreenode* root, elemkeytype akey, btreenode **ptr)
{
int  lw, hi, mid;
btreenode*p = root;
*ptr = null;
while ( p ) {
1w = 1;   hi=   (1)  ;
while (1w <= hi) {
mid = (1w + hi)/2;
if (p -> k[mid] == akey) {
*ptr = p;
return true;
}
else
if (  (2)  )
hi=mid - 1;
else
1w = mid + 1;
}
*ptr = p;
p =   (3)  ;
}
return false;
}
[说明5-2]
在m阶b树中插入一个关键字时,首先在最接近外部结点的某个非叶子结点中增加一个关键字,若该结点中关键字的个数不超过m-1,则完成插入;否则,要进行结点的“分裂”处理。所谓“分裂”,就是把结点中处于中间位置上的关键字取出来并插入其父结点中,然后以该关键字为分界线,把原结点分成两个结点。“分裂”过程可能会一直持续到树根,若树根结点也需要分裂,则整棵树的高度增加1。
例如,在上图所示的b树中插入关键字25时,需将其插入结点e中。由于e中已经有3个关键字,因此将关键字24插入结点e的父结点b,并以24为分界线将结点e分裂为e1和e2两个结点,结果如下图所示。

函数isgrowing(btreenode*root,elemkeytypeakey)的功能是:判断在给定的m阶b树中插入关键字akey后,该b树的高度是否增加,若增加则返回true,否则返回false。其中,root是指向该m阶b树根结点的指针。
在函数isgrwing中,首先调用函数searchbtree(即函数5-1)查找关键字akey是否在给定的m阶b树中,若在,则返回false(表明无需插入关键字akey,树的高度不会增加);否则,通过判断结点中关键字的数目考查插入关键字akey后该b树的高度是否增加。
[函数5-2]
bool isgrowing(btreenode* root, elernkeytype akey)
{   btreenode *t, *f;
if( !searchbtree(   (4)   ) ) {
t=f;
while (  (5)  ) {
t=t -> parent;
}
if( !t )
return true;
}
return false;
}
信管网参考答案:
查看解析:www.cnitpm.com/st/245408738.html


6、 试题六

阅读下列说明、图和c++代码。
[说明]
某订单管理系统的部分uml类图如下图所示。

上图中,product表示产品,productlist表示产品目录,order表示产品订单,orderitem表示产品订单中的一个条目,orderlist表示订单列表,salessystem提供订单管理系统的操作接口。
请完善类order的成员函数getorderedamount()和类salessystem的stafistic()方法,各个类的属性及部分方法定义参见下面的c++代码。
[c++代码]
class product {                                        //产品
private:
string pid;                                       //产品识别码
string description;                              //产品描述
double price;                                   ///产品单价
public:
void setproductprice(double price);            //设置产品单价
string getproduetld();                         //获取产品识别码
string getproduetdescriprion 0;              //获取产品描述
double getproductprice0;                    //获得产品单价
//其他成员省略
};
class productlist {                             //产品列表类
private:
vector <product> products;
public:
productlist();
product getproductbylndex(int i);          //获得产品列表中的第i件产品
void addproduct(product t);                //在产品列表中加入一件产品
product * getproductbyid(string pid);      //获得识别码为pid的产品指针
unsigned iht getproductamount();           //获得产品列表中的产品娄量
};
class orderitem {                               //订单条目类
private:
product *productptr;                      //指向被订购产品的指针
int quantity;                             //订购数量
public:
orderitem (product *,iht);
product * getproductptr o;                //获得指向被订购产品的指针
int getquantity ();                       //获取被订刚强产品数量
};
class order {                                  //订单类
private:
unsigned int orderid;                    //订单识别号
vector<orderltem> items;               //订单内容(订单项)
public:
order(unsigned int orderid);              //获得识别码为fid的产品在当前订单中被订购的数量
int getorderedamount(string fid);
void additem(product *productptr,unsigned int n);    //在订单中增加一个订单项
};
class orderlist {                                        //订单列表类
private:
vector<order> orders;
public:
orderlist();
//begin()返回指向订单列表第一个元素的迭代器(指针)
virtual vector<order>::iterator orderlist::begin();
//end()返回指向订单列表最后一个元素之后的迭代器(指向一个不存在的元素)
virtual vector<order>::iterator orderlist::end();
void addorder(order t);             //在订单列表中加入一份订单
//其他成员省略
};
class salessystem{
private:
productlist catalog;                 //产品目录
orderlist sales;                    //订单列表
public:
salessystem();
void statistic();                  //统计所有产品的订购情况
//其他成员省略
};
//在订单中查找识别码为tid的产品的订购数量,若该产品没有被订购,则返回0
int order::getorderedamount(string tid)
{   for (int k=0; k < items.size(); k++) {
if(  (1)  ==tid)
return   (2)  ;
}
return 0;
}
//方法statistic()依次统计产品目录中每个产品的订购总量,并打印输出
//每个产品的识别码、描述、订购总量和订购金额
void salessystem::statistic()
{   unsigned int k, t, ordered_qty = 0;
vector<order>::iterator it;   product p;
cout<<''产品识别码\t描述\t\t订购数量\t金额''<<endl;
for (k = 0; k < catalog.gctproductamount(); k++){//遍历产品列表
p =  (3)  ;            //从产品列表取得一件产品信息存入变量p
ordered_qty = 0;
//通过迭代器变量it遍历订单列表中的每一份订单
for (it = sales. begin();   (4)   : it++) {
//根据产品识别码获得产品p在当前订单中被订购的数量
t =  (5)  (p.getproductld());
ordered_qty +=t;
}
cout << p.getproducfld() << "\t\t"<< p.gntproductdescription() << "\t\t";
cout <<ordered_qty << "\t\t" << p.getproductprice() * ordered_qty << endl;
}
}
信管网参考答案:
查看解析:www.cnitpm.com/st/2454117374.html


7、 试题七

阅读下列说明、图以及java程序。
[说明]
某订单管理系统的部分uml类图如下图所示。



上图中,product表示产品,productlist表示所销售产品的列表,order表示产品订单,orderltem表示产品订单中的一个条目,orderlist表示订单列表,salessystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如下表所示。

可以使用类java.util.arraylist<e>米实现对象的聚集关系,如上图中orderlist与 order之间的聚集关系。
for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素的变量,其语法如下:
for(用来接收集合中元素的变量:需要遍历的对象集合)
如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口 java.util.iterable<t>。
java程序7-1和java程序7-2分别给出了类orderlist和方法statistic的java代码
[java程序7-1]
import java.util.*;
public class orderlist  (1)   {
private arraylist<order> orders;
public orderlist0 {
this.orders = new arraylist<order>();
}
public void addorder(order orde0
this.orders.add(order);
}
public iterator<order> iterator() {
return  (2)  ;
}
public iht getnumberoforders0 {
return this.orders.size();
}
}
[java程序7-21]
import java.u61.*;
public class salessystem {
private productlist catalog;
private orderlist sales;
private static printwriter  stdout = new  printwriter(system.out, true);
public void statistic() {
for (product product:   (3)  ) {
iht number = 0;
for (order order:   (4)  ) {
for (   (5)  : order) {
if (produet.equals(item.getproduct()))
number += item. getquantity();
}
}
stdout.println(product .getcode() +"  "
+ product.getdescription() +"  "
+ number +"  "+ number * product.getprice());
}
}
//其余的方法末列出
}
信管网参考答案:
查看解析:www.cnitpm.com/st/245421009.html
扫码关注公众号

温馨提示:因考试政策、内容不断变化与调整,信管网网站提供的以上信息仅供参考,如有异议,请以权威部门公布的内容为准!

信管网致力于为广大信管从业人员、爱好者、大学生提供专业、高质量的课程和服务,解决其考试证书、技能提升和就业的需求。

信管网软考课程由信管网依托10年专业软考教研倾力打造,官方教材参编作者和资深讲师坐镇,通过深研历年考试出题规律与考试大纲,深挖核心知识与高频考点,为学员考试保驾护航。面授、直播&录播,多种班型灵活学习,满足不同学员考证需求,降低课程学习难度,使学习效果事半功倍。

相关内容

发表评论  查看完整评论  

推荐文章