汽车租赁系统

类图:

 

父类(车类,抽象类)

复制代码
 /// <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) { } } }

posted on 2018-04-22 10:22  Roses  阅读(1161)  评论(0编辑  收藏  举报