程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#實現簡單的汽車租賃系統

C#實現簡單的汽車租賃系統

編輯:關於C語言

最近學習了繼承,多態,集合,設計模式,有一個汽車租憑系統,給大家分享一下:

我們首先來看看我們這個系統的效果

1.做一個項目,我們首先對項目進行分析

根據我們最近學的知識,我們可以看出繼承,多態,集合,設計模式,我們都能用到

我們把所需要的類和簡單模式中的“簡單工廠”的工廠准備好

類圖:

01.車輛類(父類)

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 汽車租賃系統 { // 車輛類 父類 public abstract class Vehicle { //屬性 //車牌號 public string LicenseNo { get; set; } //車名 public string Name { get; set; } //顏色 public string Color { get; set; } //使用時間 public int RentDate { get; set; } //使用人 public string RentUser { get; set; } //日租金 public double DailyRent { get; set; } //還車日期 public int ReturnDate { get; set; } public Vehicle() { } //構造 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; } //計算價格的虛方法 public abstract double GetNum(); } }

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 汽車租憑系統 { //汽車類 子類 public class Car:Vehicle { public Car() { } //構造 public Car(string licenseno, string name, string color, int rentdate, double dailyrent) : base(licenseno, name, color, rentdate, dailyrent) { } //重寫父類計算價格的方法 public override double GetNum() { //日租金*租的天數 double result = this.DailyRent * this.ReturnDate; return result; } } }

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 汽車租憑系統 { //子類 public class Truck:Vehicle { //載重 public int Load { get; set; } public Truck() { } //構造 public Truck(string licenseno,string name,string color,int rentdate,double dailyrent,int load ) :base(licenseno,name,color,rentdate,dailyrent ) { this.Load = load; } //重寫父類計算價格的方法 public override double GetNum() { //日租金*租的天數 double result = this.DailyRent * this.ReturnDate; return result; } } }

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

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 汽車租賃系統 { //工廠類 public class VehicleFactory { //帶參靜態方法 public static Vehicle Carteshow(string liceseno, string name, string color, int rentdate, double dailyrent, int Load,string type) { //初始化父類對象 Vehicle vehicle = null; switch (type) { //根據傳來的值,實例化對應的對象 case"卡車": vehicle = new Truck(liceseno, name, color, rentdate, dailyrent, Load); break; case"轎車": vehicle = new Car(liceseno, name, color, rentdate, dailyrent); break; } //返回實例化對象 return vehicle; } } }

2. 剩下的就是對主窗體的功能進行實現

其實租車和還車的核心就是兩個集合之間的交互

新車入庫就是使用“簡單工廠”的設計模式進行對應添加

其中有個我們以前沒見過的控件TabControl

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 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 汽車租賃系統 { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } //保存可租車輛的集合 Dictionary<string, Vehicle> vehicles=new Dictionary<string,Vehicle>(); //保存租出車的集合 Dictionary<string, Vehicle> rentvehicles=new Dictionary<string,Vehicle>(); //動態加載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); } } //准備可租車輛 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); //加載數據 New(vehicles,lvlist); } private void FrmMain_Load(object sender, EventArgs e) { Intitle(); } //點擊租車觸發的事件 private void btn_zu_Click(object sender, EventArgs e) { if(lvlist.SelectedItems.Count==0) { MessageBox.Show("請選中一行!"); return; } if (txt_name.Text=="") { MessageBox.Show("請輸入姓名!"); return; } //執行租車. //獲取車牌號的值 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("請輸入天數"); return; } if (lvlist_huan.SelectedItems.Count==0) { MessageBox.Show("請選擇一行"); return; } //獲取車牌號的值 string carnum1 = lvlist_huan.SelectedItems[0].Text; Vehicle ve = rentvehicles[carnum1]; //獲取租的天數 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; } //入庫按鈕點擊事件 private void btn_ruku_Click(object sender, EventArgs e) { if (Good())//判斷填寫是否正確 { foreach (string item in vehicles.Keys) { if (txt_id.Text==item) { MessageBox.Show("此車牌已經有庫存了,請你確認!"); 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("入庫成功"); //清空所要填的值選項 txt_id.Text=""; txt_xing.Text=""; cmb_color.Text=""; txt_time.Text=""; txt_money.Text= ""; txt_zhong.Text = ""; } else { MessageBox.Show("請完善信息的填寫!"); } } //選擇不同的按鈕 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.租車按鈕

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 //點擊租車觸發的事件 private void btn_zu_Click(object sender, EventArgs e) { //確保選中一行 if(lvlist.SelectedItems.Count==0) { MessageBox.Show("請選中一行!"); return; } //確保有人租車 if (txt_name.Text=="") { MessageBox.Show("請輸入姓名!"); return; } //執行租車. //獲取車牌號的值 string carnum = lvlist.SelectedItems[0].Text; //根據車牌號獲得此車對象 Vehicle ve= vehicles[carnum]; //直接把獲得要租的信息放入rentvehicles集合 rentvehicles.Add(carnum,ve); //刪除原來的集合 vehicles.Remove(carnum); //重新加載 New(vehicles,lvlist); MessageBox.Show("租車成功");

02.刷新按鈕

? 1 2 3 4 5 6 //刷新按鈕 private void btn_new_Click(object sender, EventArgs e) { //重新加載 New(vehicles, lvlist); }

這裡的刷新定義了一個方法,也就是動態加載ListVIEw的方法(Nuw方法)

這個方法有兩個參數,第一個參數傳入車輛類型集合對象,第二個傳入ListvIEw的名字

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 //動態加載listvIEw的方法 public void New(Dictionary<string,Vehicle> list,ListVIEw lvlist) { //初始化LIstvIEwItem對象 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()); } //關聯 lvlist.Items.Add(listvIEw); } }

2.還車的界面功能

01.選擇結算按鈕

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 private void btn_ji_Click(object sender, EventArgs e) { //確保 是否輸入天數 if (txt_day.Text=="") { MessageBox.Show("請輸入天數"); return; } //確保是否選中一行 if (lvlist_huan.SelectedItems.Count==0) { MessageBox.Show("請選擇一行"); return; } //獲取車牌號的值 string carnum1 = lvlist_huan.SelectedItems[0].Text; //根據車牌號獲得對應的車輛對象 Vehicle ve = rentvehicles[carnum1]; //獲取租的天數 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("還車成功"); } }

02.刷新按鈕(調用租車時寫的方法)

? 1 2 3 4 5 6 private void button1_Click(object sender, EventArgs e) { //加載已出租車輛信息 New(rentvehicles,lvlist_huan); }

3.新車入庫界面功能

01.入庫按鈕

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 //入庫按鈕點擊事件 private void btn_ruku_Click(object sender, EventArgs e) { if (Good())//判斷填寫是否正確 { //車牌號是唯一的,不能重復添加已有的車牌號 foreach (string item in vehicles.Keys) { if (txt_id.Text==item) { MessageBox.Show("此車牌已經有庫存了,請你確認!"); 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("入庫成功"); //清空所要填的值選項 txt_id.Text=""; txt_xing.Text=""; cmb_color.Text=""; txt_time.Text=""; txt_money.Text= ""; txt_zhong.Text = ""; } else { MessageBox.Show("請完善信息的填寫!"); } }

以上就是本文的全部內容,希望對大家的學習有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved