zoukankan      html  css  js  c++  java
  • C#汽车租赁系统

    类图:

     

    父类(车类,抽象类)

     /// <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) { } } }
  • 相关阅读:
    【Leetcode】【Easy】Remove Duplicates from Sorted List
    【Leetcode】【Easy】Pascal's Triangle II
    【Leetcode】【Easy】Pascal's Triangle
    【Leetcode】【Easy】Binary Tree Level Order Traversal II
    【Leetcode】【Easy】Binary Tree Level Order Traversal
    【Leetcode】【Easy】Maximum Depth of Binary Tree
    【Leetcode】【Easy】Minimum Depth of Binary Tree
    【Leetcode】【Easy】Balanced Binary Tree
    【Leetcode】【Easy】Symmetric Tree
    如何使用Action.Invoke()触发一个Storyboard
  • 原文地址:https://www.cnblogs.com/java-123/p/8846528.html
Copyright © 2011-2022 走看看