汽車租賃系統

来源:http://www.cnblogs.com/yejiaojiao/archive/2016/03/07/5251963.html
-Advertisement-
Play Games

一、系統窗體 二、思路分析: 我們看見這有三個類分別是:Vehicle 交通工具類父類 Car和Truck分別是Vehicle是它的子類 需要用到繼承和多態、簡單工廠的知識點進行書寫 1)vehic類 public abstract class Vehicle { //無參數 public Vehi


一、系統窗體

 

 

 

 

 

二、思路分析:

我們看見這有三個類分別是:Vehicle 交通工具類父類   Car和Truck分別是Vehicle是它的子類   需要用到繼承和多態、簡單工廠的知識點進行書寫

1)vehic類

public abstract   class Vehicle
    {
     //無參數
     public Vehicle()
     {
       }
     //有參數
    
     public Vehicle(string Name, string LicenseNo, string Color, int YearsOfService, double DailyRent)
     {
         this.Name = Name;
         this.LicenseNo = LicenseNo;
         this.Color = Color;
         this.YearsOfService = YearsOfService;
         this.DailyRent = DailyRent;
     }
     //顏色
        public string  Color { get; set; }
     //每日的租金
        public double DailyRent { get; set; }
     //車牌號
        public string  LicenseNo { get; set; }
     //車名
        public string  Name { get; set; }
   //租用日期
        public int RentDate { get; set; }
     //租用者
        public string  RentUser { get; set; }
        //使用的時間
        public int YearsOfService { get; set; }
        //計算價格的方法
        public abstract double CalcPrice();
       
    }

  2)Car小轎車類

 //小汽車
  public   class Car:Vehicle
    {
        public Car() { }
        public Car(string Name, string LicenseNo, string Color, int YearsOfService, double DailyRent)
            : base(Name, LicenseNo, Color, YearsOfService, DailyRent)
        {
        }
      //計算價格的
        public override double CalcPrice() 
        {
            double totalPrice = 0;
            double baseicPrice = this.RentDate*this.DailyRent;
            if (this.RentDate <= 30)
            {
                totalPrice = baseicPrice;
            }
            else
            {
                totalPrice = baseicPrice + (this.RentDate - 30) * this.DailyRent * 0.1;
            }
            return totalPrice;
        }

      
    }

  3)Truck卡車類

   //大卡車
   public  class Truck:Vehicle
    {
        //載重量
       public Truck() { }
       public Truck(string Name, string LicenseNo, string Color, int YearsOfService, double DailyRent,int Load)
           :base(Name,LicenseNo,Color,YearsOfService,DailyRent)
       {
           this.Load = Load;
       }
       public int Load { get; set; }

       //計算價格的
       public override double CalcPrice()
       {
           double totalPrice = 0;
           double basicPrice = RentDate * DailyRent;
           if (RentDate <= 30)
           {
               totalPrice = basicPrice;
           }
           else
           {
               totalPrice = basicPrice + (RentDate - 30) * (DailyRent * 0.1) * Load;
           }
           return totalPrice;
       }
    }

  4)我們不知道用戶會選擇什麼類型所以我們有藉助一個工廠類幫助我們做這件事。VehicleFactory

public   class VehicleFactory
    {
      public static Vehicle ReadMagenner(string Name, string LicenseNo, string Color, int YearsOfService, double DailyRent, string Type, int Load) 
      {
          Vehicle vehicle = null;
          switch (Type)
          {
              case"Car":
                  vehicle = new Car( Name,LicenseNo,Color,YearsOfService,DailyRent);
                  break;
              case"Truck":
                  vehicle = new Truck(Name, LicenseNo, Color, YearsOfService, DailyRent, Load);
                  break;
          }
          return vehicle;
      }
    }

 5)我們要在FrmMain主窗體進行

 public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }
        //保存可租用車的集合(車輛名稱,車輛對象)
        Dictionary<string, Vehicle> notRent = new Dictionary<string, Vehicle>();
        //保存已租用車輛的集合。
        Dictionary<string, Vehicle> alreadyRent = new Dictionary<string, Vehicle>();
        //構造出兩輛小汽車、卡車在Lind事件中調用
        public void LoadData() 
        {

            Car Car = new Car("奧迪A8", "京R00544", "黑色", 3, 240);
            Truck truck = new Truck("東風", "京A9988770", "藍色", 3, 300, 240);
            notRent.Add(truck.LicenseNo, truck);
            notRent.Add(Car.LicenseNo, Car);

           
            //出租出去的車
            Car rentCar = new Car("奧A001","東風","紅色",3,200);
            rentCar.RentUser = tbPeople.Text;
            Truck rentTruck = new Truck("京B111","寶馬","紅色",3,200,300);
            alreadyRent.Add(rentCar.LicenseNo,rentCar);
            alreadyRent.Add(rentTruck.LicenseNo, rentTruck);

        }
        private void FrmMain_Load(object sender, EventArgs e)
        {
            //將數據載入到集合中
            LoadData();
            //預設我的大卡車載重不能用
            tbBigCar.Enabled = false;
        }

        private void btNew_Click(object sender, EventArgs e)
        {
            //刷新租車          控制項的名字
            MyRefresh(notRent, ListCar);
        }
        //刷新租車的按鈕調用的方法
        public void MyRefresh(Dictionary<string, Vehicle> rnotrent, ListView lvshow) 
        {
            //list(汽車)進行清空
            ListCar.Items.Clear();
            foreach (Vehicle item in rnotrent.Values)
            {
                //ListView  添加值
                ListViewItem lvitem = new ListViewItem(item.LicenseNo);
                if (item is Car)
                {
                    lvitem.SubItems.Add(item.Name);
                    lvitem.SubItems.Add(item.Color);
                    lvitem.SubItems.Add(item.YearsOfService.ToString());
                    lvitem.SubItems.Add(item.DailyRent.ToString());
                }
                if (item is Truck)
                {
                    lvitem.SubItems.Add(item.Name);
                    lvitem.SubItems.Add(item.Color);
                    lvitem.SubItems.Add(item.YearsOfService.ToString());
                    lvitem.SubItems.Add(item.DailyRent.ToString());
                    lvitem.SubItems.Add(((Truck)item).Load.ToString());
                }
                lvshow.Items.Add(lvitem);
            }

        }

        private void btCar_Click(object sender, EventArgs e)
        {
            //判斷是否寫租車人的名稱
            if (tbPeople.Text=="")
            {
                MessageBox.Show("請輸入租車人名稱");
                return;
            }
            //從可租車輛集合中移除車輛A
            //將A添加到已租車輛集合中
            if (ListCar.SelectedItems.Count>0)
            {
                //??看看
                string number = ListCar.SelectedItems[0].SubItems[0].Text;
                Vehicle ve=notRent[number];
                notRent.Remove(number);
                MyRefresh(notRent,ListCar);
                alreadyRent.Add(number,ve);
                MessageBox.Show("租車成功");
            }
        }

        private void btreturnCar_Click(object sender, EventArgs e)
        {
            //用於保存已租的車輛     控制項名
            MyRefresh(alreadyRent, listReturn);
        }

        private void btSelect_Click(object sender, EventArgs e)
        {
            //判斷
            if (tbDay.Text=="")
            {
                MessageBox.Show("請輸入租車時間");
                return;
            }
            //將車A從一組集合中移除
            //將車A加入到可租車輛中
            string number = listReturn.SelectedItems[0].SubItems[0].Text;
            Vehicle ve=alreadyRent[number];
            alreadyRent.Remove(number);
            MyRefresh(alreadyRent,listReturn);
            notRent.Add(number,ve);
            ve.RentDate = Convert.ToInt32(tbDay.Text);
            double money = 0;
            money = ve.CalcPrice();
            MessageBox.Show("您需要支付" + money + "元");
            
        }

        private void btPut_Click(object sender, EventArgs e)
        {
            string lincesNo = tbCarNum.Text;
            string name = tbType.Text;
            string color = cbClor.Text;
            int time = Convert.ToInt32(tbTime.Text);
            double dailyRent = Convert.ToInt32(tbDayMoney.Text);
            if (rbSmallCar.Checked)
            {
                Car car = new Car(lincesNo, name, color, time, dailyRent);
                notRent.Add(lincesNo,car);

            }
            if (rbBigCar.Checked)
            {
                 int load = Convert.ToInt32(tbBigCar.Text);
                Truck truck = new Truck(lincesNo, name, color, time, dailyRent, load);
                notRent.Add(lincesNo, truck);
            }
            MessageBox.Show("添加成功。。。。。。");
        }

        private void rbSmallCar_CheckedChanged(object sender, EventArgs e)
        {
            tbBigCar.Enabled = false;
        }

        private void rbBigCar_CheckedChanged(object sender, EventArgs e)
        {
            tbBigCar.Enabled = true;
        }

        private void btExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }

  這個程式完畢了,也許會有瑕疵,希望我能不斷進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • · 代碼段。這個功能很早就知道了,Framework已經提供了很多代碼段,我們也可以自定義代碼段,不過之前一直沒有用過,今天實踐了一下,還是挺有意思的,這種代碼自動生成的思想其實挺有用的。另外發現一點,Framework中提供的代碼段中,關於C#和VB的數量明顯不一樣,不知道為啥C#要少呢?上網查了
  • 更新日線,是一項我們經常遇到的數據導入功能。 這項功能的說明文字,我是這麼寫的: 用戶在初次使用本系統的時候,需要安裝滬深兩市從開市到本年度的所有歷史數據,這些數據可以從某證券行情軟體獲得,是遵循一定格式的二進位文件。此後,每天兩市交易結束之後,用戶必須更新當天的日線行情,當然,用戶也可能在幾天後一
  • 這些東西是基礎中的基礎,基本上是本書都會講這個。但是很多東西到處都有,所以只撿了以下的這些寫下來。 關於類型的可見性和可訪問性 也就是public,internal這種東西,但是還是有個東西要提一下,那就是友元程式集。 利用System.Runtime.CompilerServices中的Inter
  • 自己編寫Mvvm模式代碼實現一個簡單的登陸畫面。涉及到了INotifyPropertyChanged的實現,ICommand的實現。最重要的還有Xbind
  • 這幾天開始新項目,在AbstractDalFactory反射實例的時候,遇到的問題是load程式集成功,但是Create實例為null. 被反射的程式集名稱和命名空間都為s2s.Dal, 剛開始我在想,會不會是中間的有個點 . 的問題,轉而一想不可能啊,因為我AutoFac依賴註入s2s.BLL對象
  • 最近學習了繼承,多態,集合,設計模式,有一個汽車租憑系統,給大家分享一下: 我們首先來看看我們這個系統的效果 1.做一個項目,我們首先對項目進行分析 根據我們最近學的知識,我們可以看出繼承,多態,集合,設計模式,我們都能用到 我們把所需要的類和簡單模式中的“簡單工廠”的工廠準備好 類圖: 01.車輛
  • 一、系統窗體 1)vehic類 //父類 汽車類 public abstract class Vehicle { //汽車牌照 public string CarID { get; set; } //汽車名 public string Name { get; set; } //顏色 public s
  • 最近在維護一位離職的同事寫的WPF代碼,偶然發現他使用C# string類型的兩個問題,在這裡記錄一下。 1. 使用Trim函數移除字串中的空格、換行符等字元串。 csRet.Trim(new char[] { '\r', '\n', '\t', ' ' });if (!csRet.Equals(s
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...