模擬エレベーター1.0(類と対象実験)

44533 ワード

浙江理工大学情報電子学院
実験指導書
実験名称:クラスの定義と使用時間の手配:3
実験種別:設計性実験実験要求:1人1組
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、実験目的1)クラスの概念、クラスの定義フォーマット、クラスと構造の関係、クラスのメンバー属性とクラスのパッケージ性を把握する.2)クラスオブジェクトの定義を把握する;3)クラスのメンバーのアクセス制御の意味、公有、私有と保護メンバーの違いを理解する.4)コンストラクション関数とコンストラクション関数の意味と役割、定義方式と実現を把握し、要求に応じてコンストラクション関数を正確に定義し、再ロードすることができる.与えられた要求に基づいてクラスを定義し、クラスのメンバー関数を実現することができる.二、実験原理はクラスとオブジェクトを確立することによって、クラスのメンバー関数とオブジェクトでクラスのメンバーにアクセスすることを紹介する.クラスを構築する構造関数を利用して、クラスのメンバーの初期化作業を完成する.三、実験設備紹介ソフトウェア需要:Visual C++6.0ハードウェア需要:ハードウェア方面の要求に対して、Pentium III 450以上のCPUプロセッサ、64 MB以上のメモリ、200 MBの自由ハードディスク空間、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++プログラム设计と応用】张耀仁著华中科技大学出版社
浙江理工大学情報学院
オブジェクト向けプログラミング実験レポート
実験名称:クラスの定義と使用時間の手配:3
実験種別:設計性実験実験要求:1人1組
氏名:申屠志剛学号:2018329621200
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、実験目的1)クラスの概念、クラスの定義フォーマット、クラスと構造の関係、クラスのメンバー属性とクラスのパッケージ性を把握する.2)クラスオブジェクトの定義を把握する;3)クラスのメンバーのアクセス制御の意味、公有、私有と保護メンバーの違いを理解する.4)コンストラクション関数とコンストラクション関数の意味と役割、定義方式と実現を把握し、要求に応じてコンストラクション関数を正確に定義し、再ロードすることができる.与えられた要求に基づいてクラスを定義し、クラスのメンバー関数を実現することができる.二、実験原理はクラスとオブジェクトを確立することによって、クラスのメンバー関数とオブジェクトでクラスのメンバーにアクセスすることを紹介する.クラスを構築する構造関数を利用して、クラスのメンバーの初期化作業を完成する.三、実験設備紹介ソフトウェア需要:windows或いはlinux下のc++コンパイラハードウェア需要:ハードウェア方面の要求に対して、Pentium III 450以上のCPUプロセッサ、64 MB以上のメモリ、200 MBの自由ハードディスク空間、CD-ROMドライブ、24ビットの真色の表示カード、カラーディスプレイ、プリンタをサポートすることを提案する.四、実験内容はエレベーターの機能をシミュレートするプログラムを作成する.機能インタフェースには、エレベータ上りボタン、下りボタン、フロア選択、およびエレベータの走行中のフロア表示が含まれる.要求:1.ユーザーが上りボタンを押すか下りボタンを押すかを選択し、操作を選択してからユーザーが入る階を入力し、エレベーターが運転を開始し、到着した各階の階数を表示する.2.上りの場合、選択したフロア番号は現在のフロア番号より小さくできません.そうしないと、不正なヒントを与える必要があります.3.下りの場合、選択したフロア番号は現在のフロア番号より大きくすることはできません.そうしないと、不正なヒントを与える必要があります.4.エレベーターが作動すると、窓が閉まるまで常に運転します.5.エレベーターが異なる階を通過する場合、各階の表示間に遅延があり、最終的に停車する階の出力形式がより目立つことが望ましい.もし可能であれば、エレベータが最初に運転を開始したときに、エレベータの内部に現在の日付を表示することができる(ヒント:これらの機能を実現する場合、システムapiを呼び出す必要があり、実現時間表示機能はCDateクラスを使用することができる).プログラムリストcpp
/*
*@Author:   STZG
*@Language: C++
*/
#include
#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 
#include 
#include 
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 
#include
#include
#include
#include
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

六運転結果
七実験心得今回の実験を通じて、クラスの概念、クラスの定義フォーマット、クラスと構造の関係、クラスのメンバー属性とクラスのパッケージ性を把握する.クラスオブジェクトの定義を把握する.クラスのメンバーのアクセス制御の意味、公有、私有、保護メンバーの違いを理解する.構造関数と構造関数の意味と役割、定義方式と実現を把握し、要求に応じて構造関数を正確に定義し、再ロードすることができる.与えられた要求に基づいてクラスを定義し、クラスのメンバー関数を実現することができる.クラスとオブジェクトを確立することによって、クラスのメンバー関数とオブジェクトでクラスのメンバーにアクセスすることを学ぶ.クラスを構築する構造関数を利用して、クラスのメンバーの初期化を完成することを学ぶ.