c++实现简单电梯的运行

一、实验目的 1)掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的 封装性; 2)掌握类对象的定义; 3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别; 4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要
求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;

二、实验原理介绍
通过建立类及对象,用类的成员函数和对象访问类的成员;
利用建立类的构造函数,完成类的成员的初始化工作;
三、实验设备介绍
软件需求: windows 或 linux 下的 c++编译器
硬件需求: 对于硬件方面的要求,建议配置是 Pentium III 450 以上的 CPU
处理器,64MB 以上的内存,200MB 的自由硬盘空间、CD-ROM 驱动器、能支持 24
位真彩色的显示卡、彩色显示器、打印机。
四、实验内容
编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层
选择和电梯在行驶过程中的楼层显示。
要求:
1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼
层,进而电梯开始运行,显示所到的每一楼层层数。
2.如果是上行,则选择输入的楼层好不能比当前楼层号小,否则应给出不合法提
示。
3. 如果是下行,则选择输入的楼层好不能比当前楼层号大,否则应给出不合法
提示。
4.电梯一旦开始运作就会始终运行,直到窗口关闭。
5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠的楼层
的输出形式能更加醒目。如果可以,在电梯最初开始运行时,能在电梯由内部显
示当前日期(提示:实现这些功能时,需要调用系统 api,实现时间显示功能可
以使用 CDate 类)。
五 程序清单
elevator.h:

#include <iostream>
#include<ctime>
#include<cstdlib>
#include<string>
#include<cstdio>
#include<windows.h>
using namespace std;
class Elevator{
private: int now_floor,want_floor,choice,total_floors; void up(int want_floor); void down(int want_floor); void inputWant_floor(); void inputChoice();
public: Elevator(int now_floorr,int total_floorss); void control();
};

date.h:

#include <iostream>
#include<ctime>
#include<cstdlib>
#include<string>
#include<cstdio>
using namespace std;
class CDate{
public: CDate(int dd,int mm=1,int yy=1999); CDate(); CDate(const CDate &other);  ~CDate(); CDate addYear(int n); CDate addMonth(int n); CDate addDay(int n); string format(string df); int getDay() const; int getMonth() const; int getYear() const; bool isEquals(CDate date) const;
public: int *d, *m, *y; int maxDay[2][13] =
{{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,3
0,31,30,31}}; const string dfs = "ddd"; const string dfl = "DDD";
};

main.cpp:

#include"elevator.h"
#include"date.h"
int main()
{ CDate today; cout << "今天是" << today.format("DDD") <<endl; Elevator dianti(1,10); cout << "~~~请选择操作~~~~" << endl; cout << "| 1.上升        |" << endl; cout << "| 2.下降        |" << endl; cout << "| 3.退出        |" << endl; cout << "~~~~~~~~~~~~~~~~~" << endl; dianti.control(); return 0;
}

test.cpp:

#include"elevator.h"
void display();
void Exit();
Elevator::Elevator(int now_floorr,int
total_floorss):want_floor(0),choice(0)
{ total_floors = total_floorss; now_floor = now_floorr; cout << "该电梯一共" << total_floors <<"层,欢迎您使用!" <<
endl<<endl;
} void display(){ cout << "~~~请选择操作~~~~" << endl; cout << "| 1.上升        |" << endl; cout << "| 2.下降        |" << endl; cout << "| 3.退出        |" << endl; cout << "~~~~~~~~~~~~~~~~~" << endl; } void Elevator :: inputChoice()
{ cin >> choice;
} void Elevator::inputWant_floor()
{ cin >> want_floor;
} void Elevator::down(int want_floor)
{ for(now_floor;want_floor<now_floor;now_floor--){ cout << "--" << now_floor << "--" << endl<<endl; Sleep(1000); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED); cout << "第" << want_floor << "层到了!" << endl<<endl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); display(); control();
} void Elevator::up(int want_floor)
{ for(now_floor;now_floor<want_floor;now_floor++){ cout << "--" << now_floor << "--" << endl<<endl; Sleep(1000); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED); cout << "第" << want_floor << "层到了!" << endl<<endl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); display(); control();
} void Elevator::control()
{ inputChoice(); if(choice==1){ cout << "您当前在第" << now_floor <<"层" << endl; cout << "请输入您想去的楼层:" << endl; inputWant_floor(); if(want_floor>0&&want_floor<total_floors+1&&want_floor>now_floor){ up(want_floor); display(); } else if(want_floor<0||want_floor>total_floors){cout << "该楼层
不存在" << endl<<endl; display();control();} else if(want_floor==now_floor){cout << "您已经在该楼层" <<
endl<<endl; display();control();} else {/*throw " 您 不 能 上 行 !";*/cout<<" 您 不 能 上 行 !"
<<endl<<endl;display();control();} } else if(choice==2){ cout << "您当前在第" << now_floor <<"层" << endl; cout << "请输入您想去的楼层:" << endl; inputWant_floor(); if(want_floor>0&&want_floor<total_floors+1&&want_floor<now_floor){ down(want_floor); display(); } else if(want_floor<0||want_floor>total_floors){cout << "该楼层
不存在" << endl<<endl; display();control();} else if(want_floor==now_floor){cout << "您已经在该楼层" <<
endl<<endl; display();control();} else {/*throw " 您 不 能 下 降 !"; */cout<<" 您 不 能 下 降 !"
<<endl<<endl;display();control();} } else if(choice==3){Exit();} else { /*throw "您的选择有误,请重新选择!";*/ cout << "您的选择有误,请重新选择!" <<endl<<endl; display(); control(); } } void Exit()
{ exit(3);
}

date.cpp:

#include"date.h"
CDate::CDate(int dd, int mm, int yy):dfs("ddd"),dfl("DDD")    //初始化
{ if((yy >= 1000 && yy <= 9999)&&(mm >= 1 && mm <= 12)&&(dd >= 1 && dd
<= maxDay[(yy/4==0&&yy/100!=0)||(yy/400==0)][mm])) { y = new int(yy); m = new int(mm); d = new int(dd); }else throw "create CDate object error";
}
CDate::CDate():dfs("ddd"),dfl("DDD")    //初始化
{ time_t now; time(&now);  struct tm *t_now; t_now = localtime(&now); y = new int(t_now -> tm_year + 1900); m = new int(t_now -> tm_mon + 1); d = new int(t_now -> tm_mday);
}
CDate::CDate(const CDate &other)
{ cout << "CDate::CDate(const CDate &other)" << endl; y = new int(*other.y); m = new int(*other.m); d = new int(*other.d);
}
CDate::~CDate()
{ cout << "CDate::~CDate()" << endl; delete y; delete m; delete d;
}
CDate CDate::addYear(int n)               //加 n 年
{ *y += n; return *this;
}
CDate CDate::addMonth(int n)              //加 n 月
{ *m += n; if(*m > 12){ *m = *m % 12; (*y) ++; } return *this;
}
CDate CDate::addDay(int n)                //加 n 天
{ *d += n; int dd = maxDay[(*y/4==0&&*y/100!=0)||(*y/400==0)][*m]; if(*d > dd) {    *d = *d % dd; (*m) ++; } return *this;
}
string CDate::format(string df)
{ char c_df[20]; if(df == dfs)  { sprintf(c_df, "%d-%d-%d", *y, *m, *d); return string(c_df); } if(df == dfl)  { sprintf(c_df, "%d 年%d 月%d 日", *y, *m, *d); return string(c_df); } return string("");
}
int CDate::getDay() const
{ return *d;
}
int CDate::getMonth() const
{ return *m;
}
int CDate::getYear() const
{ return *y;
}
bool CDate::isEquals(CDate date) const
{ if((*y == *date.y) && (*m == *date.m) && (*d == *date.d)) return true; else return false;
} 

c++实现简单电梯的运行相关推荐

  1. 中国电梯行业运行前景与品牌竞争分析报告2022版

    中国电梯行业运行前景与品牌竞争分析报告2022版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021年11月 [搜索鸿晟信合研究院 ...

  2. 默纳克电梯系统服务器怎么操作,默纳克系统常见问题之六——电梯不运行

    电梯经常出现检修或者正常无法运行,此时可能是参数设置问题或者是不满足运行条件,当系统报故障时,可以根据故障排查,若不报故障该如何下手呢? 本文围绕电梯不运行的一些状态进行排查 检修不运行 [故障现象] ...

  3. 计算机原理电梯,上海三菱SP-VF、MP-WF电梯自动运行原理及过程电路综合分析

    电梯各种装置均处于正常,各种发光指示都正确时,电梯处于基站,关门特定运行状态.基站外乘客按下呼梯按钮,该呼梯信号经串行传输线输入到Pl电子板,经CC--CPU微机判断为基站信号,再将该信号传输到微机接 ...

  4. TQ2440开发板学习纪实(1)---最简单的独立运行汇编程序

    0 如何做到简单 TQ2440开发板,采用的CPU是三星S3C2440,核心板附加了2MB运行ROM和64MB运行RAM,并且搭配了64MB的Nand Flash.而S3C2440直接支持从NandF ...

  5. 默纳克电梯系统服务器怎么用,默纳克系统电梯工作原理说明(四)电梯的运行过程...

    一.自动状态的运行 1.关门到位信号 1)含义 电梯在停层开门后约6秒钟(由电梯主板内部程序设定),即系统自动执行关门程序或按操纵箱关门按钮KCL后提前关门,门完全关闭,电梯微机主板接收到该门到位信号 ...

  6. 用java编写spark程序,简单示例及运行

     最近因为工作需要,研究了下spark,因为scala还不熟,所以先学习了java的spark程序写法,下面是我的简单测试程序的代码,大部分函数的用法已在注释里面注明. 我的环境:hadoop 2 ...

  7. OSG编写简单程序,运行出现“应用程序无法正常启动(0xc000000d)”的错误

    OSG编译成功了,运行osgviewer.exe  cow.osg可以. 在编写简单的示例程序的时候,出现问题:提示应用程序无法正常启动(0xc000000d). 这是由于所用的库或者DLL和机器编译 ...

  8. K8s简单yaml文件运行例子deployment

    kubectl run 创建并运行一个或多个容器镜像. 创建一个deployment 或job 来管理容器. kubectl run 语法: $ run NAME --image=image [--e ...

  9. VASP学习笔记--简单的VASP运行实例:CrI3做非磁的优化

    一.总体思路 1)写入INCAR: 2)写入POSCAR,就是坐标文件: 3)写入KPOINTS文件,就是K点的选择: 4)写入POTCAR,写入POTCAR(找到势文件,然后按照POSCAR中的元素 ...

最新文章

  1. tensorflow中tf.get_variable()函数详解
  2. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
  3. 与ln的指数转化公式_高考数学48条秒杀型公式与方法
  4. 浅谈HR谈薪水的技巧
  5. 2019三星比2018好在哪_高端人士的选择: 三星w2019与三星w2018相比, 是什么让它如此价值不菲...
  6. AIR访问操作系统剪贴板粘贴操作延迟呈现解决办法
  7. Machine Learning---LMS 算法
  8. acad.exe 中的 0x25c70fc2 (???.arx) 处最可能的异常: 0xC0000005: 读取位置 0x0000009c 时发生访问冲突
  9. VMware 菜鸟教程
  10. 经纬度(度分秒)坐标转换为小数格式(weixin公众号【图说GIS】)
  11. 华为eNSP配置网络地址转换NAT
  12. python模拟浏览器访问企查查_python爬虫另辟蹊径绕过企查查的登录验证,我太冇财了...
  13. 龙果支付 mysql_龙果开源支付系统搭建与部署
  14. ListView优化机制及滑动时数据时出现的数据错乱重复问题 图片、checkBox等
  15. splatter包安装
  16. MarkDown 排版测试
  17. 斗破苍穹java游戏美杜莎在哪_《斗破苍穹》四大魔兽体质排名,美杜莎的九彩吞天蟒仅排第二...
  18. MES系统供应商评估报告-- Gartner出品
  19. Blazor —— 母版页的定义和使用(Layout)
  20. uniapp 小程序如何实现百度云盘资源分享

热门文章

  1. 轻松搞定ExtJs 3.4
  2. MVC模型结构是什么
  3. Linux学习之文件系统zfs文件系统
  4. 字符串匹配之RabinKarp《算法很美》
  5. 高德地图产品总监房芳演讲实录
  6. TM1621/HT1621 段码LCD驱动器
  7. 常用多模态医学影像融合数据集
  8. 戴尔服务器配置Raid5,并安装centos系统
  9. php ftp_mdtm,PHP ftp_mdtm() 函数 | 菜鸟教程
  10. 2021-12-10 Linux内核中watchdog,用户层喂狗程序分析