汽车租赁系统
类图:
父类(车类,抽象类)
/// <summary>
/// 车辆基本信息类。搞一个抽象类玩玩
/// </summary>
public abstract class 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; }//租用天数
public Vehicle()
{
}
//构造
public Vehicle(string color, double dailyRent, string licenseNo,string name,int rentDate)
{
this.Color = color;
this.Name = name;
this.RentDate = rentDate;
this.LicenseNo = licenseNo;
this.DailyRent = dailyRent;
}
//结算租金抽象方法
public abstract double GetJieSuang();
}
汽车类:
/// <summary>
/// 汽车类
/// </summary>
public class Car:Vehicle
{
public Car()
{
}
//构造
public Car(string licenseNo, string name, string color, int rentDate, double dailyRent)
:base(color, dailyRent,licenseNo,name, rentDate)
{
}
//重写父类计算价格的方法
public override double GetJieSuang()
{
//日租金*租的天数
double result = this.DailyRent * this.YearsOfService;
return result;
}
}
卡车类:
/// <summary>
/// 卡车类
/// </summary>
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(color, dailyRent, licenseNo, name, rentDate)
{
this.Load = load;
}
//重写父类计算租金的方法
public override double GetJieSuang()
{
//日租金*租的天数
double result = this.DailyRent * this.YearsOfService;
return result;
}
}
具体实现:
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 CarRentalSystem
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.cbColor.SelectedIndex = 0;//显示颜色
this.txtTruckLoad.Visible = false;
}
//保存可租用车的集合
Dictionary<string, Vehicle> vehicle = new Dictionary<string,Vehicle>();
//保存已租出的车的集合
Dictionary<string, Vehicle> rentvehcile = new Dictionary<string,Vehicle>();
//动态加载listview的方法
public void carZaiZhong()
{
if (rbcar.Checked == true)
{
this.txtTruckLoad.Visible = false;
}
else if(rbTruck.Checked==true)
{
this.txtTruckLoad.Visible = true;
}
}
/// <summary>
/// 刷新ListView的带参方法,传两个不同集合 和刷新对应的ListView
/// </summary>
/// <param name="list"></param>
/// <param name="lvlist"></param>
public void New(Dictionary<string, Vehicle> list, ListView lvlist)
{
ListViewItem listview = null;//局部变量要赋初始值
lvlist.Items.Clear();//清除项
foreach (Vehicle item in list.Values)
{
//如果是Car,对应的ListView添加数据
if (item is Car)
{
listview = new ListViewItem();//new出ListViewItem视图
listview.Text = item.LicenseNo;//listView第一列
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("无");
}
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);//添加到对应集合的ListView中
}
}
/// <summary>
/// 初始化可租用车集合信息
/// </summary>
public void initial()
{
Truck truck = new Truck("京A88888", "大卡", "红色", 3, 900, 20);//卡车
Car car = new Car("京A99999", "奔驰", "黑色", 3, 300);//汽车信息
vehicle.Add(truck.LicenseNo, truck);//添加到可租车集合
vehicle.Add(car.LicenseNo, car);
//租车数据
New(vehicle, lvCarkezu);
}
/// <summary>
/// 初始化已租出车的信息
/// </summary>
public void initialHc()
{
//对象初始化信息
Truck truck1 = new Truck("京B99999", "小卡", "红色", 3, 280, 10);//卡车
Car car1 = new Car("京B99999", "红旗", "黑色", 3, 280);//汽车信息
rentvehcile.Add(truck1.LicenseNo, truck1);//添加到已租车集合
rentvehcile.Add(car1.LicenseNo, car1);
//还车数据
New(rentvehcile, lvHuanche);
}
//选择结算,还车
private void button5_Click(object sender, EventArgs e)
{
//租用天数非空验证
if (this.txtRendDay.Text == "")
{
MessageBox.Show("请输入天数!");
return;
}
//确定是否选中一行
if (this.lvHuanche.SelectedItems.Count == 0)
{
MessageBox.Show("请选择一行!");
return;
}
//获取车牌号的值
string carnum1 = this.lvHuanche.SelectedItems[0].Text;
//根据车牌号获得对应的车辆对象
Vehicle ve = rentvehcile[carnum1];
//获取租用天数
int num = Convert.ToInt32(this.txtRendDay.Text);
//给属性使用天数赋值
ve.YearsOfService = num;
//结算租金
double money = ve.GetJieSuang();
DialogResult result = MessageBox.Show("你要支付" + money + "元", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result == DialogResult.OK)
{
//直接把获得要还的信息放入vehicles集合
vehicle.Add(carnum1, ve);
//删除原来的集合
rentvehcile.Remove(carnum1);
//重新加载
New(rentvehcile, lvHuanche);
MessageBox.Show("还车成功");
}
}
private void textBox5_TextChanged(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
initial();//初始化信息
initialHc();
}
private void button1_Click(object sender, EventArgs e)
{
//退出
DialogResult choice = MessageBox.Show("确定要退出吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if(choice==DialogResult.OK)
{
Application.Exit();
}
}
//新车入库车型验证,非空验证
public bool emptyNo()
{
//如果选择了汽车
if (this.rbcar.Checked == true)
{
if (this.txtLicenseNo.Text != "" && this.
txtDailyRent.Text != "" && this.txtName.Text != "" && this.txtRentDate.Text != "")
{
try
{
//文本框数字验证
int rntDate = int.Parse(this.txtRentDate.Text);
int dailyRent = int.Parse(this.txtDailyRent.Text);
//double truckLoad = double.Parse(this.txtTruckLoad.Text);
return true;
}
catch (Exception)
{
MessageBox.Show("使用时间,日租金应输入数字!");
return false;
}
}
else
{
MessageBox.Show("请完善新入库汽车信息!");
return false;
}
}
else if (this.rbTruck.Checked == true)
{
if (this.txtLicenseNo.Text != "" && this.txtDailyRent.Text != "" && this.txtName.Text != "" && this.txtRentDate.Text != ""&&this.txtTruckLoad.Text!="")
{
try
{
//文本框数字验证
int rntDate = int.Parse(this.txtRentDate.Text);
int dailyRent = int.Parse(this.txtDailyRent.Text);
double truckLoad = double.Parse(this.txtTruckLoad.Text);
return true;
}
catch (Exception)
{
MessageBox.Show("使用时间,日租金或卡车载重应输入数字!");
return false;
}
}
else
{
MessageBox.Show("请完善新入库卡车信息!");
return false;
}
}
return true;//防止报错
}
//新车入库
private void btnRuku_Click(object sender, EventArgs e)
{
//文本框非空验证
if (emptyNo())
{
//对车载重的值做一个判断,然后存入不同的集合
if(this.txtTruckLoad.Visible==false)
{
//车牌号是唯一的
string licenseNo=this.txtLicenseNo.Text;//车牌号
foreach (string ve in vehicle.Keys)//循环查看是否有相同的车牌号,有给出提示
{
if (ve == licenseNo)
{
MessageBox.Show("已经有相同的汽车车牌号,请您重新确认车牌号!");
return;
}
}
string name =this.txtName.Text;//车名
string cbColor = this.cbColor.SelectedItem.ToString();//颜色
int rentDate=Convert.ToInt32(this.txtRentDate.Text);//使用时间
double dailyRent = Convert.ToDouble(this.txtDailyRent.Text);//每日租金
//双列集合一般用对象初始化器,单列集合用集合初始化器,在添加数据的时候比较清晰,方便但是我这里没用。。。
Car car = new Car(licenseNo, name, cbColor, rentDate, dailyRent);
//添加到可租车集合
vehicle.Add(car.LicenseNo,car);
MessageBox.Show("汽车入库成功!");
}
else if (this.txtTruckLoad.Visible == true)
{
//车牌号是唯一的
string licenseNo = this.txtLicenseNo.Text;//车牌号
foreach (string rve in vehicle.Keys)//循环查看是否有相同的车牌号,有给出提示
{
if (rve== licenseNo)
{
MessageBox.Show("已经有相同的卡车车牌号,请您重新确认车牌号!");
return;
}
}
string name = this.txtName.Text;//车名
string cbColor = this.cbColor.SelectedItem.ToString();//颜色
int rentDate = Convert.ToInt32(this.txtRentDate.Text);//使用时间
double dailyRent = Convert.ToDouble(this.txtDailyRent.Text);//每日租金
int load = Convert.ToInt32(this.txtTruckLoad.Text);
//初始化信息
Truck tk = new Truck(licenseNo, name, cbColor, rentDate, dailyRent,load);
//添加到可租车集合
vehicle.Add(tk.LicenseNo, tk);
MessageBox.Show("卡车入库成功!");
}
}
}
private void btnBreak_Click(object sender, EventArgs e)
{
//刷新
New(vehicle, lvCarkezu);
}
private void btnRent_Click(object sender, EventArgs e)
{
//租车
if (this.lvCarkezu.SelectedItems.Count == 0)
{
MessageBox.Show("请选中一行!");
return;
}
if (txtRentUser.Text == "")//非空判断
{
MessageBox.Show("请输入租用者!");
return;
}
//执行租车.
//获取车牌号的值
string carnum = this.lvCarkezu.SelectedItems[0].Text;
Vehicle ve = vehicle[carnum];
//直接把获得要租的信息放入rentvehicles集合
rentvehcile.Add(carnum, ve);
//删除原来的集合
vehicle.Remove(carnum);
//重新加载
New(vehicle, lvCarkezu);
MessageBox.Show("租车成功");
}
private void btnBreakor_Click(object sender, EventArgs e)
{
//刷新租出车的信息
New(rentvehcile, lvHuanche);
}
private void rbcar_CheckedChanged(object sender, EventArgs e)
{
//选中则显示文本框
if (this.rbcar.Checked == true)
{
this.txtTruckLoad.Visible = false;
}
}
private void rbTruck_CheckedChanged(object sender, EventArgs e)
{
//判断是否选中
//carZaiZhong();
if (this.rbTruck.Checked == true)
{
this.txtTruckLoad.Visible = true;
}
}
private void tabPage3_Click(object sender, EventArgs e)
{
}
private void lvCarkezu_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}