目的:
设计一个简单的汽车租赁系统,包含以下功能:
- 添加车辆:用户可以添加新的车辆到系统中,包括车辆的品牌、型号、车牌号、日租金等信息。
 - 查找车辆:用户可以通过车牌号或者品牌来查找车辆,并显示该车辆的租赁信息。
 - 租车:用户可以根据车辆的品牌和租赁天数来租车,系统会计算租车的费用。
 - 归还车辆:用户可以归还已租赁的车辆,系统会更新车辆的租赁状态并计算租金。
 
分析:
- 使用面向对象的方式实现,包括至少两个类(例如 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#程序。
 
重难点分析
重点
- 
面向对象编程概念
- 理解类和对象的概念,以及如何定义类的属性和方法。
 - 掌握构造函数的使用,初始化对象时设置初始值。
 
 - 
列表数据结构
- 使用列表存储多个对象。
 - 熟练掌握列表的添加、查找和遍历操作。
 
 - 
方法的实现
- 编写方法实现特定功能,例如添加车辆、查找车辆、租车和归还车辆。
 - 在方法中处理数据并进行必要的计算,例如租车费用的计算。
 
 
难点
- 
查找和筛选
- 如何高效地在列表中查找符合特定条件的对象。
 - 使用 
LINQ提高查找和筛选操作的效率和代码可读性。 
 - 
状态管理
- 正确管理车辆的租赁状态,避免出现状态不一致的情况。
 - 归还车辆时,确保车辆状态更新正确。
 
 - 
用户输入处理
- 处理用户输入的有效性,例如租赁天数应为正整数,日租金应为正数。
 - 提供适当的错误提示和输入提示,提高用户体验。
 
 
实验报告
实验名称
汽车租赁系统设计与实现
实验目的
通过设计和实现一个简单的汽车租赁系统,掌握C#面向对象编程的基本知识,熟悉类和对象的使用、列表数据结构的操作,以及简单的命令行界面设计。
实验内容
- 设计并实现 
Car类,用于表示车辆的基本信息。 - 设计并实现 
CarRentalSystem类,用于管理车辆的添加、查找、租赁和归还功能。 - 实现一个简单的命令行界面,让用户可以与系统进行交互。
 
实验环境
- 操作系统:Windows 11
 - 编程语言:C#
 - 开发工具:Visual Studio 2022
 
实验步骤
- 
设计
Car类- 创建一个新类 
Car,包含品牌、型号、车牌号、日租金和租赁状态等属性。 - 实现 
Car类的构造函数,用于初始化车辆信息。 - 重写 
ToString方法,用于输出车辆信息。 
 - 创建一个新类 
 - 
设计
CarRentalSystem类- 创建一个新类 
CarRentalSystem,使用列表存储车辆信息。 - 实现添加车辆、查找车辆、租车和归还车辆的方法。
 - 在添加车辆方法中,将新车辆添加到列表中。
 - 在查找车辆方法中,根据车牌号或品牌查找并输出车辆信息。
 - 在租车方法中,根据品牌查找可用车辆并计算租赁费用。
 - 在归还车辆方法中,根据车牌号查找已租赁的车辆并更新其租赁状态。
 
 - 创建一个新类 
 - 
实现命令行界面
- 编写主程序,通过命令行界面与用户进行交互。
 - 提供菜单选项,让用户可以选择不同的操作。
 - 根据用户的选择调用相应的方法,完成相应的功能。