利用Python实现电影订票系统
目录
- 一、效果展示
- 二、整体结构图
- 三、代码分解
- 3.1infos.py
- 3.2seat_book.py
- 3.3film_selector.py
- 3.4main.py
一、效果展示
通过Python实现一个电影订票系统,效果如下图所示:
二、整体结构图
三、代码分解
3.1 infos.py
一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符画,比如电影《泰坦尼克号》的详细信息就可以按下面的形式保存到字典 titanic 中:
infos = [ { 'name': '泰坦尼克号', 'symbol': ''' +==================== 泰坦尼克号 =====================+ ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄· ▐ ▄ ▄▄· •██ ██ •██ ▐█ ▀█ •█▌▐█ ██ ▐█ ▌ ▐█. ▐█· ▐█. ▄█▀▀█ ▐█▐▐▌ ▐█· ██ ▄▄ ▐█▌ ·▐█▌ ▐█▌· ▐█ ▐▌ ██▐█▌ ▐█▌ ▐███▌ ▀▀▀ ▀▀▀ ▀▀▀ ▀ ▀ ▀▀ █ ▀▀▀ ·▀▀▀ +===================== Titanic =====================+ ''', 'seats': [['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '●', '○', '○', '●'], ['○', '○', '●', '○', '●', '○', '○', '○'], ['○', '○', '●', '○', '○', '○', '○', '●'], ['○', '○', '●', '○', '○', '○', '●', '○'], ['●', '○', '○', '○', '●', '●', '●', '●']] }, { 'name': '雨人', 'symbol': ''' +====================== 雨人 =======================+ ,---. .--. ,-..-. .-. .--. .-. .-. | .-.\ / /\ \ |(|| \| | |\ /| / /\ \ | \| | | `-'/ / /__\ \(_)| | | |(\ / |/ /__\ \| | | | ( | __ || || |\ | (_)\/ || __ || |\ | | |\ \ | | |)|| || | |)| | \ / || | |)|| | |)| |_| \)\|_| (_)`-'/( (_) | |\/| ||_| (_)/( (_) (__) (__) '-' '-' (__) +===================== Rain Man ====================+ ''', 'seats': [['○', '○', '○', '○', '●', '○', '○', '●'], ['○', '○', '○', '●', '●', '○', '○', '○'], ['○', '●', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '●', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '○', '○', '○', '○']] }, { 'name': '卡门', 'symbol': ''' +======================= 卡门 =======================+ ▄█▄ ██ █▄▄▄▄ █▀▄▀█ ▄███▄ ▄ █▀ ▀▄ █ █ █ ▄▀ █ █ █ █▀ ▀ █ █ ▀ █▄▄█ █▀▀▌ █ ▄ █ ██▄▄ ██ █ █▄ ▄▀ █ █ █ █ █ █ █▄ ▄▀ █ █ █ ▀███▀ █ █ █ ▀███▀ █ █ █ █ ▀ ▀ █ ██ ▀ +====================== Carmen =====================+ ''', 'seats': [['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '●', '●', '○', '○', '●', '●'], ['○', '○', '○', '○', '○', '○', '●', '○'], ['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '●', '○', '○', '○', '●']] }, { 'name': '机器人总动员', 'symbol': ''' +==================== 机器人总动员 ===================+ (`\ .-') /` ('-. ('-. `.( OO ),' ( OO ).-. _( OO) ,--./ .--. / . --. / ,--. ,--. (,------. | | | | \-. \ | |.-') | |.-') | .---' | | | |,.-'-' | | | | OO ) | | OO ) | | | |.'.| |_)\| |_.' | | |`-' | | |`-' |(| '--. | | | .-. |(| '---.'(| '---.' | .--' | ,'. | | | | | | | | | | `---. '--' '--' `--' `--' `------' `------' `------' +====================== WALL·E =====================+ ''', 'seats': [['●', '○', '○', '○', '○', '○', '○', '○'], ['●', '○', '○', '○', '○', '○', '○', '●'], ['○', '○', '●', '○', '●', '○', '●', '○'], ['○', '○', '○', '○', '○', '○', '○', '●'], ['○', '○', '○', '○', '●', '○', '○', '○'], ['●', '●', '○', '○', '○', '●', '○', '○']] }, { 'name': '黑客帝国', 'symbol': ''' +===================== 黑客帝国 =====================+ ________ __ ___ __ _ /_ __/ /_ ___ / |/ /___ _/ /______(_) __ / / / __ \/ _ \ / /|_/ / __ `/ __/ ___/ / |/_/ / / / / / / __/ / / / / /_/ / /_/ / / /> < /_/ /_/ /_/\___/ /_/ /_/\__,_/\__/_/ /_/_/|_| +==================== The Matrix ===================+ ''', 'seats': [['○', '●', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '●', '●', '○', '○', '●'], ['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '○', '○', '○', '●'], ['○', '○', '●', '○', '○', '○', '○', '○']] }, ]
3.2 seat_book.py
选座系统,需要实现下面这两样需求:
- 展示所有座位的预订状态,方便用户查看哪些座位还可以预订;
- 根据用户输入的座位号完成预订。
可以把选座系统抽象成一个类:SeatBooking
,这个类包含了两种方法,check_bookings()
用于展示所有座位的预订状态,book_seat()
用于完成预订。
import time class SeatBooking: # 展示所有座位的预订信息 def check_bookings(self, seats): print("正在为您查询该场次电影的预订状态...") time.sleep(0.7) print('从上到下为 1~6 排,从左至右为 1~8 座') print("======================") for row in seats: time.sleep(0.1) print(' '.join(row)) print("======================") time.sleep(0.7) # 获取符合要求的行索引 def get_row(self): input_row = input("预订第几排的座位呢?请输入 1~6 之间的数字") valid_row = [str(i + 1) for i in range(6)] while input_row not in valid_row: input_row = input('没有按要求输入哦,请输入 1~6 之间的数字') row = int(input_row) - 1 return row # 获取符合要求的列索引 def get_col(self): input_column = input('预订这一排的第几座呢?请输入 1~8 之间的数字') valid_column = [str(i + 1) for i in range(8)] while input_column not in valid_column: input_column = input('没有按要求输入哦,请输入 1~8 之间的数字') column = int(input_column) - 1 return column # 预订指定座位 def book_seat(self, seats): while True: row = self.get_row() column = self.get_col() # 指定座位没有被预订 if seats[row][column] == '○': print("正在为您预订指定座位...") time.sleep(0.7) seats[row][column] = '●' print("预订成功!座位号:{}排{}座".format(row + 1, column + 1)) break # 结束循环,退出选座 # 指定座位已经被预订了 else: print("这个座位已经被预订了哦,试试别的吧") time.sleep(0.7) # 预订最靠前的座位 def book_seat_at_front(self, seats): print("正在为您预订最靠前的座位...") time.sleep(0.7) # 外循环:遍历 seats 的行 for row in range(6): # 内循环:遍历 seats 的列 for column in range(8): # 若碰到没有被预订的座位 if seats[row][column] == '○': seats[row][column] = '●' # 预订该座位 print("预订成功!座位号:{}排{}座".format(row + 1, column + 1)) return # 结束函数的执行,返回到它被调用的地方 # 没有在循环内部结束程序,说明不存在没有被预订的座位 print("非常抱歉
赞 (0)