要求: 电影院有120个座位 12排 每排10个 1.把座位给构建出来 2.买票 选座 提示 该座位已被霸占 请重新选座 3.哪些座位被霸占 4.交互式可以选座 所有定票的信息 5.电影院想要查看当前这场电影的订票信息 把所有的排座信息输出到 记事本中去 实现的功能: A.订票 请输入你的座位信息 B.查看所有订票的信息 C.输出订票的到文件 统计 当前这场电影 入座率 和 空座比率
package com.oracle.core; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; public class TicketSystem { private Scanner scanner=new Scanner(System.in); private Map<String,Boolean> ticketMap=new LinkedHashMap<>(); private SimpleDateFormat format=new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss"); public static void main(String[] args) { new TicketSystem().welcome(); } // 代码块 // false表示空座位,true表示有人预定 { for(int i=1;i<=12;i++) { for(int j=1;j<=10;j++) { ticketMap.put(i+"-"+j, false); } } } /** * 欢迎页面 */ public void welcome() { while(true) { System.out.println("***************"); System.out.println("***************"); System.out.println("****京东票务网****"); System.out.println("***************"); System.out.println("***************"); menu(); } } /** * 功能菜单 */ public void menu() { System.out.println("1.查看座位"); System.out.println("2.订电影票"); System.out.println("3.导出座位信息"); System.out.println("4.退出系统"); int choose=scanner.nextInt(); switch(choose) { case 1: views(); break; case 2: markOrder(); break; case 3: try { export(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case 4: System.exit(-1); default: System.out.println("您的输入有误,请重新输入"); } } /** * 查看票务信息 */ public void views() { Set<Entry<String, Boolean>> entrySet = ticketMap.entrySet(); Iterator<Entry<String, Boolean>> iterator = entrySet.iterator(); int i=1; for(;iterator.hasNext();) { Entry<String, Boolean> seat = iterator.next(); if(i==0) { System.out.println(seat.getKey()+"["+(seat.getValue()?"■":"□")+"]"); i++; } else { System.out.print(seat.getKey()+"["+(seat.getValue()?"■":"□")+"]"+"\t"); i++; } } } /** * 订票业务 */ public void markOrder() { System.out.println("请输入您要购买的座位号"); System.out.println("规则如下:x-x 例如:1-2表示购买1排2座的位置 可以用,分割 表示买多张票" ); String input = scanner.next(); if(input.contains(",")) { String[] split = input.split(","); for(int i=0;i<split.length;i++) { Boolean status = ticketMap.get(split[i]); if(!status) { ticketMap.put(split[i], true); } else { System.out.println("订票失败......"+split[i]+"已经被订,请重新选择"); } } } else { Boolean status = ticketMap.get(input); if(!status) { ticketMap.put(input, true); } else { System.out.println("订票失败......"+input+"已经被订,请重新选择"); } } } /** * 导出业务 * @throws FileNotFoundException */ public void export() throws FileNotFoundException { String now = format.format(new Date()); // 在指定的目录下创建文件 File file=new File("D:\\export\\"+now+".txt"); File parentFile = file.getParentFile(); if(!parentFile.exists()) { parentFile.mkdirs(); } OutputStream out=new FileOutputStream(file); Set<Entry<String, Boolean>> entrySet = ticketMap.entrySet(); Iterator<Entry<String, Boolean>> iterator = entrySet.iterator(); int i=1; int sumTrue=0; String row=""; while(iterator.hasNext()) { Entry<String, Boolean> seat = iterator.next(); if(i==0) { if(seat.getValue()) { sumTrue++; } row+=seat.getKey()+"["+(seat.getValue()?"■":"□")+"]"; try { out.write(row.getBytes()); out.write("\r\n".getBytes()); row=""; i++; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { if(seat.getValue()) { sumTrue++; } row+=seat.getKey()+"["+(seat.getValue()?"■":"□")+"]"; i++; } } String toggle="占座率="+(sumTrue+"/"+ticketMap.size()); String nulltoggle="空座率="+(ticketMap.size()-sumTrue+"/"+ticketMap.size()); try { out.write(toggle.getBytes()); out.write("\t".getBytes()); out.write(nulltoggle.getBytes()); out.close(); System.out.println("已经导出成功"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }效果如图: 导出的信息: