python面向对象的使用(2)

发布于:2024-04-23 ⋅ 阅读:(197) ⋅ 点赞:(0)

题目

面向对象模拟电影院自动售票系统实现自动选择电影、场次、座位。

思路

通过类定义电影的相关信息,输出输入相关电影信息,对座位进行顺序取

代码解释

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抱歉,座位已售罄")