C#控制臺(tái)模擬電梯工作原理
每天上下樓都是乘坐電梯的,就想電梯的工作原理是什么呢?于是自己寫了個(gè)控制臺(tái)程序來(lái)模擬一下電梯的工作原理!
采用面向?qū)ο蟮木幊趟枷耄㈦娞莶鸾鉃閮刹糠郑?br />
第一部分就是每個(gè)樓層的控制器(每個(gè)樓層都有叫梯按鈕的哈,一個(gè)向上一個(gè)向下)
第二部分就電梯間了。電梯間里有樓層按鈕,你想上那個(gè)樓層就可以按哪個(gè)按鈕了!
技術(shù)難點(diǎn):狀態(tài)刷新、命令順序、電梯運(yùn)行
核心代碼一:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Elevator
{
/// <summary>
/// 樓層類,每個(gè)樓層有向上叫梯命令和向下叫梯命令
/// </summary>
public class Floor
{
Elevator elevator;
/// <summary>
/// 樓層號(hào)
/// </summary>
private int _iFloorNo;
public int IFloorNo
{
get { return _iFloorNo; }
set { _iFloorNo = value; }
}
/// <summary>
/// 上行需求
/// </summary>
private bool _boolUp = false;
/// <summary>
/// 下行需求
/// </summary>
private bool _boolDown = false;
private bool _boolStop = false;
public bool BoolStop
{
get { return _boolStop; }
set { _boolStop = value; }
}
#region 構(gòu)造函數(shù)
public Floor(int f,Elevator e)
{
_iFloorNo = f;
elevator = e;
}
public Floor(int f)
{
_iFloorNo = f;
}
public Floor()
{
}
#endregion
/// <summary>
/// 獲取本層是否???,是否為命令層
/// </summary>
/// <returns>??縯rue;過(guò)false;</returns>
public bool GetStatus()
{
return _boolDown || _boolUp;
}
/// <summary>
/// 上行返回1;下行返回-1;本層為目的地返回0;
/// </summary>
/// <returns></returns>
public int GetStatusFlag()
{
if (_boolDown)
{
return -1;
}
else if(_boolUp)
{
return 1;
}
else if(_boolStop)
{
return 0;
}
else
{
return -999;
}
}
/// <summary>
/// 上樓命令
/// </summary>
public void CommandUp()
{
_boolUp = true;
elevator.GoToCommandFloor();
}
/// <summary>
/// 下樓命令
/// </summary>
public void CommandDown()
{
_boolDown = true;
elevator.GoToCommandFloor();
}
/// <summary>
/// 樓層到達(dá)狀態(tài)刷新
/// </summary>
public void Refresh()
{
_boolUp = false;
_boolDown = false;
_boolStop = false;
}
/// <summary>
/// 樓層比較看樓層號(hào)
/// </summary>
/// <param name="floor"></param>
/// <returns></returns>
public int Compare(Floor floor)
{
int result = 1;
if (this._iFloorNo > floor._iFloorNo)
{
result = 1;
}
else if (this._iFloorNo < floor._iFloorNo)
{
result = -1;
}
else
{
result = 0;
}
return result;
}
}
}
核心代碼二:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Elevator
{
/// <summary>
/// 電梯類,有樓層選擇方法
/// </summary>
public class Elevator
{
#region 屬性
/// <summary>
/// 當(dāng)前樓層
/// </summary>
public Floor _floorCurrent ;
/// <summary>
/// 全部樓層
/// </summary>
public List<Floor> _floorAll = new List<Floor>();
#endregion
/// <summary>
/// 我想在所輸入?yún)?shù)樓層停止
/// </summary>
/// <param name="floor">想要停止的樓層</param>
public void CommandStop(Floor floor)
{
floor.BoolStop = true;
GoToTargetFloor();
}
/// <summary>
/// 電梯向上運(yùn)行,運(yùn)行到floor層
/// </summary>
/// <param name="floor"></param>
public void GoUp(Floor floor)
{
if (_floorCurrent.Compare(floor) < 0)
{
Thread.Sleep(300);
Console.WriteLine("上行:" + _floorCurrent.IFloorNo);
int index = _floorAll.IndexOf(_floorCurrent);
_floorCurrent = _floorAll[index + 1];
GoUp(floor);
}
else {
Thread.Sleep(500);
Reach(floor);
}
}
/// <summary>
/// 電梯向下運(yùn)行
/// </summary>
public void GoDown(Floor floor)
{
if (_floorCurrent.Compare(floor) > 0)
{
Thread.Sleep(300);
Console.WriteLine("下行:" + _floorCurrent.IFloorNo);
int index = _floorAll.IndexOf(_floorCurrent);
_floorCurrent = _floorAll[index - 1];
GoDown(floor);
}
else {
Thread.Sleep(500);
Reach(floor);
}
}
/// <summary>
/// 前往命令層,循環(huán)列表是否有命令層
/// </summary>
public void GoToCommandFloor()
{
foreach (var item in _floorAll)
{
if (item.GetStatus())
{
if (_floorCurrent.Compare(item) < 0)
{
GoUp(item);
}
else if (_floorCurrent.Compare(item) > 0)
{
GoDown(item);
}
}
}
}
/// <summary>
/// 前往目標(biāo)樓層
/// </summary>
public void GoToTargetFloor() {
foreach (var item in _floorAll)
{
if (item.GetStatusFlag()==0)
{
if (_floorCurrent.Compare(item) < 0)
{
GoUp(item);
}
else if (_floorCurrent.Compare(item) > 0)
{
GoDown(item);
}
}
}
}
/// <summary>
/// 到達(dá)樓層命令
/// </summary>
public void Reach(Floor f)
{
Console.WriteLine("電梯門打開(kāi),停靠層:"+f.IFloorNo);
f.Refresh();
}
}
}
核心代碼三:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Elevator
{
class Program
{
static void Main(string[] args)
{
Elevator elevator = new Elevator();
List<Floor> lfloor = new List<Floor>();
Floor f1 = new Floor(1, elevator);
Floor f2 = new Floor(2, elevator);
Floor f3 = new Floor(3, elevator);
Floor f4 = new Floor(4, elevator);
Floor f5 = new Floor(5, elevator);
Floor f6 = new Floor(6, elevator);
Floor f7 = new Floor(7, elevator);
Floor f8 = new Floor(8, elevator);
Floor f9 = new Floor(9, elevator);
Floor f10 = new Floor(10, elevator);
lfloor.Add(f1);
lfloor.Add(f2);
lfloor.Add(f3);
lfloor.Add(f4);
lfloor.Add(f5);
lfloor.Add(f6);
lfloor.Add(f7);
lfloor.Add(f8);
lfloor.Add(f9);
lfloor.Add(f10);
elevator._floorAll = lfloor;
//設(shè)置當(dāng)前樓層
elevator._floorCurrent = f1;
//2樓叫梯 想下樓
f2.CommandDown();
//目標(biāo)樓層為1樓
elevator.CommandStop(f1);
//4樓叫梯
f4.CommandUp();
//目標(biāo)樓層為8樓
elevator.CommandStop(f8);
Console.ReadLine();
}
}
}
以上所述就是本文的全部?jī)?nèi)容了,希望對(duì)大家熟練掌握C#能夠有所幫助。
相關(guān)文章
C#實(shí)現(xiàn)對(duì)數(shù)組進(jìn)行隨機(jī)排序類實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)對(duì)數(shù)組進(jìn)行隨機(jī)排序類,實(shí)例分析了C#數(shù)組與隨機(jī)數(shù)操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03
帶著問(wèn)題讀CLR via C#(筆記二)類型基礎(chǔ)
A1: Object類型共包含6個(gè)方法,Equals, GetHashCode, ToString, GetType, MemberwiseClone和Finalize.2013-04-04
Unity 實(shí)現(xiàn)鼠標(biāo)滑過(guò)UI時(shí)觸發(fā)動(dòng)畫(huà)的操作
這篇文章主要介紹了Unity 實(shí)現(xiàn)鼠標(biāo)滑過(guò)UI時(shí)觸發(fā)動(dòng)畫(huà)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
C#實(shí)現(xiàn)的圖片、string相互轉(zhuǎn)換類分享
這篇文章主要介紹了C#實(shí)現(xiàn)的圖片、string相互轉(zhuǎn)換類分享,本文直接給出類代碼,包含相互轉(zhuǎn)換的方法,需要的朋友可以參考下2015-03-03
C#一個(gè)簡(jiǎn)單的定時(shí)小程序?qū)崿F(xiàn)代碼
這篇文章主要介紹了C#實(shí)現(xiàn)一個(gè)簡(jiǎn)單的定時(shí)小程序代碼,實(shí)現(xiàn)過(guò)程很簡(jiǎn)單,需要的朋友可以參考下2015-09-09
C#數(shù)據(jù)結(jié)構(gòu)之堆棧(Stack)實(shí)例詳解
這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之堆棧(Stack),結(jié)合實(shí)例形式較為詳細(xì)的分析了堆棧的原理與C#實(shí)現(xiàn)堆棧功能的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

