==============================================实体==============================================
---------------------------------------车辆类(父类)---------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Car.entity 8 { 9 /// <summary> 10 /// 车辆类 11 /// </summary> 12 public abstract class Vehicle 13 { 14 /// <summary> 15 /// 颜色 16 /// </summary> 17 public string Color { get; set; } 18 /// <summary> 19 /// 日租金 20 /// </summary> 21 public double DailyRent { get; set; } 22 /// <summary> 23 /// 车牌号 24 /// </summary> 25 public string LicenseNo { get; set; } 26 /// <summary> 27 /// 车名 28 /// </summary> 29 public string Name { get; set; } 30 /// <summary> 31 /// 租用天数 32 /// </summary> 33 public int RentDate { get; set; } 34 /// <summary> 35 /// 租用人 36 /// </summary> 37 public string RentUser { get; set; } 38 /// <summary> 39 /// 使用时间 40 /// </summary> 41 public int YearsOfService { get; set; } 42 43 /// <summary> 44 /// 计算总价抽象方法 45 /// </summary> 46 /// <returns></returns> 47 public abstract string Money(); 48 49 } 50 }
---------------------------------------卡车类(子类)---------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Car.entity 8 { 9 /// <summary> 10 /// 卡车 11 /// </summary> 12 public class Truck:Vehicle 13 { 14 /// <summary> 15 /// 载重 16 /// </summary> 17 public int Load { get; set; } 18 19 /// <summary> 20 /// 计算租车总价 (租车时间*该车日租金) 21 /// </summary> 22 /// <returns></returns> 23 public override string Money() 24 { 25 string money = (base.RentDate * base.DailyRent).ToString(); 26 return money; 27 } 28 } 29 }
---------------------------------------轿车类(子类)---------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Car.entity 8 { 9 /// <summary> 10 /// 轿车 11 /// </summary> 12 public class JCar:Vehicle 13 { 14 15 /// <summary> 16 /// 计算租车总价 (租车时间*该车日租金) 17 /// </summary> 18 /// <returns></returns> 19 public override string Money() 20 { 21 string money = (base.RentDate * base.DailyRent).ToString(); 22 return money; 23 } 24 } 25 }
==============================================窗体==============================================
------------------------------------------------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using Car.entity; 2 using System; 3 using System.Collections.Generic; 4 using System.ComponentModel; 5 using System.Data; 6 using System.Drawing; 7 using System.Linq; 8 using System.Text; 9 using System.Threading.Tasks; 10 using System.Windows.Forms; 11 12 namespace Car 13 { 14 public partial class frmZuCheSystem : Form 15 { 16 public frmZuCheSystem() 17 { 18 InitializeComponent(); 19 } 20 21 /// <summary> 22 /// 可租车集合 23 /// </summary> 24 Dictionary<string, Vehicle> KeZuChe = new Dictionary<string,Vehicle>(); 25 26 /// <summary> 27 /// 已经租了的车集合 28 /// </summary> 29 Dictionary<string, Vehicle> YiZuChe = new Dictionary<string, Vehicle>(); 30 31 32 /// <summary> 33 /// 加载事件 34 /// </summary> 35 /// <param name="sender"></param> 36 /// <param name="e"></param> 37 private void ZuCheSystem_Load(object sender, EventArgs e) 38 { 39 Init(); 40 BangKeZuChe(); 41 } 42 43 /// <summary> 44 /// 初始化可租车列表 45 /// </summary> 46 public void Init() 47 { 48 Vehicle vehicle = new JCar(); 49 vehicle.Color = "黑色"; 50 vehicle.DailyRent = 200; 51 vehicle.LicenseNo = "粤A12345"; 52 vehicle.Name = "奥迪"; 53 vehicle.YearsOfService = 2; 54 55 Vehicle vehicle1 = new JCar(); 56 vehicle1.Color = "银色"; 57 vehicle1.DailyRent = 200; 58 vehicle1.LicenseNo = "粤B22222"; 59 vehicle1.Name = "宝马"; 60 vehicle1.YearsOfService = 2; 61 62 Vehicle vehicle2 = new Truck(); 63 vehicle2.Color = "蓝色"; 64 vehicle2.DailyRent = 200; 65 vehicle2.LicenseNo = "粤C33333"; 66 vehicle2.Name = "东风"; 67 ((Truck)vehicle2).Load = 20; 68 vehicle2.YearsOfService = 2; 69 70 KeZuChe.Add(vehicle.LicenseNo, vehicle); 71 KeZuChe.Add(vehicle1.LicenseNo, vehicle1); 72 KeZuChe.Add(vehicle2.LicenseNo, vehicle2); 73 } 74 75 /// <summary> 76 /// 绑定可租车ListView数据 77 /// </summary> 78 public void BangKeZuChe() 79 { 80 //清空ListView 81 lvKeZu.Items.Clear(); 82 //遍历可租车集合 添加到 ListView 83 foreach (var item in KeZuChe) 84 { 85 ListViewItem lvi = new ListViewItem(item.Key); 86 lvi.SubItems.Add(item.Value.Name); 87 lvi.SubItems.Add(item.Value.Color); 88 lvi.SubItems.Add(item.Value.YearsOfService.ToString()); 89 lvi.SubItems.Add(item.Value.DailyRent.ToString()); 90 if (item.Value is Truck) 91 { 92 lvi.SubItems.Add((item.Value as Truck).Load.ToString()); 93 } 94 else 95 { 96 lvi.SubItems.Add("无"); 97 } 98 lvKeZu.Items.Add(lvi); 99 } 100 101 } 102 103 /// <summary> 104 /// 单击租车 105 /// </summary> 106 /// <param name="sender"></param> 107 /// <param name="e"></param> 108 private void btnZu_Click(object sender, EventArgs e) 109 { 110 //判断 111 if (lvKeZu.SelectedItems.Count > 0) 112 { 113 if (!string.IsNullOrEmpty(txtName.Text.Trim())) 114 { 115 //获取选中行的车牌号 116 string chePaiHao = lvKeZu.SelectedItems[0].SubItems[0].Text.ToString(); 117 Vehicle vehicle = null; 118 //判断选中的是哪种车 119 if (KeZuChe[chePaiHao] is JCar) 120 { 121 vehicle = new JCar(); 122 vehicle = KeZuChe[chePaiHao]; 123 } 124 if (KeZuChe[chePaiHao] is Truck) 125 { 126 vehicle = new Truck(); 127 vehicle = KeZuChe[chePaiHao]; 128 //如果选的是卡车就加一个重量属性 129 ((Truck)vehicle).Load = ((Truck)KeZuChe[chePaiHao]).Load; 130 } 131 132 vehicle.RentUser = txtName.Text; 133 //添加指定车辆 到已租车集合 134 YiZuChe.Add(vehicle.LicenseNo, vehicle); 135 //删除指定车辆 的可租车集合 136 KeZuChe.Remove(chePaiHao); 137 MessageBox.Show("客户 " + vehicle.RentUser + " 租车成功!"); 138 } 139 else 140 { 141 MessageBox.Show("请填写租用者", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); 142 } 143 } 144 else 145 { 146 MessageBox.Show("请选择车辆","提示!",MessageBoxButtons.OK,MessageBoxIcon.Information); 147 } 148 } 149 150 /// <summary> 151 /// 单击刷新重新绑定 可租车列表 152 /// </summary> 153 /// <param name="sender"></param> 154 /// <param name="e"></param> 155 private void btnShuaXinKeZu_Click(object sender, EventArgs e) 156 { 157 BangKeZuChe(); 158 } 159 160 /// <summary> 161 /// 单击退出 162 /// </summary> 163 /// <param name="sender"></param> 164 /// <param name="e"></param> 165 private void btnExit_Click(object sender, EventArgs e) 166 { 167 Application.Exit(); 168 } 169 170 /// <summary> 171 /// 刷新已租车列表 (结算界面) 172 /// </summary> 173 /// <param name="sender"></param> 174 /// <param name="e"></param> 175 private void btnShuaXin_Click(object sender, EventArgs e) 176 { 177 BangYiZuCheList(); 178 } 179 180 /// <summary> 181 /// 绑定已租车列表 lvJieSuan 182 /// </summary> 183 public void BangYiZuCheList() 184 { 185 //清空ListView 186 lvJieSuan.Items.Clear(); 187 //遍历已租车集合 添加到 ListView 188 foreach (var item in YiZuChe) 189 { 190 ListViewItem lvi = new ListViewItem(item.Key); 191 lvi.SubItems.Add(item.Value.Name); 192 lvi.SubItems.Add(item.Value.Color); 193 lvi.SubItems.Add(item.Value.YearsOfService.ToString()); 194 lvi.SubItems.Add(item.Value.DailyRent.ToString()); 195 if (item.Value is Truck) 196 { 197 lvi.SubItems.Add((item.Value as Truck).Load.ToString()); 198 } 199 lvJieSuan.Items.Add(lvi); 200 } 201 } 202 203 /// <summary> 204 /// 更改tabControl1选项时 205 /// </summary> 206 /// <param name="sender"></param> 207 /// <param name="e"></param> 208 private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 209 { 210 //当选中还车时绑定已租车列表 lvJieSuan 211 if (tabControl1.SelectedIndex == 1) 212 { 213 BangYiZuCheList(); 214 } 215 } 216 217 /// <summary> 218 /// 当选中发生改变 219 /// </summary> 220 /// <param name="sender"></param> 221 /// <param name="e"></param> 222 private void rbtnKa_CheckedChanged(object sender, EventArgs e) 223 { 224 txtLoad.Enabled = true; 225 } 226 227 /// <summary> 228 /// 当选中发生改变 229 /// </summary> 230 /// <param name="sender"></param> 231 /// <param name="e"></param> 232 private void rbtnJiao_CheckedChanged(object sender, EventArgs e) 233 { 234 txtLoad.Enabled = false; 235 } 236 237 /// <summary> 238 /// 单击入库 239 /// </summary> 240 /// <param name="sender"></param> 241 /// <param name="e"></param> 242 private void btnRuKu_Click(object sender, EventArgs e) 243 { 244 // 判断输入信息是否为空 245 if (FeiKong()) 246 { 247 Vehicle vehicle = null; 248 //判断添加车型是哪种 249 if (rbtnJiao.Checked == true) 250 { 251 vehicle = new JCar(); 252 } 253 else 254 { 255 vehicle = new Truck(); 256 (vehicle as Truck).Load = int.Parse(txtLoad.Text); 257 } 258 vehicle.Color = cmbColor.Text; 259 vehicle.DailyRent = double.Parse(txtDailyRent.Text); 260 vehicle.LicenseNo = txtLicenseNo.Text; 261 vehicle.Name = txtVehicleName.Text; 262 vehicle.YearsOfService = int.Parse(txtYearsOfService.Text); 263 264 try 265 { 266 //当vehicle.LicenseNo(Keys)车牌号重复时,报出异常 267 KeZuChe.Add(vehicle.LicenseNo, vehicle); 268 MessageBox.Show("添加成功"); 269 } 270 catch (Exception) 271 { 272 MessageBox.Show("已有该车牌号"); 273 } 274 } 275 else 276 { 277 MessageBox.Show("信息不能为空!"); 278 } 279 } 280 281 /// <summary> 282 /// 判断是否为空 283 /// </summary> 284 /// <returns></returns> 285 public bool FeiKong() 286 { 287 bool isK = false; 288 if (string.IsNullOrEmpty(txtLicenseNo.Text.Trim())) 289 { 290 } 291 else if (string.IsNullOrEmpty(txtVehicleName.Text.Trim())) 292 { 293 } 294 else if (string.IsNullOrEmpty(cmbColor.Text.Trim())) 295 { 296 } 297 else if (string.IsNullOrEmpty(txtYearsOfService.Text.Trim())) 298 { 299 } 300 else if (string.IsNullOrEmpty(txtDailyRent.Text.Trim())) 301 { 302 } 303 else 304 { 305 isK = true; 306 } 307 return isK; 308 } 309 310 311 /// <summary> 312 /// 单击结算 313 /// </summary> 314 /// <param name="sender"></param> 315 /// <param name="e"></param> 316 private void btnJie_Click(object sender, EventArgs e) 317 { 318 //判断 319 if (lvJieSuan.SelectedItems.Count > 0) 320 { 321 if (!string.IsNullOrEmpty(txtDay.Text.Trim())) 322 { 323 //找到选中还车是哪一辆 324 string key = lvJieSuan.SelectedItems[0].Text; 325 //按照输入的租车天数给该车属性赋值 326 YiZuChe[key].RentDate = int.Parse(txtDay.Text); 327 //调用该车的计算总价方法 并输出总价 328 MessageBox.Show("还车成功,总价为:" + YiZuChe[key].Money()); 329 //还车成功后, 在可租车集合中添加该车 330 KeZuChe.Add(YiZuChe[key].LicenseNo,YiZuChe[key]); 331 //还车成功后, 在已租车集合中删除该车 332 YiZuChe.Remove(key); 333 } 334 else 335 { 336 MessageBox.Show("请输入租车天数!"); 337 } 338 } 339 else 340 { 341 MessageBox.Show("请选中一辆车!"); 342 } 343 } 344 } 345 }