程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成簡略的汽車租賃體系

C#完成簡略的汽車租賃體系

編輯:C#入門知識

C#完成簡略的汽車租賃體系。本站提示廣大學習愛好者:(C#完成簡略的汽車租賃體系)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成簡略的汽車租賃體系正文


比來進修了繼續,多態,聚集,設計形式,有一個汽車租憑體系,給年夜家分享一下:

我們起首來看看我們這個體系的後果

1.做一個項目,我們起首對項目停止剖析

依據我們比來學的常識,我們可以看出繼續,多態,聚集,設計形式,我們都能用到

我們把所須要的類和簡略形式中的“簡略工場”的工場預備好

 類圖:

01.車輛類(父類)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租賃體系
{
 // 車輛類 父類
 public abstract class Vehicle
 {
  //屬性
  //車商標
  public string LicenseNo { get; set; }
  
  //車名
  public string Name { get; set; }
  //色彩
  public string Color { get; set; }
  //應用時光
  public int RentDate { get; set; }
  //應用人
  public string RentUser { get; set; }
  //日房錢
  public double DailyRent { get; set; }
  //還車日期
  public int ReturnDate { get; set; }

  public Vehicle() { }
  //結構
  public Vehicle(string liceseno,string name,string color,int rentdate,double dailyrent)
  {
   this.Color = color;
   this.DailyRent = dailyrent;
   this.LicenseNo = liceseno;
   this.Name = name;
   this.RentDate = rentdate;
 
  }

  //盤算價錢的虛辦法
  public abstract double GetNum();
  
 }
}

02.子類汽車類   (繼續 車輛類 父類)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租憑體系
{
 //汽車類 子類
 public class Car:Vehicle
 {
  public Car() { }
  //結構
  public Car(string licenseno, string name, string color, int rentdate, double dailyrent)
   : base(licenseno, name, color, rentdate, dailyrent) 
  { }
  //重寫父類盤算價錢的辦法
  public override double GetNum()
  {
   //日房錢*租的天數
   double result = this.DailyRent * this.ReturnDate;
   return result;
  }
 }
}

03.子類卡車類 繼續 車輛類 父類

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租憑體系
{
 //子類
 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(licenseno,name,color,rentdate,dailyrent ) 
  {
   this.Load = load;
  }

  //重寫父類盤算價錢的辦法
  public override double GetNum()
  {
   //日房錢*租的天數
   double result = this.DailyRent * this.ReturnDate;
   return result;
  }
 }
}

 04.“簡略工場”的工場類

說這個工場類,就是為了在新車入庫的時刻,可以曉得它是轎車照樣卡車,實例化分歧的對象,便利應用

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 汽車租賃體系
{
 //工場類
 public class VehicleFactory
 {
  //帶參靜態辦法
  public static Vehicle Carteshow(string liceseno, string name, string color, int rentdate, double dailyrent, int Load,string type)
  {
   //初始化父類對象
   Vehicle vehicle = null;
   switch (type)
   {
    //依據傳來的值,實例化對應的對象
    case"卡車":
     vehicle = new Truck(liceseno, name, color, rentdate, dailyrent, Load);
     break;
    case"轎車":
     vehicle = new Car(liceseno, name, color, rentdate, dailyrent);
     break;
   }
   //前往實例化對象
   return vehicle;
  
  
  }
 }
}

2. 剩下的就是對主窗體的功效停止完成

其實租車和還車的焦點就是兩個聚集之間的交互

新車入庫就是應用“簡略工場”的設計形式停止對應添加

個中有個我們之前沒見過的控件TabControl

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 汽車租賃體系
{
 public partial class FrmMain : Form
 {
  public FrmMain()
  {
   InitializeComponent();
  }
  //保留可租車輛的聚集
  Dictionary<string, Vehicle> vehicles=new Dictionary<string,Vehicle>();
  //保留租出車的聚集
  Dictionary<string, Vehicle> rentvehicles=new Dictionary<string,Vehicle>();

  //靜態加載listview的辦法
  public void New(Dictionary<string,Vehicle> list,ListView lvlist) 
  {
   ListViewItem listview = null;
   lvlist.Items.Clear();
   foreach (Vehicle item in list.Values)
   {
    if (item is Car)
    {
     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());
    }
    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);
   }
   
  }

  //預備可租車輛
  public void Intitle() 
  {
   
   Truck truck = new Truck("京A111","奧迪","白色",3,240,10);
   Car car = new Car("京A222", "寶馬", "黑色", 3, 240);

   vehicles.Add(truck.LicenseNo,truck);
   vehicles.Add(car.LicenseNo, car);
   //加載數據
   New(vehicles,lvlist);
   
  }
  private void FrmMain_Load(object sender, EventArgs e)
  {
   Intitle();
  }
  //點擊租車觸發的事宜
  private void btn_zu_Click(object sender, EventArgs e)
  {
   if(lvlist.SelectedItems.Count==0)
   
   {
    MessageBox.Show("請選中一行!");
    return;
   }
   if (txt_name.Text=="")
   {
    MessageBox.Show("請輸出姓名!");
    return;

   }
   //履行租車.
   //獲得車商標的值
   string carnum = lvlist.SelectedItems[0].Text;
   Vehicle ve= vehicles[carnum];

   //直接把取得要租的信息放入rentvehicles聚集

   rentvehicles.Add(carnum,ve);

   //刪除本來的聚集
   vehicles.Remove(carnum);

   //從新加載
   New(vehicles,lvlist);
   MessageBox.Show("租車勝利");

  }

  private void button1_Click(object sender, EventArgs e)
  {
   //加載已出租車輛信息
   New(rentvehicles,lvlist_huan);
   
  }

  private void btn_ji_Click(object sender, EventArgs e)
  {
   if (txt_day.Text=="")
   {
    MessageBox.Show("請輸出天數");
    return;
   }

   if (lvlist_huan.SelectedItems.Count==0)
   {
    MessageBox.Show("請選擇一行");
    return;
   }
   //獲得車商標的值
   string carnum1 = lvlist_huan.SelectedItems[0].Text;
   Vehicle ve = rentvehicles[carnum1];

  
   //獲得租的天數
   int num = Convert.ToInt32(txt_day.Text);
   ve.ReturnDate = num;
   double money=ve.GetNum();
   DialogResult result= MessageBox.Show("你要付出"+money+"元","提醒",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
   if (result==DialogResult.OK)
   {
    //直接把取得要還的信息放入vehicles聚集
    vehicles.Add(carnum1, ve);

    //刪除本來的聚集
    rentvehicles.Remove(carnum1);

    //從新加載
    New(rentvehicles, lvlist_huan);
    MessageBox.Show("還車勝利");
   }
   

  }
  //刷新按鈕
  private void btn_new_Click(object sender, EventArgs e)
  {
   //從新加載
   New(vehicles, lvlist);
  }
  //斷定填寫能否准確的辦法
  public bool Good() 
  {
   bool flag = true;
   if (txt_id.Text==""||txt_xing.Text==""||cmb_color.Text==""||txt_time.Text==""||txt_money.Text==""||txt_zhong.Text==""|| rdb_jiao.Text=="")
   {
    flag = false;

   }
   return flag;
  }
  //入庫按鈕點擊事宜
  private void btn_ruku_Click(object sender, EventArgs e)
  {
   if (Good())//斷定填寫能否准確
   {

    foreach (string item in vehicles.Keys)
    {
     if (txt_id.Text==item)
     {
      MessageBox.Show("此車牌曾經有庫存了,請你確認!");
      return;
     }
    }
    //應用"簡略工場"
    Vehicle ve = null;
    if (rdb_jiao.Checked == true)
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text,Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_jiao.Text);

    }
    else
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text, Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_ka.Text);

    }
    //添加聚集
    vehicles.Add(txt_id.Text, ve);
    MessageBox.Show("入庫勝利");

    //清空所要填的值選項
    txt_id.Text="";
    txt_xing.Text="";
    cmb_color.Text="";
    txt_time.Text="";
    txt_money.Text= "";
    txt_zhong.Text = ""; 
   }
   else
   {

    MessageBox.Show("請完美信息的填寫!");
   }
   

  }
  //選擇分歧的按鈕
  private void rdb_jiao_CheckedChanged(object sender, EventArgs e)
  {
   if (rdb_jiao.Checked==true)
   {
    lab_zhong.ForeColor = Color.Red;
    txt_zhong.Enabled = false;
   }
   else
   {
    lab_zhong.ForeColor = Color.Black;
    txt_zhong.Enabled = true;
   }
  }
 }
}

我們來分類看看個中的魅力代碼:

1.租車的界面功效

01.租車按鈕  

//點擊租車觸發的事宜
  private void btn_zu_Click(object sender, EventArgs e)
  {
   //確保選中一行
   if(lvlist.SelectedItems.Count==0)
   
   {
    MessageBox.Show("請選中一行!");
    return;
   }
   //確保有人租車
   if (txt_name.Text=="")
   {
    MessageBox.Show("請輸出姓名!");
    return;

   }
   //履行租車.
   //獲得車商標的值
   string carnum = lvlist.SelectedItems[0].Text;
   //依據車商標取得此車對象
   Vehicle ve= vehicles[carnum];

   //直接把取得要租的信息放入rentvehicles聚集

   rentvehicles.Add(carnum,ve);

   //刪除本來的聚集
   vehicles.Remove(carnum);

   //從新加載
   New(vehicles,lvlist);
   MessageBox.Show("租車勝利");

02.刷新按鈕

//刷新按鈕
  private void btn_new_Click(object sender, EventArgs e)
  {
   //從新加載
   New(vehicles, lvlist);
  }

這裡的刷新界說了一個辦法,也就是靜態加載ListView的辦法(Nuw辦法)

這個辦法有兩個參數,第一個參數傳入車輛類型聚集對象,第二個傳入Listview的名字

如許的感化就是在租車和還車時都能應用此辦法停止刷新,豈不妙哉!

 //靜態加載listview的辦法
  public void New(Dictionary<string,Vehicle> list,ListView lvlist) 
  {
   //初始化LIstviewItem對象
   ListViewItem listview = null;
    //消除Listview,以避免有抵觸的值
   lvlist.Items.Clear();
   foreach (Vehicle item in list.Values)
   {
    //斷定賦值
    if (item is Car)
    {
     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());
    }
    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);
   }
   
  }

2.還車的界面功效

01.選擇結算按鈕

 private void btn_ji_Click(object sender, EventArgs e)
  {
   //確保 能否輸出天數
   if (txt_day.Text=="")
   {
    MessageBox.Show("請輸出天數");
    return;
   }
   //確保能否選中一行
   if (lvlist_huan.SelectedItems.Count==0)
   {
    MessageBox.Show("請選擇一行");
    return;
   }
   //獲得車商標的值
   string carnum1 = lvlist_huan.SelectedItems[0].Text;
    //依據車商標取得對應的車輛對象
   Vehicle ve = rentvehicles[carnum1];
  
   //獲得租的天數
   int num = Convert.ToInt32(txt_day.Text);
   //給屬性應用天數賦值
   ve.ReturnDate = num;
   //挪用盤算辦法(多態的運用)
   double money=ve.GetNum();
   DialogResult result= MessageBox.Show("你要付出"+money+"元","提醒",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
   if (result==DialogResult.OK)
   {
    //直接把取得要還的信息放入vehicles聚集
    vehicles.Add(carnum1, ve);

    //刪除本來的聚集
    rentvehicles.Remove(carnum1);

    //從新加載
    New(rentvehicles, lvlist_huan);
    MessageBox.Show("還車勝利");
   }
   

  }

02.刷新按鈕(挪用租車時寫的辦法)

private void button1_Click(object sender, EventArgs e)
  {
   //加載已出租車輛信息
   New(rentvehicles,lvlist_huan);
   
  }

3.新車入庫界面功效

01.入庫按鈕

 //入庫按鈕點擊事宜
  private void btn_ruku_Click(object sender, EventArgs e)
  {
   if (Good())//斷定填寫能否准確
   {
     //車商標是獨一的,不克不及反復添加已有的車商標
    foreach (string item in vehicles.Keys)
    {
     if (txt_id.Text==item)
     {
      MessageBox.Show("此車牌曾經有庫存了,請你確認!");
      return;
     }
    }
    //應用"簡略工場",停止對應添加
    Vehicle ve = null;
    if (rdb_jiao.Checked == true)
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text,Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_jiao.Text);

    }
    else
    {
     ve = VehicleFactory.Carteshow(txt_id.Text, txt_xing.Text, cmb_color.Text, Convert.ToInt32(txt_time.Text), Convert.ToDouble(txt_money.Text), Convert.ToInt32(txt_zhong.Text), rdb_ka.Text);

    }
    //添加聚集
    vehicles.Add(txt_id.Text, ve);
    MessageBox.Show("入庫勝利");

    //清空所要填的值選項
    txt_id.Text="";
    txt_xing.Text="";
    cmb_color.Text="";
    txt_time.Text="";
    txt_money.Text= "";
    txt_zhong.Text = ""; 
   }
   else
   {

    MessageBox.Show("請完美信息的填寫!");
   }
   

  }

以上就是本文的全體內容,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved