C++ 从一张假条说起

许多天没有更新博文,今天一个高中的同学发了一道C++小作业给我,据说是他们老师布置的一个C++六一小礼物,希望同学们早日完成,并且奉上了老师的诚挚的六一祝福。来看看老师的这份精致的六一小礼物:

//===========================

作业:
已知某学校的请假审批是分级进行的,即根据请假天数的不同由不同层次的教管人员来审批,班主任可以审批10天以下(不包括10天)的请假条,学院可以审批10天至20天(不包括20天)的请假单,教务处可以审批20天至50天(不包括50天)的请假条,50天及以上的请假条就需要校办讨论决定。
现在设计师设计的UML类图如下:

在这里插入图片描述

UML图理解提示如下:
在这里插入图片描述

实现思想提示:

  1. 先构建请假请求(days,天数)的审批链
    在这里插入图片描述

构建审批链需要使用指针变量successor和函数SetSuccessor(aSuccessor:Approver),对于班主任来说,院领导是其后继者,对于院领导来说,教务处是其后继者,教务处的后继者是校办,校办无后继者。审批链的构建依据审批权限从低到高进行构建(想想链表!!)
3. 提交请假请求天数(days,天数)的过程描述
2.1请假的学生只能将请假请求提交给权限最低的班主任,然后就等待审批结果。
2.2如果班主任无权审批,则班主任将请求提交给自己的直接上级院领导,如果院领导无权审批,则由院领导将请假请求提交给教务处,如果教务处无权审批,则教务处将请求提交给校办。
2.3 请假条不能越级上报,如学生只能将请假条提交给班主任,学生不能直接去找院长,更不能直接去找校长,不能越级!!!!
3.有一个学生需要请假35天,请实现该生的请假审批流程,每一步审批通过输出文字的方式(cout<<”某某审批了该请假条!”)进行展示!

老师寄语:
是不是看上去很难?其实不难,只要你学习好类的组合,只要你掌握了类的继承代码写法和继承思想,再结合老师上面那么详细的提示,再加上自己聪明的才智,一定能搞定!加油。。。。。。
本作业最后上交时间2020年6月1日0点,之后提交的无本次平时分!程序完全一模一样的,相关同学本次都无平时分!请努力,自己完成!
越早提交的同学,本次平时分就越高,越晚就会稍稍低一些!!
程序完成请发至邮箱:00000000@qq.com
不要再来套路老师我,此作业使用现在所学的知识完全可以搞定,拒绝面向结构化的作业,必须面向对象!

//===========================

以上就是这个有趣的老师设置的有趣的题目;

最开始看起来是有那么一些困难的,你题目说半天在说啥?我到底应该怎样设置类呢,迷茫,彷徨;

最大的一个问题是,类的组合与派生怎么又合链表产生关系了呢?疑惑地我百思不得其解,终于,反复看题多次之后,
自信的我似乎看懂了一切:不就是写一个类似于链表的链表类么?每一个审批者相当于一个结点,而审批者类就像一个总的管理类,其他结点类将作为这一个类的a part of构成这样一个组合类,而班主任,教务处,学院领导这些类又将管理者类作为基类从中派生出来。,似乎有什么不对,管他呢,写代码就是这样,可能有些地方写着写着就懂了,先打开代码上手操作吧!

咦····果然,写了两个类之后,我发现了问题,班主任,学院领导作为基类的派生类了怎么还会成为基类的a part or构成基类呢?我这是让我的计算机来思考先有鸡还是先有蛋的问题呀。。。。。

算了,这条路是走不通了,不过学东西本来就是一个摸爬滚打的东西,没事,有问题,上CSDN上百度上github嘛。 简单的搜索,我就在CSDN上找到了一篇处理这种问题的文章,原来设计模式中的一种叫“责任链”的设计模式,只不过学软件设计的同学已经帮助我们设计出了模式。而这个老师需要我们做的,就是让我们用代码实现这个模式,(好吧,老师就是老师,已经为同学转入软件工程专业埋下了伏笔。)
来看看这篇优秀的博文 点击这里阅读博文.

或许你还是会有一点点看不懂,看完了博文你会发现,作者将使用了非责任链模式的代码与使用了责任链的代码作对比,责任链,也就是这一条链上的对象都对这个事件负责人,可能是其中一个负全责(当然可

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值