【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. 实现命令行界面

    • 编写主程序,通过命令行界面与用户进行交互。
    • 提供菜单选项,让用户可以选择不同的操作。
    • 根据用户的选择调用相应的方法,完成相应的功能。
相关推荐
准橙考典3 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
老猿讲编程15 小时前
航展畅想:从F35机载软件研发来看汽车车载软件研发
汽车·车载软件研发
qq229511650215 小时前
微信小程序的汽车维修预约管理系统
微信小程序·小程序·汽车
Renderbus瑞云渲染农场1 天前
云渲染与汽车CGI图像技术优势和劣势
汽车
美格智能1 天前
美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年
5g·汽车
车载诊断技术1 天前
电子电气架构 --- 整车控制系统
网络·架构·汽车·soa·电子电器架构
叫我:松哥1 天前
基于python多准则决策分析的汽车推荐算法设计与实现
python·算法·数据挖掘·数据分析·汽车·推荐算法
ACRELKY1 天前
新能源汽车与公共充电桩布局
汽车
来可小闵儿2 天前
智诊小助手-AP/Station模式切换
汽车·电脑
思茂信息2 天前
CST汽车天线仿真(双向混合求解)
javascript·人工智能·5g·汽车·ar·软件工程