前言:寫這個小型系統之前呢,我們應該要猜測可能要用到哪些知識點。
那麼對於這個小型系統:主要用到了如下的知識:
封裝,集合(ArrayList和HashTable)和泛型和非泛型集合(泛型:List<>和非泛型:Dictioanry<>),
構造函數,方法重載,多態(繼承,抽象:抽象類和抽象方法)
效果圖:



第一步.
創建幾個類
01:工具類(vehicle)(父類,超類,基類),此類為抽象類
有方法重載,構造函數
該類主要負責提供車類的屬性
屬性:
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; }
02:創建一個汽車類(Car)(子類)
構造函數,方法重載。
03:創建一個卡車 類(Truck)(子類)
構造函數,方法重載
屬性:
public int Load
{
get { return load; }
set { load = value; }
}
04:創建一個工具(工廠)類(VehicleUtil)
第二步.
代碼實現思路:
01:工具,父類(vehicle):
代碼如下:
public Vehicle()
{
}
public Vehicle(string color, double dailyrent, string licenseno, string name, int yearsofservice)
{
Color = color;
DailyRent = dailyrent;
LicenseNO = licenseno;
Name = name;
YearsOfService = yearsofservice;
}
public abstract double CalcPrice();
02:汽車類(Car)
代碼如下:
public Car()
{
}
public Car(string licenseno, string name, string color, int yearsofservice, double dailyrent)
{
Color = color;
DailyRent = dailyrent;
LicenseNO = licenseno;
Name = name;
YearsOfService = yearsofservice;
}
public override double CalcPrice()
{
double totalPrice = 0;
totalPrice = RentDate * DailyRent;
return totalPrice;
}
03:卡車 類(Truck)
代碼如下:
public Truck(string licenseno, string name, string color, int yearsofservice, double dailyrent, int load)
{
Color = color;
DailyRent = dailyrent;
LicenseNO = licenseno;
Name = name;
YearsOfService = yearsofservice;
Load = load;
}
public override double CalcPrice()
{
double totalPrice = 0;
totalPrice = RentDate * DailyRent;
return totalPrice;
}
04:工具(工廠)類(VehicleUtil
代碼如下:
public static Vehicle CreateVehicle(string licenseno, string name, string color, int yearsofservice, double dailyrent, int load, string type)
{
Vehicle vehicle = null;
switch (type)
{
case "Car":
vehicle = new Car(licenseno, name, color, yearsofservice, dailyrent);
break;
case "Truck":
vehicle = new Truck(licenseno, name, color, yearsofservice, dailyrent, load);
break;
default:
break;
}
return vehicle;
}
第三步.
出租事件:(btnRent_Click(object sender, EventArgs e))
關鍵代碼如下:
if (lvlist.SelectedItems.Count == 0)
{
MessageBox.Show("請選擇一行");
return;
}
if (txtUser.Text == "")
{
MessageBox.Show("請輸入客戶名字!");
return;
}
string key = lvlist.SelectedItems[0].Text;
Vehicle vehicle = vehicles[key];
vehicles.Remove(key);
rentvehicles.Add(key, vehicle);
PrintVehicles(vehicles, lvlist);
MessageBox.Show("出租成功!!");
//PrintVehicles綁定數據到listview上
public void PrintVehicles(Dictionary<string, Vehicle> listprirnt, ListView lvinfo)
{
ListViewItem lv=null;
lvinfo.Items.Clear();
foreach (Vehicle item in listprirnt.Values)
{
if (item is Car)
{
lv = new ListViewItem(item.LicenseNO);
lv.SubItems.Add(item.Name);
lv.SubItems.Add(item.Color.ToString());
lv.SubItems.Add(item.YearsOfService.ToString());
lv.SubItems.Add(item.DailyRent.ToString());
lvinfo.Items.Add(lv);
}
else if(item is Truck)
{
lv = new ListViewItem(item.LicenseNO);
lv.SubItems.Add(item.Name);
lv.SubItems.Add(item.Color.ToString());
lv.SubItems.Add(item.YearsOfService.ToString());
lv.SubItems.Add(item.DailyRent.ToString());
lv.SubItems.Add(((Truck)item).Load.ToString());
lvinfo.Items.Add(lv);
}
第四步
還車.在btnGiveMoney_Click事件中寫
if (txtDayNum.Text == string.Empty)
{
MessageBox.Show("請輸入天數!");
return;
}
string addNum = lvlistGive.SelectedItems[0].Text;
Vehicle vechile = rentvehicles[addNum];
rentvehicles.Remove(addNum);
vechile.RentDate = Convert.ToInt32(txtDayNum.Text);
double money = 0;
//調用計算價格方法
money = vechile.CalcPrice();
MessageBox.Show("你一共要福le" + money);
vehicles.Add(addNum, vechile);
//刷新
PrintVehicles(rentvehicles, lvlistGive);
MessageBox.Show("成功!!");
第五步.
添加車輛在 btnIncAR_Click事件中寫
if (txtWeight.Text == "" || txtUseTime.Text == "" || txtType.Text == "" || txtID.Text == "" || txtDayRentMoney.Text == "" || cboColor.Text == "")
{
MessageBox.Show("請您填寫完整!");
}
else
{
string licon = txtID.Text;
string color = cboColor.Text;
double mon = Convert.ToDouble(txtDayRentMoney.Text);
int tine = Convert.ToInt32(txtUseTime.Text);
string ty = txtType.Text;
if (radJiaoCar.Checked)
{
Car ca = new Car(licon, ty, color, tine, mon);
vehicles.Add(licon, ca);
}
if (radKaCar.Checked)
{
int load = Convert.ToInt32(txtWeight.Text);
Truck tr = new Truck(licon, ty, color, tine, mon, load);
vehicles.Add(licon, tr);
}
MessageBox.Show("添加成功!");
}
注:此文沒有代碼的注釋,是因為想在看代碼的任何情況下,
也能看懂代碼的含義。