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)
{ }
}
}
C#汽车租赁系统的更多相关文章
- Java汽车租赁系统[源码+数据库]
系统名称 Java汽车租赁系统 (源码在文末) 系统概要 汽车租赁系统总共分为两个大的模块,分别是系统模块和业务模块.其中系统模块和业务模块底下又有其子模块. 功能模块 一.业务模块 1.客户管理 ...
- Java代码~~汽车租赁系统
租车信息: 输出结果: 代码: 1.先定义抽象类(汽车类:Moto) package cn.aura.demo01; public abstract class Moto { //公共属性 priva ...
- 深入.NET和C#的小型汽车租赁系统的框架
前言:写这个小型系统之前呢,我们应该要猜测可能要用到哪些知识点. 那么对于这个小型系统:主要用到了如下的知识: 封装,集合(ArrayList和HashTable)和泛型和非泛型集合(泛型:List ...
- 一种基于Java Swing/HTML/MySQL的汽车租赁系统
该项目是一个Java的课程作业(大二),主要运用Java.Swing.HTML.MySQL,实现基本的租车逻辑.界面可视化.信息导出.数据存储等功能.实现管理员.用户两种角色登录,并结合Java开发中 ...
- Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)
文章目录 1.系统功能列表 2.管理员端界面 2.1 商家登录界面 2.2 用户信息管理界面 2.3 汽车管理界面 2.4 订单界面 2.5 汽车图形报表 2.6 优惠券新增界面 3.普通用户界面 3 ...
- C#汽车租赁系统 完整版
Truck.cs类 //卡车类 public class Truck : Vehicle1 { //重载 public int Load { get; set; } //构造函数 public T ...
- .Net中的AOP系列之构建一个汽车租赁应用
返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...
- 《Java从入门到放弃》JavaSE篇:综合练习——单身狗租赁系统(数组版)
因为现在只学习了基本语法,所以在综合练习之前,先补充关于方法概念. 方法的作用:把一系列的代码放在一起,然后再取个别名.之后通过这个别名的调用,就相当于执行了这一系列的代码. 方法的语法:([]中的内 ...
- 《Java从入门到放弃》JavaSE入门篇:练习——单身狗租赁系统
今天,我们要玩个大的!!! 我们把之前使用数组做的这个单身狗系统改版成数据库版本,并且使用面向对象里面的一些简单思想.如果有不知道这个系统的看官,请跳转到目录页,然后再选择单身狗系统(数组版)先围观五 ...
随机推荐
- python实现轮廓发现
目录: (一)轮廓发现的介绍 (二)代码实现 (1)使用直接使用阈值方法threshold方法获取二值化图像来选择轮廓 (2)使用canny边缘检测获取二值化图像 (一)轮廓发现的介绍与API的介绍 ...
- Kotlin小测试
fun main(args: Array<String>) { var a=1 a=2 println(a)//2 println(a::class)//int (Kotlin refle ...
- Jenkins系列-权限管理
在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view, 只能看到自己项目的jenkins job. 但是,jenkins默认的权限管理 ...
- 随笔:关于.net core单文件AOT编译
.Net Core单文件发布已经很流畅了(vs已支持图形化操作发布). 但类似Go或者Graalvm JDK的完全事前编译为本地机器码的红能功能,还未发布于.net 6特性中,还处于实验室中. 另外, ...
- 解决ip和域名都能够ping通但是启动nginx无法访问网页的问题
解决思路 最近双11逛西部数码的官网看看有没有什么服务器优惠的时候,发现了可以申请一个一块钱用一整年的SSL证书,立马心动下单了,想想俺也可以用https装装X了哈哈 不过在部署完证书,并调整ngin ...
- CF611F New Year and Cleaning
题意 CF611F New Year and Cleaning 想法 这个题是\(NOIP2020\)的弱化版.. 我们把所有在二维上的点都一起考虑,那么所有点对于一个步骤的移动是相当于这些所有点所组 ...
- Codeforces 1264D - Beautiful Bracket Sequence(组合数学)
Codeforces 题面传送门 & 洛谷题面传送门 首先对于这样的题目,我们应先考虑如何计算一个括号序列 \(s\) 的权值.一件非常显然的事情是,在深度最深的.是原括号序列的子序列的括号序 ...
- Atcoder Grand Contest 033 D - Complexity(dp)
Atcoder 题面传送门 & 洛谷题面传送门 首先 \(n^5\) 的暴力非常容易想,设 \(dp_{a,b,c,d}\) 表示以 \((a,b)\) 为左上角,\((c,d)\) 为右下角 ...
- python-django使用ORM模型增删改查CRUD
from weibo.models import WeiboUser as User user_obj = User.objects.get(pk=1) user_obj.pk Out[4]: 1 u ...
- 创建一个vue实例
创建一个vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 虽然没有完全遵循 MVVM 模型,但是 Vue ...