代码如下(示例):
建一个实体类,包含所需的属性战狼 1 吴京 吴京 35 2015-04-02 夏洛特烦恼 2 闫非 沈腾 40 2015-09-30 长津湖之水门桥 3 徐克 吴京 60 2022-02-01 这个杀手不太冷静 4 邢文雄 魏翔 42 2022-02-01 奇迹·笨小孩 5 文牧野 易烊千玺 26 2022-02-01
import java.io.Serializable;
public class Movie implements Serializable {
private String id;//电影编号
private String name;//电影名
private String performer;//导演
private String director; //演员
private double price; //票价
private String date; //放映日期
public Movie(String id, String name, String performer, String director, double price, String date) {
this.id = id;
this.name = name;
this.performer = performer;
this.director = director;
this.price = price;
this.date = date;
}
public void showInfo(){
System.out.println("电影编号:"+id+"t电影名:"+name+"t导演:"+performer
+"t主演:"+director+"t放映时间:"+date+"t票价:"+price);
}
public Movie() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPerformer() {
return performer;
}
public void setPerformer(String performer) {
this.performer = performer;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
建一个工具类,要求编写一个方法,返回带泛型List集合,读取步骤一中的XML全部电影信息
代码如下(示例):
import entity.Movie;
import org.dom4j.document;
import org.dom4j.documentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class MoviesUtil {
document doc=null;
//生成dom树
public void getDom(){
//读取器
SAXReader reader=new SAXReader();
//读取XML文档 获得document对象
try{
doc=reader.read("src/movies.xml");
}catch (documentException e){
e.printStackTrace();
}
}
//解析XML文档
public List showXML(){
List mList=new ArrayList<>(); //所有电影的集合
//获取根节点
Element root=doc.getRootElement();
Iterator it=root.elementIterator();
while (it.hasNext()){
//获得movie节点的标签元素
Element movieEle=it.next();
Iterator itMovie=movieEle.elementIterator();
Movie movie=new Movie();
while (itMovie.hasNext()) {
Element ele = itMovie.next();
if (ele.getName().equals("name")) {
String name = ele.getText();
movie.setName(name);
} else if (ele.getName().equals("id")) {
movie.setId(ele.getText());
} else if (ele.getName().equals("performer")) {
movie.setPerformer(ele.getText());
} else if (ele.getName().equals("director")) {
movie.setDirector(ele.getText());
} else if (ele.getName().equals("price")) {
movie.setPrice(Double.parseDouble(ele.getText()));
}else if (ele.getName().equals("date")) {
movie.setDate(ele.getText());
}
}//内循环
mList.add(movie);
}//外循环
return mList;
}
public void showInfo(Listmovies){
System.out.println("编号t电影名称ttt导演t主演t票价t放映日期");
//遍历
for (Movie movie : movies) {
movie.showInfo();
}
}
}
建一个系统类,对工具类方法进行调用
import entity.Movie;
import util.MoviesUtil;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MoviesMgr {
Scanner input=new Scanner(System.in);
//新建工具类对象
MoviesUtil util=new MoviesUtil();
//所有电影的集合
List movies=null;
//所有卖出票的电影的集合
List saleMovies=new ArrayList<>();
public void start(){
//调用工具类方法
util.getDom();
do {
System.out.println("---院线在线选票系统---");
System.out.println("1.浏览电影信息");
System.out.println("2.在线选票");
System.out.println("3.查看购买记录");
System.out.println("4.退出系统");
System.out.println("请输入编号:");
int choice=input.nextInt();
switch (choice){
case 1:
System.out.println("---浏览电影信息---");
movies = util.showXML();
//调用输出方法
util.showInfo(movies);
break;
case 2:
System.out.println("---请输入电影编号---");
int no=input.nextInt();
//获取编号的电影对象
Movie movie=movies.get(no-1);
saleMovies.add(movie);
System.out.println("完成购买电影《"+movie.getName()+"》购换卷,可在任意时间观看");
//调用序列化方法
this.save();
break;
case 3:
//System.out.println("---查看购买记录---");
//反序列化
File file=new File("src/film.txt");
if (!file.exists()){
System.out.println("第一次访问,还没有销售记录,无法读取");
return;
}
this.read();
//调用输出方法
util.showInfo(saleMovies);
break;
case 4:
System.out.println("---退出系统---");
System.exit(1);
break;
default:
System.out.println("输入序号错误!");
}
}while (true);
}
public void save(){
//1.创建序列化对象
ObjectOutputStream oos=null;
try{
oos=new ObjectOutputStream(new FileOutputStream("src/film.txt"));
//2.序列化
oos.writeObject(saleMovies);
}catch (Exception ex){
ex.printStackTrace();
}finally {
try {
if (oos!=null){
//3.关闭
oos.close();
}
}catch (Exception ex){
ex.printStackTrace();
}
}
}
//反序列化
public void read(){
//1.创建反序列化对象
ObjectInputStream ois=null;
try{
ois =new ObjectInputStream(new FileInputStream("src/film.txt"));
//2. 反序列化
saleMovies =(List)ois.readObject();
}catch (Exception ex){
ex.printStackTrace();
}finally {
try {
if (ois!=null){
//3.关闭
ois.close();
}
}catch (Exception ex){
ex.printStackTrace();
}
}
}
}
最后建一个测试类测试
public class MoviesTest {
public static void main(String[] args) {
MoviesMgr mgr=new MoviesMgr();
mgr.start();
}
}
总结
以上就是XML文件影院售票系统的内容,本文简单介绍了序列化及反序列化的使用,其中还包含了泛型List集合的使用、document对象、流、等知识点。



