python|用Python实现一个电影订票系统

一、整体结构图 python|用Python实现一个电影订票系统
文章图片

二、代码分解 注:完整代码、数据、技术交流,文末获取
2.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': [['○', '●', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '●', '●', '○', '○', '●'], ['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '○', '○', '○', '○'], ['○', '○', '○', '○', '○', '○', '○', '●'], ['○', '○', '●', '○', '○', '○', '○', '○']] }, ]

2.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("非常抱歉,所有座位都被订满了,无法为您保留座位")

2.3 film_selector.py
先来解决ling一项任务:电影选择系统。出于人性化考虑,我们希望用户既可以输入序号选择观看电影,也可以输入 x 选择退出系统。为此,我们需要完成下面两样需求:
  • 和选座系统一样,我们可以把“选择电影场次”功能抽象成一个类,称为 电影选择系统。
  • 而根据用户选择,预订某一场次的座位,实际上是先调用 电影选择系统 选择电影,再调用 选座系统 预订座位。这中间涉及到多次类的实例化与方法调用,为了更清晰地组织代码,我们将这部分内容也抽象成一个类,称为 控制系统。
import time class FilmSelector: # 展示所有可选项 def display_options(self, films): print("今日影院排片列表:") print('+================+') # 按行打印每部电影 for i in range(len(films)): print('{} - {}'.format(i + 1, films[i]['name'])) time.sleep(0.2) # 打印退出选项 print('x - 退出') print('+================+') time.sleep(0.7) # 获取用户的选择 def get_choice(self, films): # 符合要求的输入列表 valid_choice = [str(i + 1) for i in range(len(films))] valid_choice.append('x') choice = input('你的选择是?') # 当不符合要求时,循环获取新的选项 while choice not in valid_choice: choice = input('没有按照要求输入哦,请重新输入') # 返回用户做出的选择 return choice

2.4 main.py
import time from infos import infos from film_selector import FilmSelector from seat_booking import SeatBooking class Controller: def __init__(self, infos): self.films = infos# 电影库所有电影 # 打印欢迎语 self.welcome() # 用户选择想观看的电影 self.choose_film() # 根据用户选择,执行不同流程 if self.choice != 'x': # 为指定场次预订座位 self.choose_seat() # 打印结束语 self.bye() # 用户选择想观看的电影 def choose_film(self): # 实例化 FilmSelector 类 selector = FilmSelector() # 展示所有用户可以选择的选项 selector.display_options(self.films) # 通过 get_choice() 方法获取用户选择 self.choice = selector.get_choice(self.films) # 为指定场次预订座位 def choose_seat(self): # 取出用户所选择的电影 film = self.films[int(self.choice) - 1] # 取出所选择电影的电影名、座位表、宣传画 name = film['name'] seats_list = film['seats'] symbol = film['symbol'] # 打印提示信息和电影宣传画 print('正在为您预订电影《{}》的座位...'.format(name)) time.sleep(0.7) print(symbol) time.sleep(0.7) # 打印预订座位的方法列表 print('支持的座位预订方式如下:') time.sleep(0.7) print('+==========================+') print("1 - 指定行列号预定座位") print("2 - 给我预订一个最靠前的座位!") print('+==========================+') time.sleep(0.7) print('') # 获取座位预订方式 method = input('请选择座位预订方式') # 定义符合要求输入列表 valid_method valid_method = ['1','2'] # 当不符合要求时,循环获取新的选项 while method not in valid_method: method = input('没有按照要求输入哦,请重新输入') # 实例化 SeatBooking 类 booking = SeatBooking() # 打印所有座位的预订信息 booking.check_bookings(seats_list) # 方法 1:指定行列号 if method == '1': booking.book_seat(seats_list) # 方法 2:预订最靠前的座位 else: booking.book_seat_at_front(seats_list) # 打印欢迎语 def welcome(self): print('+============================+') print('+欢迎来到时光电影院+') print('+============================+') print('') time.sleep(0.7) # 打印结束语 def bye(self): print('') time.sleep(0.7) print('+============================+') print('+已经退出系统,下次见!+') print('+============================+') # 实例化 Controller 类 s = Controller(infos)

万水千山总是情,点个 行不行。
推荐文章
  • 李宏毅《机器学习》国语课程(2022)来了
  • 有人把吴恩达老师的机器学习和深度学习做成了中文版
  • 上瘾了,最近又给公司撸了一个可视化大屏(附源码)
  • 如此优雅,4款 Python 自动数据分析神器真香啊
  • 梳理半月有余,精心准备了17张知识思维导图,这次要讲清统计学
  • 香的很,整理了20份可视化大屏模板
技术交流 欢迎转载、收藏、有所收获点赞支持一下!
python|用Python实现一个电影订票系统
文章图片

目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:来自CSDN
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
【python|用Python实现一个电影订票系统】python|用Python实现一个电影订票系统
文章图片

    推荐阅读