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

news2024/11/27 7:26:07

目的:

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SFNC —— 采集控制(四)

系列文章目录 SFNC —— 标准特征命名约定&#xff08;一&#xff09; SFNC —— 设备控制&#xff08;二&#xff09; SFNC —— 图像格式控制&#xff08;三&#xff09; SFNC —— 采集控制&#xff08;四&#xff09; 文章目录 系列文章目录5、采集控制&#xff08;Acquisi…

第6章 设备驱动程序(2)

目录 6.3 和文件系统关联 6.3.1 inode的设备文件成员 6.3.2 标准文件操作 6.3.3 字符设备的标准操作 6.3.4 块设备的标准操作 6.4 字符设备操作 6.4.1 表示字符设备 6.4.2 打开设备文件 6.4.3 读写操作 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后…

Vue项目中实现骨架占位效果-demo

创建组件 Skeleton.vue <template><div class"skeleton"><div class"skeleton-item" v-for"n in count" :key"n"></div></div> </template><script> export default {props: {count: {ty…

物联网技术-第3章物联网感知技术-3.2定位技术

目录 1.1位置信息和位置服务 1.1.1位置信息 1.1.2位置服务 1.2主流定位系统 1.2.1卫星定位系统&#xff08;Satellite Positioning Systems&#xff09; 1.2.2移动通信蜂窝基站定位&#xff08;Cellular Triangulation or Advanced Forward Link Trilateration&#xff09…

Unity2D游戏制作入门 | 14( 之人物实装攻击判定 )

上期链接&#xff1a;Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )-CSDN博客 上期我们聊到给人物添加三段攻击的动画&#xff0c;通过建立新的图层动画当我们按下攻击按键就会自动切换进攻击的动画&#xff0c;如果我们连续按下攻击键&#xff0c;我们还可以进行好几段的攻击…

Linux系统:信号概念 信号产生

Linux系统&#xff1a;信号概念 & 信号产生 信号概念信号产生软件信号killraiseabortalarm 硬件信号键盘产生信号硬件中断 信号概念 信号是进程之间事件异步通知的一种方式 在Linux命令行中&#xff0c;我们可以通过ctrl c来终止一个前台运行的进程&#xff0c;其实这就是…

利用K8S技术栈打造个人私有云

1.三个节点&#xff1a;master&#xff0c;slave&#xff0c;client 在Kubernetes集群中&#xff0c;三个节点的职责分别如下&#xff1a; Master节点&#xff1a; docker&#xff1a;用于运行Docker容器。 etcd&#xff1a;一个分布式键值存储系统&#xff0c;用于保存Kuberne…

微信投票源码系统+礼物+道具投票 无限多开 带完整的安装代码包以及搭建教程

系统概述 微信投票源码系统是一款基于先进技术开发的综合性投票平台&#xff0c;它不仅融合了传统投票的核心功能&#xff0c;还创新性地引入了礼物和道具投票机制&#xff0c;为用户带来了全新的投票体验。 该系统支持无限多开&#xff0c;这意味着用户可以根据实际需求&…

AI写真:ControlNet 之 InstantID

但是 IPAdapter-FaceId 目前只在 SD 1.5 模型上表现较好&#xff0c;SDXL 模型上的表现较差&#xff0c;不能用于实际生产。可是很多同学已经在使用SDXL了&#xff0c;而且SDXL确实整体上出图效果更好&#xff0c;怎么办&#xff1f; 这篇文章就来给大家介绍一个在SDXL中创作A…

多线程环境下,HashMap 为什么会出现死循环?

引言&#xff1a;HashMap作为一个常用的键值对存储结构&#xff0c;其内部实现在不同的JDK版本中有所演变&#xff0c;但其基本原理始终是通过哈希算法和数组来实现快速查找和存储。我们将探讨HashMap在多线程环境下出现死循环的根本原因&#xff0c;深入分析其中的数据结构特点…

网络安全(完整)

WAPI鉴别及密钥管理的方式有两种&#xff0c;既基于证书和基于预共享密钥PSK。若采用基于证书的方式&#xff0c;整个国产包括证书鉴别、单播密钥协商与组播密钥通告&#xff1b;若采用预共享密钥方式&#xff0c;整个国产则为单播密钥协商与组播密钥通告蠕虫利用信息系统缺陷&…

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…

国产24位I2S输入+192kHz立体声DAC音频数模转换器CJC4344

CJC4344是一款立体声数模转换芯片&#xff0c;内含插值滤波器、multi bit数模转换器、输出模拟滤波器。CJC4344系列支持大部分的音频数据格式。CJC4344基于一个带线性模拟低通滤波器的四阶multi-bitΔ-Σ调制器&#xff0c;而且本芯片可以通过检测信号频率和主时钟频率&#xf…

新能源汽车的能源动脉:中国星坤汽车电缆在新能源汽车电气化中的应用!

随着新能源汽车行业的蓬勃发展&#xff0c;汽车电缆组件作为汽车电气系统的核心组成部分&#xff0c;其重要性日益凸显。中国星坤汽车电缆组件以其卓越的性能和创新技术&#xff0c;为汽车的电能传输、信号传递和控制提供了坚实的保障。本文将深入解析星坤汽车电缆组件的特性、…

PCB雕刻切割用德国自动换刀主轴SycoTec 4033 AC-ESD

随着电子行业的蓬勃发展&#xff0c;印刷电路板&#xff08;PCB&#xff09;的应用范围正在迅速扩大&#xff0c;涵盖了通信、计算机、消费电子等诸多领域。伴随着PCB的广泛应用&#xff0c;对PCB板切割加工技术的要求也日益严格。高速电主轴作为分板机的关键零部件之一&#x…

Pyqt QCustomPlot 简介、安装与实用代码示例(三)

目录 前言实用代码示例Line Style DemoDate Axis DemoParametric Curves DemoBar Chart DemoStatistical Box Demo 所有文章除特别声明外&#xff0c;均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 nixgnauhcuy’s blog&#xff01; 如需转载&#xff0c;请标明出处&#x…

最新QT安装程序安装QT旧版本

1、下载Qt在线安装程序 官方下载地址&#xff1a;https://download.qt.io/official_releases/online_installers/ 也可以选择国内镜像地址下载&#xff0c;如清华大学的镜像地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/…

C#ListView的单元格支持添加基本及自定义任意控件

功能说明 使用ListView时&#xff0c;希望可以在单元格显示图片或其他控件&#xff0c;发现原生的ListView不支持&#xff0c;于是通过拓展&#xff0c;实现ListView可以显示任意控件的功能&#xff0c;效果如下&#xff1a; 实现方法 本来想着在单元格里面实现控件的自绘的…

python-日历库calendar

目录 打印日历 基本日历类Calendar TextCalendar类 HTMLCalendar类 打印日历 设置日历每周开始日期(周几) import calendarcalendar.setfirstweekday(calendar.SUNDAY) # 设置日历中每周以周几为第一天显示 打印某年日历 print(calendar.calendar(2024, w2, l1, c6, m…

事实证明:企业级中后台框架,大厂还是主角,小厂打酱油。

提及中后台框架&#xff0c;你或许能够想到antdesign、arcodesign还有fusion等等&#xff0c;这些都是背靠大厂&#xff0c;是市场的主角&#xff0c;而一些小厂框架往往是扮演者陪太子读书的角色。本文将给大家分享市面上有哪些大厂的中后台框架&#xff1f;为什么大厂要开源自…