Java小项目之“答答租车系统”。

简介: 编写一个控制台版的“答答”租车系统

一、项目背景


编写一个控制台版的“答答”租车系统


功能:

展示所有可租车辆

选择车型,租车量

展示租车清单,包含:总金额,总载货量以及车型,总载客量以及车型


二、项目代码


父类:Car类

//父类:车类
public class Car {
    //序号
    private String id;
    //汽车名称
    private String name;
    //租金
    private int rent;
    public Car(String id, String name, int rent) {
        this.id = id;
        this.name = name;
        this.rent = rent;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getRent() {
        return rent;
    }
    public void setRent(int rent) {
        this.rent = rent;
    }
}


子类:客车类(只能载客)

//客车类
public class PassengerCar extends Car{
    //载客量
    private int busload;
    public PassengerCar(String id, String name, int rent, int busload) {
        super(id, name, rent);
        this.busload=busload;
    }
    public int getBusload() {
        return busload;
    }
    public void setBusload(int busload) {
        this.busload = busload;
    }
    @Override
    public String toString() {
        return getId()+"\t"+getName()+"\t"+getRent()+"元/天\t载人:"+getBusload();
    }
}


子类:货车类(只能载货)

//载货车
public class Truck extends Car{
    //载货量
    private int loadage;
    public Truck(String id, String name, int rent,int loadage) {
        super(id, name, rent);
        this.loadage=loadage;
    }
    public int getLoadage() {
        return loadage;
    }
    public void setLoadage(int loadage) {
        this.loadage = loadage;
    }
    @Override
    public String toString() {
        return getId()+"\t"+getName()+"\t"+getRent()+"元/天\t载货:"+getLoadage();
    }
}

子类:皮卡类(既可载货,也可载客)

//载客载货车
public class PickUp extends Car{
    //载客量
    private int busload;
    //载货量
    private int loadage;
    public PickUp(String id, String name, int rent,int busload,int loadage) {
        super(id, name, rent);
        this.busload=busload;
        this.loadage=loadage;
    }
    public int getBusload() {
        return busload;
    }
    public void setBusload(int busload) {
        this.busload = busload;
    }
    public int getLoadage() {
        return loadage;
    }
    public void setLoadage(int loadage) {
        this.loadage = loadage;
    }
    @Override
    public String toString() {
        return getId()+"\t"+getName()+"\t"+getRent()+"元/天\t载人:"+getBusload()+"\t载货:"+getLoadage();
    }
}

测试类:

import java.util.Scanner;
public class DaDaCarRentalSystem {
    static Scanner sc = new Scanner(System.in);
    //租金
    static int money = 0;
    //总载客量
    static int passTotal = 0;
    //总载货量
    static int goodTotal = 0;
    //客车名
    static String passName = "";
    //货车名
    static String goodName = "";
    public static void main(String[] args) {
        Car[] cars = {
                new PassengerCar("1", "奥迪A4", 500, 4),
                new PassengerCar("2", "马自达6", 400, 4),
                new PickUp("3", "皮卡雪6", 450, 4, 2),
                new PassengerCar("4", "金龙 ", 800, 20),
                new Truck("5", "松花江", 400, 4),
                new Truck("6", "依维柯", 1000, 20)
        };
        System.out.println("*****欢迎使用答答租车系统*****");
        System.out.println("您是否要租车:1是 0否");
        int num = sc.nextInt();
        if (num == 1) {
            System.out.println("您可租车的类型及其价目表:");
            System.out.println("序号\t汽车名称\t租金\t容量");
            for (int i = 0; i < cars.length; i++) {
                System.out.println(cars[i].toString());
            }
            System.out.println("请输入您要租车的数量:");
            int rentNum = sc.nextInt();
            int[] carsRent = new int[rentNum];
            for (int i = 0; i < rentNum; i++) {
                System.out.println("请输入第" + (i + 1) + "辆车的的序号:");
                int sNum = sc.nextInt();
                carsRent[i] = sNum;
            }
            System.out.println("请输入您要租车的天数:");
            int day = sc.nextInt();
            for (int i = 0; i < rentNum; i++) {
                money += cars[carsRent[i] - 1].getRent();
                if (cars[carsRent[i] - 1] instanceof PassengerCar) {
                    passTotal += ((PassengerCar) cars[carsRent[i] - 1]).getBusload();
                    passName += cars[carsRent[i] - 1].getName() + "\t";
                }
                if (cars[carsRent[i] - 1] instanceof Truck) {
                    goodTotal += ((Truck) cars[carsRent[i] - 1]).getLoadage();
                    goodName += cars[carsRent[i] - 1].getName() + "\t";
                }
                if (cars[carsRent[i] - 1] instanceof PickUp) {
                    passTotal += ((PickUp) cars[carsRent[i] - 1]).getBusload();
                    goodTotal += ((PickUp) cars[carsRent[i] - 1]).getLoadage();
                    passName += cars[carsRent[i] - 1].getName() + "\t";
                    goodName += cars[carsRent[i] - 1].getName() + "\t";
                }
            }
            System.out.println("******消费清单******");
            System.out.println("可载客车型:");
            System.out.println(passName + "\t" + "客车载客量:" + passTotal);
            System.out.println("可在载货车型:");
            System.out.println(goodName + "\t" + "货车载货量:" + goodTotal);
            System.out.println("您本次消费总价钱:" + money * day);
        } else if (num == 0) {
            System.out.println("感谢您进入本系统,欢迎下次使用!!再见!!!");
            return;
        }
    }
}

运行结果展示:

*****欢迎使用答答租车系统*****
您是否要租车:1是 0否
1
您可租车的类型及其价目表:
序号  汽车名称  租金  容量
1 奥迪A4  500元/天  载人:4
2 马自达6  400元/天  载人:4
3 皮卡雪6  450元/天  载人:4  载货:2吨
4 金龙  800元/天  载人:20
5 松花江 400元/天  载货:4吨
6 依维柯 1000元/天 载货:20吨
请输入您要租车的数量:
3
请输入第1辆车的的序号:
1
请输入第2辆车的的序号:
2
请输入第3辆车的的序号:
3
请输入您要租车的天数:
2
******消费清单******
可载客车型:
奥迪A4  马自达6  皮卡雪6    客车载客量:12
可在载货车型:
皮卡雪6    货车载货量:2
您本次消费总价钱:2700
Process finished with exit code 0


三、总结


本次项目主要涉及以下知识:


1.面向对象思想,包括:封装、继承、多态

2.数组的相关知识,包括:定义数组,数组遍历

3.运用Scanner类进行对控制台的输入。


在写这次代码的过程中,整体书写还算思路清晰,就是在计算清单数据的时候卡了很久,一个思路没写完就会冒出其他思路,导致写代码效率有点低,总的来说:这个程序还有很多缺点,集成度有些高,规范上还有很多不足,有待提高,继续加油。


相关文章
|
3天前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
16 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
13天前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
32 4
|
18天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
30 3
|
22天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
59 3
|
21天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
38 1
|
26天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
25 1
|
28天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
2月前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
48 1
java中获取当前系统日期
java中获取当前系统日期