电影院购票系统完整项目

 1.电影类

package com.xu.cinema1;
/*** 电影的类* */
public class Movie {//设置电影的属性private String name;//电影名称private String daoyan;//导演private String actor;//主演private int price;//价格private String time;//放映时间//创建get和setpublic String getName() {return name;}public void setName(String name) {this.name = name;}public String getDaoyan() {return daoyan;}public void setDaoyan(String daoyan) {this.daoyan = daoyan;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}//创建构造函数//默认构造public Movie() {}//带参构造public Movie(String name, String daoyan, String actor, int price, String time) {this.name = name;this.daoyan = daoyan;this.actor = actor;this.price = price;this.time = time;}//创建toString@Overridepublic String toString() {return "电影{" +"电影名称='" + name + '\'' +", 导演='" + daoyan + '\'' +", 主演='" + actor + '\'' +", 价格=" + price +", 放映时间='" + time + '\'' +'}';}
}

2.普通票类

package com.xu.cinema1;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;/*** 普通票类(相当于学生票与赠票的父类)* */
public class Ticket implements IPrint{//继承接口//票存在是属性private Movie movie;//票有电影的属性,所以要使用创建的Movie类private String setNum;//座位号//座位号的随机创建方法private String createNum(){//创建随机数对象Random rand=new Random();//随机排号int m=rand.nextInt(20)+1;//随机座位号int n=rand.nextInt(30)+1;//随机数从0开始,因为没有0排,所以+1return m+"排"+n+"号";}//票价方法protected int piaojia(){//普通票价就是电影的价格//所以返回值调用movie的get价格return this.movie.getPrice();}//为票的属性创建get和setpublic Movie getMovie() {return movie;}public void setMovie(Movie movie) {this.movie = movie;}public String getSetNum() {return setNum;}public void setSetNum(String setNum) {this.setNum = setNum;}//创建构造函数//默认构造public Ticket() {//每创建一次对象,调用一次座位号创建方法赋给座位号属性this.setNum=this.createNum();}//带参构造public Ticket(Movie movie) {//因为座位号是方法生成所以调用方法this();//调用本类的默认构造,必须写在第一行this.movie = movie;}//创建toString@Overridepublic String toString() {return "电影票{" +"电影名称=" + movie +", 座位号='" + setNum + '\'' +'}';}//重写继承接口方法,自定义普通票输出样式@Overridepublic void print() {SimpleDateFormat sdf=new SimpleDateFormat();System.out.println("============夜不归宿电影院======【普通】=============");System.out.println("===电影名称:【"+this.movie.getName()+"】\t\t\t===座位:【"+this.setNum+"】");System.out.println("===导演:【"+this.movie.getDaoyan()+"】\t\t\t===主演:【"+this.movie.getActor()+"】");System.out.println("===票价:【¥"+this.piaojia()+"元】\t\t\t===放映时间:【"+this.movie.getTime()+"】");System.out.println("===票的类型:【普通票】");System.out.println("=========购票时间【"+sdf.format(new Date())+"】==============");System.out.println("===================夜不归宿电影院===================");}
}

3.学生票类

package com.xu.cinema1;import java.text.SimpleDateFormat;
import java.util.Date;/*** 学生票类(继承普通票父类)* */
public class StudentTicket extends Ticket {//学生票的特殊属性(折扣)private int zhekou;//创建封装属性的隔天和setpublic int getZhekou() {return zhekou;}public void setZhekou(int zhekou) {this.zhekou = zhekou;}//创建该类构造//默认public StudentTicket() {}//带参public StudentTicket(Movie movie) {super(movie);}//重写父类方法 返回该类特有方法值@Overrideprotected int piaojia() {return this.getMovie().getPrice()/10*this.zhekou;//调用父类电影名称对应的价格计算折扣后价格}//重写父类toString@Overridepublic String toString() {return super.toString();}//重写父类继承的接口方法,自定义学生票输出样式@Overridepublic void print() {SimpleDateFormat sdf=new SimpleDateFormat();System.out.println("============夜不归宿电影院======【学生票】===========");System.out.println("===电影名称:【"+ this.getMovie().getName()+"】\t\t\t===座位:"+ this.getSetNum());System.out.println("===导演:【"+ this.getMovie().getDaoyan()+"】\t\t\t===主演:【"+ this.getMovie().getActor()+"】");System.out.println("===票价:【¥"+this.piaojia()+"元】\t\t\t===票的原价:【¥"+this.getMovie().getPrice()+"】");System.out.println("===票的类型:【学生票】\t\t\t===折扣:【"+this.zhekou+"折】");System.out.println("===放映时间:【"+ this.getMovie().getTime()+"】");System.out.println("=========购票时间【"+sdf.format(new Date())+"】==============");System.out.println("===================夜不归宿电影院====================");}
}

4.赠票类

package com.xu.cinema1;import java.text.SimpleDateFormat;
import java.util.Date;/*** 赠票类(继承普通票父类)* */
public class FreeTicket extends Ticket{//赠票类的特有属性(客户姓名)private String kehu;//对封装的属性,生产get和setpublic String getKehu() {return kehu;}public void setKehu(String kehu) {this.kehu = kehu;}//创建默认构造和带参构造public FreeTicket() {}public FreeTicket(Movie movie) {super(movie);}//重写父类方法:修改该类价格返回值@Overrideprotected int piaojia() {return 0;}//重写父类继承的接口方法,自定义赠票输出样式@Overridepublic void print() {SimpleDateFormat sdf=new SimpleDateFormat();System.out.println("============夜不归宿电影院======【赠票】=============");System.out.println("===电影名称:【"+ this.getMovie().getName()+"】\t\t\t===座位:"+ this.getSetNum());System.out.println("===导演:【"+ this.getMovie().getDaoyan()+"】\t\t\t===主演:【"+ this.getMovie().getActor()+"】");System.out.println("===票价:【¥"+this.piaojia()+"元】\t\t\t===票的原价:【¥"+this.getMovie().getPrice()+"】");System.out.println("===票的类型:【赠票】\t\t\t===所属客户:【"+this.kehu+"】");System.out.println("===放映时间:【"+ this.getMovie().getTime()+"】");System.out.println("=========购票时间【"+sdf.format(new Date())+"】===============");System.out.println("===================夜不归宿电影院====================");}
}

5.电影院类

package com.xu.cinema1;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;/*** 电影院类* */
public class Cinema {//定义一个电影数组:来存放当前电影院上映的所有电影//因为数组要存放静态代码块中的元素所以也定义为静态的private static Movie[] movies=new Movie[4];//静态代码块(因为每一次调用只运行一次,为提高代码运行速度)static {//为了提高速度,且只执行一次//存放若干个电影//创建电影对象Movie m1=new Movie("消失的她","崔睿","朱一龙",100,"20:30");Movie m2=new Movie("变形金刚","迈克尔","张三",80,"20:00");Movie m3=new Movie("你好,李焕英","贾玲","贾玲",90,"18:30");Movie m4=new Movie("人在囧途","徐峥","徐峥",80,"19:30");//将创建的电影数组存入数组中movies[0]=m1;movies[1]=m2;movies[2]=m3;movies[3]=m4;}//创建一个添加电影的方法public void add(){//创建一个新的电影数组存放用户添加的电影Movie[] movie=new Movie[movies.length+1];//导入Scanner的包Scanner in=new Scanner(System.in);//创建一个新的电影对象Movie x=new Movie();//提示用户输入电影的各项属性//并使用新建对象属性接受用户输入的信息System.out.println("请输入电影名称:");x.setName(in.next());System.out.println("请输入导演:");x.setDaoyan(in.next());System.out.println("请输入主演:");x.setActor(in.next());System.out.println("请输入价格:");x.setPrice(in.nextInt());System.out.println("请输入上映时间:");x.setTime(in.next());//利用循环将原数组中的元素添加到新的数组中for (int i=0;i0){//使用foreach遍历数组打印数组元素for (Movie m:movies){System.out.println(m);}}}//用户选取电影是,会输入选择电影名称//根据用户输入的电影名称,对应查找数组中相同电影名称的对象public Movie findByName(String dyname) throws MyException{//定义局部变量,给定初始值Movie m=null;//foreach遍历数组for (Movie m1:movies){//判断用户输入电影名称与两个数组中电影元素对象名称是否相同if (dyname.equals(m1.getName()) && dyname.equals(m1.getName())){m=m1;//当找到相同电影名称时,跳出循环break;}}//判断未找到电影名称后,抛出异常给调用者if (m==null){throw new MyException("对不起,您输入的电影名不存在!!");}//有返回值,返回mreturn m;}//创建一个方法:设置登录界面public boolean logon(){SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");Scanner in=new Scanner(System.in);System.out.println("======================夜不归宿电影院=====================");System.out.println("########################系统登录!#######################");System.out.println("请输入账号:");String n=in.next();System.out.println("请输入密码:");String m=in.next();if (n.equalsIgnoreCase("admin") && m.equalsIgnoreCase("1234")){System.out.println("欢迎【"+n+"】用户登录成功!登录时间为:【"+sdf.format(new Date())+"】");return true;}return false;}
}

6.电影票工厂

package com.xu.cinema1;
/*** 电影票工厂类* */
public class TicketFactory {//每次调用只执行一次,因此使用静态方法//需要添加参数,有返回值,使用返回值数据类型public static Ticket choose(int m,Movie movie){//传入参数为用户输入选票号码,和各票对应电影对象的电影名称//定义局部变量,给定初始值Ticket t=null;switch (m){case 1:t=new Ticket(movie);break;case 2:t=new StudentTicket(movie);break;case 3:t=new FreeTicket(movie);break;}return t;}
}

7.创建购票打印接口

package com.xu.cinema1;
/*** 创建接口(显示票型结构)* */
public interface IPrint {void print();
}

8.创建自定义异常

package com.xu.cinema1;
/*** 创建自定义异常类* */
public class MyException extends RuntimeException{//继承运行时异常//构造函数public MyException() {}public MyException(String message) {super(message);}public MyException(String message, Throwable cause) {super(message, cause);}public MyException(Throwable cause) {super(cause);}public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}

9.实现测试项目效果

package com.xu.cinema1;import java.util.Scanner;public class View {public static void main(String[] args) {while(true) {//定义一个定义的局部对象,使用自定义异常Movie movie = null;//导入ScannerScanner in = new Scanner(System.in);//定义一个局部变量,给定初始值int m = 0;//创建电影院对象Cinema cinema = new Cinema();//调用电影院登录方法判断是否正确if (cinema.logon() == true) {//使用do....while循环实现页面do {System.out.println("==================夜不归宿电影院欢迎您!==================");System.out.println("1.浏览电影 2.购票 3.添加电影 4.退出");//定义一个变量接收用户输入m = in.nextInt();//使用switch语句判断用户输入选择,调用显示效果switch (m) {case 1://浏览电影//调用电影院类中两个浏览电影的方法cinema.showMovies();break;case 2://购票System.out.println("请输入要购买电影的名称:");//电影名称为字符串类型String name = in.next();//尝试出现异常时抛出try {//接收获取电影对象movie = cinema.findByName(name);//输出电影对象System.out.println(movie);} catch (RuntimeException e) {System.out.println(e.getMessage());break;}System.out.println("请选择票的类型:1.普通 2.学生 3.增票");int n = in.nextInt();//调用工厂类中的choose方法Ticket ticket = TicketFactory.choose(n, movie);//普通票不需要判断//学生票if (ticket instanceof StudentTicket) {System.out.println("请输入折扣:");int zk = in.nextInt();((StudentTicket) ticket).setZhekou(zk);}//赠票if (ticket instanceof FreeTicket) {//设置输入客户姓名System.out.println("请输入客户姓名:");String kehu = in.next();((FreeTicket) ticket).setKehu(kehu);}//计算购票价格int jiage = ticket.piaojia();//输出用户购票信息ticket.print();break;case 3://添加电影//调用电影院中添加电影的方法cinema.add();break;case 4://退出//询问用户是否确认退出System.out.println("确认退出吗?(y/n)");String y = in.next();//判断用户输入if (y.equals("y")) {System.out.println("谢谢光临,下次再见!");System.exit(0);break;} else {System.out.println("请继续操作!");}}} while (m > 0);} else {System.out.println("账户或密码输入错误,登录失败!");}}}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部