亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#控制臺(tái)模擬電梯工作原理

 更新時(shí)間:2015年06月17日 11:37:00   投稿:hebedich  
簡單的模擬一下電梯的運(yùn)行,電梯內(nèi)部和外部樓層呼叫的優(yōu)先級(jí)判斷。以前學(xué)硬件的時(shí)候做這個(gè)不成問題,現(xiàn)在用軟件來模擬對(duì)我來說比較難,要C#的圖形界面。求高手賜教。

每天上下樓都是乘坐電梯的,就想電梯的工作原理是什么呢?于是自己寫了個(gè)控制臺(tá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;過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("電梯門打開,??繉樱?+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();
    }
  }
}

以上所述就是本文的全部內(nèi)容了,希望對(duì)大家熟練掌握C#能夠有所幫助。

相關(guān)文章

  • C# Web應(yīng)用調(diào)試開啟外部訪問步驟解析

    C# Web應(yīng)用調(diào)試開啟外部訪問步驟解析

    本文主要介紹了C# Web應(yīng)用調(diào)試開啟外部訪問的實(shí)現(xiàn)過程與方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • C#集合之列表的用法

    C#集合之列表的用法

    這篇文章介紹了C#集合之列表的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 利用FlubuCore用C#來寫DevOps腳本的方法詳解

    利用FlubuCore用C#來寫DevOps腳本的方法詳解

    這篇文章主要介紹了利用FlubuCore用C#來寫DevOps腳本的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • VS2019打包WPF安裝程序最新教程(圖文詳解)

    VS2019打包WPF安裝程序最新教程(圖文詳解)

    這篇文章主要介紹了VS2019打包WPF安裝程序最新教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • C#獲取文件夾及文件的大小與占用空間的方法

    C#獲取文件夾及文件的大小與占用空間的方法

    這篇文章主要介紹了C#獲取文件夾及文件的大小與占用空間的方法,需要的朋友可以參考下
    2014-07-07
  • ASP.NET Core 中的Main方法詳解

    ASP.NET Core 中的Main方法詳解

    在本篇文章里小編給大家整理的是關(guān)于ASP.NET Core 中的Main方法以及相關(guān)知識(shí)點(diǎn)總結(jié),需要的朋友們參考下。
    2019-09-09
  • C#同步網(wǎng)絡(luò)時(shí)間的方法實(shí)例詳解

    C#同步網(wǎng)絡(luò)時(shí)間的方法實(shí)例詳解

    這篇文章主要介紹了C#同步網(wǎng)絡(luò)時(shí)間的方法,以實(shí)例形式較為詳細(xì)的分析了C#獲取網(wǎng)絡(luò)時(shí)間與同步本機(jī)系統(tǒng)時(shí)間的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • 解決Unity無限滾動(dòng)復(fù)用列表的問題

    解決Unity無限滾動(dòng)復(fù)用列表的問題

    這篇文章主要介紹了Unity無限滾動(dòng)復(fù)用列表,無限滾動(dòng)復(fù)用ScrollView就是解決這種問題,還可以用來做朋友圈,聊天等,需要的朋友可以參考下
    2022-04-04
  • C# List引用類型克隆的3種方法

    C# List引用類型克隆的3種方法

    這篇文章主要給大家介紹了關(guān)于C# List引用類型克隆的3種方法,包括反射、序列化(依賴Newtonsoft.Json) 以及序列化(BinaryFormatter)的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面來一起看看吧
    2019-01-01
  • 如何利用現(xiàn)代化C#語法簡化代碼

    如何利用現(xiàn)代化C#語法簡化代碼

    這篇文章主要給大家介紹了關(guān)于如何利用現(xiàn)代化C#語法簡化代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論