一、实验目的
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或false
bool down; //是否下行
int currentFloor; //当前所在楼层
public:
Elevator(int floor);
void setUpButton(); //按下上行按钮
void setDownButton(); //按下下行按钮
void setFloorNumber(int floorNumber); //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层
int getCurrentFloor(); //获得当前所在楼层
};
接下来需要做的就是在主函数中根据已经定义好的Elevator类实例化一个电梯,根据用户的输入选择来操作这个实例化的电梯了。
五、注意事项和要求
要求学生要提前准备实验的内容
实验完成后要求写出实验报告
六、参考书目
【C++ Prime题解】侯捷译 华中科技大学出版社
【C++程序设计与应用】 张耀仁著 华中科技大学出版社
一、实验目的
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或false
bool 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
六 运行结果
七 实验心得
通过本次实验
掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;
掌握类对象的定义;
理解类的成员的访问控制的含义,公有、私有和保护成员的区别;
掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;
学会通过建立类及对象,用类的成员函数和对象访问类的成员;
学会利用建立类的构造函数,完成类的成员的初始化工作;