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入门篇:练习——单身狗租赁系统
今天,我们要玩个大的!!! 我们把之前使用数组做的这个单身狗系统改版成数据库版本,并且使用面向对象里面的一些简单思想.如果有不知道这个系统的看官,请跳转到目录页,然后再选择单身狗系统(数组版)先围观五 ...
随机推荐
- 运行脚本 结果出现 Vim: Warning 并且卡住不能输入其它命令
当我在执行一个 关于执行linux操作的php脚本时,就出现了以下信息:"Vim: Warning: Output is not to a terminal",接着出现了一大堆的字 ...
- silky微服务框架服务注册中心介绍
目录 服务注册中心简介 服务元数据 主机名称(hostName) 服务列表(services) 终结点 时间戳 使用Zookeeper作为服务注册中心 使用Nacos作为服务注册中心 使用Consul ...
- Linux系统查看磁盘可用空间的5个命令
大家好,我是良许. 工作中,经常会遇到磁盘爆满的情况,尤其是一台服务器运行了 N 年之后,里面会充满各种各样垃圾文件,比如:编译产生的中间文件.打包的镜像文件.日志文件,等等. 别问我怎么知道,我上家 ...
- silky微服务框架的服务治理介绍
目录 服务治理的概念 服务注册与发现 负载均衡 超时 故障转移(失败重试) 熔断保护(断路器) 限流 RPC限流 HTTP限流 1. 添加配置 2. 注册服务 3.启用 AspNetCoreRateL ...
- python实现圆检测
目录: (一)霍夫圆检测原理 (二)代码实现 (一)霍夫圆检测原理 (二)代码实现 1 #霍夫圆检测 2 import cv2 as cv 3 import numpy as np 4 5 def d ...
- [atAGC052B]Tree Edges XOR
定义两点的距离$d(x,y)$为$x$到$y$路径上边权异或和,则两棵树相同当且仅当$\forall 1\le i\le n$,$d(1,i)$相同 新建一个节点0,连边$(0,1)$,初始权值为0, ...
- [bzoj1863]皇帝的烦恼
二分枚举答案,假设是ans,考虑判定答案从前往后计算,算出每一个将军与第一个将军最少和最多有多少个相同的奖牌,贪心转移即可 1 #include<bits/stdc++.h> 2 usin ...
- GeoServer style 配置样例
<?xml version="1.0" encoding="UTF-8"?> <StyledLayerDescriptor version=& ...
- P5599【XR-4】文本编辑器
题目传送门. 题意简述:给定长度为 \(n\) 的文本串 \(a\) 和有 \(m\) 个单词的字典 \(s_i\).\(q\) 次操作,每次求出字典内所有单词在 \(a[l,r]\) 的出现次数,或 ...
- Pandas 简介
Pandas 简介 pandas 是 python 内基于 NumPy 的一种工具,主要目的是为了解决数据分析任务.Pandas 包含了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具 ...