java小项目影院系统

    xiaoxiao2023-03-24  4

    java小项目,影院管理系统 http://download.csdn.net/detail/github_32658299/9632276 下面是两个关键的类 1.这是电影院测试类,用来读取用户输入并进行出票

    import java.util.InputMismatchException; import java.util.Scanner; /** * 测试cinema类 * 模拟电影院的出票系统 * 解析XML文件用于初始化Cinema的Schedule类,其保存电影院所放映电影所有场次信息 * 要求: * 1.打印用户的购票信息 * 2.利用序列化保存用户购票信息 * 3.利用反序列化加载用户的购票历史记录 * 4.同一张票只能卖出一次(电影名、座位号、放映时间相同则为同一张票) * 5.对用户输入进行判断,给出错误提示 * * @author cxp * @data 2016-9-13 * @modify */ public class TestCinema { /** * 判断电影名是否输入正确 * @param schedule * @param movieName * @return */ public static boolean chooseName(Schedule schedule, String movieName) { // 判断放映表是否存在用户输入的电影名 for (ScheduleItem scheduleItem : schedule.getItemList()) { if (scheduleItem.getMovie().getMovieName().equals(movieName)) { return true; } } return false; } /** * 判断用户输入时间是否正确 * @param schedule * @param time * @param movieName * @return */ public static boolean chooseTime(Schedule schedule, String time, String movieName) { for (ScheduleItem scheduleItem : schedule.getItemList()) { if (scheduleItem.getTime().equals(time) && scheduleItem.getMovie().getMovieName().equals(movieName)) return true; } return false; } /** * 判断用户输入票的类别是否正确 * @param num * @return */ public static boolean chooseType(int num) { if (num == 1 || num == 2 || num == 3) return true; else return false; } /** * 利用正则表达式判断输入的座位号是否合法 * @param seat * @return */ public static boolean chooseSeat(String seat) { //[1-5]表示匹配数字的范围是1~5,问号(?)表示此数字只能出现一次[-]表示要完全匹配-号 if (seat.matches("[1-5]?+[-]+[1-7]?")) return true; else return false; } /** * 主程序 * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 新建电影院类 Cinema cinema = new Cinema(); //获取schedule Schedule cs = cinema.getSchedule(); //解析XML文件,显示电影场次集合 cs.paraeXML("NewFile.xml"); //**************************主界面循环**************************// String condition = "y"; while ("y".equalsIgnoreCase(condition)) { // 打印主界面,显示电影放映时间表 cs.printItemList(); System.out.println("请输入电影名称:"); String movieName;// 用户输入的电影名 // 循环,直到用户输入正确的电影名 while (true) { boolean flag = false;// 判断用户输入的电影名是否在放映表中 movieName = scanner.next(); flag = chooseName(cs, movieName); if (flag == true) break; else System.out.println("电影名称有误,请重新输入电影名称:"); } System.out.println("请输入电影播放时间:以xx:xx的格式"); String time; // 循环,直到用户输入正确的时间 while (true) { boolean flag = false; time = scanner.next(); // 判断电影在用户输入的时间点是否放映,且放映的电影与用户之前选择的相匹配 flag = chooseTime(cs, time, movieName); if (flag == true) break; else System.out.println("时间输入有误,请重新时间:"); } // 将用户选择的电影名的相应放映场次找出来 // 不能放在chooseName里找的原因:将scItem作为参数传进去的是一个引用的副本, // 可以利用这个引用改变引用所指向对象的内存,但对引用本身赋值,函数返回后,副本被销毁,原指针仍为空 ScheduleItem scItem = null;// 电影名对应的场次信息 for (ScheduleItem scheduleItem : cs.getItemList()) { if (scheduleItem.getMovie().getMovieName().equals(movieName)&&scheduleItem.getTime().equals(time)) { scItem = scheduleItem; } } System.out.println("请输入您要购买的票的类型:1.全价票 2.学生票 3.赠票"); int num=0; // 循环,直到用户输入正确的数字 while (true) { boolean flag = false; try{ num = scanner.nextInt(); // 判断电影在用户输入的时间点是否放映,且放映的电影与用户之前选择的相匹配 flag = chooseType(num); if (flag == true) break; else System.out.println("数字输入有误,请选择购票类型:1.全价票 2.学生票 3.赠票"); }catch (InputMismatchException e) { scanner.next(); // 增加这样一行,清空缓冲区 System.out.println("输入不匹配,请输入数字:1.全价票 2.学生票 3.赠票!"); } } //****************************普通票****************************// switch(num){ case 1: System.out.println("请输入您需要的座位号:以排-列的形式"); String seat; // 循环,直到用户输入正确座位号 while (true) { boolean flag = false;// 标记用户输入座位号是否合法 seat = scanner.next(); // 判断电影在用户输入的时间点是否放映,且放映的电影与用户之前选择的相匹配 flag = chooseSeat(seat); if (flag == true) break; else System.out.println("输入错误,请重新输入您需要的座位号:以排-列的形式"); } Ticket ticket = new OriginalTicket(new Seat(seat), scItem.getMovie().getPrice(), scItem); if(!cinema.checkTicket(ticket)){ //打印购票信息 ticket.buyTicket(); // 添加购买的票到集合中 cinema.getTicketList().add(ticket); //序列化已购电影票 if(!cinema.getTicketList().isEmpty()) cinema.saveTicket(); break; } System.out.println("该票已被选购,请重新购票!"); break; //****************************学生票****************************// case 2: System.out.println("请输入您所需要的折扣:1-9的整数"); int discount = scanner.nextInt(); System.out.println("请输入您需要的座位号:以排-列的形式"); // 循环,直到用户输入正确座位号 while (true) { boolean flag = false;// 标记用户输入座位号是否合法 seat = scanner.next(); // 判断电影在用户输入的时间点是否放映,且放映的电影与用户之前选择的相匹配 flag = chooseSeat(seat); if (flag == true) break; else System.out.println("输入错误,请重新输入您需要的座位号:以排-列的形式"); } // 创建学生票 Ticket studentTicket = new StudentTicket(new Seat(seat), scItem.getMovie().getPrice(), scItem, discount); //判断该票是否被购买 if(!cinema.checkTicket(studentTicket)){ //打印购票信息到文件中 studentTicket.buyTicket(); // 添加购买的票到集合中 cinema.getTicketList().add(studentTicket); //序列化已购电影票 cinema.saveTicket(); break; } System.out.println("该票已被选购,请重新购买!"); break; //****************************赠票****************************// case 3: System.out.println("请输入客户姓名:"); String customerName = scanner.next(); System.out.println("请输入您需要的座位号:以排-列的形式"); // 循环,直到用户输入正确座位号 while (true) { boolean flag = false;// 标记用户输入座位号是否合法 seat = scanner.next(); // 判断电影在用户输入的时间点是否放映,且放映的电影与用户之前选择的相匹配 flag = chooseSeat(seat); if (flag == true) break; else System.out.println("输入错误,请重新输入您需要的座位号:以排-列的形式"); } // 创建赠票 Ticket FreeTicket = new FreeTicket(new Seat(seat), scItem.getMovie().getPrice(), scItem, customerName); if(!cinema.checkTicket(FreeTicket)){ //打印购票信息到文件中 FreeTicket.buyTicket(); // 添加购买的票到集合中 cinema.getTicketList().add(FreeTicket); //序列化已购电影票 cinema.saveTicket(); break; } System.out.println("该票已被选购,请重新选票!"); break; } System.out.println("请选择继续购票(y)或退出系统(n):y/n"); //循环判断用户输入是否正确 while (true) { condition = scanner.next(); if ("y".equalsIgnoreCase(condition) || "n".equalsIgnoreCase(condition)) break; else System.out.println("输入错误!请重新选择继续购票(y)或退出系统(n):y/n"); } } } }

    2.这是放映日程类,该类解析xml文件并使用xml文件初始化电影信息集合 List

    import java.io.File; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 放映日程类 Schedule;包含: * 电影信息集合 List<ScheduleItem> * * @author cxp * @data 2016-9-13 * @modify * */ public class Schedule { // 存储电影信息的集合 private List<ScheduleItem> itemList = new ArrayList<ScheduleItem>(); /** * 无参构造函数 */ public Schedule() { super(); } /** * 打印电影场次信息及座位表 */ public void printItemList() { System.out.println("序号\t电影名称\t英文名称\t导演\t演员\t电影类型\t价格\t时间 "); int k=1;//打印序号 //打印电影场次信息 for (ScheduleItem scheduleItem : itemList) { System.out.println(k+"\t"+scheduleItem); k++; } //打印影院座位图 System.out.println("下面为影院的座位结构图:"); System.out.println("\t\t\t屏幕"); for (int i = 1; i <=5; i++) { for (int j = 1; j <= 7; j++) { System.out.print(i+"-"+j+"\t"); } System.out.println(); } } /** * getter和setter方法 * @return */ public List<ScheduleItem> getItemList() { return itemList; } public void setItemList(List<ScheduleItem> itemList) { this.itemList = itemList; } /** * 1.获得文档对象 * * @param fileName * @return */ public Document getDocument(String fileName) { // 读取对象 SAXReader reader = new SAXReader(); // 获得文档对象 Document document; try { document = reader.read(new File(fileName)); return document; } catch (DocumentException e) { e.printStackTrace(); } return null; } /** * 2.解析文档 XML * 将XML文件中的movie用来初始化Movie和Schedule类 * 并将Schedule添加到itemList列表中 * * @param fileName */ public void paraeXML(String fileName) { // 1.获得文档对象 Document document = getDocument(fileName); // 2.获得根节点 Element root = document.getRootElement(); Element slElement = root.element("ShowList"); // 获得子节点列表 List<Element> list = slElement.elements(); //循环,初始化itemList集合 for (Element element : list) { // 存放XML文件数据(Name、Poster、Director、Actor、Type、Price) String movieName = element.elementText("Name"); String poster = element.elementText("Poster"); String director = element.elementText("Director"); String actor = element.elementText("Actor"); String type = element.elementText("Type"); String price = element.elementText("Price"); // 根据type选择相应的枚举类型成员 MovieType movieType = null; switch (1) { case 1: if (type.equalsIgnoreCase("CARTOON")) { movieType = MovieType.CARTOON; break; } case 2: if (type.equalsIgnoreCase("THRILLER")) { movieType = MovieType.THRILLER; break; } case 3: if (type.equalsIgnoreCase("ROMANCE")) { movieType = MovieType.ROMANCE; break; } case 4: if (type.equalsIgnoreCase("COMEDY")) { movieType = MovieType.COMEDY; break; } case 5: if (type.equalsIgnoreCase("ACTION")) { movieType = MovieType.ACTION; break; } default: movieType = MovieType.UNKNOW; } // 创建一个Movie对象 Movie movie = new Movie(movieName, poster, director, actor, movieType, Double.parseDouble(price)); // 解析放映时间节点 Element scElement = element.element("Schedule"); List<Element> scList = scElement.elements(); // 解析放映时间结点并添加item到itemList集合中 for (Element element2 : scList) { //获得element2元素的文本值 String time = element2.getText(); // 根据time以及之前的movie对象创建一个ScheduleItem对象 ScheduleItem item = new ScheduleItem(time, movie); // 将此对象添加到列表中 itemList.add(item); // System.out.println(stringBuffer2.toString()); } } } }
    转载请注明原文地址: https://ju.6miu.com/read-1201383.html
    最新回复(0)