2019-2-21

第一题:面向对象思想的重写吃货联盟

package kauiChang;
/**
 *订单信息类
 */
public class ShuZu {
    String[] names = new String[4];//保存订单人姓名
    String[] dishMegs = new String[6];//保存所选择信息,包括菜单名及份数
    int[] times = new int[4];//保存送餐时间
    String[]addresses = new String[4];//保存送餐地址
    int[]states = new int[4];//保存订单状态:0 表示已预订,1表示已完成
    int[]sumPrices = new int[4];//表示订单的总金额
    String[]dishNames ={"红烧鱼","酸辣鸡杂","麻婆豆腐","香辣小龙虾"};//菜名
    double[]prices = new double[]{36.0,28.0,15.0,42.0};//价格
    int[]praiseNums = new int[5];       //记录点赞s
}
package kauiChang;
/**
 *功能类接口
 */
public interface GongNeng {
    public void dingcan();       //订餐功能
    public void chakan();       //查看餐袋
    public void qianshou();    //签收功能
    public void shanchu();    //删除功能
    public void dianzan();   //点赞功能
    public void tuichu();   //退出功能
    
}
package kauiChang;

import java.util.Scanner;

/*
 * 实现类
 */
public class ShXian extends ShuZu implements GongNeng {

    Scanner input = new Scanner(System.in);
    boolean isExi = false;//标记用户是否退出系统,trus为退出系统
    /**
     * 我要订餐方法
     */
    public void dingcan() {
        boolean isAdd = false;
        System.out.println("***我要订餐***");
        for(int j=0;j<names.length;j++){
            if(names[j]==null){
                isAdd = true;
                System.out.println("请输入订餐人姓名");
                String name = input.next();
                System.out.println("序号"+"\t" +"菜名"+"\t" +"单价"+"\t" +"点赞数");
                for(int i=0;i<dishNames.length;i++){
                    String price = prices[i]+"元";
                    String praiseNum = (praiseNums[i])>0?praiseNums[i]+"赞":"0";
                    System.out.println((i+1)+"\t" +dishNames[i]+"\t" +price+"\t" +praiseNum);                                    
                }
                //用户点餐
                System.out.println("请选择您要点的菜的序号:");
                int chooseDish = input.nextInt();
                while(chooseDish<1||chooseDish>4){
                    System.out.println("您输入的有误请重新输入1~4的整数");
                    chooseDish = input.nextInt();
                }
                System.out.println("请选择您需要的份数:");
                int number = input.nextInt();
                String dishMeg = dishNames[chooseDish-1]+""+number+"份";
                double sumPrice = prices[chooseDish-1]*number;
                double deliCharge = (sumPrice>=50)?0.0:5.0;
                System.out.println("请选择送餐时间(送餐时间为10点到20间正点送餐)");
                int time = input.nextInt();
                while(time<10||time>20){
                    System.out.println("您输入的有误,请重新输入10~20的整数!");
                    time = input.nextInt();
                }
                System.out.println("请输入送餐地址:");
                String address = input.next();
                System.out.println("订单成功!");
                System.out.println("您订的是"+dishMeg);
                System.out.println("餐费:"+sumPrice+"元,送餐费"+deliCharge+"元,总计:"+(sumPrice+deliCharge)+"元。");
                names[j]=name;
                dishMegs[j]=dishMeg;
                times[j]=time;
                addresses[j]=address;
                sumPrices[j]=(int) (sumPrice+deliCharge);
                break;

            }
            if(!isAdd){
                System.out.println("对不起,您的餐袋已满!");
            }
        }
    }

    /**
     * 查看餐单方法
     */
    public void chakan() {
        System.out.println("***查看餐单***");
        System.out.println("序号\t订单人\t\t餐品信息\t\t送餐时间\t\t送餐地址\t\t总金额\t\t订单状态");
        for(int i=0;i<names.length;i++){
            if(names[i]!=null){
                String state = states[i]==0?"已预定":"已完成";
                String date = times[i]+"点";
                String sumPrice = sumPrices[i]+"元";
                System.out.println((i+1)+"\t"+names[i]+"\t"+dishMegs[i]+"\t"+date+"\t"+addresses[i]+"\t"+sumPrice+"\t"+state);
            }
        }    
    }
    /**
     * 签收订单方法
     */
    public void qianshou() {
        System.out.println("签收订单");
        boolean isSignFind = false;//找到要签收的订单
        System.out.println("请选择要签收的订单序号:");
        int signOrderId = input.nextInt();
        //状态值为已预定的订单,序号值为用户输入的订单序号-1:可签收
        //状态值为已完成的订单,序号值为用户的输入的订单序号-1:不可签收
        for(int i=0;i<names.length;i++){
            if(names[i]!=null&& states[i]==1 && signOrderId==i+1){
                System.out.println("您选择的订单已完成签收,不能再次签收!");
                isSignFind = true;//标记已找到此订单
                break;
            }else if(names[i]!=null && states[i]==0 && signOrderId==i+1){
                states[i]=1;   //设为已完成
                System.out.println("订单签收成功!");
                isSignFind = true;//标记已找到此订单
                break;
            }
        }
        //为找到的订单序号不可签收
        if(!isSignFind){
            System.out.println("您选择的订单不存在!");
        }
    }

    /**
     * 删除订单方法
     */
    public void shanchu() {
        System.out.println("删除订单");
        boolean isDelFind = false; //  标记是否找到要删除的订单
        System.out.println("请输入要删除的订单序号:");
        int delld  = input.nextInt();
        //状态值为已完成,序号值为用户输入的序号-1:可删除
        //状态值为已预定,序号值为用户输入的序号-1:不可删除
        for(int i=0;i<names.length;i++){
            if(names[i]!=null&&states[i]==1&&delld==i+1){
                isDelFind = true;
                //执行删除操作:删除的位置后的元素依次前移
                for(int j =delld-1;j<names.length-1;j++){
                    names[j]=names[j+1];
                    dishMegs[j]=dishMegs[j+1];
                    addresses[j]=addresses[j+1];
                    states[j]=states[j+1];
                    sumPrices[j]=sumPrices[j+1];
                }
                //最后一位清空
                int endIndex = names.length-1;
                names[endIndex] = null;
                dishMegs[endIndex] = null;
                addresses[endIndex] = null;
                states[endIndex] = 0;
                sumPrices[endIndex] = 0;
                System.out.println("删除订单成功");
                break;
            }
            else if(names[i]!=null && states[i]==0 && delld==i+1){
                System.out.println("您选择的订单未签收,不能删除!");
                isDelFind = true;  // 标记已找到此订单
                break;
            }
        }
        //未找到该序号的订单:不能删除
        if(!isDelFind){
            System.out.println("您要删除的订单不存在!");
        }

    }
    /**
     * 我要点赞方法
     */
    public void dianzan() {

        System.out.println("我要点赞");
        System.out.println("序号"+"\t"+"菜名"+"\t"+"单价");
        for(int i=0;i<dishNames.length;i++){
            String price = prices[i]+"元";
            String praiseNum = (praiseNums[i])>0?praiseNums[i]+"赞":"";
            System.out.println((i+1)+"\t"+dishNames[i]+"\t"+price+"\t"+praiseNum);
        }
        System.out.println("请选择您要点赞的菜品序号:");
        int priaiseNum = input.nextInt();
        while(priaiseNum<1||priaiseNum>4){
            System.out.println("您输入的有误,请重新输入!");
            priaiseNum = input.nextInt();
        }
        praiseNums[priaiseNum]++;//点赞数加1
        System.out.println("点赞成功!");                
    }

    /**
     * 退出系统方法
     */
    public void tuichu() {
        isExi = true;    
    }

}
package kauiChang;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean isExi = false;//标记用户是否退出系统,trus为退出系统
        ShXian  sx = new ShXian();
        int num;
        int choose;
        do {
            System.out.println("**********************");
            System.out.println("1,我要订餐");
            System.out.println("2,查看餐单");
            System.out.println("3,签收订单");
            System.out.println("4,删除订单");
            System.out.println("5,我要点赞");
            System.out.println("6,退出系统");
            System.out.println("**********************");
            System.out.println("请选择");
            try {
                choose = input.nextInt();//记录用户的选择编号
            } catch (Exception e) {
                System.out.println("非法输入默认为6");
                 choose = 6;
            }
            
            boolean isAdd = false;//记录是否可以订餐
            switch (choose) {
            case 1:
                sx.dingcan();
                break;
           case 2:
               sx.chakan();
                break;
           case 3:
               sx.qianshou();
                break;
           case 4:
               sx.shanchu();
                break;
           case 5:
               sx.dianzan();
                break;
           case 6:
               sx.tuichu();
                break;
            }
            if(!isExi){
                System.out.println("输入0反回主菜单");
                num = input.nextInt();
                while(num!=0){
                    System.out.println("输入有误请重新输入");
                    num = input.nextInt();
                }

            }else{
                break;
            }

        }while(num==0);
        System.out.println("谢谢使用");
    }
}

输出结果图:

 

 

 

第二题:

package com.quickhit;

import java.util.Random;
/**
 * 
 * @author 陈明
 * 游戏类
 */
public class Ganme {
    private Player1 player;
    public Ganme(Player1 player) {
        this.player = player;
    }
    //String prainStr();方法     输出字符串,返回字符串用于和玩家输入的进行比较,
    public String prainStr() {
        StringBuffer buffer =new StringBuffer();
        int strLength = LevelParam.levels[player.getLevelNo() - 1].getStrLength();
        Random random = new Random();
        for(int i = 0;i<strLength;i++) {
            int rand =random.nextInt(strLength);
            switch (rand) {
            case 0:
                buffer.append("1");
                break;
            case 1:
                buffer.append("2");
                break;
            case 2:
                buffer.append("3");
                break;
            case 3:
                buffer.append("4");
                break;
            case 4:
                buffer.append("5");
                break;
            case 5:
                buffer.append("6");
                break;
            }
        }
        System.out.println(buffer);
        return buffer.toString();
    }
    //void printResult(String out,String in);方法       比较玩家输入in和游戏输出out,根据比较结果输出相应信息
    public void  printResult(String out,String in) {
        boolean flag;
        if (out.equals(in)) {
            flag=true;
        } else {
            flag=false;
        }
        // 1、 如果输入正确
        if (flag) {
            long currentTime = System.currentTimeMillis();
            // 1.1、 如果超时
            if ((currentTime -player.getStartTime())/1000 >LevelParam.levels[player.getLevelNo()-1].getTimeLimit()) {
                System.out.println("输入太慢,已经超时,结束游戏!");
                System.out.println("你的分数为:"+ player.getCurScore());
                System.exit(1);
                // 如果没有超时
            } else {                
                //  计算当前积分
                player.setCurScore(player.getCurScore()+ LevelParam.levels[player.getLevelNo() - 1].getPerScore());
                //  计算已用时间
                player.setElapsedTime((int) ((currentTime - player.getStartTime()) / 1000));
                //输出当前积分、当前级别、已用时间
                System.out.println("输入正确,您的级别"+ player.getLevelNo()+" ,您的积分" + player.getCurScore() + ",已用时间"    + player.getElapsedTime() + "秒。");
                //判断用户是否已经闯过最后一关
                if (player.getLevelNo() == 6) {
                    int score=LevelParam.levels[player.getLevelNo() - 1].getPerScore()* LevelParam.levels[player.getLevelNo() - 1].getStrTimes();//计算闯关分数
                    if (player.getCurScore() == score) {
                        System.out.println("你已闯关成功,成为绝世高手,恭喜你!!!");
                        System.exit(0);
                    }
                }
            }
            // 如果输入错误
        } else {
            System.out.println("输入错误,结束游戏!");
            System.out.println("你的分数为:"+ player.getCurScore());
            System.exit(1);
        }
    }
}
package com.quickhit;
/**
 * 
 * @author 陈明
 * 级别类
 */
public class Level {
    //各级别编号
    int levelNo;
    //各级别输出字符串的长度
    int strLength;
    //各级别输出字符串的次数
    int strTimes;
    //各级别闯关的时间限制
    int timeLimit;
    //各级别正确输入一次的得分
    int perScore;
    public Level() {}
    
    public Level(int levelNo, int strLength, int strTimes, int timeLimit, int perScore) {
        super();
        this.levelNo = levelNo;
        this.strLength = strLength;
        this.strTimes = strTimes;
        this.timeLimit = timeLimit;
        this.perScore = perScore;
    }

    public int getLevelNo() {
        return levelNo;
    }
    public int getStrLength() {
        return strLength;
    }
    public int getStrTimes() {
        return strTimes;
    }
    public int getTimeLimit() {
        return timeLimit;
    }
    public int getPerScore() {
        return perScore;
    }
    
}
package com.quickhit;

/**
 * 级别参数类
 * @author 陈明
 *
 */
public class LevelParam {
    public final static Level levels[]=new Level[6];
    static{
        levels[0]=new Level(1, 2, 10, 30,1);
        levels[1]=new Level(2, 3, 9, 26,2);
        levels[2]=new Level(3, 4, 8, 22,5);
        levels[3]=new Level(4, 5, 7, 18,8);
        levels[4]=new Level(5, 6, 6, 15,10);
        levels[5]=new Level(6, 7, 5, 12,15);
    }
}
package com.quickhit;

import java.util.Scanner;


/**
 * 
 * @author 陈明
 *  玩家类
 */
public class Player1 {

    private int levelNo; // 级别号
    private int curScore; // 当前积分
    private long startTime = 0; // 各级别开始时间
    private int elapsedTime; // 各级别已用时间

    public long getStartTime() {
        return startTime;
    }

    public void setStartTime(long startTime) {
        this.startTime = startTime;
    }

    public int getLevelNo() {
        return levelNo;
    }

    public void setLevelNo(int levelNo) {
        this.levelNo = levelNo;
    }

    public int getCurScore() {
        return curScore;
    }

    public void setCurScore(int curScore) {
        this.curScore = curScore;
    }

    public int getElapsedTime() {
        return elapsedTime;
    }

    public void setElapsedTime(int elapseTime) {
        this.elapsedTime = elapseTime;
    }

    /**
     * 玩家玩游戏。
     */
    public void play() {
        Ganme game = new Ganme(this);
        Scanner input = new Scanner(System.in);
        // 外层循环,循环一次级别晋一级
        for (int i = 0; i < LevelParam.levels.length; i++) {
            // 晋级
            this.levelNo += 1;
            //  晋级后计时清零,
            this.startTime = System.currentTimeMillis();
            this.curScore = getCurScore();
            //  内层循环,循环一次完成一次字符串的输出、输入、比较
            for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTimes(); j++) {
                // 游戏输出字符串
                System.out.print("随机字符串:");
                String outStr = game.prainStr();
                System.out.println("请输入:");
                // 接收玩家输入
                String inStr = input.next();
                // 游戏判断玩家输入是否正确,并输出相应结果信息
                game.printResult(outStr, inStr);
            }
        }
    }
}
package com.quickhit;
/**
 * 测试类
 */
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String c = "";
        System.out.println("游戏规则如下:系统会随机输出字符串,输入错误或者超时结束游戏,升级规则如下:");
        System.out.println("第一阶段限制时间30秒,输出2个字符串,输入正确一次得1分,,共输入10次可晋级第二阶段,");
        System.out.println("第二阶段限制时间26秒,输出3个字符串,输入正确一次得2分,,共输入9次可晋级下个阶段,");
        System.out.println("第三阶段限制时间22秒,输出4个字符串,输入正确一次得5分,,共输入8次可晋级下个阶段,");
        System.out.println("第四阶段限制时间18秒,输出5个字符串,输入正确一次得8分,,共输入7次可晋级下个阶段,");
        System.out.println("第五阶段限制时间15秒,输出6个字符串,输入正确一次得10分,,共输入6次可晋级下个阶段,");
        System.out.println("第六阶段限制时间12秒,输出7个字符串,输入正确一次得15分,,共输入5次可晋级下个阶段,");
        Player1 player = new Player1();
        System.out.println("是否开始玩游戏:y/n");
        String choosc = sc.next();
        if(choosc.equals("y")) {
            player.play();
        }
    }

}

输出结果图:

代码下载链接:

链接:https://pan.baidu.com/s/1LTGLWgRZ2Db_l2uIXfGfIg
提取码:jgj8

posted @ 2019-02-21 12:14  陈xiaolong  阅读(211)  评论(0编辑  收藏  举报