Advertisement
11AA0

Untitled

Mar 31st, 2023
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import tkinter as tk
  2.  
  3. class MovieTicketSystem:
  4.     def __init__(self):
  5.         self.movies = self.load_movies() # 读取电影信息
  6.  
  7.         # 创建Tkinter界面
  8.         self.window = tk.Tk()
  9.         self.window.title("电影票购买管理系统")
  10.  
  11.         # 创建各种控件
  12.         self.cinema_label = tk.Label(self.window, text="电影院:")
  13.         self.cinema_label.grid(row=0, column=0, padx=5, pady=5)
  14.         self.cinema_entry = tk.Entry(self.window)
  15.         self.cinema_entry.grid(row=0, column=1, padx=5, pady=5)
  16.  
  17.         self.movie_name_label = tk.Label(self.window, text="电影名称:")
  18.         self.movie_name_label.grid(row=1, column=0, padx=5, pady=5)
  19.         self.movie_name_entry = tk.Entry(self.window)
  20.         self.movie_name_entry.grid(row=1, column=1, padx=5, pady=5)
  21.  
  22.         self.movie_scene_label = tk.Label(self.window, text="电影场次:")
  23.         self.movie_scene_label.grid(row=2, column=0, padx=5, pady=5)
  24.         self.movie_scene_entry = tk.Entry(self.window)
  25.         self.movie_scene_entry.grid(row=2, column=1, padx=5, pady=5)
  26.  
  27.         self.seat_label = tk.Label(self.window, text="座位号:")
  28.         self.seat_label.grid(row=3, column=0, padx=5, pady=5)
  29.         self.seat_entry = tk.Entry(self.window)
  30.         self.seat_entry.grid(row=3, column=1, padx=5, pady=5)
  31.  
  32.         self.buy_button = tk.Button(self.window, text="购票", command=self.buy_ticket)
  33.         self.buy_button.grid(row=4, column=0, padx=5, pady=5)
  34.  
  35.         self.movie_listbox = tk.Listbox(self.window)
  36.         for movie in self.movies:
  37.             self.movie_listbox.insert(tk.END, movie["name"])
  38.         self.movie_listbox.bind("<<ListboxSelect>>", self.show_movie_info)
  39.         self.movie_listbox.grid(row=5, column=0, rowspan=6, pady=5)
  40.  
  41.         self.movie_info_text = tk.Text(self.window, height=10)
  42.         self.movie_info_text.grid(row=5, column=1, rowspan=6, padx=5, pady=5)
  43.  
  44.         self.load_movies_button = tk.Button(self.window, text="重新读取电影信息", command=self.reload_movies)
  45.         self.load_movies_button.grid(row=11, column=0, padx=5, pady=5)
  46.  
  47.         self.quit_button = tk.Button(self.window, text="退出", command=self.quit)
  48.         self.quit_button.grid(row=11, column=1, padx=5, pady=5)
  49.  
  50.         # 启动Tkinter界面
  51.         self.window.mainloop()
  52.  
  53.     def load_movies(self):
  54.         movies = []
  55.         with open("movies.txt", "r",encoding="UTF-8") as f:
  56.             for line in f:
  57.                 data = line.strip().split("\t")
  58.                 movie = {
  59.                     "type": data[0],
  60.                     "name": data[1],
  61.                     "score": float(data[2]),
  62.                     "director": data[3],
  63.                     "actor": data[4],
  64.                     "visual_effect": data[5],
  65.                     "scene": data[6],
  66.                     "seats": data[7],
  67.                     "price": float(data[8])
  68.                 }
  69.                 movies.append(movie)
  70.         return movies
  71.  
  72.     def show_movie_info(self, event):
  73.         selected_movie = self.movie_listbox.get(self.movie_listbox.curselection())
  74.         for movie in self.movies:
  75.             if selected_movie == movie["name"]:
  76.                 movie_info = "类型:{}\n评分:{}\n导演:{}\n主演:{}\n视觉效果:{}\n价格:{}".format(
  77.                     movie["type"], movie["score"], movie["director"], movie["actor"], movie["visual_effect"], movie["price"])
  78.                 self.movie_info_text.delete("1.0", tk.END)
  79.                 self.movie_info_text.insert(tk.END, movie_info)
  80.                 break
  81.  
  82.     def buy_ticket(self):
  83.         cinema = self.cinema_entry.get()
  84.         movie_name = self.movie_name_entry.get()
  85.         scene = self.movie_scene_entry.get()
  86.         seat = self.seat_entry.get()
  87.  
  88.         for movie in self.movies:
  89.             if movie["name"] == movie_name and movie["scene"] == scene:
  90.                 seats = movie["seats"].split(",")
  91.                 if seat in seats:
  92.                     seats.remove(seat)
  93.                     movie["seats"] = ",".join(seats)
  94.                     self.save_movies()
  95.                     tk.messagebox.showinfo(title="购票成功", message="购票成功!")
  96.                     break
  97.         else:
  98.             tk.messagebox.showerror(title="购票失败", message="购票失败!")
  99.  
  100.     def reload_movies(self):
  101.         self.movies = self.load_movies()
  102.         self.movie_listbox.delete(0, tk.END)
  103.         for movie in self.movies:
  104.             self.movie_listbox.insert(tk.END, movie["name"])
  105.         self.show_movie_info(None)
  106.  
  107.     def save_movies(self):
  108.         with open("movies.txt", "w",encoding="UTF-8") as f:
  109.             for movie in self.movies:
  110.                 data = "{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format(
  111.                     movie["type"], movie["name"], movie["score"], movie["director"], movie["actor"], movie["visual_effect"], movie["scene"], movie["seats"], movie["price"])
  112.                 f.write(data + "\n")
  113.  
  114.     def quit(self):
  115.         if tk.messagebox.askyesno(title="确认退出", message="是否确认退出?"):
  116.             self.window.quit()
  117.  
  118. if __name__ == "__main__":
  119.     app = MovieTicketSystem()
  120.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement