仿真系统程序的总体设计(完整版)

上传人:m**** 文档编号:498905745 上传时间:2022-12-28 格式:DOC 页数:106 大小:2.47MB
返回 下载 相关 举报
仿真系统程序的总体设计(完整版)_第1页
第1页 / 共106页
仿真系统程序的总体设计(完整版)_第2页
第2页 / 共106页
仿真系统程序的总体设计(完整版)_第3页
第3页 / 共106页
仿真系统程序的总体设计(完整版)_第4页
第4页 / 共106页
仿真系统程序的总体设计(完整版)_第5页
第5页 / 共106页
点击查看更多>>
资源描述

《仿真系统程序的总体设计(完整版)》由会员分享,可在线阅读,更多相关《仿真系统程序的总体设计(完整版)(106页珍藏版)》请在金锄头文库上搜索。

1、仿真系统程序的总体设计(完整版)(文档可以直接使用,也可根据实际需要修改使用,可编辑 欢迎下载)11.1 仿真系统程序的总体设计 265第十一章 用C+语言设计面向对象程序由于C+语言支持抽象数据类型、类的继承机制以及以虚函数为代表的多态性,使得C+语言成为面向对象程序设计(OOP)的有力工具,虽然我们已经在各章(特别是第七章以后)分别介绍了其各种功能和机制的编程技术,但仍然不足以清楚地展示一个完整的面向对象程序设计的总体过程。本章拟通过自顶向下地介绍电梯仿真系统的用C+语言描述的OOP 程序,向读者展示初步的面向对象的编程方法,并从中体现OOP 的风格和特征。面对一个实际问题,面向对象编程的

2、过程一般分为三个阶段,即面向对象分析(OOA),面向对象设计(OOD)和面向对象实现(OOI)。前两个阶段与语言无关。OOA 阶段的任务是从问题陈述中把涉及问题领域和系统行为的对象,类及类之间的联系抽取出来。例如在办公大楼电梯仿真系统中,搭乘电梯的人,在楼间运行的电梯和各个楼层,它们是实际问题中的对象和类。OOD 阶段则需进一步对系统进行总体结构设计,把数据设计与过程设计结合为一体,封装为模块,同时为实现问题需求可能还需要引入其它一些对象和类。OOI 阶段才是用C+语言进行编程实现的过程。关于OOA,OOD 的内容本书不可能详细讨论,在全部本科的学习过程中,学生将有机会在有关OOP 的后续课程

3、(如数据结构、数据库系统原理、面向对象编程技术、软件工程等)中得到系统的训练。本章介绍两个OOP 编程实例,目的是脱离开语法讲解的范围,让读者直接面对问题,学习如何编写面向对象的C+程序。这里要说明的是,在实际问题编程时,可能与我们介绍的情形有区别,即由于OOP 允许充分利用程序的可重用性,依靠一个越来越完备的标准模板库(STL),程序员在开发一个新的软件时,新编写的类及对象可能只占程序的一小部分,充分利用系统提供的类模板(容器、迭代器、算法类)或用户过去编写的类或模板,可以大大缩短代码开发时间,把主要精力用在OOA 和OOD 上面,这样的编程既可靠又快速,是面向对象编程的一大优点。第十一章

4、用266 C+语言设计面向对象程序11.1 一个Palindrome 的识别程序设计这是一个简单问题。“Palindrome”译为“回文”,指顺读和反读都一样的单词或字符串。识别回文就是判断输入的字符串(不包括空格)是否是一个迴文,即正向和逆向阅读都是同一个串,如 abcba,dstt sd, 就是“迴文”,而abcd,AOP 不是。问题的关键是采用一种数据结构可以方便地反读字符串,我们选用具有“后进先出”特点的栈(stack)结构,为此设计一个Stack 类。其次,为了从输入的字符串中去掉空格,设计一个用户定义的函数dblank()。Stack 类的设计如下:/astack.h#includ

5、e #include const int MaxSize=50;class Stackprivate:char slistMaxSize;int top;public:Stack (void)top = 0;Stack (void);void Push (const char &item);char Pop (void);bool StackEmpty (void) return top = 0;bool StackFull (void) return top = MaxSize;void Stack:Push (const char &item)if (StackFull ()cout St

6、ack overflow! endl;elseslisttop = item;top+;11.1 仿真系统程序的总体设计 267char Stack:Pop (void)if (StackEmpty ()cout an empty stack! endl;return ;return slist-top;函数dblank()设计为:void dblank (const char * str, const char * dblankstr)char * pstr = str;char * pdblankstr = dblankstr;while(*pstr != 0)if (*pstr != )

7、* pdblankstr = * pstr;pdblankstr+;pstr+;*pdblankstr=0;回文识别程序可以写为:/program2_2.cpp#include #include astack.hvoid dblank(char *,char * );void main() /主函数部分Stack S;Char palstring80, dblankstring80, ch;int i = 0;bool ispalindrome = true;cin get(palstring,80); /输入一个字符串,以0结尾/*cin会把空格,制表键,回车都做为结束符,所以就不能用它输入

8、含空格的字符串,而cin.get 仅以回车做结束符。*/第十一章 用268 C+语言设计面向对象程序dblank(palstring, dblankstring); /删去串中的空格while (dblankstringi != 0)S.Push(dblankstringi);i+;i = 0;while(!S.StackEmpty()ch = S.Pop();if (ch != dblankstringi)ispalindrome =false;break;i+;if (ispalindrome)coutpalstring is a palindromeendl;elsecoutpalstr

9、ing is not a palindromeendl;void dblank(char * str,char * dblankstr)这个程序虽然不大,但却包含了用户定义的类Stack 和用户定义的函数dblank(),它既不属于SP 框架,也不属于OOP 框架,而是一种混合框架,为了使得C+程序成为严格的OOP 框架程序,可以有两种解决办法:1一个比较大的C+程序往往有许多全局变量和一些用户定义的类外函数(在下一个实例中可以看到),可以把它们组成一个由若干公有成员走出的类。2在这个小型实例中,唯一的类外函数blank(),其功能也可以在主函数中实现:#include #include as

10、tack.hvoid dblank(char *,char * );void main() /主函数部分11.1 仿真系统程序的总体设计 269Stack S;Char palstring80, dblankstring80, ch;int i = 0;Bool ispalindrome = true;cin palstring; /输入一个字符串,以0结尾while (palstring i != 0) /进栈,同时删去串中的空格if (palkstringi != ) S.Push(palkstringi);i+;i = 0;while(!S.StackEmpty()ch = S.Pop(

11、);if (palstringi = ) i+;if (ch != dblankstringi)ispalindrome =false;break;i+;if (ispalindrome)coutpalstring is a palindromeendl;elsecoutpalstring is not a palindromeendl;112 楼宇电梯系统仿真程序的设计在实际工作中,往往需要由计算机来模拟一个系统的运行过程。例如工厂的生产中,由原材料、工人、设备、产品等多因素构成的生产过程仿真;一个电厂的电力的生产、供应、管理的全过程的仿真;一个城市的道路交通系统,对车流量、道路进行管理,其

12、中包括各种道路、行人、红绿灯系统、警察、各第十一章 用270 C+语言设计面向对象程序种车辆等等,它们在运行中全处在动态变化之中。这样的一个仿真系统的开发,有利于有关部门安排警力,改进红绿灯系统的设置,在最紧张的地段拓宽路面,改行单行线,建设新道路、立交桥、地铁等等。当然,设计这样的仿真程序不是一件很容易的事。C+语言所支持的面向对象程序设计技术正是为规模较大、比较复杂的问题编制高质量、可读性好、可维护性好、可重用性好的软件最强有力的方法。我们的问题是一个规模稍小一点的仿真问题,它是要编写一个程序,模拟办公大楼中全部电梯的工作过程。这个仿真程序可以用来监测系统运行情况,改善大楼管理,它也可以看

13、成是一种游戏程序。下面让我们对这个系统作一个初步描述:办公大楼有若干层(例如,十层),每层有电梯,同时有步行楼梯;全楼有若干部(例如,不多于10 部)电梯同时供使用,电梯容量为24人,速度每上下一层需5 秒,在某一层停下至少15 秒。其运行状态可分:向上、向下、停止,当前乘客数,当前所在层数。它设有一个“按钮数组”,例如第五层的按钮按下,意味着有乘客在第5 层到达目标层,等等。在楼的每一层,有电梯数,有按钮表示有人等待向上或向下,由若干人在等待,有若干电梯在本层停下,等等。在大楼中(包括进出)的总人数不超过500 人,每个人站在电梯前有个目标层,他有一个最大的忍受等待时间,因为他可以选择电梯或

14、是步行走楼梯,等等。还有下面若干假设:在每个时间段要进大楼的人数在0199 之间随机取值;用电梯的每个人的目标层在110 之间取值;一个人在进电梯或改走楼梯之前的等待时间在180360 秒范围内随机发生;一个人到达目标层后第二次再乘电梯中间的工作时间在4006600 秒间随机取值。以及其它假设。总之,在我们设计仿真程序之前应对整个系统有个比较量化的了解,同时应对整个系统的几方面因素有一定的划分。例如,可以把整个大楼视为系统的整体,在这个系统中运行的有不同类的对象:电梯集合,按自己规律不断运行的若干电梯,仿真系统应随时显示各个电梯的当前状态,同时在一定时刻应提供某些仿真统计结果。11.2 仿真程序simulation 的框架 271楼层集合,各个楼层的状态也是在不停地变化,停下的电梯,等电梯的人群、各按钮的状态,各层状态虽各不相同但有共同的属性。人员集合,所有大楼中的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号