java序列化和反序列化实验

题目:电影城出票系统:

  • 电影城每天放映好几部电影,每部电影也有好几个放映场次,每场电影供应一定数量的电影票
  • 电影类型为枚举类型,有爱情片、喜剧片、动作片、科幻片。
  • 电影类有电影名称、电影类型属性
  • 电影放映场次类有放映厅、放映时间属性
  • 电影票座位类有行(即哪一排)、座位属性
  • 电影票类有电影、放映场次、座位属性
package experiment3;

//实现序列化必须实现的接口,这就是一个空接口,起到标识的作用
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.io.*;
//电影类型
enum MovieType implements Serializable{
	Comedy("喜剧片"),
	Action("动作片"),
	Romatic("爱情片"),
	ScienceFiction("科幻片");
	private final String name;
	MovieType(String name){
		this.name = name;
	}
	public String get(){
		return name;
	}
}
//电影
class Movie implements Serializable{
	String name;
	MovieType type;
	String where;
	Movie(String where,String name,MovieType a){
		this.name = name;
		this.where = where;
		this.type = a;
	}
	void printinfo(){
		System.out.print(this.name+"\n"+"类型:"+this.type.get()+"\n"+"放映厅:"+this.where+"\n");
	}
}
//电影放映时间段
class MovieSchedule implements Serializable{
	String time;
	String date;
	MovieSchedule(String date,String time){
		this.time = time;
		this.date = date;
	}
	void printinfo(){
		System.out.print("时间:"+this.date+" "+this.time+"\n");
	}
}
//座位
class Seat implements Serializable{
	int row;
	int col;
	Seat(int a,int b){
		this.row = a;
		this.col = b;
	}
	void printinfo(){
		System.out.print("座位:"+this.row+"行"+this.col+"座\n");
	}
}
//电影票
class Ticket implements Serializable{
	Movie a;
	MovieSchedule b;
	Seat c;
	Ticket(Movie get,MovieSchedule time,Seat seat){
		this.a = get;
		this.b = time;
		this.c = seat;
	}
	public void printTicket(){ //打印票的详细信息
		a.printinfo();
		b.printinfo();
		c.printinfo();
		System.out.println("***************************");
	}
}
public class MovieSet {
	public static void main (String[] args) {
		List<Ticket> moviesList = new ArrayList<>();
		//实例化电影票信息
		// 1
		Seat seat1 = new Seat(10,12);
		MovieSchedule time1 = new MovieSchedule("2010年7月12日","20时20分");
		Movie get1 = new Movie("放映厅1","疯狂的石头",MovieType.Comedy);
		Ticket t1 = new Ticket(get1,time1,seat1);
		// 2
		Seat seat2 = new Seat(10,13);
		MovieSchedule time2 = new MovieSchedule("2010年7月12日","20时20分");
		Movie get2 = new Movie("放映厅1","疯狂的石头",MovieType.Comedy);
		Ticket t2 = new Ticket(get2,time2,seat2);
		// 3
		Seat seat3 = new Seat(8,8);
		MovieSchedule time3 = new MovieSchedule("2010年7月14日","19时40分");
		Movie get3 = new Movie("放映厅2","2012",MovieType.ScienceFiction);
		Ticket t3 = new Ticket(get3,time3,seat3);
		// 4
		Seat seat4 = new Seat(8,9);
		MovieSchedule time4 = new MovieSchedule("2010年7月14日","19时40分");
		Movie get4 = new Movie("放映厅2","2012",MovieType.ScienceFiction);
		Ticket t4 = new Ticket(get4,time4,seat4);
		moviesList.add(t1);
		moviesList.add(t2);
		moviesList.add(t3);
		moviesList.add(t4);
		// 文件movies
		File file=new File("C:\\javaP\\chuchun\\experiment3\\src\\movies.txt");
		// 序列化写入
		try{
			FileOutputStream f = new FileOutputStream(file);  
			ObjectOutputStream os = new ObjectOutputStream(f);  
			os.writeObject(moviesList);
			os.close();
		}catch(Exception ex){
			System.out.println("存在异常");
			ex.printStackTrace();
		}

		// 反序列化读取
		try
			(ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));)
			{
			@SuppressWarnings("unchecked")
			List<Ticket> moviesList_input = (List<Ticket>)in.readObject();
			for (Iterator<Ticket> iterator = moviesList_input.iterator(); iterator.hasNext();) {
				Ticket ticket = (Ticket) iterator.next();
				ticket.printTicket();
			}
			in.close();
		}catch(Exception ex){
			System.out.println("存在异常");
			ex.printStackTrace();
		}
	}
}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值