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