【C#】汽车租赁系统设计与实现

2024-06-18 12:37

本文主要是介绍【C#】汽车租赁系统设计与实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目的:

设计一个简单的汽车租赁系统,包含以下功能:

  1. 添加车辆:用户可以添加新的车辆到系统中,包括车辆的品牌、型号、车牌号、日租金等信息。
  2. 查找车辆:用户可以通过车牌号或者品牌来查找车辆,并显示该车辆的租赁信息。
  3. 租车:用户可以根据车辆的品牌和租赁天数来租车,系统会计算租车的费用。
  4. 归还车辆:用户可以归还已租赁的车辆,系统会更新车辆的租赁状态并计算租金。

分析:

  • 使用面向对象的方式实现,包括至少两个类(例如 Car 和 CarRentalSystem)。
  • 使用合适的数据结构(例如列表)来存储车辆信息和租赁记录。
  • 提供命令行界面,不需要图形用户界面。

实现:

car类:

using System;public class Car
{public string Brand { get; set; }public string Model { get; set; }public string LicensePlate { get; set; }public decimal DailyRent { get; set; }public bool IsRented { get; set; }public Car(string brand, string model, string licensePlate, decimal dailyRent){Brand = brand;Model = model;LicensePlate = licensePlate;DailyRent = dailyRent;IsRented = false;}public override string ToString(){return $"Brand: {Brand}, Model: {Model}, License Plate: {LicensePlate}, Daily Rent: {DailyRent:C}, Status: {(IsRented ? "Rented" : "Available")}";}
}

CarRentalSystem 类:

using System;
using System.Collections.Generic;
using System.Linq;public class CarRentalSystem
{private List<Car> cars;public CarRentalSystem(){cars = new List<Car>();}public void AddCar(string brand, string model, string licensePlate, decimal dailyRent){cars.Add(new Car(brand, model, licensePlate, dailyRent));Console.WriteLine("Car added successfully.");}public void FindCar(string searchCriteria){var foundCars = cars.Where(car => car.LicensePlate.Contains(searchCriteria) || car.Brand.Contains(searchCriteria)).ToList();if (foundCars.Count > 0){foreach (var car in foundCars){Console.WriteLine(car);}}else{Console.WriteLine("No cars found.");}}public void RentCar(string brand, int days){var availableCar = cars.FirstOrDefault(car => car.Brand == brand && !car.IsRented);if (availableCar != null){availableCar.IsRented = true;decimal totalCost = availableCar.DailyRent * days;Console.WriteLine($"Car rented successfully. Total cost: {totalCost:C}");}else{Console.WriteLine("No available cars found for the specified brand.");}}public void ReturnCar(string licensePlate){var rentedCar = cars.FirstOrDefault(car => car.LicensePlate == licensePlate && car.IsRented);if (rentedCar != null){rentedCar.IsRented = false;Console.WriteLine("Car returned successfully.");}else{Console.WriteLine("Car not found or already returned.");}}
}

主程序:

using System;public class Program
{public static void Main(){CarRentalSystem carRentalSystem = new CarRentalSystem();while (true){Console.WriteLine("\nCar Rental System");Console.WriteLine("1. Add Car");Console.WriteLine("2. Find Car");Console.WriteLine("3. Rent Car");Console.WriteLine("4. Return Car");Console.WriteLine("5. Exit");Console.Write("Enter your choice: ");string choice = Console.ReadLine();switch (choice){case "1":Console.Write("Enter brand: ");string brand = Console.ReadLine();Console.Write("Enter model: ");string model = Console.ReadLine();Console.Write("Enter license plate: ");string licensePlate = Console.ReadLine();Console.Write("Enter daily rent: ");decimal dailyRent = decimal.Parse(Console.ReadLine());carRentalSystem.AddCar(brand, model, licensePlate, dailyRent);break;case "2":Console.Write("Enter license plate or brand to search: ");string searchCriteria = Console.ReadLine();carRentalSystem.FindCar(searchCriteria);break;case "3":Console.Write("Enter brand to rent: ");string rentBrand = Console.ReadLine();Console.Write("Enter number of days: ");int days = int.Parse(Console.ReadLine());carRentalSystem.RentCar(rentBrand, days);break;case "4":Console.Write("Enter license plate to return: ");string returnLicensePlate = Console.ReadLine();carRentalSystem.ReturnCar(returnLicensePlate);break;case "5":return;default:Console.WriteLine("Invalid choice. Please try again.");break;}}}
}

完整代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace windows期末text1
{public class Car{public string Brand { get; set; }public string Model { get; set; }public string LicensePlate { get; set; }public decimal DailyRent { get; set; }public bool IsRented { get; set; }public Car(string brand, string model, string licensePlate, decimal dailyRent){Brand = brand;Model = model;LicensePlate = licensePlate;DailyRent = dailyRent;IsRented = false;}public override string ToString(){return $"Brand: {Brand}, Model: {Model}, License Plate: {LicensePlate}, Daily Rent: {DailyRent:C}, Status: {(IsRented ? "Rented" : "Available")}";}}public class CarRentalSystem{private List<Car> cars;public CarRentalSystem(){cars = new List<Car>();}public void AddCar(string brand, string model, string licensePlate, decimal dailyRent){cars.Add(new Car(brand, model, licensePlate, dailyRent));Console.WriteLine("Car added successfully.");}public void FindCar(string searchCriteria){var foundCars = cars.Where(car => car.LicensePlate.Contains(searchCriteria) || car.Brand.Contains(searchCriteria)).ToList();if (foundCars.Count > 0){foreach (var car in foundCars){Console.WriteLine(car);}}else{Console.WriteLine("No cars found.");}}public void RentCar(string brand, int days){var availableCar = cars.FirstOrDefault(car => car.Brand == brand && !car.IsRented);if (availableCar != null){availableCar.IsRented = true;decimal totalCost = availableCar.DailyRent * days;Console.WriteLine($"Car rented successfully. Total cost: {totalCost:C}");}else{Console.WriteLine("No available cars found for the specified brand.");}}public void ReturnCar(string licensePlate){var rentedCar = cars.FirstOrDefault(car => car.LicensePlate == licensePlate && car.IsRented);if (rentedCar != null){rentedCar.IsRented = false;Console.WriteLine("Car returned successfully.");}else{Console.WriteLine("Car not found or already returned.");}}}internal class Program{static void Main(string[] args){CarRentalSystem carRentalSystem = new CarRentalSystem();while (true){Console.WriteLine("\nCar Rental System");Console.WriteLine("1. Add Car");Console.WriteLine("2. Find Car");Console.WriteLine("3. Rent Car");Console.WriteLine("4. Return Car");Console.WriteLine("5. Exit");Console.Write("Enter your choice: ");string choice = Console.ReadLine();switch (choice){case "1":Console.Write("Enter brand: ");string brand = Console.ReadLine();Console.Write("Enter model: ");string model = Console.ReadLine();Console.Write("Enter license plate: ");string licensePlate = Console.ReadLine();Console.Write("Enter daily rent: ");decimal dailyRent = decimal.Parse(Console.ReadLine());carRentalSystem.AddCar(brand, model, licensePlate, dailyRent);break;case "2":Console.Write("Enter license plate or brand to search: ");string searchCriteria = Console.ReadLine();carRentalSystem.FindCar(searchCriteria);break;case "3":Console.Write("Enter brand to rent: ");string rentBrand = Console.ReadLine();Console.Write("Enter number of days: ");int days = int.Parse(Console.ReadLine());carRentalSystem.RentCar(rentBrand, days);break;case "4":Console.Write("Enter license plate to return: ");string returnLicensePlate = Console.ReadLine();carRentalSystem.ReturnCar(returnLicensePlate);break;case "5":return;default:Console.WriteLine("Invalid choice. Please try again.");break;}}}}
}

实现结果:

以上就是完整的代码及实现。

实验小结

通过此次实验,掌握了以下知识和技能:

  • 面向对象编程的基本概念,包括类和对象的使用。
  • 使用列表存储和管理数据。
  • 实现类的方法以完成特定功能。
  • 设计和实现简单的命令行用户界面。
  • 编写和调试C#程序。

重难点分析

重点
  1. 面向对象编程概念

    • 理解类和对象的概念,以及如何定义类的属性和方法。
    • 掌握构造函数的使用,初始化对象时设置初始值。
  2. 列表数据结构

    • 使用列表存储多个对象。
    • 熟练掌握列表的添加、查找和遍历操作。
  3. 方法的实现

    • 编写方法实现特定功能,例如添加车辆、查找车辆、租车和归还车辆。
    • 在方法中处理数据并进行必要的计算,例如租车费用的计算。
难点
  1. 查找和筛选

    • 如何高效地在列表中查找符合特定条件的对象。
    • 使用 LINQ 提高查找和筛选操作的效率和代码可读性。
  2. 状态管理

    • 正确管理车辆的租赁状态,避免出现状态不一致的情况。
    • 归还车辆时,确保车辆状态更新正确。
  3. 用户输入处理

    • 处理用户输入的有效性,例如租赁天数应为正整数,日租金应为正数。
    • 提供适当的错误提示和输入提示,提高用户体验。

实验报告

实验名称

汽车租赁系统设计与实现

实验目的

通过设计和实现一个简单的汽车租赁系统,掌握C#面向对象编程的基本知识,熟悉类和对象的使用、列表数据结构的操作,以及简单的命令行界面设计。

实验内容
  1. 设计并实现 Car 类,用于表示车辆的基本信息。
  2. 设计并实现 CarRentalSystem 类,用于管理车辆的添加、查找、租赁和归还功能。
  3. 实现一个简单的命令行界面,让用户可以与系统进行交互。
实验环境
  • 操作系统:Windows 11
  • 编程语言:C#
  • 开发工具:Visual Studio 2022
实验步骤
  1. 设计 Car

    • 创建一个新类 Car,包含品牌、型号、车牌号、日租金和租赁状态等属性。
    • 实现 Car 类的构造函数,用于初始化车辆信息。
    • 重写 ToString 方法,用于输出车辆信息。
  2. 设计 CarRentalSystem

    • 创建一个新类 CarRentalSystem,使用列表存储车辆信息。
    • 实现添加车辆、查找车辆、租车和归还车辆的方法。
    • 在添加车辆方法中,将新车辆添加到列表中。
    • 在查找车辆方法中,根据车牌号或品牌查找并输出车辆信息。
    • 在租车方法中,根据品牌查找可用车辆并计算租赁费用。
    • 在归还车辆方法中,根据车牌号查找已租赁的车辆并更新其租赁状态。
  3. 实现命令行界面

    • 编写主程序,通过命令行界面与用户进行交互。
    • 提供菜单选项,让用户可以选择不同的操作。
    • 根据用户的选择调用相应的方法,完成相应的功能。

这篇关于【C#】汽车租赁系统设计与实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072014

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja