Java电影院购票系统
源码下载:https://download.youkuaiyun.com/download/beichengzuishuai/10880918
使用xml对数据进行存储,实现了对xml文件的增删改查。
1.实体类:
用户:package entity;
import java.io.Serializable;
public class User implements Serializable {
private String id;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return “User [id=” + id + “, password=” + password + “]”;
}
}
电影的实体类:
package entity;
public class Cinema {
private String id;
private String name;
private String eglish;
private String director;
private String actor;
private String type;
private String price;
private String time;
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 getEglish() {
return eglish;
}
public void setEglish(String eglish) {
this.eglish = eglish;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
public String toString() {
return "Cinema [id=" + id + ", name=" + name + ", eglish=" + eglish + ", director=" + director + ", actor="
+ actor + ", type=" + type + ", price=" + price + ", time=" + time + "]";
}
}
登录模块
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import entity.User;
import util.ReadUserXml;
public class UserLogin{
/*
* 判断账号密码
*/
public static boolean login(String id , String passWord) throws Exception {
List<User> list = new ArrayList<>();
//获取用户
//判断用户角色
list = new ReadUserXml().getAllUser();
for(User user:list) {
String s = id+","+passWord;
if ((user.getId()+","+user.getPassword()).equals(s) ) {
return true;
}
}
return false;
}
public static void log() throws Exception {
Scanner s = new Scanner(System.in);
sop("请输入账号");
String id = s.next();
sop("请输入密码");
String passWord = s.next();
IDC(id,passWord);
}
public static void main(String[] args) {
try {
welcome();
new UserLogin().log();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void sop(Object object) {
System.out.println(object);
}
public static void welcome() throws Exception {
sop("**************************");
sop("欢迎进入**影院在线售票系统");
sop("**************************");
xuanze();
}
//操作
public static void IDC(String id,String passWord ) throws Exception{
if (login(id, passWord)) {
if (id.equals("123")) {
sop("欢迎您管理员");
//对电影进行增删改查
while (true) {
Scanner sc = new Scanner(System.in);
sop("输入:1添加电影 2 修改电影 3 删除电影 4切换用户 其他数字键回到上一级");
int a = 0;
a =sc.nextInt();
if (a==1) {
new Administrator().addCinema();
sop("完成");
}
if (a==2) {
new Administrator().changeCinema();
sop("完成");
}
if (a==3) {
new Administrator().deletCinema();
sop("完成");
}
if (a==4) {
log();
}
else {
IDC(id, passWord);
}
}
}else {
sop("亲爱的顾客欢迎您");
new CinemaTest().cc();
}
}
else {
System.out.println("检查账号密码重新登陆");
log();
}
}
public static void xuanze() throws Exception {
Scanner sc =new Scanner(System.in);
System.out.println("1 注册 2登录");
int a =0;
a=sc.nextInt();
if(a==1) {
new Register().useRegister();
}
if(a==2) {
log();
}
else {
System.out.println("输入有误 请重新输入");
xuanze();
}
}
}
注册模块:
package test;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import entity.User;
import util.ReadUserXml;
public class Register {
public static void useRegister() throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(“请输入您的账号”);
String id = sc.next();
System.out.println(“请输入密码:”);
String password = sc.next();
System.out.println(“请再次输入密码”);
String password2 = sc.next();
if(password2.equals(password)) {
if(userRegisterYz(id)) {
System.out.println(“注册成功”);
addUser(id,password);
fanhui();
}
else {
System.out.println(“该用户已经存在请重新注册”);
useRegister();
}
}
else {
System.out.println(“两次密码不相同请重新输入”);
useRegister();
}
}
public static boolean userRegisterYz(String id) throws Exception {
List list = new ArrayList<>();
list = new ReadUserXml().getAllUser();
for(User user:list) {
if(id.equals(user.getId())) {
return false;
}
}
return true;
}
public static void fanhui() throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(" 1 去登陆 0退出系统");
int a =sc.nextInt();
if(a1) {
new UserLogin().log();
}
if(a0) {
System.exit(0);
}
else {
System.out.println(“输入有误 请重新输入”);
fanhui();
}
}
public static void addUser(String id,String password) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 2.从DOM工厂里获取DOM解析器
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
// 3.解析XML文档,得到DOM树
File f=new File(“src/UserInformation.xml”);
Document docs = db.parse(f);
//创建节点
Element noteElement = docs.createElement("User");
Element toElement1 = docs.createElement("id");
Text gg = docs.createTextNode(id);
toElement1.appendChild(gg);
Element toElement = docs.createElement("password");
Text l = docs.createTextNode(password);
toElement.appendChild(l);
//添加父子关系
noteElement.appendChild(toElement1);
noteElement.appendChild(toElement);
docs.getDocumentElement().appendChild(noteElement);
//保存xml文件
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
DOMSource domSource=new DOMSource(docs);
//设置编码类型
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result=new StreamResult(new FileOutputStream(f));
//把DOM树转换为xml文件
transformer.transform(domSource, result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
useRegister();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void sop(Object object) {
System.out.println(object);
}
}
电影信息展示以及座位号 电影出票
package test;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import entity.Cinema;
import util.CinemaUtil;
import util.Util;
public class CinemaTest {
public static void cc() throws Exception {
List list3 =new Util().sop();
Scanner input = new Scanner(System.in);//创建输入流
CinemaUtil cinemaUtil=new CinemaUtil();
//显示所有
List list = cinemaUtil.getAllCinemas();
System.out.println(“电影编号”+"\t\t"+“电影名称”+"\t\t"+“英文名称”+"\t\t\t"+“导演”+"\t"+“演员”+"\t"+“电影类型”+"\t"+“价格”+"\t"+“時間”);
for (int k = 0; k < list.size(); k++) {
System.out.println(list.get(k).getId()+"\t"+list.get(k).getName()+"\t"+list.get(k).getEglish()+"\t\t"+list.get(k).getDirector()+"\t"+list.get(k).getActor()+"\t"+list.get(k).getType()+"\t"+list.get(k).getPrice()+"\t"+list.get(k).getTime());
}
System.out.println("座位结构图:");
new Util().dayin();
while (true) {
if (true) {
Cinema cinema = new Cinema();
System.out.println("请输入电影名称:");
String cinemaName=input.next();
int k = list.size();
for(int i = 0; i<list.size();i++) {
if(cinemaName.equals(list.get(i).getName())) {
cinema.setName(cinemaName);
break;
}
k--;
}
if (k==0) {
System.out.println("没有该电影");
continue;
}
k=list.size();
System.out.println("请输入电影播放时间:以xx:xx的格式:");
String cinemaTime=input.next();
for(int i = 0; i<list.size();i++) {
if(cinemaTime.equals(list.get(i).getTime())) {
cinema.setTime(cinemaTime);
break;
}
k--;
}
if (k==0) {
System.out.println("没有该电影");
continue;
}
System.out.println("请输入您所要购买的票的编号:1.普通票 2.学生票 3.赠送票");
int cinemaType = input.nextInt();
if (cinemaType==1||cinemaType==2||cinemaType==3) {
if (cinemaType==1) {
cinema.setType("普通票");
}
if (cinemaType==2) {
cinema.setType("学生票");
}
if (cinemaType==3) {
cinema.setType("赠送票");
}
}else {
continue;
}
System.out.println("请输入您所要购买的票的座位号");
String zw = input.next();
int gg=0;
for (int i = 0; i < list3.size(); i++) {
if ((zw+" ").equals(list3.get(i))) {
System.out.println("购票完成");
gg=i;
//添加到io 传进来一个对象 和一个座位信息
ioWriteInTxt(cinema, zw);
break;
}
if (i==list3.size()-1) {
System.out.println("改票已经出售");
}
}
System.out.println("请输入指令:0继续购票 其他数字退出");
list3=new Util().dyb(list3, gg);
Scanner s = new Scanner(System.in);
int a = s.nextInt();
if (a!=0) {
System.out.println("已经退出系统");
System.exit(0);
}
}
}
}
public static void ioWriteInTxt(Cinema cinema,String zw) {
String path = "d:"+cinema.getName()+".txt";
try {
FileWriter writer = new FileWriter(path,true);
String string ="*********电影票************";
writer.write("****************************");
writer.write("\r\n");
writer.write("电影名称: "+cinema.getName());
writer.write("\r\n");
writer.write("观看时间: "+cinema.getTime());
writer.write("\r\n");
writer.write("您的票券类型是:"+cinema.getType());
writer.write("\r\n");
writer.write("您的座位是:"+zw);
writer.write("\r\n");
//写入校验码
writer.write("电影编号: "+jiaoYanma());
writer.write("\r\n");
writer.write("票券售出概不退换");
writer.write("\r\n");
writer.write("****************************");
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String jiaoYanma() {
String s ="";
for(int i=0;i<10;i++) {
s=s+new Random().nextInt(10);
}
return "aosika"+s;
}
}
管理员方法实现:
package test;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.stream.events.Attribute;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.dom4j.io.SAXReader;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import entity.Cinema;
import util.CinemaUtil;
import util.Util;
public class Administrator {
//获取电影
public static List getAllCinma() throws Exception {
List list = new ArrayList<>();
return list = new CinemaUtil().getAllCinemas();
}
/*
* 添加电影
*/
public static void addCinema() throws Exception {
Scanner sc = new Scanner(System.in);
//电影编号
int i =0;
for(Cinema c:getAllCinma()) {
i++;
}
System.out.println(i);
String id = i+1+"";
sop("请输入电影名字:");
String name = sc.nextLine();
sop("请输入英文名称:");
String eglisgh = sc.nextLine();
sop("请输入导演名字:");
String director = sc.nextLine();
sop("请输入演员:");
String actor = sc.nextLine();
sop("请输入电影类型:");
String type = sc.nextLine();
sop("请输入价格:");
String price = sc.nextLine();
sop("请输入时间:");
String time = sc.nextLine();
// 1.得到DOM解析器的工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 2.从DOM工厂里获取DOM解析器
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
// 3.解析XML文档,得到DOM树
File f=new File("src/cinema.xml");
Document docs = db.parse(f);
//创建节点
Element noteElement = docs.createElement("cinema");
Element toElement1 = docs.createElement("id");
Text gg = docs.createTextNode(id);
toElement1.appendChild(gg);
Element toElement = docs.createElement("name");
Text l = docs.createTextNode(name);
toElement.appendChild(l);
Element fromElement = docs.createElement("eglish");
Text t = docs.createTextNode(eglisgh);
fromElement.appendChild(t);//titleElement.setNodeValue(title);
Element headingElement = docs.createElement("director");
Text x = docs.createTextNode(director);
headingElement.appendChild(x);//textElement.setNodeValue(text);
Element headingElement1 = docs.createElement("actor");
Text s = docs.createTextNode(actor);
headingElement1.appendChild(s);//textElement.setNodeValue(text);
Element headingElement2 = docs.createElement("type");
Text y = docs.createTextNode(type);
headingElement2.appendChild(y);//textElement.setNodeValue(text);
Element headingElement3 = docs.createElement("price");
Text r = docs.createTextNode(price);
headingElement3.appendChild(r);//textElement.setNodeValue(text);
Element headingElement4 = docs.createElement("time");
Text q = docs.createTextNode(time);
headingElement4.appendChild(q);//textElement.setNodeValue(text);
//添加父子关系
noteElement.appendChild(toElement1);
noteElement.appendChild(toElement);
noteElement.appendChild(fromElement);
noteElement.appendChild(headingElement);
noteElement.appendChild(headingElement1);
noteElement.appendChild(headingElement2);
noteElement.appendChild(headingElement3);
noteElement.appendChild(headingElement4);
docs.getDocumentElement().appendChild(noteElement);
//保存xml文件
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
DOMSource domSource=new DOMSource(docs);
//设置编码类型
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result=new StreamResult(new FileOutputStream(f));
//把DOM树转换为xml文件
transformer.transform(domSource, result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//对电影进行操作
//根据编号删除电影
public static void deletCinema() throws Exception {
CinemaLook();
sop("请输入编号:");
String id = new Scanner(System.in).next();
//创建一个工厂类
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
DocumentBuilder db=factory.newDocumentBuilder();
//把文件加载到内存 参数:文件的名字
Document doc=db.parse("src/cinema.xml");
NodeList roots=doc.getChildNodes();//获取文件中的所有节点
Node root=roots.item(0);//得到根节点
NodeList cinemas=root.getChildNodes();//得到cinemas节点的子节点
for(int i = 0 ; i<cinemas.getLength();i++) {
Cinema dy = new Cinema();
//得到一部电影
Node cinema=cinemas.item(i);
//把空格去掉
if(cinema.getNodeType()==3) {
continue;
}
String s ="";
NodeList cinemaItems = cinema.getChildNodes();
//现在已经得到cinema有7个子节点 所以要继续遍历 cinema节点的7个子节点
for(int j=0;j<cinemaItems.getLength();j++) {
Node item=cinemaItems.item(j);
if("id".equals(item.getNodeName())) {
if (id.equals(item.getTextContent())) {
s=item.getParentNode().getNodeName();
System.out.println(s);
root.removeChild(item.getParentNode());
//注意:XML文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中
/*
* static TransformerFactory newInstance():获取 TransformerFactory 的新实例。
* abstract Transformer newTransformer():创建执行从 Source 到 Result 的复制的新 Transformer。
* abstract void transform(Source xmlSource, Result outputTarget):将 XML Source 转换为 Result。
*/
Transformer transformer = TransformerFactory.newInstance().newTransformer();
//DOMSource source = new DOMSource(doc);
Source source = new DOMSource(doc);
//StreamResult result = new StreamResult();
Result result = new StreamResult("src/cinema.xml");
transformer.transform(source, result);//将 XML==>Source 转换为 Result
}
}
}
}
}
//根据号修改
public static void changeCinema() throws Exception {
deletCinema();
addCinema();
}
public static void dd() throws Exception{
sop("请输入编号:");
String idd = new Scanner(System.in).next();
SAXReader reader = new SAXReader();
Document document = (Document) reader.read(new File("src/contact.xml"));
//获得某个节点的属性对象
Element root = document.getDocumentElement();
//获取根节点属性对象
// Attribute rootAttr = root.getAttribute(“id”) ;
}
public static void sop(Object object) {
System.out.println(object);
}
public static String jiaoYanma() {
String s ="";
for(int i=0;i<10;i++) {
s=s+new Random().nextInt(10);
}
return "aosika"+s;
}
public static void CinemaLook() throws Exception {
CinemaUtil cinemaUtil=new CinemaUtil();
//显示所有图书
List<Cinema> list = cinemaUtil.getAllCinemas();
for (int k = 0; k < list.size(); k++) {
System.out.println(list.get(k).getId()+"\t"+list.get(k).getName()+"\t\t"+list.get(k).getEglish()+"\t\t"+list.get(k).getDirector()+"\t"+list.get(k).getActor()+"\t"+list.get(k).getType()+"\t"+list.get(k).getPrice()+"\t"+list.get(k).getTime());
}
}
}
读取电影信息的XML文件
package util;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import entity.Cinema;
public class CinemaUtil {
List list = new ArrayList<>();//创建集合
public List getAllCinemas() throws Exception{
//创建一个工厂类
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
DocumentBuilder db=factory.newDocumentBuilder();
//把文件加载到内存 参数:文件的名字
Document doc=db.parse(“src/cinema.xml”);
NodeList roots=doc.getChildNodes();//获取文件中的所有节点
Node root=roots.item(0);//得到根节点
NodeList cinemas=root.getChildNodes();//得到cinemas节点的子节点
//我已经拿到了三部电影 接下来遍历电影 把3部电影读出来
for(int i=0;i<cinemas.getLength();i++) {
Cinema dy = new Cinema();
//得到一部电影
Node cinema=cinemas.item(i);
//把空格去掉
if(cinema.getNodeType()==3) {
continue;
}
NodeList cinemaItems = cinema.getChildNodes();
//现在已经得到cinema有7个子节点 所以要继续遍历 cinema节点的7个子节点
for(int j=0;j<cinemaItems.getLength();j++) {
Node item=cinemaItems.item(j);
if(“id”.equals(item.getNodeName())) {
dy.setId(item.getTextContent());
}
if(“name”.equals(item.getNodeName())) {
dy.setName(item.getTextContent());
}
if(“eglish”.equals(item.getNodeName())) {
dy.setEglish(item.getTextContent());
}
if(“director”.equals(item.getNodeName())) {
dy.setDirector(item.getTextContent());
}
if(“actor”.equals(item.getNodeName())) {
dy.setActor(item.getTextContent());
}
if(“type”.equals(item.getNodeName())) {
dy.setType(item.getTextContent());
}
if(“price”.equals(item.getNodeName())) {
dy.setPrice(item.getTextContent());
}
if(“time”.equals(item.getNodeName())) {
dy.setTime(item.getTextContent());
}
}
list.add(dy);
}
return list;
}
}
读取用户的xml文件
package util;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import entity.Cinema;
import entity.User;
public class ReadUserXml {
List list = new ArrayList<>();//创建集合
public List getAllUser() throws Exception{
//创建一个工厂类
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
DocumentBuilder db=factory.newDocumentBuilder();
//把文件加载到内存 参数:文件的名字
Document doc=db.parse(“src/UserInformation.xml”);
NodeList roots=doc.getChildNodes();//获取文件中的所有节点
Node root=roots.item(0);//得到根节点
NodeList users=root.getChildNodes();//得到cinemas节点的子节点
//我已经拿到了三部电影 接下来遍历电影 把3部电影读出来
for(int i = 0 ;i <users.getLength();i++) {
User user = new User();
//获取一个User
//把空格去掉
Node U = users.item(i);
if(U.getNodeType()==3) {
continue;
}
/*
* NodeList cinemaItems = cinema.getChildNodes();
//现在已经得到cinema有7个子节点 所以要继续遍历 cinema节点的7个子节点
for(int j=0;j<cinemaItems.getLength();j++) {
Node item=cinemaItems.item(j);
if("name".equals(item.getNodeName())) {
dy.setName(item.getTextContent());
}
*/
NodeList UserItems = U.getChildNodes();
for (int j = 0; j < UserItems.getLength(); j++) {
Node item = UserItems.item(j);
if ("id".equals(item.getNodeName())) {
user.setId(item.getTextContent());
}
if ("password".equals(item.getNodeName())) {
user.setPassword(item.getTextContent());
}
}
list.add(user);
}
return list;
}
public static void main(String[] args) {
try {
System.out.println(new ReadUserXml().getAllUser());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
遍历
package util;
import java.util.ArrayList;
import java.util.List;
public class Util {
public static List sop() {
List lz = new ArrayList<>();//存储座位
String zuowei ;
for(int i = 1 ;i <=5;i++) {
for(int j = 1; j<=7;j++) {
zuowei = i+"—"+j+" ";
lz.add(zuowei);
}
}
return lz;
}
public static void dayin() {
List<String> list2 = sop();
for(int i = 0; i<list2.size() ;i++) {
if (i%7==0) {
System.out.println();
}
System.out.print(list2.get(i));
if (i==list2.size()-1) {
System.out.println();
}
}
}
public static List<String> dyb(List<String> list2,int k) {
for(int i = 0; i<list2.size() ;i++) {
if (i%7==0) {
System.out.println();
}
if (i==k) {
System.out.print("VIP座位");
list2.remove(k);
list2.add(k,"VIP座位");
continue;
}
System.out.print(list2.get(i));
if (i==list2.size()-1) {
System.out.println();
}
}
return list2;
}
}
XML电影: