系统维护的时候,在自动机无卡存款多久到账会马上到账吗?

律师加盟热线:400-678-6088
手机找法网
您的当前位置:&&&&&正文
定期大额存款是银行卡为什么只能在柜台刷自动机却看不到
定期大额存款是银行卡为什么只能在柜台刷自动机却看不到
提问者:wl2169***时间: 22:43:17地点:0个回答
其他类似咨询
答: 你好,你是一个全职妈妈,你丈夫婚后的工资你也是有一份的。因为你在这个家庭也付出了
答: 协商不成,到法院起诉,主张分割同居期间的共同财产。参考最高人民法院关于适用《中华
答: 骗保有哪些法律责任|||  骗保的法律责任有哪些:  《中华人民共和国》第一百九
法律百科专题
热门知识推荐
最新咨询回复
回答:你好,只要双方是自愿的,就没关系
回答:你好,与公安那沟通
回答:协商不成?
回答:一是协调,二是起诉,可根据实情决断。
回答:该行为与保密协议存在一定冲突。双方可以协调沟通。
回答:向工商局,消费者权益保护协会投诉解决。
回答:向劳动监察大队投诉解决,协商不成的,申请仲裁。
回答:双方可协商调解,如不成可起诉。
回答:看签订的合同的约定,是独家还是非独家。
回答:可以依法进行专业鉴定,根据鉴定结果要求赔偿!
回答:可以要求对方找零与补足。
回答:试用期辞职提前三提出即可,,,,,,,
回答:到学校申请。。。。。。。。。。
回答:首先要去派出所将户口婚姻状态修改为已婚,然后才能去民政局办理离婚,如果还
回答:你女儿有的。。。。。。。。。。。。。。。。。。。
回答:一般不可以的。。。。。。。。。。。。。。。。
回答:小孩多大了?
回答:你好,一般不是特别大的体力劳动,不会的。
回答:自由山林十年前租给别人办鞭炮厂,现他本无法经营,厂名和法人都不是他本人,
回答:你好,你说的是可以续保,断年应该补交。
回答:可以报警,如违法会受到法律制裁。
回答:你好,现在及时报警解决。
回答:你好,可以主张一次性工伤医疗补助金、一次性伤残就业补助金、停工留薪期工资
回答:你好,双方是否有恋爱关系?如果不是违背女方的意愿,难以构成犯罪,具体可以
回答:你好,可以起诉经营者
回答:你好,女孩的伤情如何?目前是行政拘留还是刑事拘留?
回答:你好,养女多大年龄?是否满了14岁?
回答:可以起诉离婚要求赔偿
回答:您好您可以要求对方赔偿您损失
梁静飞律师
为您推荐地区及银行专业律师、优质银行法律咨询、优质银行法律知识等内容,如果有法律纠纷寻求帮助,可以在线!
地区律师:
热门城市律师:
湖南律师:
银行专业律师:
银行法律咨询:
银行法律知识:您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
银行储蓄系统完整.doc 14页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
银行储蓄系统完整
你可能关注的文档:
··········
··········
银行储蓄管理系统
软件需求说明书
开发组:杨世兴、余丽敏、赵艾静、黄胤、马烨
版本变更:
日期 版本 编写人员 备注
- 需求分析1 赵艾静 除以下两点的其他
- 需求分析2 马烨 对功能的规定和输入输出要求
3.1 引言 5
3.1.1 编写的目的 5
3.1.4 参考资料 5
3.3 需求规定 8
3.3.1.1 系统顶层数据流(DFD)图 9
3.3.1.2数据字典 11
3.3.2 对性能的规定 12
3.3.2.1 精度 12
3.3.2.3 灵活性 13
3.3.3 输入输出要求 13
3.3.4 数据管理能力的要求 14
3.3.5 故障处理要求 14
3.3.6 其它的专门的要求 14
3.4 运行环境规定 15
3.4.2 支持软件 15
3.4.3 接口 15
3.4.4 控制 16
  3.1.1 编写的目的
软件需求说明书的编制是为了使用户的软件开发者双方对该软件的起初规定有一个共同的理解,使之成为整个开发工作的基础。需求分析主要是对收集到的需求进行提炼、分析和认真审查,以确保所有的项目相关人员都明白其含义,并找出其中的错误、遗漏或其他不足的地方,形成完整的分析模型的过程。需求分析的目的在于开发出高质量、详细的需求,从而支持项目估算、软件设计和软件的测试。   3.1.2 背景
需求分析在整个软件开发与维护过程中越来越重要,直接关系到软件的成功与否。随着的发展,数字的逐,如何为用户提供更便捷、更周到的服务已经成为银行竞争的焦点。3.1.4 参考资料
《软件工程理论与实践》田淑梅
清华大学出版社,
《软件工程》
人民邮电出版社,2009
《软件工程案例教程》 韩万江
机械工业出版社,2007
《计算机软件文档编制规范》 GB-T
《软件工程教程》 张敬 宋光军
北京航空航天大学出版社  3.2 任务概述  
3.2.1 目标
用户可以通过该系统能够简单明了的办理各种业务,并且减少失误操作以及错误操作后的及时处理。提高办理业务的效率。
银行可以通过使用该系统减少工作人员,管理人员,方便管理,提高效率。   3.2.2 用户的特点:
3.2.3 假定与约束
所建议系统的运行寿命的最小值:三年
进行系统方案选择比较的时间:一个月
经费、投资方面的来源和限制:某银行
硬件、软件、运行环境和开发环境方面的条件和限制:
硬件环境:一台或多台PC机或更高档微机,安装所需硬盘500G运行时所占内存2G以上
软件环境:windows
可利用的信息和资源:参考已有的应用程序和数据库管理系统
3.2.4 目的业务流程图
用户取款、存款、转账、挂失、改密流程下–
管理系统流程图:
3.3 需求规定
3.3.1 对功能的规定
本系统主要为了方便储户办理存款、取款、转账、挂失、查询、改密等业务;银行管理人员办理开户、销户、冻结、解挂等业务,对现有存储用户进行合理有效的管理。同时可以更有效的让用户学会理财。
下表就是对功能模块的划分:
模块类别 功能 功能描述
业务受理 开户
密码管理 改密
存款信息管理 查询
3.3.1.1 系统顶层数据流(DFD)图
系统1数据流(DFD)图
储户信息文件
存取款信息变动
读取储户信息
正在加载中,请稍后...精彩推荐:&&
微信扫一扫到手机
随时看帖,分享到朋友圈
微信分享→
淘乐琦2011
发表于: 16:09
&& && &&&&今天下午建设银行往卡上打钱,柜面的通同志说存卡上去自动存取款机,听她们话去了,结果钱是存进去了,卡上一分没到账。 &&&&&&&&打电话95533告知我们会在一个星期查实后打到你卡上。打114,什么负责自动存取款机的相关部们,结果那说话态度,让你在这快过年要喷血。 &&&&&&&&我说:“我要柜面操作,一个劲的叫到自动机去弄,结果么机器又不能保证。你机器多吐了钱我拿了,恨不得连夜叫警察上们要,等到我的钱进了你的机子,不给我入账吗?啥也不承担责任,叫等一个星期。 &&&&&&&&试想去存在硬卡上的人,哪个不是有需要才存卡上。 &&&&&&&&朋友等着拿钱,我说我存了,你说不会有误会吗? &&&&&&&&我建议为了不要像我一样,论坛的各位存取款去柜面,不要再遇到和我一样的不愉快。
给分给态度,/ 就能评!
本帖评分记录
和银行不能讲道理的,你懂的,下次不要上当了
顶,支持一下
&&引用第1楼zyj-26 19:53发表的&&:顶,支持一下
灌水天才奖
化龙巷网站·灌水天才奖
助人为乐奖
化龙巷网站·助人为乐奖
化龙巷网站·金点子奖
化龙巷网站·美食饭票
化龙巷网站·试用达人
还是不要怕麻烦和时间久
灌水天才奖
化龙巷网站·灌水天才奖
助人为乐奖
化龙巷网站·助人为乐奖
化龙巷网站·金点子奖
化龙巷网站·美食饭票
化龙巷网站·试用达人
机器是死的 人是活的
和银行不能讲道理的,你懂的,下次不要上当了
论坛版主[龙城车友]
化龙巷网站·个人认证
新人进步奖
化龙巷网站·新人进步奖
化龙巷网站·试用达人
化龙巷网站·车友达人
化龙巷网站·房产达人
化龙巷:认证车主
我去自动存款机从来不数的- - 都是机器数完了告诉我几张.我就点确定的...不知道有没有可能少我的.
=600) window.open('http://cdn.duitang.com/uploads/item//12_vYSTy.thumb.600_0.gif');" onload="if(this.offsetWidth>'600')this.width='600';if(this.offsetHeight>'120')this.height='120';" >
今天早上去招行自动存款机存钱被吞了。一分钱未上帐
今天我也是在建设银行存了1W 也是被卡住了钱被吞了 卡上没钱&&打电话给他们 他们说今天没时间 打电话给客服 今天一个下午都无法接通&&我不知道你们在干什么啊?就你们这个服务态度 我真的有点怀疑
我今天也遇上了、也是建行的、好坑嗲啊!!
我也遇上了也是建行的
怎么都是建行的?
化龙巷网站·团长认证
我也遇到了,建行的
小风景旧曾谙
不是有回单吗?那个回单可以做证据吗?我存钱都打回单的。
&&&& 我今天发现我的钱也没到账,也是建行。去他妈的建行
我今天也遇到了这种情况,今天去建行存钱,存5000,钱放到存钱口里面,等了一会,存钱口打开了里面有500机器不识别,我就换了500放了进去,第二次机器口打开又有1000多机器不识别,我拿了出来,我把钱整理整理又放了进去,等了一会机器口又打开,我看见里面有一张钱卡在机器里面了,我揪了揪没揪出来,结果那个口关着了银行卡出来了,又出来了一张小票,我把银行卡插到机器里面查余额,钱没存上,小票上面也没有余额,只有卡号&&时间 。我打客服电话他说3到7工作日就反倒卡上了,大家说说我该怎么办
使用(可批量传图、插入视频等)
[完成后可按 Ctrl+Enter 发布]
广告热线: 传真:7 投诉受理:7 法律顾问:江苏正气浩然律师事务所 周建斌律师
版权所有:常州化龙网络科技股份有限公司 &信息产业部备案/许可证编号:苏ICP备号&&经营性ICP:苏B2-号&引自&作者&&(), 自由软件爱好者简介:&有限自动机(Finite Automata Machine)是计算机科学的重要基石,它在软件开发领域内通常被称作有限状态机(Finite State Machine),是一种应用非常广泛的软件设计模式(Design Pattern)。本文介绍如何构建基于状态机的软件系统,以及如何利用Linux下的工具来自动生成实用的状态机框架。&有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在面向对象的软件系统中,一个对象无论多么简单或者多么复杂,都必然会经历一个从开始创建到最终消亡的完整过程,这通常被称为对象的生命周期。一般说来,对象在其生命期内是不可能完全孤立的,它必须通过发送消息来影响其它对象,或者通过接受消息来改变自身。在大多数情况下,这些消息都只不过是些简单的、同步的方法调用而已。例如,在银行客户管理系统中,客户类(Customer)的实例在需要的时候,可能会调用帐户(Account)类中定义的getBalance()方法。在这种简单的情况下,类Customer并不需要一个有限状态机来描述自己的行为,主要原因在于它当前的行为并不依赖于过去的某个状态。遗憾的是并不是所有情况都会如此简单,事实上许多实用的软件系统都必须维护一两个非常关键的对象,它们通常具有非常复杂的状态转换关系,而且需要对来自外部的各种异步事件进行响应。例如,在VoIP电话系统中,电话类(Telephone)的实例必须能够响应来自对方的随机呼叫,来自用户的按键事件,以及来自网络的信令等。在处理这些消息时,类Telephone所要采取的行为完全依赖于它当前所处的状态,因而此时使用状态机就将是一个不错的选择。游戏引擎是有限状态机最为成功的应用领域之一,由于设计良好的状态机能够被用来取代部分的人工智能算法,因此游戏中的每个角色或者器件都有可能内嵌一个状态机。考虑RPG游戏中城门这样一个简单的对象,它具有打开(Opened)、关闭(Closed)、上锁(Locked)、解锁(Unlocked)四种状态,如图1所示。当玩家到达一个处于状态Locked的门时,如果此时他已经找到了用来开门的钥匙,那么他就可以利用它将门的当前状态转变为Unlocked,进一步还可以通过旋转门上的把手将其状态转变为Opened,从而成功地进入城内。&在描述有限状态机时,状态、事件、转换和动作是经常会碰到的几个基本概念。状态(State) 指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。事件(Event) 指的是在时间和空间上占有一定位置,并且对状态机来讲是有意义的那些事情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。转换(Transition) 指的是两个状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并将在某个事件发生同时某个特定条件满足时进入第二个状态。动作(Action) 指的是状态机中可以执行的那些原子操作,所谓原子操作指的是它们在运行的过程中不能被其他消息所中断,必须一直执行下去。与其他常用的设计模式有所不同,程序员想要在自己的软件系统中加入状态机时,必须再额外编写一部分用于逻辑控制的代码,如果系统足够复杂的话,这部分代码实现和维护起来还是相当困难的。在实现有限状态机时,使用switch语句是最简单也是最直接的一种方式,其基本思路是为状态机中的每一种状态都设置一个case分支,专门用于对该状态进行控制。下面的代码示范了如何运用switch语句,来实现图1中所示的状态机:switch (state)
// 处理状态Opened的分支
case (Opened): {
// 执行动作Open
// 检查是否有CloseDoor事件
if (closeDoor()) {
// 当前状态转换为Closed
changeState(Closed)
// 处理状态Closed的分支
case (Closed): {
// 执行动作Close
// 检查是否有OpenDoor事件
if (openDoor()) {
// 当前状态转换为Opened
changeState(Opened);
// 检查是否有LockDoor事件
if (lockDoor()) {
// 当前状态转换为Locked
changeState(Locked);
// 处理状态Locked的分支
case (Locked): {
// 执行动作Lock
// 检查是否有UnlockDoor事件
if (unlockDoor()) {
// 当前状态转换为Unlocked
changeState(Unlocked);
// 处理状态Unlocked的分支
case (Unlocked): {
// 执行动作Unlock
// 检查是否有LockDoor事件
if (lockDoor()) {
// 当前状态转换为Locked
changeState(Locked)
// 检查是否有OpenDoor事件
if (openDoor()) {
// 当前状态转换为Opened
changeSate(Opened);
} } 使用switch语句实现的有限状态机的确能够很好地工作,但代码的可读性并不十分理想,主要原因是在实现状态之间的转换时,检查转换条件和进行状态转换都是混杂在当前状态中来完成的。例如,当城门处于Opened状态时,需要在相应的case中调用closeDoor()函数来检查是否有必要进行状态转换,如果是的话则还需要调用changeState()函数将当前状态切换到Closed。显然,如果在每种状态下都需要分别检查多个不同的转换条件,并且需要根据检查结果让状态机切换到不同的状态,那么这样的代码将是枯燥而难懂的。从代码重构的角度来讲,此时更好的做法是引入checkStateChange()和performStateChange()两个函数,专门用来对转换条件进行检查,以及激活转换时所需要执行的各种动作。这样一来,程序结构将变得更加清晰:switch (state)
// 处理状态Opened的分支
case (Opened): {
// 执行动作Open
// 检查是否有激发状态转换的事件产生
if (checkStateChange()) {
// 对状态机的状态进行转换
performStateChange();
// 处理状态Closed的分支
case (Closed): {
// 执行动作Close
// 检查是否有激发状态转换的事件产生
if (checkStateChange()) {
// 对状态机的状态进行转换
performStateChange();
// 处理状态Locked的分支
case (Locked): {
// 执行动作Lock
// 检查是否有激发状态转换的事件产生
if (checkStateChange()) {
// 对状态机的状态进行转换
performStateChange();
// 处理状态Unlocked的分支
case (Unlocked): {
// 执行动作Lock
// 检查是否有激发状态转换的事件产生
if (checkStateChange()) {
// 对状态机的状态进行转换
performStateChange();
} } 但checkStateChange()和performStateChange()这两个函数本身依然会在面对很复杂的状态机时,内部逻辑变得异常臃肿,甚至可能是难以实现。在很长一段时期内,使用switch语句一直是实现有限状态机的唯一方法,甚至像编译器这样复杂的软件系统,大部分也都直接采用这种实现方式。但之后随着状态机应用的逐渐深入,构造出来的状态机越来越复杂,这种方法也开始面临各种严峻的考验,其中最令人头痛的是如果状态机中的状态非常多,或者状态之间的转换关系异常复杂,那么简单地使用switch语句构造出来的状态机将是不可维护的。为实用的软件系统编写状态机并不是一件十分轻松的事情,特别是当状态机本身比较复杂的时候尤其如此,许多有过类似经历的程序员往往将其形容为"毫无创意"的过程,因为他们需要将大量的时间与精力倾注在如何管理好状态机中的各种状态上,而不是程序本身的运行逻辑。作为一种通用的软件设计模式,各种软件系统的状态机之间肯定会或多或少地存在着一些共性,因此人们开始尝试开发一些工具来自动生成有限状态机的框架代码,而在Linux下就有一个挺不错的选择──FSME(Finite State Machine Editor)。&FSME是一个基于Qt的有限状态机工具,它能够让用户通过图形化的方式来对程序中所需要的状态机进行建模,并且还能够自动生成用C++或者Python实现的状态机框架代码。下面就以图1中城门的状态机为例,来介绍如何利用FSME来自动生成程序中所需要的状态机代码。首先运行fsme命令来启动状态机编辑器,然后单击工具栏上的"New"按钮来创建一个新的状态机。FSME中用于构建状态机的基本元素一共有五种:事件(Event)、输入(Input)、输出(Output)、状态(State)和转换(Transition),在界面左边的树形列表中可以找到其中的四种。状态建模&在FSME界面左边的树形列表中选择"States"项,然后按下键盘上的Insert键来插入一个新的状态,接着在右下方的"Name"文本框中输入状态的名称,再在右上方的绘图区域单击该状态所要放置的位置,一个新的状态就创建好了。用同样的办法可以添加状态机所需要的所有状态,如图3所示。&&事件建模&在FSME界面左边的树形列表中选择"Events"项,然后按下键盘上的Insert键来添加一个新的事件,接着在右下方的"Name"文本框中输入事件的名称,再单击"Apply"按钮,一个新的事件就创建好了。用同样的办法可以添加状态机所需要的所有事件,如图4所示。&转换建模&状态转换是整个建模过程中最重要的一个部分,它用来定义有限状态机中的一个状态是如何切换到另一个状态的。例如,当用来控制城门的状态机处于Opened状态时,如果此时有Close事件产生,那么状态机的当前状态将切换到Closed状态,这样一个完整的过程在状态机模型中可以用closeDoor这样一个转换来进行描述。要在FSME中添加这样一个转换,首先需要在界面左边的树形列表中选择"States"下的"Opened"项,然后按下键盘上的Insert键来添加一个新的转换,接着在右下角的"Name"文本框中输入转换的名字"closeDoor",在"Condition"文本框中输入"Close"表明触发该转换的条件是事件Close的产生,在"Target"下拉框中选择"Closed"项表明该转换发生后状态机将被切换到Closed状态,最后再单击"Apply"按钮,一个新的状态转换关系就定义好了,如图5所示。用同样的办法可以添加状态机所需要的所有转换。&使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架。首先在FSME界面左边的树形列表中选择"Root"项,然后在右下角的"Name"文本框中输入状态机的名字"DoorFSM",再从"Initial State"下拉列表中选择状态"Opened"作为状态机的初始化状态,如图6所示。&在将状态机模型保存为door.fsm文件之后,使用下面的命令可以生成包含有状态机定义的头文件:[xiaowp@linuxgam code]$ fsmc door.fsm -d -o DoorFSM.h 进一步还可以生成包含有状态机实现的框架代码:[xiaowp@linuxgam code]$ fsmc door.fsm -d -impl DoorFSM.h -o DoorFSM.cpp 如果想对生成的状态机进行验证,只需要再手工编写一段用于测试的代码就可以了:/*
* TestFSM.cpp
* 测试生成的状态机框架
*/ #include "DoorFSM.h" int main()
door.A(DoorFSM::Close);
door.A(DoorFSM::Lock);
door.A(DoorFSM::Unlock);
door.A(DoorFSM::Open); } 有限状态机是由事件来进行驱动的,在FSME生成的状态机框架代码中,方法A()可以被用来向状态机发送相应的事件,从而提供状态机正常运转所需要的"动力"。状态机负责在其内部维护一个事件队列,所有到达的事件都会先被放到事件队列中进行等候,从而能够保证它们将按照到达的先后顺序被依次处理。在处理每一个到达的事件时,状态机都会根据自己当前所处的状态,检查与该状态对应的转换条件是否已经被满足,如果满足的话则激活相应的状态转换过程。使用下面的命令能够将生成的状态机框架和测试代码编译成一个可执行文件:[xiaowp@linuxgam code]$ g++ DoorFSM.cpp TestFSM.cpp -o fsm 由于之前在用fsmc命令生成状态机代码时使用了-d选项,生成的状态机框架中会包含一定的调试信息,包括状态机中每次状态转换时的激活事件、转换前的状态、所经历的转换、转换后的状态等,如下所示:[xiaowp@linuxgam code]$ ./fsm DoorFSM:event:'Close' DoorFSM:state:'Opened' DoorFSM:transition:'closeDoor' DoorFSM:new state:'Closed' DoorFSM:event:'Lock' DoorFSM:state:'Closed' DoorFSM:transition:'lockDoor' DoorFSM:new state:'Locked' DoorFSM:event:'Unlock' DoorFSM:state:'Locked' DoorFSM:transition:'unlockDoor' DoorFSM:new state:'Unlocked' DoorFSM:event:'Open' DoorFSM:state:'Unlocked' DoorFSM:transition:'openDoor' DoorFSM:new state:'Opened' 目前得到的状态机已经能够响应来自外部的各种事件,并适当地调整自己当前所处的状态,也就是说已经实现了状态机引擎的功能,接下来要做的就是根据应用的具体需求来进行定制,为状态机加入与软件系统本身相关的那些处理逻辑。在FSME中,与具体应用相关的操作称为输出(Output),它们实际上就是一些需要用户给出具体实现的虚函数,自动生成的状态机引擎负责在进入或者退出某个状态时调用它们。仍然以控制城门的那个状态机为例,假设我们希望在进入每个状态时都添加一部分处理逻辑。首在FSME界面左边的树形列表选择"Outputs"项,然后按下键盘上的Insert键来添加一个新的输出,接着在右下方的"Name"文本框中输入相应的名称,再单击"Apply"按钮,一个新的输出就创建好了,如图7所示。用同样的办法可以添加状态机所需要的所有输出。&当所有的输出都定义好之后,接下来就可以为状态机中的每个状态绑定相应的输出。首先在FSME界面左侧的"States"项中选择相应的状态,然后从右下角的"Available"列表框中选择与该状态对应的输出,再单击"&"按钮将其添加到"In"列表中,如图8所示。用同样的办法可以为状态机中的所有状态设置相应的输出,同一个状态可以对应有多个输出,其中In列表中的输出会在进入该状态时被调用,而Out列表中的输出则会在退出该状态时被调用,输出调用的顺序是与其在In或者Out列表中的顺序相一致的。&由于对状态机模型进行了修改,我们需要再次生成状态机的框架代码,不过这次不需要加上-d参数:[xiaowp@linuxgam code]$ fsmc door.fsm -o DoorFSM.h [xiaowp@linuxgam code]$ fsmc door.fsm -d -impl DoorFSM.h -o DoorFSM.cpp 我们在新的状态机模型中添加了enterOpend、enterClosed、enterLocked和enterUnlocked四个输出,因此生成的类DoorFSM中会包含如下几个纯虚函数:
virtual void enterOpened() = 0;
virtual void enterLocked() = 0;
virtual void enterUnlocked() = 0;
virtual void enterClosed() = 0;
显然,此时生成的状态机框架不能够再被直接编译了,我们必须从类DoorFSM派生出一个子类,并提供对这几个纯虚函数的具体实现:/*
* DoorFSMLogic.h
* 状态机控制逻辑的头文件
*/ #include "DoorFSM.h" class DoorFSMLogic : public DoorFSM
protected:
virtual void enterOpened();
virtual void enterLocked();
virtual void enterUnlocked();
virtual void enterClosed();
}; 正如前面所提到过的,这几个函数实际上代表的正是应用系统的处理逻辑,作为例子我们只是简单地输出一些提示信息:/*
* DoorFSMLogic.cpp
* 状态机控制逻辑的实现文件
*/ #include "DoorFSMLogic.h" #include &iostream& void DoorFSMLogic::enterOpened() {
std::cout && "Enter Opened state." && std:: } void DoorFSMLogic::enterClosed() {
std::cout && "Enter Closed state." && std:: } void DoorFSMLogic::enterLocked() {
std::cout && "Enter Locked state." && std:: } void DoorFSMLogic::enterUnlocked() {
std::cout && "Enter Unlocked state." && std:: } 同样,为了对生成的状态机进行验证,我们还需要手工编写一段测试代码:/*
* TestFSM.cpp
* 测试状态机逻辑
*/ #include "DoorFSMLogic.h" int main()
door.A(DoorFSM::Close);
door.A(DoorFSM::Lock);
door.A(DoorFSM::Unlock);
door.A(DoorFSM::Open); } 使用下面的命令能够将生成的状态机框架和测试代码编译成一个可执行文件:[xiaowp@linuxgam code]$ g++ DoorFSM.cpp DoorFSMLogic.cpp TestLogic.cpp -o logic 运行结果如下所示:[xiaowp@linuxgam code]$ ./logic Enter Closed state. Enter Locked state. Enter Unlocked state. Enter Opened state. 本文涉及代码下载:&在面向对象的软件系统中,有些对象具有非常复杂的生命周期模型,使用有限状态机是描述这类对象最好的方法。作为一种软件设计模式,有限状态机的概念虽然不算复杂,实现起来也并不困难,但它的问题是当状态机的模型复杂到一定的程度之后,会带来实现和维护上的困难。Linux下的FSME是一个可视化的有限状态机建模工具,而且支持状态机框架代码的自动生成,借助它可以更加轻松地构建基于有限状态机的应用系统。从Wiki百科全书&开始,你可以了解到许多同状态机相关的计算理论知识。&状态机是UML的一个重要组成部分,Robert C. Martin在他的文章UML Tutorial: Finite State Machines中,介绍了如何使用UML语言来对状态机进行建模,你可以通过网址&可以找到这一文档。&FSME是Linux下一个基于Qt的状态机建模工具,它能够自动生成状态机框架代码,并且同时支持C++和Python语言,通过网站&你可以了解到有关FSME的更多信息,并能够下载最新版本的FSME。&Qfsm也是一个运行在Linux下的状态机建模工具,它不仅提供了可视化的状态机编辑器,而且还能够对生成的状态机进行实时模拟,通过网站&可以了解到Qfsm的更多信息。&
阅读(...) 评论()

我要回帖

更多关于 自动存款什么时候到账 的文章

 

随机推荐