刚见到这个项目时,我不是拿起来就写,而是看了书上有什么要求,然后先把自己的思路理清楚。
搭建界面想必大家都会,我就不在这啰嗦了。
首先我们先看租车:
我们可以看到显示车辆信息的控件,下面还有一个填写租用者姓名的控件,有两个按钮。
首先我就可以想到选中车辆,填写姓名,点击租车按钮,跳出一个提示消息框,
点击刷新,看看刚才自己出租成功的车辆还在不在。
接下来我们看看还车界面:
我们看到还车界面也是一个显示车辆信息的控件,下面还有租用天数,两个按钮。
这样我就可以想到选中车辆填写天数,点击结算按钮,弹出一个消息框提示你的租金,
点击刷新,查看是否还车成功。
最后我们来看看新车入库界面:
这个界面看起来相对就简单了,点击选中添加的车辆,按着车辆的信息依次添加即可,但是同时要注意,添加轿车和卡车时,车载重量填写不填写。
大致上我们已经把思路理明白了,接下来就是写代码了。
做这个项目我用的是单列集合,ListView承载车辆信息,大致上分了下列几步:
///0.1创建两个单列集合用于存储出租车辆和为出租车辆
///0.2初始化车辆信息
///0.3把初始化的车辆信息绑定到控件上
///0.4实现车辆的出租
//0.5实现车辆的归还
//0.6实现车辆的入库
具体的代码:
//初始化信息的集合 List<Vehicle> list = new List<Vehicle>(); //租车成功的集合 List<Vehicle> list2 = new List<Vehicle>(); //存储车辆信息个方法 public void Add() { //01.初始化卡车对象 Truck t = new Truck(); t.Color = "白色"; t.DailyRent = 200; t.LicenseNo = "京P1000"; t.Name = "解放"; t.YearsOfService = 0; t.Load = 200; Truck tr = new Truck(); tr.Color = "黄色"; tr.DailyRent = 600; tr.LicenseNo = "京P2000"; tr.Name = "东风日产"; tr.YearsOfService = 0; tr.Load = 300; Car c = new Car(); c.Color = "蓝色"; c.DailyRent = 200; c.LicenseNo = "京P3000"; c.Name = "东风日产"; c.YearsOfService = 0; Car ca = new Car(); ca.Color = "红色"; ca.DailyRent = 300; ca.LicenseNo = "京P4000"; ca.Name = "捷达"; ca.YearsOfService = 0; //02.把初始化的对象添加到集合中 list.Add(t); list.Add(tr); list.Add(c); list.Add(ca); //03.把数据绑定到ListView上 foreach (Vehicle item in list) { ListViewItem items = new ListViewItem(item.LicenseNo); items.SubItems.Add(item.Name); items.SubItems.Add(item.Color); items.SubItems.Add(item.YearsOfService.ToString()); items.SubItems.Add(item.DailyRent.ToString()); //04.判断当为卡车对象时,添加车载重量 if(item is Truck) { items.SubItems.Add((item as Truck).Load.ToString()); } //05.判断当为轿车对象时,不添加车载重量 else if (item is Car) { items.SubItems.Add("无"); } lvList01.Items.Add(items); } }
运行程序时显示:
点击选中车辆,填写租用者:
在这里我们要做出判断没有填写姓名时,给出提示,当没选择车辆时给出提示
//判断是否选中一行 if (lvList01.SelectedItems.Count == 0) { MessageBox.Show("请选择一行"); return; }
//判断当输入的姓名为空时,做出的判断 if (txt01.Text == "") { MessageBox.Show("请输入客户名字!"); return; }
string no = lvList01.SelectedItems[0].SubItems[0].Text; for (int i = 0; i < list.Count; i++) { if(list[i].LicenseNo==no) { //判断选中的是什么车 if (list[i] is Car) { //初始化一个车辆信息加入到租车成功的控件上 Car r = new Car(); r.LicenseNo = no; r.Name = lvList01.SelectedItems[0].SubItems[1].Text; r.Color= lvList01.SelectedItems[0].SubItems[2].Text; r.YearsOfService = Convert.ToInt32(lvList01.SelectedItems[0].SubItems[3].Text); r.DailyRent= Convert.ToInt32(lvList01.SelectedItems[0].SubItems[4].Text); list2.Add(r); } else if(list[i] is Truck) { //初始化一个车辆信息加入到租车成功的控件上 Truck k = new Truck(); k.LicenseNo = no; k.Name = lvList01.SelectedItems[0].SubItems[1].Text; k.Color = lvList01.SelectedItems[0].SubItems[2].Text; k.YearsOfService = Convert.ToInt32(lvList01.SelectedItems[0].SubItems[3].Text); k.DailyRent = Convert.ToInt32(lvList01.SelectedItems[0].SubItems[4].Text); k.Load= Convert.ToInt32(lvList01.SelectedItems[0].SubItems[5].Text); list2.Add(k); } //把出租成功的车辆信息删除 list.RemoveAt(i); //给出一个提示框 MessageBox.Show("你好!"+txt01.Text + "您成功租用的车牌号为:" + no+"的车辆"); } }
点击租车时显示:
点击刷新时显示: private void btn01_Click(object sender, EventArgs e) { //清空列表 lvList01.Items.Clear(); //重新加载车辆信息 foreach (Vehicle item in list) { ListViewItem items = new ListViewItem(item.LicenseNo); items.SubItems.Add(item.Name); items.SubItems.Add(item.Color); items.SubItems.Add(item.YearsOfService.ToString()); items.SubItems.Add(item.DailyRent.ToString()); if (item is Truck) { items.SubItems.Add((item as Truck).Load.ToString()); } else if (item is Car) { items.SubItems.Add("无"); } lvList01.Items.Add(items); } }
这里我们可以看到选中的车辆信息已经没有了,租用成功!
接下来我们查看还车:
刚开始里面是没有任何车辆信息的,点击刷新后:
private void btn04_Click(object sender, EventArgs e) { lvList02.Items.Clear(); foreach (Vehicle item in list2) { ListViewItem items = new ListViewItem(item.LicenseNo); items.SubItems.Add(item.Name); items.SubItems.Add(item.Color); items.SubItems.Add(item.YearsOfService.ToString()); items.SubItems.Add(item.DailyRent.ToString()); if (item is Truck) { items.SubItems.Add((item as Truck).Load.ToString()); } else if (item is Car) { items.SubItems.Add("无"); } lvList02.Items.Add(items); } }
我们选中的车辆信息就显示在还车界面上了。
当我们还车时也要做出判断,是否选中车辆,是否添加天数
//判断是否输入天数 if (txt02.Text == string.Empty) { MessageBox.Show("请输入天数!"); return; }
//判断是否选中车辆信息 if(lvList02.SelectedItems.Count>0) { string Num = lvList02.SelectedItems[0].SubItems[0].Text; for (int i = 0; i < list2.Count; i++) { if (list2[i].LicenseNo == Num) { if (list2[i] is Car) { Car r = new Car(); r.LicenseNo = lvList02.SelectedItems[0].SubItems[0].Text; r.Name = lvList02.SelectedItems[0].SubItems[1].Text; r.Color = lvList02.SelectedItems[0].SubItems[2].Text; r.YearsOfService = Convert.ToInt32(txt02.Text); r.DailyRent = Convert.ToInt32(lvList02.SelectedItems[0].SubItems[4].Text); list.Add(r); double money = r.DailyRent * Convert.ToDouble(txt02.Text); MessageBox.Show("您需要支付:" + money + "元"); } else if (list2[i] is Truck) { Truck k = new Truck(); k.LicenseNo = lvList02.SelectedItems[0].SubItems[0].Text; k.Name = lvList02.SelectedItems[0].SubItems[1].Text; k.Color = lvList02.SelectedItems[0].SubItems[2].Text; k.YearsOfService = Convert.ToInt32(txt02.Text); k.DailyRent = Convert.ToInt32(lvList02.SelectedItems[0].SubItems[4].Text); k.Load = Convert.ToInt32(lvList02.SelectedItems[0].SubItems[5].Text); list.Add(k); double money = k.DailyRent * Convert.ToDouble(txt02.Text); MessageBox.Show("您需要支付:" + money); } list2.RemoveAt(i); } } } else { MessageBox.Show("请选择归还的车辆"); }
最后我们来看看车辆入库:
//判断当我们选择轿车和卡车时车载重量填写不填写 private void rb01_CheckedChanged(object sender, EventArgs e) { if (rb01.Checked) { txtzl.Text = ""; txtzl.Enabled = false; } else if (rb02.Checked) { txtzl.Enabled = true; } }
依次填写信息:
未填写信息时作出判断: if ( txtsj.Text == "" || txtxh.Text == "" || txtno.Text == "" || txtzj.Text == "" || cbo01.Text == "") { MessageBox.Show("请您填写完整!"); } else { if (rb01.Checked) { Vehicle vl = new Car(); vl.LicenseNo = txtno.Text; vl.Color = cbo01.Text; vl.DailyRent = Convert.ToDouble(txtzj.Text); vl.Name = txtxh.Text; vl.YearsOfService =0; list.Add(vl); MessageBox.Show("入库成功"); } else if(rb02.Checked) { Vehicle vl = new Truck(); vl.LicenseNo = txtno.Text; vl.Color = cbo01.Text; vl.DailyRent = Convert.ToDouble(txtzj.Text); vl.Name = txtxh.Text; vl.YearsOfService = 0; ((Truck)vl).Load = Convert.ToInt32(txtzl.Text); list.Add(vl); MessageBox.Show("入库成功"); } else { MessageBox.Show("请选择入库的车辆类型"); } } }
点击租车界面的刷新按钮:
点击清空按钮: private void btnqk_Click(object sender, EventArgs e) { foreach (Control item in tp03.Controls) { if(item is TextBox) { item.Text = ""; } cbo01.Text = "请选择"; } } 在Load事件里添加: private void FrmMain_Load(object sender, EventArgs e) { Add(); cbo01.Items.Add("请选择"); cbo01.SelectedIndex = 0; cbo01.Items.Add("黄色"); cbo01.Items.Add("白色"); cbo01.Items.Add("绿色"); cbo01.Items.Add("蓝色"); cbo01.Items.Add("黑色"); cbo01.Items.Add("橙色"); cbo01.Items.Add("灰色"); cbo01.Items.Add("紫色"); }
这就是整体的租车系统