欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實(shí)現(xiàn)簡單的汽車租賃系統(tǒng)

 更新時(shí)間:2016年05月11日 09:24:47   作者:天盡頭的那片海  
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)汽車租賃系統(tǒng)的具體實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近學(xué)習(xí)了繼承,多態(tài),集合,設(shè)計(jì)模式,有一個(gè)汽車租憑系統(tǒng),給大家分享一下:

我們首先來看看我們這個(gè)系統(tǒng)的效果

1.做一個(gè)項(xiàng)目,我們首先對(duì)項(xiàng)目進(jìn)行分析

根據(jù)我們最近學(xué)的知識(shí),我們可以看出繼承,多態(tài),集合,設(shè)計(jì)模式,我們都能用到

我們把所需要的類和簡單模式中的“簡單工廠”的工廠準(zhǔn)備好

 類圖:

01.車輛類(父類)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租賃系統(tǒng)
{
 // 車輛類 父類
 public abstract class Vehicle
 {
  //屬性
  //車牌號(hào)
  public string LicenseNo { get; set; }
  
  //車名
  public string Name { get; set; }
  //顏色
  public string Color { get; set; }
  //使用時(shí)間
  public int RentDate { get; set; }
  //使用人
  public string RentUser { get; set; }
  //日租金
  public double DailyRent { get; set; }
  //還車日期
  public int ReturnDate { get; set; }

  public Vehicle() { }
  //構(gòu)造
  public Vehicle(string liceseno,string name,string color,int rentdate,double dailyrent)
  {
   this.Color = color;
   this.DailyRent = dailyrent;
   this.LicenseNo = liceseno;
   this.Name = name;
   this.RentDate = rentdate;
 
  }

  //計(jì)算價(jià)格的虛方法
  public abstract double GetNum();
  
 }
}

02.子類汽車類   (繼承 車輛類 父類)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租憑系統(tǒng)
{
 //汽車類 子類
 public class Car:Vehicle
 {
  public Car() { }
  //構(gòu)造
  public Car(string licenseno, string name, string color, int rentdate, double dailyrent)
   : base(licenseno, name, color, rentdate, dailyrent) 
  { }
  //重寫父類計(jì)算價(jià)格的方法
  public override double GetNum()
  {
   //日租金*租的天數(shù)
   double result = this.DailyRent * this.ReturnDate;
   return result;
  }
 }
}

03.子類卡車類 繼承 車輛類 父類

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租憑系統(tǒng)
{
 //子類
 public class Truck:Vehicle
 {
  //載重
  public int Load { get; set; }

  public Truck() { }

  //構(gòu)造
  public Truck(string licenseno,string name,string color,int rentdate,double dailyrent,int load )
   :base(licenseno,name,color,rentdate,dailyrent ) 
  {
   this.Load = load;
  }

  //重寫父類計(jì)算價(jià)格的方法
  public override double GetNum()
  {
   //日租金*租的天數(shù)
   double result = this.DailyRent * this.ReturnDate;
   return result;
  }
 }
}

 04.“簡單工廠”的工廠類

說這個(gè)工廠類,就是為了在新車入庫的時(shí)候,可以知道它是轎車還是卡車,實(shí)例化不同的對(duì)象,方便使用

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租賃系統(tǒng)
{
 //工廠類
 public class VehicleFactory
 {
  //帶參靜態(tài)方法
  public static Vehicle Carteshow(string liceseno, string name, string color, int rentdate, double dailyrent, int Load,string type)
  {
   //初始化父類對(duì)象
   Vehicle vehicle = null;
   switch (type)
   {
    //根據(jù)傳來的值,實(shí)例化對(duì)應(yīng)的對(duì)象
    case"卡車":
     vehicle = new Truck(liceseno, name, color, rentdate, dailyrent, Load);
     break;
    case"轎車":
     vehicle = new Car(liceseno, name, color, rentdate, dailyrent);
     break;
   }
   //返回實(shí)例化對(duì)象
   return vehicle;
  
  
  }
 }
}

2. 剩下的就是對(duì)主窗體的功能進(jìn)行實(shí)現(xiàn)

其實(shí)租車和還車的核心就是兩個(gè)集合之間的交互

新車入庫就是使用“簡單工廠”的設(shè)計(jì)模式進(jìn)行對(duì)應(yīng)添加

其中有個(gè)我們以前沒見過的控件TabControl

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace 汽車租賃系統(tǒng)
{
 public partial class FrmMain : Form
 {
  public FrmMain()
  {
   InitializeComponent();
  }
  //保存可租車輛的集合
  Dictionary<string, Vehicle> vehicles=new Dictionary<string,Vehicle>();
  //保存租出車的集合
  Dictionary<string, Vehicle> rentvehicles=new Dictionary<string,Vehicle>();

  //動(dòng)態(tài)加載listview的方法
  public void New(Dictionary<string,Vehicle> list,ListView lvlist) 
  {
   ListViewItem listview = null;
   lvlist.Items.Clear();
   foreach (Vehicle item in list.Values)
   {
    if (item is Car)
    {
     listview = new ListViewItem();
     listview.Text = item.LicenseNo;
     listview.SubItems.Add(item.Name);
     listview.SubItems.Add(item.Color);
     listview.SubItems.Add(item.RentDate.ToString());
     listview.SubItems.Add(item.DailyRent.ToString());
    }
    else if (item is Truck)
    {
     listview = new ListViewItem();
     listview.Text = item.LicenseNo;
     listview.SubItems.Add(item.Name);
     listview.SubItems.Add(item.Color);
     listview.SubItems.Add(item.RentDate.ToString());
     listview.SubItems.Add(item.DailyRent.ToString());
     listview.SubItems.Add(((Truck)item).Load.ToString());
    }
    lvlist.Items.Add(listview);
   }
   
  }

  //準(zhǔn)備可租車輛
  public void Intitle() 
  {
   
   Truck truck = new Truck("京A111","奧迪","紅色",3,240,10);
   Car car = new Car("京A222", "寶馬", "黑色", 3, 240);

   vehicles.Add(truck.LicenseNo,truck);
   vehicles.Add(car.LicenseNo, car);
   //加載數(shù)據(jù)
   New(vehicles,lvlist);
   
  }
  private void FrmMain_Load(object sender, EventArgs e)
  {
   Intitle();
  }
  //點(diǎn)擊租車觸發(fā)的事件
  private void btn_zu_Click(object sender, EventArgs e)
  {
   if(lvlist.SelectedItems.Count==0)
   
   {
    MessageBox.Show("請(qǐng)選中一行!");
    return;
   }
   if (txt_name.Text=="")
   {
    MessageBox.Show("請(qǐng)輸入姓名!");
    return;

   }
   //執(zhí)行租車.
   //獲取車牌號(hào)的值
   string carnum = lvlist.SelectedItems[0].Text;
   Vehicle ve= vehicles[carnum];

   //直接把獲得要租的信息放入rentvehicles集合

   rentvehicles.Add(carnum,ve);

   //刪除原來的集合
   vehicles.Remove(carnum);

   //重新加載
   New(vehicles,lvlist);
   MessageBox.Show("租車成功");

  }

  private void button1_Click(object sender, EventArgs e)
  {
   //加載已出租車輛信息
   New(rentvehicles,lvlist_huan);
   
  }

  private void btn_ji_Click(object sender, EventArgs e)
  {
   if (txt_day.Text=="")
   {
    MessageBox.Show("請(qǐng)輸入天數(shù)");
    return;
   }

   if (lvlist_huan.SelectedItems.Count==0)
   {
    MessageBox.Show("請(qǐng)選擇一行");
    return;
   }
   //獲取車牌號(hào)的值
   string carnum1 = lvlist_huan.SelectedItems[0].Text;
   Vehicle ve = rentvehicles[carnum1];

  
   //獲取租的天數(shù)
   int num = Convert.ToInt32(txt_day.Text);
   ve.ReturnDate = num;
   double money=ve.GetNum();
   DialogResult result= MessageBox.Show("你要支付"+money+"元","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
   if (result==DialogResult.OK)
   {
    //直接把獲得要還的信息放入vehicles集合
    vehicles.Add(carnum1, ve);

    //刪除原來的集合
    rentvehicles.Remove(carnum1);

    //重新加載
    New(rentvehicles, lvlist_huan);
    MessageBox.Show("還車成功");
   }
   

  }
  //刷新按鈕
  private void btn_new_Click(object sender, EventArgs e)
  {
   //重新加載
   New(vehicles, lvlist);
  }
  //判斷填寫是否正確的方法
  public bool Good() 
  {
   bool flag = true;
   if (txt_id.Text==""||txt_xing.Text==""||cmb_color.Text==""||txt_time.Text==""||txt_money.Text==""||txt_zhong.Text==""|| rdb_jiao.Text=="")
   {
    flag = false;

   }
   return flag;
  }
  //入庫按鈕點(diǎn)擊事件
  private void btn_ruku_Click(object sender, EventArgs e)
  {
   if (Good())//判斷填寫是否正確
   {

    foreach (string item in vehicles.Keys)
    {
     if (txt_id.Text==item)
     {
      MessageBox.Show("此車牌已經(jīng)有庫存了,請(qǐng)你確認(rèn)!");
      return;
     }
    }
    //使用"簡單工廠"
    Vehicle ve = null;
    if (rdb_jiao.Checked == true)
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text,Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_jiao.Text);

    }
    else
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text, Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_ka.Text);

    }
    //添加集合
    vehicles.Add(txt_id.Text, ve);
    MessageBox.Show("入庫成功");

    //清空所要填的值選項(xiàng)
    txt_id.Text="";
    txt_xing.Text="";
    cmb_color.Text="";
    txt_time.Text="";
    txt_money.Text= "";
    txt_zhong.Text = ""; 
   }
   else
   {

    MessageBox.Show("請(qǐng)完善信息的填寫!");
   }
   

  }
  //選擇不同的按鈕
  private void rdb_jiao_CheckedChanged(object sender, EventArgs e)
  {
   if (rdb_jiao.Checked==true)
   {
    lab_zhong.ForeColor = Color.Red;
    txt_zhong.Enabled = false;
   }
   else
   {
    lab_zhong.ForeColor = Color.Black;
    txt_zhong.Enabled = true;
   }
  }
 }
}

我們來分類看看其中的魅力代碼:

1.租車的界面功能

01.租車按鈕  

//點(diǎn)擊租車觸發(fā)的事件
  private void btn_zu_Click(object sender, EventArgs e)
  {
   //確保選中一行
   if(lvlist.SelectedItems.Count==0)
   
   {
    MessageBox.Show("請(qǐng)選中一行!");
    return;
   }
   //確保有人租車
   if (txt_name.Text=="")
   {
    MessageBox.Show("請(qǐng)輸入姓名!");
    return;

   }
   //執(zhí)行租車.
   //獲取車牌號(hào)的值
   string carnum = lvlist.SelectedItems[0].Text;
   //根據(jù)車牌號(hào)獲得此車對(duì)象
   Vehicle ve= vehicles[carnum];

   //直接把獲得要租的信息放入rentvehicles集合

   rentvehicles.Add(carnum,ve);

   //刪除原來的集合
   vehicles.Remove(carnum);

   //重新加載
   New(vehicles,lvlist);
   MessageBox.Show("租車成功");

02.刷新按鈕

//刷新按鈕
  private void btn_new_Click(object sender, EventArgs e)
  {
   //重新加載
   New(vehicles, lvlist);
  }

這里的刷新定義了一個(gè)方法,也就是動(dòng)態(tài)加載ListView的方法(Nuw方法)

這個(gè)方法有兩個(gè)參數(shù),第一個(gè)參數(shù)傳入車輛類型集合對(duì)象,第二個(gè)傳入Listview的名字

這樣的作用就是在租車和還車時(shí)都能使用此方法進(jìn)行刷新,豈不妙哉!

 //動(dòng)態(tài)加載listview的方法
  public void New(Dictionary<string,Vehicle> list,ListView lvlist) 
  {
   //初始化LIstviewItem對(duì)象
   ListViewItem listview = null;
    //清除Listview,以免有沖突的值
   lvlist.Items.Clear();
   foreach (Vehicle item in list.Values)
   {
    //判斷賦值
    if (item is Car)
    {
     listview = new ListViewItem();
     listview.Text = item.LicenseNo;
     listview.SubItems.Add(item.Name);
     listview.SubItems.Add(item.Color);
     listview.SubItems.Add(item.RentDate.ToString());
     listview.SubItems.Add(item.DailyRent.ToString());
    }
    else if (item is Truck)
    {
     listview = new ListViewItem();
     listview.Text = item.LicenseNo;
     listview.SubItems.Add(item.Name);
     listview.SubItems.Add(item.Color);
     listview.SubItems.Add(item.RentDate.ToString());
     listview.SubItems.Add(item.DailyRent.ToString());
     listview.SubItems.Add(((Truck)item).Load.ToString());
    }
    //關(guān)聯(lián)
    lvlist.Items.Add(listview);
   }
   
  }

2.還車的界面功能

01.選擇結(jié)算按鈕

 private void btn_ji_Click(object sender, EventArgs e)
  {
   //確保 是否輸入天數(shù)
   if (txt_day.Text=="")
   {
    MessageBox.Show("請(qǐng)輸入天數(shù)");
    return;
   }
   //確保是否選中一行
   if (lvlist_huan.SelectedItems.Count==0)
   {
    MessageBox.Show("請(qǐng)選擇一行");
    return;
   }
   //獲取車牌號(hào)的值
   string carnum1 = lvlist_huan.SelectedItems[0].Text;
    //根據(jù)車牌號(hào)獲得對(duì)應(yīng)的車輛對(duì)象
   Vehicle ve = rentvehicles[carnum1];
  
   //獲取租的天數(shù)
   int num = Convert.ToInt32(txt_day.Text);
   //給屬性使用天數(shù)賦值
   ve.ReturnDate = num;
   //調(diào)用計(jì)算方法(多態(tài)的應(yīng)用)
   double money=ve.GetNum();
   DialogResult result= MessageBox.Show("你要支付"+money+"元","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
   if (result==DialogResult.OK)
   {
    //直接把獲得要還的信息放入vehicles集合
    vehicles.Add(carnum1, ve);

    //刪除原來的集合
    rentvehicles.Remove(carnum1);

    //重新加載
    New(rentvehicles, lvlist_huan);
    MessageBox.Show("還車成功");
   }
   

  }

02.刷新按鈕(調(diào)用租車時(shí)寫的方法)

private void button1_Click(object sender, EventArgs e)
  {
   //加載已出租車輛信息
   New(rentvehicles,lvlist_huan);
   
  }

3.新車入庫界面功能

01.入庫按鈕

 //入庫按鈕點(diǎn)擊事件
  private void btn_ruku_Click(object sender, EventArgs e)
  {
   if (Good())//判斷填寫是否正確
   {
     //車牌號(hào)是唯一的,不能重復(fù)添加已有的車牌號(hào)
    foreach (string item in vehicles.Keys)
    {
     if (txt_id.Text==item)
     {
      MessageBox.Show("此車牌已經(jīng)有庫存了,請(qǐng)你確認(rèn)!");
      return;
     }
    }
    //使用"簡單工廠",進(jìn)行對(duì)應(yīng)添加
    Vehicle ve = null;
    if (rdb_jiao.Checked == true)
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text,Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_jiao.Text);

    }
    else
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text, Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_ka.Text);

    }
    //添加集合
    vehicles.Add(txt_id.Text, ve);
    MessageBox.Show("入庫成功");

    //清空所要填的值選項(xiàng)
    txt_id.Text="";
    txt_xing.Text="";
    cmb_color.Text="";
    txt_time.Text="";
    txt_money.Text= "";
    txt_zhong.Text = ""; 
   }
   else
   {

    MessageBox.Show("請(qǐng)完善信息的填寫!");
   }
   

  }

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • C# Socket網(wǎng)絡(luò)編程實(shí)例

    C# Socket網(wǎng)絡(luò)編程實(shí)例

    這篇文章主要介紹了C# Socket網(wǎng)絡(luò)編程實(shí)例,分析了Socket網(wǎng)絡(luò)通信的原理與具體應(yīng)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • 關(guān)于C#中async/await的用法實(shí)例詳解

    關(guān)于C#中async/await的用法實(shí)例詳解

    這篇文章主要介紹了關(guān)于C#中async/await的用法,今天寫一個(gè)demo徹底搞明白async/await的用法,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • C#圖片處理如何生成縮略圖的實(shí)現(xiàn)

    C#圖片處理如何生成縮略圖的實(shí)現(xiàn)

    本文主要介紹了C#圖片處理如何生成縮略圖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解C#如何加密解密RAR文件

    詳解C#如何加密解密RAR文件

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)加密解密RAR文件的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C# FTP操作類分享

    C# FTP操作類分享

    這篇文章主要為大家分享了C# FTP操作類的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • WinForm中DataGridView添加,刪除,修改操作具體方法

    WinForm中DataGridView添加,刪除,修改操作具體方法

    這篇文章介紹了WinForm中DataGridView添加,刪除,修改操作具體方法,有需要的朋友可以參考一下
    2013-10-10
  • C#中對(duì)集合排序的三種方式

    C#中對(duì)集合排序的三種方式

    這篇文章介紹了C#中對(duì)集合排序的三種方式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • C#不登錄電腦啟動(dòng)程序

    C#不登錄電腦啟動(dòng)程序

    本文主要介紹了創(chuàng)建系統(tǒng)服務(wù);開啟服務(wù),啟動(dòng)程序。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • c# 自定義值類型一定不要忘了重寫Equals,否則性能和空間雙雙堪憂

    c# 自定義值類型一定不要忘了重寫Equals,否則性能和空間雙雙堪憂

    這篇文章主要介紹了c# 自定義值類型一定不要忘了重寫Equals,幫助大家提高c# 程序的性能,感興趣的朋友可以了解下
    2020-08-08
  • 同步調(diào)用和異步調(diào)用WebService

    同步調(diào)用和異步調(diào)用WebService

    本文給大家介紹webservice同步調(diào)用和異步調(diào)用,同步調(diào)用就是一個(gè)同步操作會(huì)阻塞整個(gè)當(dāng)前的進(jìn)程,直到這個(gè)操作完成才能執(zhí)行下一段代碼,異步調(diào)用不會(huì)阻塞啟動(dòng)操作的調(diào)用線程,調(diào)用程序必須通過輪流檢測,或者等待完成信號(hào)來發(fā)現(xiàn)調(diào)用的完成。小伙伴們跟著小編一起學(xué)習(xí)
    2015-09-09

最新評(píng)論