题目
面向对象模拟电影院自动售票系统实现自动选择电影、场次、座位。
思路
通过类定义电影的相关信息,输出输入相关电影信息,对座位进行顺序取
代码解释
class Movie:
def __init__(self, title, duration):
self.title = title
self.duration = duration
def __str__(self):
return f"电影:{self.title},时长:{self.duration}分钟"
class Showtime:
def __init__(self, movie, time):
self.movie = movie
self.time = time
def __str__(self):
return f"电影:{self.movie.title},时间:{self.time}"
class Seat:
def __init__(self, row, seat_number):
self.row = row
self.seat_number = seat_number
self.is_reserved = False
def reserve(self):
self.is_reserved = True
def __str__(self):
return f"座位:{self.row}排{self.seat_number}号"
Movie: 表示电影,包括电影的标题和时长。
Showtime: 表示电影的放映时间,包括关联的电影和具体时间。
Seat: 表示座位,包括座位所在的排数、座位号以及是否已被预订的状态。
class Theater:
def __init__(self):
self.movies = []
self.showtimes = []
self.seats = []
def add_movie(self, movie):
self.movies.append(movie)
def add_showtime(self, showtime):
self.showtimes.append(showtime)
def create_seats(self, rows, seats_per_row):
for row in range(1, rows + 1):
for seat_number in range(1, seats_per_row + 1):
seat = Seat(row, seat_number)
self.seats.append(seat)
def find_available_seat(self):
for seat in self.seats:
if not seat.is_reserved:
return seat
return None
Theater: 表示电影院,包括电影列表、场次列表和座位列表,以及一些操作方法。
add_movie: 将电影添加到电影列表中。
add_showtime: 将场次添加到场次列表中。
create_seats: 根据指定的排数和每排座位数创建座位列表。
find_available_seat: 查找可用的座位,如果有未被预订的座位,则返回第一个可用座位,否则返回 None。
if __name__ == "__main__":
# 创建电影
movie1 = Movie("复仇者联盟", 180)
movie2 = Movie("泰坦尼克号", 195)
# 创建场次
showtime1 = Showtime(movie1, "2024-04-21 10:00")
showtime2 = Showtime(movie2, "2024-04-21 13:00")
# 创建影院
theater = Theater()
theater.add_movie(movie1)
theater.add_movie(movie2)
theater.add_showtime(showtime1)
theater.add_showtime(showtime2)
theater.create_seats(rows=5, seats_per_row=10)
# 选择电影和场次
print("可选电影:")
for movie in theater.movies:
print(movie)
print("\n可选场次:")
for showtime in theater.showtimes:
print(showtime)
# 选择座位
seat = theater.find_available_seat()
if seat:
seat.reserve()
print(f"\n已选择座位:{seat}")
else:
print("\n抱歉,座位已售罄")
在 if __name__ == "__main__": 下,
进行了一些示例操作:
创建了两部电影 movie1 和 movie2。
创建了两个场次 showtime1 和 showtime2,分别关联到了不同的电影和时间。
创建了一个电影院 theater,并将电影、场次添加到电影院中。
调用 create_seats 方法创建了座位。
打印了可选的电影和场次。
调用 find_available_seat 方法查找可用座位,并进行了相应处理
完整代码
class Movie:
def __init__(self, title, duration):
self.title = title
self.duration = duration
def __str__(self):
return f"电影:{self.title},时长:{self.duration}分钟"
class Showtime:
def __init__(self, movie, time):
self.movie = movie
self.time = time
def __str__(self):
return f"电影:{self.movie.title},时间:{self.time}"
class Seat:
def __init__(self, row, seat_number):
self.row = row
self.seat_number = seat_number
self.is_reserved = False
def reserve(self):
self.is_reserved = True
def __str__(self):
return f"座位:{self.row}排{self.seat_number}号"
class Theater:
def __init__(self):
self.movies = []
self.showtimes = []
self.seats = []
def add_movie(self, movie):
self.movies.append(movie)
def add_showtime(self, showtime):
self.showtimes.append(showtime)
def create_seats(self, rows, seats_per_row):
for row in range(1, rows + 1):
for seat_number in range(1, seats_per_row + 1):
seat = Seat(row, seat_number)
self.seats.append(seat)
def find_available_seat(self):
for seat in self.seats:
if not seat.is_reserved:
return seat
return None
if __name__ == "__main__":
# 创建电影
movie1 = Movie("复仇者联盟", 180)
movie2 = Movie("泰坦尼克号", 195)
# 创建场次
showtime1 = Showtime(movie1, "2024-04-21 10:00")
showtime2 = Showtime(movie2, "2024-04-21 13:00")
# 创建影院
theater = Theater()
theater.add_movie(movie1)
theater.add_movie(movie2)
theater.add_showtime(showtime1)
theater.add_showtime(showtime2)
theater.create_seats(rows=5, seats_per_row=10)
# 选择电影和场次
print("可选电影:")
for movie in theater.movies:
print(movie)
print("\n可选场次:")
for showtime in theater.showtimes:
print(showtime)
# 选择座位
seat = theater.find_available_seat()
if seat:
seat.reserve()
print(f"\n已选择座位:{seat}")
else:
print("\n抱歉,座位已售罄")