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;elsereturn false;}/***  利用正则表达式判断输入的座位号是否合法* @param seat* @return*/public static boolean chooseSeat(String seat) {//[1-5]表示匹配数字的范围是1~5,问号(?)表示此数字只能出现一次[-]表示要完全匹配-号 if (seat.matches("[1-5]?+[-]+[1-7]?"))return true;elsereturn false;}
/*** 主程序* @param args*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 新建电影院类Cinema cinema = new Cinema();//获取scheduleSchedule 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;elseSystem.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;elseSystem.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;elseSystem.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;elseSystem.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;elseSystem.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;elseSystem.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;elseSystem.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());}}}}

java小项目影院系统相关推荐

  1. java小项目租车系统_Java学习笔记三十:Java小项目之租车系统

    Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的"呱呱租车系统" 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金 ...

  2. Java毕设项目在线答题系统计算机(附源码+系统+数据库+LW)

    Java毕设项目在线答题系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecli ...

  3. java小项目之:植物大战僵尸,这个僵尸不太冷!内附素材源码

    Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...

  4. java小项目家庭记账程序

    文章目录 java小项目家庭记账程序 **1.项目目标:** 2.项目需求: 3.具体思路: 4.具体代码: 1.页面: 2.Option_1类: 3.Option_2类: 4.Option_3类: ...

  5. Java毕设项目视频点播系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目视频点播系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webst ...

  6. Java毕设项目便利店系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目便利店系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Websto ...

  7. 我是一只小僵尸java,Java小项目之:植物大战僵尸,这个僵尸不太冷!内附素材...

    Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...

  8. Java毕设项目个人理财系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目个人理财系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webst ...

  9. Java小项目中WEB-INF下jsp页面如何访问?

    Java小项目中WEB-INF下jsp页面如何访问? - 今天又是充满希望的一天 - CSDN博客 关闭 今天又是充满希望的一天 目录视图 摘要视图 订阅 var username = "H ...

最新文章

  1. matlab 傅里叶变换_Matlab与傅里叶变换
  2. CentOS7和CentOS6怎样开启MySQL远程访问
  3. Python中的常见面试题
  4. dart正则替换手机号中间四位为*
  5. 浅谈微视推荐系统中的特征工程
  6. 用Priam设置Cassandra
  7. java的六大_java程序员必备的六大工具!
  8. 小程序文本框为空自动填写_微信免费转码机器人!小程序自动转码!
  9. 基于MATLAB的人脸识别研究
  10. 电磁场计算的服务器性能指标,有限公式电磁场数值计算理论与性能
  11. 基于java的超市积分管理系统设计(含源文件)
  12. 通过PHP访问MYSQL外文书籍,通过PHP访问MySQL外文翻译(模版2)
  13. 计算机第一启动设置u盘启动,怎么设置usb为第一启动_bios设置u盘启动
  14. spring配置事务
  15. iphone个系列尺寸_10年巨变:华为手机是如何赶超iPhone的
  16. 程序员应该坚持写技术博客
  17. android 平板 不支持apk,平板电脑上怎么无法打开apk文件
  18. 自适应QP(Adaptive QP)
  19. WPS在引用中制作目录
  20. 黄一老师:财商思维、信用融资能对你有什么帮助?

热门文章

  1. pytorch并行处理详解(多GPU,环境变量)
  2. CentOS7 运维 - 磁盘管理与文件系统 | 超详细 | 附挂载教程及错误排查 | parted超大磁盘分区教程
  3. css transition left 不起作用
  4. I-SOON CTF
  5. Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
  6. HTML基础-html标签、标签属性及核心功能
  7. 织梦Dedecms制作"关于我们"等单页面的实现方法
  8. 浏览器在线或离线状态检测
  9. 给有兴趣的人-图论趣谈(七桥问题 )
  10. DirectX11 With Windows SDK--36 延迟渲染基础