一个控制台输出的租车程序(---优化版---)

package cn.String.Day.Cars;

import java.util.Scanner;

/**
 * Created by Void on 2017/6/29.
 */
public class CarsDemo {
    public static void main(String[] args) {
        Cars[] cars = new Cars[]{
                new BusCar("奥迪A3", 500, 4),
                new BusCar("金龙", 1500, 20),
                new TruckCar("解放130", 1000, 20),
                new TruckCar("金杯", 500, 8),
                new PickCar("福田130", 800, 4, 5),
                new PickCar("猛禽150", 1500, 4, 10)
        };
        System.out.println("*------------欢迎来到我要租车-----------*");
        System.out.println("*------------请问是否需要租车?-----------*");
        System.out.println("*------------是选择1,否选择2?-----------*");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        if (a == 1) {
            System.out.println("*------------请选择车型-----------*");
            System.out.println("序号\t车型\t\t租金(元/天)\t容量");
            for (int i = 0; i < cars.length; i++) {
                System.out.println((i + 1) + "\t" + cars[i]);
            }
            System.out.println("*------------想租多少辆车?-----------*");

            int b = scanner.nextInt();
            Cars[] zairen = new Cars[cars.length];
            Cars[] zaihuo = new Cars[cars.length];
            int ren = 0;
            int dun = 0;
            float zongjia = 0;
            float zongzhong = 0.0f ;
            int zongren = 0;
            for (int i = 1; i<= b ; i++){
                if (b==1){
                    System.out.println("*------------请输入第这辆车序号-----------*");}
                else
                    System.out.println("*------------请输入第"+i+"辆车序号-----------*");
                int c = scanner.nextInt();
                System.out.println("您想租的车型是 :"+cars[c-1].carName);
                System.out.println("----确认选1,重新选2----");
                /*
                * 错误的地方:
                * int b = getScanner(scanner,i)
                * if(b!=temp){continue;}-------->  这里是变量b记录中递归返回的值i,没有修改循环中i的变量值,所以循环还是继续*/
                int temp = i;
                i =getScanner(scanner,i);
                if (i<temp){continue;}
                System.out.println("----需要租几天?----");
                int d = scanner.nextInt();
                zongjia = cars[c-1].carMoney*d+zongjia;
                zongzhong = cars[c-1].carGo+zongzhong;
                zongren = cars[c-1].carManned + zongren;
                if (cars[c-1].carManned == 0){
                    zaihuo[dun] = cars[c-1];
                    dun++;
                }
                if (cars[c-1].carManned != 0){
                    zairen[ren] = cars[c-1];
                    ren++;
                }
                if (cars[c-1].carManned !=0 && cars[c-1].carGo!=0){
                    zaihuo[dun] = cars[c-1];
                    dun++;
                }
            }
            System.out.println("您的账单如下:");
            System.out.println("可载人的车有:");
            for (int i = 0; i <=ren-1 ; i++) {
                if (i ==ren-1){
                    System.out.println(zairen[i].carName +"    共载人:" + zongren +"位");
                }else {
                System.out.print(zairen[i].carName +"  ");}
            }
            System.out.println("可载货的车有:");
            for (int t = 0; t <=dun-1 ; t++) {
                if (t ==dun-1){
                    System.out.println(zaihuo[t].carName +"    共载货:" + zongzhong +"吨");
                }else {
                System.out.print(zaihuo[t].carName +"  ");}
            }
            System.out.println("租车总价格为:" + zongjia +"元");
            System.out.println("确认支付请按1,取消支付请按2");
            int e = scanner.nextInt();
            if (e==1){
                System.out.println("支付成功,欢迎再次光临!");
            }
        }

    }
    private static int getScanner(Scanner scanner, int i) {
        int count = scanner.nextInt();
        switch (count){
            case 1:
                return i;
            case 2:
                i--;
                return i;
            default:
                System.out.println("输入错误请重新输入");
                return getScanner(scanner,i);

        }

    }
}

改进了上个版本的一些bug,增加了一点场景判断

时间: 2024-10-13 11:36:52

一个控制台输出的租车程序(---优化版---)的相关文章

初学者:简单的租车程序(敲了一晚)(想大神看看,为啥我一个简单的程序要敲这么多,可以怎么改进?)

/** * 创建一个接口实现租凭方法 * */package com.lxl.car; public interface Rent { void rent(int day,int num);} /** * 定义一个抽象的汽车类 属性:颜色,型号 ,租车的价格 * */package com.lxl.car; public abstract class Car implements Rent{ //构造方法 public Car(){} private String size;// 型号 priv

Java Date类和Calendar类的一个控制台打印日期的小程序

Java Date类和Calendar类的一个打印日期的小程序,可以直接用. package com.boy.Idate.calendar; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 控制台可视化日历 * @author 田硕 */ public class VisualCalendar {

python购物车程序的简单程序优化版

# Author:barry allen # -*- coding:utf-8 -*- shop_list=[("IPHONE",8000),("MI",5000),("NOKIA",1200),("HUAWEI",2400),("CHINA",4100)] salary=input("请输入您的存款:") if salary.isdigit(): salary=int(salary)

一个简单的c项目(未优化版)

#include <stdio.h> #include <string.h> #include <time.h> #include <stdlib.h> #define SIZE 20#define PASSWD_SIZE 20#define NAME "player1"#define PASSWD "123456"#define TURE 1//结构体设计typedef struct player{ char nam

控制台输出是什么回事

1.控制台输出,是指程序运行过程中,将一些信息,output出来,用输出流,可以输出到指定文件或者控制台. 2.日志信息,就是程序中的标准input/output stream,只是将i/o的目的地输出到console这个程序而已. 3.console是个单独的系统程序,console是单独的程序,否则怎么动态输出log信息?是的,console底层就是c语言的printf . 4.大部分ide开发环境也都提供了自己console程序,比如eclipse和tomcat.要打印程序的log信息,只

神州租车:专车战争搅局者

专车服务本质是看线下服务,App只是购物环境平台,重要的是在里面买到性价比高的产品. 文/张书乐 刊载于<销售与市场>杂志评论版2015年04期 国内租车市场的大佬神州租车联手第三方独立公司优车科技,于2015年1月28日在国内60个主要城市正式推出"神州专车"服务,正式杀入专车市场.此刻恰逢滴滴.快的.易到用车等专车服务相继被各地交通运输管理部门亮"红灯"之际. 神州租车登台的方式也很简单直接--烧钱.其计划在专车业务方面投入25亿元,补贴5000万新

C++11,控制台输出的一段小程序。

#include <iostream> // std::cout, std::boolalpha, std::noboolalpha int main () { bool b = true; std::cout << std::boolalpha << b << '\n'; //把bool表示为alpha std::endl(std::cout); //把它当成一个函数来使用. std::cout << std::noboolalpha <

继承、封装和多态的一个简单应用(答答租车系统)

Car.java package com.imooc; //使用面向对象的封装特性public class Car {    // 描述汽车可能有特征    private String name; // 车的名称    private double cargoCapacity;// 车的载货量    private int busLoad;// 车的载客量    private int dailyRent;// 车的日租金 public String getName() {        re

VS中为非控制台程序提供控制台输出窗口

/************************************************************************/ /* 模块名:ConsoleAdapter 文件名:ConsoleAdapter.h 功 能:为非控制台程序提供控制台输出窗口 参 考: 1. http://www.codeproject.com/Articles/15836/Writing-to-and-read-from-the-console-From-a-GUI-ap ----------