用Java写一个电影购票系统的代码,要求使用文件读写
时间: 2024-03-18 18:45:02 浏览: 16
好的,以下是一个简单的电影购票系统的Java代码,使用了文件读写操作:
Movie.java:
```java
import java.io.Serializable;
public class Movie implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String director;
private String actor;
private String releaseDate;
private double price;
private int remainingSeats;
public Movie(String name, String director, String actor, String releaseDate, double price, int remainingSeats) {
this.name = name;
this.director = director;
this.actor = actor;
this.releaseDate = releaseDate;
this.price = price;
this.remainingSeats = remainingSeats;
}
public String getName() {
return name;
}
public String getDirector() {
return director;
}
public String getActor() {
return actor;
}
public String getReleaseDate() {
return releaseDate;
}
public double getPrice() {
return price;
}
public int getRemainingSeats() {
return remainingSeats;
}
public void setRemainingSeats(int remainingSeats) {
this.remainingSeats = remainingSeats;
}
}
```
User.java:
```java
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
```
Ticket.java:
```java
import java.io.Serializable;
public class Ticket implements Serializable {
private static final long serialVersionUID = 1L;
private String movieName;
private int quantity;
private double totalPrice;
public Ticket(String movieName, int quantity, double totalPrice) {
this.movieName = movieName;
this.quantity = quantity;
this.totalPrice = totalPrice;
}
public String getMovieName() {
return movieName;
}
public int getQuantity() {
return quantity;
}
public double getTotalPrice() {
return totalPrice;
}
}
```
MovieTicketSystem.java:
```java
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MovieTicketSystem {
private static final String MOVIE_FILE = "movies.dat";
private static final String USER_FILE = "users.dat";
private static final String TICKET_FILE = "tickets.dat";
private List<Movie> movies;
private List<User> users;
private List<Ticket> tickets;
private Scanner scanner;
public MovieTicketSystem() {
this.movies = new ArrayList<>();
this.users = new ArrayList<>();
this.tickets = new ArrayList<>();
this.scanner = new Scanner(System.in);
}
public void run() {
loadMovies();
loadUsers();
loadTickets();
User user = login();
if (user == null) {
System.out.println("登录失败!");
return;
}
System.out.println("欢迎 " + user.getUsername());
while (true) {
System.out.println("电影列表如下:");
for (int i = 0; i < movies.size(); i++) {
Movie movie = movies.get(i);
System.out.println((i + 1) + ". " + movie.getName() + "(导演:" + movie.getDirector() + ",主演:" + movie.getActor() + ",上映时间:" + movie.getReleaseDate() + ",票价:" + movie.getPrice() + "元,余票:" + movie.getRemainingSeats() + "张)");
}
System.out.print("请选择要购买的电影序号(输入0退出):");
int movieIndex = scanner.nextInt();
if (movieIndex == 0) {
break;
}
System.out.print("请选择要购买的电影票数量:");
int quantity = scanner.nextInt();
Movie movie = movies.get(movieIndex - 1);
if (movie.getRemainingSeats() < quantity) {
System.out.println("余票不足!");
continue;
}
double totalPrice = quantity * movie.getPrice();
System.out.println("您选择购买的是 " + movie.getName() + ",数量为 " + quantity + ",总价为 " + totalPrice + "元。");
System.out.print("是否确认购买(y/n):");
String confirm = scanner.next();
if (!confirm.equalsIgnoreCase("y")) {
continue;
}
Ticket ticket = new Ticket(movie.getName(), quantity, totalPrice);
tickets.add(ticket);
movie.setRemainingSeats(movie.getRemainingSeats() - quantity);
saveTickets();
System.out.println("购买成功!");
}
scanner.close();
}
private void loadMovies() {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(MOVIE_FILE))) {
this.movies = (List<Movie>) in.readObject();
} catch (IOException | ClassNotFoundException e) {
System.out.println("读取电影列表失败!");
}
}
private void loadUsers() {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(USER_FILE))) {
this.users = (List<User>) in.readObject();
} catch (IOException | ClassNotFoundException e) {
System.out.println("读取用户列表失败!");
}
}
private void loadTickets() {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(TICKET_FILE))) {
this.tickets = (List<Ticket>) in.readObject();
} catch (IOException | ClassNotFoundException e) {
System.out.println("读取购票列表失败!");
}
}
private void saveTickets() {
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(TICKET_FILE))) {
out.writeObject(tickets);
} catch (IOException e) {
System.out.println("保存购票记录失败!");
}
}
private User login() {
System.out.print("请输入用户名:");
String username = scanner.next();
System.out.print("请输入密码:");
String password = scanner.next();
for (User user : users) {
if (user.getUsername().equals(username) && user.getPassword().equals(password)) {
return user;
}
}
return null;
}
public static void main(String[] args) {
new MovieTicketSystem().run();
}
}
```
该电影购票系统使用了三个文件来存储电影列表、用户列表和购票记录,分别为movies.dat、users.dat和tickets.dat。在程序运行时,会先读取这三个文件中的数据,然后让用户输入用户名和密码进行登录。如果登录成功,程序会显示电影列表,让用户选择要购买的电影和数量,并计算总价。如果确认购买,程序会将购买信息写入tickets.dat文件,并更新movies.dat文件中对应电影的余票数量。