用Java写一个影院购票系统的代码,要求使用文件读写,有用户和商家两种身份
时间: 2024-03-19 20:46:11 浏览: 20
好的,以下是一个简单的影院购票系统的 Java 代码,包括了文件读写和用户、商家两种身份的功能。
```java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class CinemaTicketSystem {
// 文件名
private static final String USER_FILE = "users.txt";
private static final String MOVIE_FILE = "movies.txt";
// 用户类型
private static final int USER_TYPE_CUSTOMER = 1;
private static final int USER_TYPE_VENDOR = 2;
// 影片信息
private static class MovieInfo {
public String name;
public int price;
public int count;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 登录
int userType = login(scanner);
// 根据用户类型选择不同的操作
if (userType == USER_TYPE_CUSTOMER) {
// 用户操作
customerOperation(scanner);
} else if (userType == USER_TYPE_VENDOR) {
// 商家操作
vendorOperation(scanner);
}
scanner.close();
}
// 登录
private static int login(Scanner scanner) {
int userType = 0;
while (userType == 0) {
System.out.println("请选择用户类型:1.顾客 2.商家");
int choice = scanner.nextInt();
if (choice == 1) {
userType = USER_TYPE_CUSTOMER;
} else if (choice == 2) {
userType = USER_TYPE_VENDOR;
} else {
System.out.println("选择无效,请重新选择");
}
}
return userType;
}
// 用户操作
private static void customerOperation(Scanner scanner) {
// 读取影片信息
MovieInfo[] movies = readMovies();
// 显示影片列表
System.out.println("影片列表:");
for (int i = 0; i < movies.length; i++) {
System.out.printf("%d. %s(票价:%d元,余票:%d张)\n", i + 1, movies[i].name, movies[i].price, movies[i].count);
}
// 选择影片
System.out.println("请选择要观看的影片编号:");
int choice = scanner.nextInt();
if (choice < 1 || choice > movies.length) {
System.out.println("选择无效");
return;
}
MovieInfo chosenMovie = movies[choice - 1];
// 购票
System.out.println("请输入购票数量:");
int count = scanner.nextInt();
if (count <= 0 || count > chosenMovie.count) {
System.out.println("购票数量无效");
return;
}
int totalPrice = chosenMovie.price * count;
System.out.printf("总价:%d元,是否确认购买?(y/n)\n", totalPrice);
String confirm = scanner.next();
if (!confirm.equalsIgnoreCase("y")) {
System.out.println("已取消购买");
return;
}
chosenMovie.count -= count;
// 更新影片信息
writeMovies(movies);
System.out.printf("购买成功,总价:%d元\n", totalPrice);
}
// 商家操作
private static void vendorOperation(Scanner scanner) {
// 读取影片信息
MovieInfo[] movies = readMovies();
// 显示影片列表
System.out.println("影片列表:");
for (int i = 0; i < movies.length; i++) {
System.out.printf("%d. %s(票价:%d元,余票:%d张)\n", i + 1, movies[i].name, movies[i].price, movies[i].count);
}
// 修改影片信息
System.out.println("请选择要修改的影片编号:");
int choice = scanner.nextInt();
if (choice < 1 || choice > movies.length) {
System.out.println("选择无效");
return;
}
MovieInfo chosenMovie = movies[choice - 1];
System.out.println("请输入新的票价:");
chosenMovie.price = scanner.nextInt();
System.out.println("请输入新的余票数量:");
chosenMovie.count = scanner.nextInt();
// 更新影片信息
writeMovies(movies);
System.out.println("影片信息修改成功");
}
// 读取影片信息
private static MovieInfo[] readMovies() {
try (BufferedReader reader = new BufferedReader(new FileReader(MOVIE_FILE))) {
int count = Integer.parseInt(reader.readLine());
MovieInfo[] movies = new MovieInfo[count];
for (int i = 0; i < count; i++) {
String[] parts = reader.readLine().split(",");
MovieInfo movie = new MovieInfo();
movie.name = parts[0];
movie.price = Integer.parseInt(parts[1]);
movie.count = Integer.parseInt(parts[2]);
movies[i] = movie;
}
return movies;
} catch (IOException e) {
System.out.println("读取文件失败:" + e.getMessage());
return null;
}
}
// 更新影片信息
private static void writeMovies(MovieInfo[] movies) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(MOVIE_FILE))) {
writer.write(String.valueOf(movies.length));
writer.newLine();
for (int i = 0; i < movies.length; i++) {
MovieInfo movie = movies[i];
writer.write(String.format("%s,%d,%d", movie.name, movie.price, movie.count));
writer.newLine();
}
} catch (IOException e) {
System.out.println("写入文件失败:" + e.getMessage());
}
}
}
```
影片信息存储在 movies.txt 文件中,文件格式为:
```
<影片数量>
<影片1名称>,<影片1票价>,<影片1余票数量>
<影片2名称>,<影片2票价>,<影片2余票数量>
...
```
用户和商家的身份根据选择的登录类型来确定,在登录时通过控制台输入。
用户可以查看影片列表,并选择要观看的影片以及购买的票数,系统会进行余票和价格的检查,购买成功后会更新影片信息并显示总价。
商家可以查看影片列表,并选择要修改的影片的票价和余票数量,修改成功后会更新影片信息。