要求:
电影院有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%10==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%10==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();
}
}
}
效果如图:
导出的信息: