题目
试题二(共25分)
阅读以下关于软件系统数据架构建模的说明,在答题纸上回答问题1至问题 3。
【说明】
RMO 是一家运动服装制造销售公司,计划在五年时间内将销售区域从华南地区扩展至全国范围。为了扩大信息技术对于未来业务发展的价值,公司邀请咨询顾问帮助他们制订战略信息系统规划。经过评审,咨询顾问给出的战略规划要点之一是建立客户关系支持系统CRSS。 RMO 公司决定由其技术部成立专门的项目组负责 CRSS的开发和维护工作。
项目组在仔细调研和分析系统需求的基础上, 确定了基于互联网的CRSS系统架构。但在确定系统数据架构时,张工认为应该采用集中式的数据架构,给出的理由是结构简单、易维护且开发及运行成本低;而刘工建议采用分布式的数据架构,并提出在开发中通过“局部数据库+缓存”的读写分离结构实现,具有较好的运行性能和可扩展性。
项目组经过集体讨论,考虑到公司的未来发展规划,最终采用了刘工的建议。
【问题1】 (8分)
请用300字以内的文字,说明张工和刘工提出的数据架构的基本思想。
【问题2】 (13分)
在刘工建议的基础上,为了避免 CRSS系统的单点故障,请用 200字以内文字简要说明如何建立CRSS的数据库系统;对于数据的读取、添加、更改和删除操作分别如何实现。
【问题3】 (4分)
RMO 公司销售区域将在未来五年大面积扩展,其潜在客户数量也会因此大幅度增加,所以良好的可扩展性是CRSS系统所必需的质量属性。请分别说明在集中式和分布式数据架构下,可以采用哪些方法提升系统的可扩展性。
第1题
该系统应在功能上分为政务外网应用及政务内网应用两个模块。用200字分析这两个模块的主要功能。
从下列的4道试题(试题二至试题五)中任选2道解答。如果解答的试题数超过2道,则题号小的2道有效。
第2题
阅读以下说明和C++码,将应填入(n)处的字名写在对应栏内。
从下列的3道试题(试题五至试题七)中任选1道解答。
如果解答的试题数超过1道,则题号小的1道解答有效。
[说明] 编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a: xxk1. dat”中。
(1)
include <fstream. h >
include < stdlib. h >
void main () {
(2)
if (! four) {
cerr < <“文件没有找开!” < <end1;
exit (1);
}
int x;
cin > >x;
while((3)){
(4)
cin> >x;
}
(5)
}
第3题
从下列的4道试题(试题二至试题五)中任选2道解答。如果解答的试题数超过2道,则题号小的2道有效。
阅读以下关于某电器公司企业规划方面的叙述,回答问题1和问题2。
某电器公司1994年成立,是目前国内著名的小家电生产专业企业,2000年销售额超过 1亿元,每年销售增长率100%以上,奶多家办事处及1000多家销售网点构成了庞大的全国营销管理网络体系。
1998年该公司在做企业规划时,提出了要解决公司销售环节管控的力度和及时性问题。而这一点正是目前企业规模扩大、分支机构增多及市场竞争加剧过程中,随之而来的业务处理不规范,资金周转不明、客户信息管理混乱以及严重滞后的业务数据反馈等阻碍企业发展的问题症结所在。于是公司开始考虑用软件来解决企业问题,用管理软件来规范和提升企业管理水平。
一个企业管理模式和流程的转换,往往会遭到来自企业各方的阻力,其中最典型的是各部门担心损失既得利益而进行消极抵制。所以企业一把手的重视和决心决定了企业会在管理发展上走多远走多快。该公司老板认为,该公司最需要加强管理的地方是销售,建立稳定高效的销售体系,实现更加公平的奖惩措施,是进一步提高企业竞争力的重要手段,这是该公司比一些规模更大的企业需要更快地规划实施分销管理信息化系统的主要原因。
公司的组织结构采取总公司、分公司或办事处,2级管理1级核算体制,总公司采用独立核算的形式;其他地区设有办事处,均没有独立的核算功能。分公司和办事处负责当地的销售工作,客户是当地的各类商场或者超市。具体结构如下图所示:
根据该图用200字分析总公司及办事处的主要功能。
第4题
从下列的3道式题(试题五至试题七)中任选1道解答。
如果解答的试题数超过1道,则题号小的1道解答有效。
阅读以下说明和C++码,将应填入(n)处的字名写在的对应栏内。
[说明] 利用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%7
weekno=(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;
}
}
}
}
第5题
从下列的 4道试题(试题一至试题四)中任选 1道解答。
请在答卷上用“Ο”圈住选答的试题编号。若用“Ο”圈住的试题编号超过1道,则按题号最小的 1道评分。
试题一 论软件的静态演化和动态演化及其应用
软件演化(Software Evolution)是指软件在其生命周期内的更新行为和过程。演化是一系列贯穿软件生命周期始终的活动,系统需求改变、功能实现增强、新功能加入、软件架构改变、软件缺陷修复、运行环境改变均要求软件系统能够快速适应变化,具有较强的演化能力。软件静态演化(Static Evolution)和动态演化(Dynamic Evolution)是目前软件演化的两种重要类型。
请围绕“软件的静态演化和动态演化及其应用”论题,依次从以下三个方面进行论述。
1. 概要叙述你参与管理和开发的软件项目以及你在其中所担任的主要工作。
2. 请分别对软件静态演化和动态演化的特点进行论述, 说明两种软件演化类型各自的优缺点及其应用场合,并举例说明各自的常见演化技术手段。
3. 具体阐述你参与管理和开发的项目中所进行的软件演化活动的特点、演化的类型,以及所采取的对应演化技术手段,说明具体实施过程以及实际应用的效果。
第6题
试题五(共15分)
阅读以下说明、图和C++代码,填补C++代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。
【说明】
已知对某几何图形绘制工具进行类建模的结果如图5.1所示,其中Shape为抽象类(应至少包含一个纯虚拟(virtual)函数),表示通用图形,Box表示矩形,Ellipse表示椭圆,Circle表示圆(即特殊的椭圆),Line表示线条。
下面的C++代码用于实现图5-1所给出的设计思路,将其空缺处填充完整并编译运行,输
出结果为:
Ellipse
Circle
Ellipse
C
E
【C++代码】
include <string>
include <iostream>
using namespace std;
class Shape{
public:
Shape(const string& name){
m_name= name;
}
~Shape(){}
(1) void paint() = 0;
stringgetName()const {
retumm name;
}
Private:
string m_name;
};
//Box和 Line类的定义与 Ellipse类似,其代码略
classEllipse (2) {
public:
Ellipse(const string& name) : Shape(name){ cout<<"Ellipse" <<endl; }
Voidpaint() { cout<<getName()<<endl;}
};
classCircle (3) {
public:
Circle(const string& name) : Ellipse(name){ cout<<"Circl"<<endl; }
};
class Diagram {
public:
void drawAShap(Shape* shape){ shape->paint(); }
void drawShapes() {
shapes[0] = new Circle("C");
shapes[l] = new Ellipse("E");
for (int i=O;i<2; ++1) {
drawAShap(shapes[i]);
}
}
void close (){ /*删除形状,代码略 */ }
private:
Shape* shapes[2];
};
int main()
{
Diagram* diagram = (4)
diagram->drawShapes();
diagram->close ();
(5) diagram;
}
第7题
试题四(共15 分)
阅读下列说明和C代码,回答问题 1 至问题3,将解答写在答题纸的对应栏内。
【说明】
某应用中需要对100000 个整数元素进行排序,每个元素的取值在 0~5 之间。排序算法的基本思想是:对每一个元素 x,确定小于等于 x的元素个数(记为m),将 x放在输出元素序列的第m 个位置。对于元素值重复的情况,依次放入第 m-l、m-2、…个位置。例如,如果元素值小于等于4 的元素个数有 10 个,其中元素值等于 4 的元素个数有3个,则 4 应该在输出元素序列的第10 个位置、第 9 个位置和第8 个位置上。
算法具体的步骤为:
步骤1:统计每个元素值的个数。
步骤2:统计小于等于每个元素值的个数。
步骤3:将输入元素序列中的每个元素放入有序的输出元素序列。
【C代码】
下面是该排序算法的C语言实现。
(1)常量和变量说明
R:常量,定义元素取值范围中的取值个数,如上述应用中 R值应取6i:循环变量
n:待排序元素个数
a:输入数组,长度为n
b:输出数组,长度为n
c:辅助数组,长度为R,其中每个元素表示小于等于下标所对应的元素值的个数。
(2)函数sort
1 void sort(int n,int a[ ],intb[ ]){
2 int c[R],i;
3 for (i=0;i< (1) ;i++){
4 c[i]=0;
5 }
6 for(i=0;i<n;i++){
7 c[a[i]] = (2) ;
8 }
9 for(i=1;i<R;i++){
10 c[i]= (3) ;
11 }
12 for(i=0;i<n;i++){
13 b[c[a[i]]-1]= (4) ;
14 c[a[i]]=c[a[i] ]-1;
15 }
16 }
【问题1】(8 分)
根据说明和C代码,填充 C代码中的空缺(1)~(4)。
【问题2】(4 分)
根据C代码,函数的时间复杂度和空间复杂度分别为 (5) 和 (6) (用 O符号
表示)。
【问题3】(3 分)
根据以上C代码,分析该排序算法是否稳定。若稳定,请简要说明(不超过 100 字);
若不稳定,请修改其中代码使其稳定(给出要修改的行号和修改后的代码)。
从下列的2 道试题(试题五和试题六)中任选 1 道解答。
如果解答的试题数超过 道,则题号小的 道解答有效。
第8题
试题五(共15分)
阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
某公司的组织结构图如图5-1所示,现采用组合(Composition)设计模式来构造该公司的组织结构,得到如图5-2所示的类图。
其中 Company 为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和 FinanceDepartment分别表示人力资源部和财务部。
【C++代码】
include <iostream>
include <list>
include <string>
using namespace std;
class Company { // 抽象类
protected:
string name;
public:
Company(string name) { (1) = name; }
(2) ; // 增加子公司、办事处或部门
(3) ; // 删除子公司、办事处或部门
};
class ConcreteCompany : public Company {
private:
list< (4) > children; // 存储子公司、办事处或部门
public:
ConcreteCompany(string name) : Company(name) { }
void Add(Company* c) { (5) .push_back(c); }
void Delete(Company* c) { (6) .remove(c); }
};
class HRDepartment : public Company {
public:
HRDepartment(string name) : Company(name) {} // 其它代码省略
};
class FinanceDepartment : public Company {
public:
FinanceDepartment(string name) : Company(name) {} // 其它代码省略
};
void main() {
ConcreteCompany *root = new ComcreteCompany("北京总公司");
root->Add(new HRDepartment("总公司人力资源部"));
root->Add(new FinanceDepartment("总公司财务部"));
ConcreteCompany *comp = new ConcreteCompany("上海分公司");
comp->Add(new HRDepartment("上海分公司人力资源部"));
comp->Add(new FinanceDepartment("上海分公司财务部"));
(7) ;
ConcreteCompany *comp1 = new ConcreteCompany("南京办事处");
comp1->Add(new HRDepartment("南京办事处人力资源部"));
comp1->Add(new FinanceDepartment("南京办事处财务部"));
(8) ; //其它代码省略
}
第9题
试题二(12 分)
阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
[说明]
某企业进行企业信息化工程建设,主要包括综合布线工程、网络与主机平台建设、应用系统开发。
[问题1](4 分)
综合布线系统一般由哪几个子系统组成?请列出。
[问题 2](5 分)
请简要叙述采购设备到货监理的工作重点。
[问题3](3 分)
常用的质量控制基本工具中,统计方法除排列图外还有哪些图?请叙述其主要用途。
第10题
【题目描述】
试题四(共15分)
阅读下列说明和c代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量Wij和价格Cij。设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。
采用回溯法来求解该问题:
首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{l,2,…,m},将解空间用树形结构表示。
接着从根结点开始,以深度优先的方式搜索整个解空间。从根结点开始,根结点成为活结点,同时也成为当前的扩展结点。向纵深方向考虑第一个部件从第一个供应商处购买,得到一个新结点。判断当前的机器价格(C11)是否超过上限(cc),重量(W11)是否比当前已知的解(最小重量)大,若是,应回溯至最近的一个活结点;若否,则该新结点成为活结点,同时也成为当前的扩展结点,根结点不再是扩展结点。继续向纵深方向考虑第二个部件从第一个供应商处购买,得到一个新结点。同样判断当前的机器价格(C11+C21)是否超过上限(cc),重量(W11+W21)是否比当前已知的解(最小重量)大。若是,应回溯至最近的一个活结点;若否,则该新结点成为活结点,同时也成为当前的扩展结点,原来的结点不再是扩展结点。以这种方式递归地在解空间中搜索,直到找到所要求的解或者解空间中已无活结点为止。
【C代码】
下面是该算法的C语言实现。
(1)变量说明
n:机器的部件数
m:供应商数
cc:价格上限
w[][]:二维数组,w[i][j]表示第j个供应商供应的第i个部件的重量
c[][]:二维数组,c[i][j]表示第j个供应商供应的第i个部件的价格
best1W:满足价格上限约束条件的最小机器重量
bestC:最小重量机器的价格
bestX[].最优解,一维数组,bestX[i]表示第i个部件来自哪个供应商
cw:搜索过程中机器的重量
cp:搜索过程中机器的价格
x[]:搜索过程中产生的解,x[i]表示第i个部件来自哪个供应商
i:当前考虑的部件,从0到n-l
j:循环变量
(2)函数backtrack
Int n=3;
Int m=3;
int cc=4:
int w[3][3]={{1,2,3},{3,2,1},{2,2,2}};
int c[3][3]={{1,2,3},{3,2,1},{2,2,2}};
int bestW=8;
int bestC=0;
int bestX[3]={0,0,0};
int cw=0;
int cp=0;
int x[3]={0,0,0};
int backtrack(int i){
int j=0;
int found=0;
if(i>n-1){/*得到问题解*/
bestW= cw;
bestC= cp;
for(j=0;j<n;j++){
(1)____;
}
return 1;
}
if(cp<=cc){/*有解*/
found=1;
}
for(j=0; (2)____;j++){
/*第i个部件从第j个供应商购买*/
(3) ;
cw=cw+w[i][j];
cp=cp+c[i][i][j];
if(cp<=cc && (4) {/*深度搜索,扩展当前结点*/
if(backtrack(i+1)){found=1;}
}
/*回溯*/
cw= cw -w[i][j];
(5) ;
}
return found;
}
从下列的2道试题(试题五和试题六)中任选1道解答。
如果解答的试题数超过1道,则题号小的1道解答有效。
【我提交的答案】:
【参考答案分析】:
(1) bestX[j]=x[j]
(2)j<m
(3)x[i]=j
(4)cw< bestW
(5) cp= cp - c[i][j]
【我的疑问】(如下,请求专家帮助解答)
cw< bestW
不是应该是cw< =bestW
为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!