浙江理工大学信息电子学院 实验指导书 实验名称:类的定义与使用 学时安排:3 实验类别:设计性实验 实验要求:1人1组  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

一、实验目的
1)掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;
2)掌握类对象的定义;
3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别;
4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;
二、实验原理介绍
通过建立类及对象,用类的成员函数和对象访问类的成员;
利用建立类的构造函数,完成类的成员的初始化工作;
三、实验设备介绍
软件需求: Visual C++ 6.0
硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
四、实验内容
编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。
要求:
1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。
2.如果是上行,则选择输入的楼层号不能比当前楼层号小,否则应给出不合法提示。
3. 如果是下行,则选择输入的楼层号不能比当前楼层号大,否则应给出不合法提示。
4.电梯一旦开始运作就会始终运行,直到窗口关闭。
程序要求的结果请运行elevator.exe
提示:
从功能要求上我们可以抽象出一个Elevator电梯类,结构如下:

class Elevator
{private:int floor;  //电梯总的楼层数bool up;    //是否上行,bool为布尔类型,可取值true或falsebool down;   //是否下行int currentFloor; //当前所在楼层
public:Elevator(int floor);  void setUpButton();   //按下上行按钮void setDownButton();  //按下下行按钮void setFloorNumber(int floorNumber);  //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层int getCurrentFloor(); //获得当前所在楼层
};

接下来需要做的就是在主函数中根据已经定义好的Elevator类实例化一个电梯,根据用户的输入选择来操作这个实例化的电梯了。
五、注意事项和要求
要求学生要提前准备实验的内容
实验完成后要求写出实验报告
六、参考书目
【C++ Prime题解】侯捷译 华中科技大学出版社
【C++程序设计与应用】 张耀仁著 华中科技大学出版社

浙江理工大学信息学院 面向对象程序设计实验报告 实验名称:类的定义与使用 学时安排:3 实验类别:设计性实验 实验要求:1人1组 姓名: 申屠志刚 学号: 2018329621200  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

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

/*
*@Author:   STZG
*@Language: C++
*/
#include<iostream>
#include"date.h"
#include"Elevator.h"
using namespace std;
CDate data;
Elevator elevator(10);
void err(){cout<<"-----无效操作-----"<<endl;
}
void exit(){exit(0);
}
void memu(){cout<<" ---请选择操作----"<<endl;cout<<"| 1.上升         |"<<endl;cout<<"| 2.下降         |"<<endl;cout<<"| 3.退出         |"<<endl;cout<<" -----------------"<<endl;
}
void init(){cout<<"今天是"<<data.format("DDD")<<endl;cout<<"该电梯一共10层, 欢迎您的使用!"<<endl;
}
int main()
{init();while(1){int op;memu();scanf("%d",&op);switch(op){case 1:elevator.setUpButton();break;case 2:elevator.setDownButton();break;case 3:exit();break;default:err();break;}}//cout << "Hello world!" << endl;return 0;
}

Elevator.cpp

#include "Elevator.h"Elevator::Elevator():floor(10),up(0),down(0),currentFloor(1)
{}Elevator::~Elevator()
{//dtor
}
Elevator::Elevator(int floor):floor(floor),up(0),down(0),currentFloor(1)
{}
void Elevator::setUpButton()//按下上行按钮
{int now=getCurrentFloor(),to;cout<<"当前电梯停在"<<now<<"层"<<endl;cout<<"请输入要进入的楼层"<<endl;scanf("%d",&to);if(now>=to||to>floor||to<1){cout<<"您不能上行!"<<endl;}else{up=1;setFloorNumber(to);currentFloor=to;up=0;}
}
void Elevator::setDownButton()//按下下行按钮
{int now=getCurrentFloor(),to;cout<<"当前电梯停在"<<now<<"层"<<endl;cout<<"请输入要进入的楼层"<<endl;scanf("%d",&to);if(now<=to||to>floor||to<1){cout<<"您不能下行!"<<endl;}else{down=1;setFloorNumber(to);currentFloor=to;down=0;}
}
void Elevator::setFloorNumber(int floorNumber)//根据要进入的楼层电梯开始运行,并逐层显示经过的楼层
{if(up){for(int i=currentFloor;i<floorNumber;i++){cout<<"---"<<i<<"---"<<endl<<endl;Sleep(1000);}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);cout<<"第"<<floorNumber<<"层到了"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);}if(down){for(int i=currentFloor;i>floorNumber;i--){cout<<"---"<<i<<"---"<<endl<<endl;Sleep(1000);}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);cout<<"第"<<floorNumber<<"层到了"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);}
}
int Elevator::getCurrentFloor()//获得当前所在楼层
{return currentFloor;
}

Elevator.h

#ifndef ELEVATOR_H
#define ELEVATOR_H
#include <iostream>
#include <windows.h>
#include <stdlib.h>
using namespace std;class Elevator
{public:Elevator();virtual ~Elevator();Elevator(int floor);void setUpButton();   //按下上行按钮void setDownButton();  //按下下行按钮void setFloorNumber(int floorNumber);  //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层int getCurrentFloor(); //获得当前所在楼层protected:private:int floor;  //电梯总的楼层数bool up;    //是否上行,bool为布尔类型,可取值true或falsebool down;   //是否下行int currentFloor; //当前所在楼层};

date.cpp

#endif // ELEVATOR_H
#include"date.h"
CDate::CDate(int dd, int mm, int yy):df_s("ddd"),df_l("DDD")    //初始化
{if((mm>=1 && mm<=12) && (dd>=1 && dd<=31)){m = mm; d = dd; y = yy;}else {m = 0; d = 0; y = 0;cout<<"the date created is wrong"<<endl;}}
CDate::CDate():df_s("ddd"),df_l("DDD")    //初始化
{time_t now;time(&now);struct tm *t_now;t_now = localtime(&now);y = t_now -> tm_year + 1900;m = t_now -> tm_mon + 1;d = t_now -> tm_mday;
}
void CDate::add_year(int n)               //加n年
{y += n;
}
void CDate::add_month(int n)              //加n月
{m += n;
}
void CDate::add_day(int n)                //加n天
{d += n;
}
string CDate::format(string df)
{char c_df[20];if(df == df_s){sprintf(c_df, "%d-%d-%d", y, m, d);return string(c_df);}if(df == df_l){sprintf(c_df, "%d年%d月%d日", y, m, d);return string(c_df);}return string("");
}
int CDate::get_day() const
{return d;
}
int CDate::get_month() const
{return m;
}
int CDate::get_year() const
{return y;
}

date.h

#ifndef DATE_H
#define DATE_H
#include <iostream>
#include<ctime>
#include<cstdlib>
#include<string>
#include<cstdio>
using namespace std;
class CDate{int d,m,y;const string df_s;const string df_l;
public:CDate(int dd,int mm=1,int yy=1999);CDate();void add_year(int n);void add_month(int n);void add_day(int n);string format(string df);int get_day() const;int get_month() const;int get_year() const;
};
#endif

六 运行结果

七 实验心得
通过本次实验
掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;
掌握类对象的定义;
理解类的成员的访问控制的含义,公有、私有和保护成员的区别;
掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;
学会通过建立类及对象,用类的成员函数和对象访问类的成员;
学会利用建立类的构造函数,完成类的成员的初始化工作;

模拟电梯1.0(类与对象实验)相关推荐

  1. java类与对象实验_JAVA类与对象实验报告

    <JAVA类与对象实验报告>由会员分享,可在线阅读,更多相关<JAVA类与对象实验报告(6页珍藏版)>请在人人文库网上搜索. 1.面向对象程序设计实验报告实验三.类与对象(1) ...

  2. Java语言程序设计D实验——类与对象实验

    Java语言程序设计D实验--类与对象实验 一.实验内容描述(问题域描述) [实验题目]类与对象 [实验目的]使用类来封装对象的属性和功能:掌握类变量与实例变量,以及类方法与实例方法的区别:掌握使用p ...

  3. java 类与对象实验报告_java类与对象实验报告

    java类与对象实验报告 西 安 邮 电 大 学(计算机学院)课内实验报告实验名称: 类与对象 专业名称: 计算机科学与技术班 级: 计科1405班 学生姓名: 高宏伟 学 号: 04141152指导 ...

  4. java类对象实验问题_Java类与对象实验答案

    Java类与对象实验答案Tag内容描述: 1.Java实验报告 计科.信工版2013-2014-2 实验报告 一.实验项目:类与对象 二.实验目的: 1. 学会使用类来封装对象的属性和功能 2. 掌握 ...

  5. java //d+_Java语言程序设计D实验——类与对象实验

    Java语言程序设计D实验--类与对象实验 一.实验内容描述(问题域描述) [实验题目]类与对象 [实验目的]使用类来封装对象的属性和功能:掌握类变量与实例变量,以及类方法与实例方法的区别:掌握使用p ...

  6. java类与对象实验报告心得体会_java上机实验心得体会报告(大全五篇)

    北京联合大学信息学院 "面向对象程序设计"课程上机实验报告 题目: JAVA上机实验心得体会 姓名(学号): 专业:计算机科学与技术 编制时间: 2012年12月19日 版本: 1 ...

  7. java类与对象实验报告心得体会_Java类与对象实验报告.doc

    西 安 邮 电 大 学 (计算机学院) 课内实验报告 实验名称: 类与对象 专业名称: 计算机科学与技术 班 级: 计科1405班 学生姓名: 高宏伟 学 号: 指导教师: 刘霞林 实验日期: 201 ...

  8. python的类和对象_Python类与对象实验

    一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...

  9. Python类与对象实验

    一.任务描述   本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. ...

最新文章

  1. matlab bp结果,Matlab如何处理BP网络每次运行结果不一样这个问题
  2. 任天堂经典拳击游戏可以体感操作了,打开网页就能玩,击败泰森不是梦
  3. 关于C++中的虚拟继承的一些总结
  4. python快速排序解析_快速排序python实现总结
  5. PAT乙级题目答案汇总PAT (Basic Level) Practice (中文)
  6. SOCKADDR_IN
  7. linux 7 没有权限访问,[CentOS 7系列]文件或目录的权限与属性
  8. 从《在小吃店遇见凯恩斯》初识经济
  9. 触发父组件变量_Vue组件之间的传值
  10. g++: internal compiler error: Killed (program cc1plus)Please submit a full bug report,内存不足问题解决
  11. python中的pass是空语句一般用作占位语句_1、python基本语法
  12. 20190905:(leetcode习题)爬楼梯
  13. Zabbix 5.0 监测mysql
  14. CSS3中的transform-origin的用法以及与perspective、perspective-orgin的不同
  15. MYSQL查询语句大全集锦
  16. Uploadify-中文帮助手册
  17. Eclipse安装反编译工具Eclipse Class Decompiler:实现不下载源码,查看源文件
  18. 灵活无处安放,所以选择流浪....《漆黑的空间》 《灰色轨迹》
  19. 有趣的姓名小知识:你身边有叫沐宸和若汐的宝宝吗?
  20. linux磁盘阵列教程,RAID 磁盘阵列简述

热门文章

  1. java输出二进制数_Java打印整数的二进制表示(代码与解析)
  2. 与计算机硬件相关领域,计算机硬件相关专业论文范文.doc
  3. 如何在圆柱表面滚花纹_更多地了解圆柱形铣刀
  4. shiny 发布部署到公开网站 ,供别人访问
  5. 【小白学习keras教程】五、基于reuters数据集训练不同RNN循环神经网络模型
  6. 深度学习和目标检测系列教程 4-300:目标检测入门之目标变量和损失函数
  7. 八十七、CSS水平垂直居中的布局方式
  8. 物理化学 化学 动力学(中)
  9. 直播 | 清华大学李一鸣:后门攻击简介
  10. 爱思唯尔云论坛:疫情挑战下的大数据与人工智能研究