c#课程设计.docx
《c#课程设计.docx》由会员分享,可在线阅读,更多相关《c#课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
c#课程设计
目录
设计题目2
题目:
2
完成任务:
2
题目分析及实现步骤2
题目分析:
2
阶段任务:
2
阶段1:
创建窗体。
2
阶段2:
创建不同类型的汽车对象,填充到窗体。
4
阶段3:
选择一项,实现租赁,添加到已租赁集合。
5
阶段4:
在还车窗口进行结算,不同类型的车结算方式不同。
5
阶段5:
使用简单工厂实现添加不同类型的汽车。
6
程序代码6
Form1.cs6
Car.cs10
Truck.cs11
Vehicle.cs12
VenhicleFactory.cs14
设计体会14
设计题目
题目:
租车系统
完成任务:
(1)创建租车系统窗体。
(2)系统可以实现两种类型的汽车入库。
(3)不同类型的汽车计算价格方式不同。
题目分析及实现步骤
题目分析:
此租车系统就是对泛型集合的操作,通过创建两个泛型集合,调用一定的方法,实现对集合中元素的增删,即可实现题目要求的功能。
租车部分,就是将可出租车辆中被选中的项的用户设置成文本框中的名字,同时将该项移动到已出租车辆集合中。
还车部分,就是将已出租车辆中被选中的项的使用时间设置成文本框中的数字,调用结账函数的语句,实现结算并显示出来,同时将该项移动到可出租车辆集合中。
新车入库则直接使用汽车工厂类中的创建函数,函数所需的参数从文本框等获得,返回一个交通工具对象,最后将该对象添加到可出租汽车集合中。
阶段任务:
阶段1:
创建窗体。
创建程序界面的窗体,添加所需的控件,实现下图界面所示效果:
阶段2:
创建不同类型的汽车对象,填充到窗体。
创建汽车类、轿车类、卡车类,实现继承关系,子类使用base调用父类的构造函数。
类关系图如下图所示:
泛型集合Dictionary(可租车辆集合),保持两种类型的汽车,并将泛型集合填充到窗体中。
本阶段实现效果如下图所示:
阶段3:
选择一项,实现租赁,添加到已租赁集合。
在刷新按钮单击事件中添加刷新代码,在租车按钮单击事件中添加代码,实现:
选择一辆车,录入一个姓名,实现租车;将选择的车保存到租出的车的集合中;将租出的车移除可租车辆的集合。
实现的程序界面如下图所示:
阶段4:
在还车窗口进行结算,不同类型的车结算方式不同。
将已租车辆的集合填充到ListView中;选择一辆车,录入天数,计算价格;计算价格的方法,作为抽象方法放在父类中,子类重写。
程序实现结果如下图:
阶段5:
使用简单工厂实现添加不同类型的汽车。
在新车入库窗体中,添加可租用的新车,添加项为使用简单工厂创建不同的子类对象。
程序实现如下图:
程序代码
Form1.cs
namespaceCarSystem
{
publicpartialclassForm1:
Form
{
Dictionaryvehicles;
DictionaryrentVehicles;
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
//this.txtCapacity.Enabled=false;
//刷新初始数据
this.tbLoad.Text="0";
vehicles=newDictionary();
Carcar=newCar("京R00000","奥迪A6L","黑色",3,240);
Trucktruck=newTruck("京D11111","东风","蓝色",3,240,20);
vehicles.Add(car.LicenseNO,car);
vehicles.Add(truck.LicenseNO,truck);
rentVehicles=newDictionary();
//刷新需要结算车的初始信息
CarrentCar=newCar("沪R00000","宝马318","白色",3,250);
rentCar.RentUser=this.tbUser.Text;
TruckrentTruck=newTruck("粤D11111","东风","蓝色",3,240,20);
rentTruck.RentUser=this.tbUser.Text;
//保存到泛型集合
rentVehicles.Add(rentCar.LicenseNO,rentCar);
rentVehicles.Add(rentTruck.LicenseNO,rentTruck);
UpdateRentCar();
UpdateBackCar();
}
privatevoidUpdateRentCar()//刷新函数,刷新可出租车辆
{
this.lvRentCar.Items.Clear();
foreach(Vehiclevinvehicles.Values){
ListViewItemitem=newListViewItem(v.LicenseNO);
item.SubItems.AddRange(newstring[]{v.Name,v.Color,v.YearsOfService.ToString(),v.DailyRent.ToString(),v.Load.ToString()});
lvRentCar.Items.Add(item);
}
}
privatevoidUpdateBackCar()//刷新函数,刷新已出租车辆
{
this.lvBackCar.Items.Clear();
foreach(VehiclevinrentVehicles.Values)
{
ListViewItemitem=newListViewItem(v.LicenseNO);
item.SubItems.AddRange(newstring[]{v.Name,v.Color,v.YearsOfService.ToString(),v.DailyRent.ToString(),v.Load.ToString()});
lvBackCar.Items.Add(item);
}
}
privatevoidbtnRefreshz_Click(objectsender,EventArgse)//刷新按钮
{
this.UpdateRentCar();
}
privatevoidbtnRefreshh_Click(objectsender,EventArgse)//刷新按钮
{
this.UpdateBackCar();
}
privatevoidbtnRent_Click(objectsender,EventArgse)//租车
{
try
{
if(tbUser.Text=="")
{
MessageBox.Show("请输入租用者姓名!
");
}
else
{
stringkey=lvRentCar.SelectedItems[0].Text;
vehicles[key].RentUser=this.tbUser.Text;
rentVehicles.Add(vehicles[key].LicenseNO,vehicles[key]);
if(vehicles.ContainsKey(key))
{
vehicles.Remove(key);
}
UpdateRentCar();
UpdateBackCar();
}
}
catch(ArgumentOutOfRangeException)
{
MessageBox.Show("请选中所要租车的车牌号!
");
}
}
privatevoidbtnExit_Click(objectsender,EventArgse)//退出
{
Application.Exit();
}
privatevoidbtnAccounts_Click(objectsender,EventArgse)//还车
{
try
{
if(tbDays.Text=="")
{
MessageBox.Show("请输入租用天数!
");
}
else
{
stringkey=lvBackCar.SelectedItems[0].Text;
rentVehicles[key].RentDate=Int16.Parse(tbDays.Text);
rentVehicles[key].RentUser="";
vehicles.Add(rentVehicles[key].LicenseNO,rentVehicles[key]);
MessageBox.Show("结算金额为"+rentVehicles[key].CalcPrice()+"¥");
if(rentVehicles.ContainsKey(key))
{
rentVehicles.Remove(key);
}
UpdateBackCar();
UpdateRentCar();
}
}
catch(ArgumentOutOfRangeException){
MessageBox.Show("请选中所要还车的车牌号!
");
}
}
privatevoidbtnIn_Click(objectsender,EventArgse)//新车入库
{
try
{
stringstr="";
if(rbCar.Checked)
{
str="car";
}
elseif(rbTruck.Checked)
{
str="truck";
}
Vehiclevel=VenhicleFactory.CreateVehicle(tbLisenceNo.Text,tbName.Text,cbColor.SelectedItem.ToString(),Int16.Parse(tbUseDays.Text),Double.Parse(tbDayMoney.Text),Int16.Parse(tbLoad.Text),str);
vehicles.Add(vel.LicenseNO,vel);
}
catch(Exception)
{
MessageBox.Show("输入数据有误,请重新输入!
");
}
}
UpdateRentCar();
}
}
Car.cs
namespaceCarSystem
{
classCar:
Vehicle
{
publicCar(stringlicenseNO,stringname,stringcolor,intyearsOfService,doubledailyRent):
base(licenseNO,name,color,yearsOfService,dailyRent,0)
{
}
publicoverridedoubleCalcPrice()
{
doubletotalPrice=0;
doublebasicPrice=this.RentDate*this.DailyRent;
if(this.RentDate<=30)
{
totalPrice=basicPrice;
}
else
{
totalPrice=basicPrice+(this.RentDate-30)*this.DailyRent*0.1;
}
returntotalPrice;
}
}
}
Truck.cs
namespaceCarSystem
{
classTruck:
Vehicle//卡车类继承自vehicle
{
publicTruck(stringlicenseNO,stringname,stringcolor,intyearsOfService,doubledailyRent,intload):
base(licenseNO,name,color,yearsOfService,dailyRent,load)
{
}
publicoverridedoubleCalcPrice(){
doubletotalPrice=0;
doublebasicPrice=this.RentDate*this.DailyRent;
if(this.RentDate<=30)
{
totalPrice=basicPrice;
}
else
{
//30以上超出部分:
每天、每吨(载重量)增加日租金的10%
totalPrice=basicPrice+(this.RentDate-30)*this.Load*this.DailyRent*0.1;
}
returntotalPrice;
}
}
}
Vehicle.cs
namespaceCarSystem
{
abstractclassVehicle
{
privateintrentDate;
publicintRentDate
{
get{returnrentDate;}
set{rentDate=value;}
}
privatestringrentUser;
publicstringRentUser
{
get{returnrentUser;}
set{rentUser=value;}
}
privateintload;
publicintLoad
{
get{returnload;}
set{load=value;}
}
privatestringlicenseNO;
publicstringLicenseNO
{
get{returnlicenseNO;}
set{licenseNO=value;}
}
privatestringname;
publicstringName
{
get{returnname;}
set{name=value;}
}
privatestringcolor;
publicstringColor
{
get{returncolor;}
set{color=value;}
}
privateintyearsOfService;
publicintYearsOfService
{
get{returnyearsOfService;}
set{yearsOfService=value;}
}
privatedoubledailyRent;
publicdoubleDailyRent
{
get{returndailyRent;}
set{dailyRent=value;}
}
publicVehicle(stringlicenseNO,stringname,stringcolor,intyearsOfService,doubledailyRent,intload)
{
this.licenseNO=licenseNO;
this.name=name;
this.color=color;
this.yearsOfService=yearsOfService;
this.dailyRent=dailyRent;
this.load=load;
}
publicabstractdoubleCalcPrice();
}
}
VenhicleFactory.cs
namespaceCarSystem
{
classVenhicleFactory
{
publicstaticVehicleCreateVehicle(stringlicenseNO,stringname,stringcolor,intyearsOfService,doubledailyRent,intload,stringtype)
{
Vehiclevehicle=null;
switch(type)
{
case"car":
vehicle=newCar(licenseNO,name,color,
yearsOfService,dailyRent);break;
case"truck":
vehicle=newTruck(licenseNO,name,color,
yearsOfService,dailyRent,load);break;
default:
break;
}
returnvehicle;
}
}
}
设计体会
设计体会:
通过此次课程设计,我更加深刻的理解了C#程序设计语言的魅力。
它的强大功能不仅体现在其类库中,还有各个控件的应用更是方便且节省了程序员在做题目时所花的时间。
现在感觉C#很像一个模板,我们想做什么只要把大的框架写好了,其他的直接在类库或控件中添加就行,这样就能实现我们所想实现的功能。
虽然我成功的做出了老师要求的题目,其中也遇到不少困难,但最后通过查阅资料,请教同学,回想平时学习积累的经验,最终完成了一个完整的租车系统,感觉很欣慰。
虽然我没有参加我们的C#兴趣学习小组,但我也一直没有放弃C#的学习,我相信,只要我们能掌握好一门编程语言,其他的语言也不会难到哪里去,因为各种编程语言中有很多东西是相通的,并且我们计算机的学生只要有机会就应该要多了解一些其他语言,这对我们出去工作一定会有很大帮助的。
而且通过这学期的C#学习及做本次C#的课程设计,让我的JAVA也提高了不少。
最后,感谢余老师这学期来带我们C#课程以及对我们计算机专业的就业方向的指导和教育!