Python实现电影订票系统

用Python实现一个电影订票系统 而根据用户选择,预订某一场次的座位,实际上是先调用 电影选择系统 选择电影,再调用 选座系统 预订座位。这中间涉及到多次类的实例化与方法调用,为了更清晰地组织代码,我们将这部分内容也抽象成一个类,称为 控制系统。可以把选座系统抽象成一个类:SeatBooking,这个类包含了两种方法,check_bookings() 用于展示所有座位的预订状态,book_seat() 用于完成预订。先来解决ling一项任务:电影选择系统。和选座系统一样,我们可以把“选择电影场次”功能抽象成一个类,称为 电影选择系统。 阅读详情

be2446b210fe98b00e0b10ec5ddef047.png


大家好,今天咱们一起来实现一个简易的电影订票系统,所谓麻雀虽小五脏俱全,跟着完成下来还是能学习到很多知识的

一、效果展示

通过Python实现一个电影订票系统,效果如下所示:

二、整体结构图

b9f5fb0c0046b70e76ffbbef2f50e3c6.png

三、代码分解

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

3.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

3.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)

如果本文对你有帮助的话,请不要吝啬你的赞,谢谢!

推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看B站我的视频!

python计算机毕设【附源码】影院订票系统(django+mysql+论文) 在数据库管理工具的选择上,使用了Navicat 11,这是一个用户友好且功能强大的数据库管理软件,它支持多种数据库系统,包括MySQL,并提供了图形化界面,使得数据库的管理和维护工作更加便捷。开发环境方面,我们选择了PyCharm作为主要的集成开发环境(IDE),它提供了丰富的Python开发工具和插件,支持Django框架,有助于提高开发效率和代码质量。综上所述,开发一个影院订票系统不仅能够提供给用户更加便捷的服务,同时也有助于影院的经营管理和市场推广,具有重要的实际意义。 阅读详情

相关推荐

用 Python 实现电影订票系统 | 内附源码

一、效果展示 电影 二、整体结构图 三、代码分解 infos.py 一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符画,比如电影《泰坦尼克号》的详细信息就可以按下面的形式保存到字典 titanic 中: infos = [ { [video(video-2UqV47AV-1648108859515)(type-csd

小六的博客 1188

Python电影售票系统

Python编程界的一枚小学生,热心分享编程学习经验。

漫步桔田 7343

SV fork join_none & for循环结合使用

fork join_none与循环联用常见问题解决方案

ZhangShuHuai11的博客 880

python在线电影院选择购票售票系统设计与实现(django框架)

python在线电影院选择购票售票系统设计与实现(django框架)黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,优快云博客专家,在线教育专家,优快云钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,免费项目配有对应开发文档、开题报告、任务书、PPT、论文模版等项目都录了发布和功能操作演示视频;项目的界面和功能都可以定制,包安装运行!!!如果需要联系我,可以在优快云网站查询黄菊华老师。

杭州.黄老师 2996

记录:MCGS和正弦变频器通讯

触摸屏实现对变频器:启动、停止、频率设定、频率读取、电压读取、电流读取。通讯方式Modbus RTU。

m0_61837027的博客 1026

LAMMPS模拟新合金没势函数?手把手教你用`pair_style hybrid`混合势函数(附FeCMnSiTi案例)

本文详细介绍了在LAMMPS中如何使用`pair_style hybrid`混合势函数模拟新型高熵合金(如FeCMnSiTi),解决缺乏现成势函数的问题。通过实战案例,涵盖参数查找、命令编写、错误排查等关键步骤,特别适合处理多组元体系的复杂相互作用。文章还提供了EAM势函数与LJ势的组合技巧,帮助研究者准确模拟合金性能。

weixin_30635053的博客 244

python电影院订票信息管理系统flask-django-php-nodejs

当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。

QQ_511008285的博客 989

element的el-cascader组件动态加载,以及报错处理问题

Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. 报错处理

weixin_56527169的博客 1264

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

一、效果展示通过Python实现一个电影订票系统,效果如下所示:二、整体结构图三、代码分解。

白帽阿叁的博客 737

脑机接口最新发展动态报告 (2024-2025)

脑机接口动态

高山 4106

STC8H8K64U ADC采样实战:从蜂鸣器控制到电压测量(附完整代码)

本文以STC8H8K64U单片机为核心,通过两个实战案例详细讲解ADC采样的应用。首先介绍如何利用ADC采样值动态控制蜂鸣器响度,实现模拟PWM效果;其次深入探讨高精度外部电压测量的方法,包括硬件连接、两点校准技巧以及软件滤波,旨在帮助开发者从理论到实践全面掌握ADC功能。

weixin_29159441的博客 562

【代码分解】用Python实现一个电影订票系统

根据用户选择,预订某一场次的座位,实际上是先调用 电影选择系统 选择电影,再调用 选座系统 预订座位。

weixin_61395257的博客 397

图机器学习(1)——图论基础

图 (Graph) 是一种描述实体间关系的数学结构,几乎在各个领域都有应用。例如,社交网络就是图,其中用户之间的连接取决于一个用户是否“关注”另一个用户。图论,即对图的研究,一直以来广受关注,包含了大量算法、性质分析方法和数学模型,以解析复杂系统的行为特征。本节将介绍图数据结构的核心概念,通过理论阐述与实例演示相结合的方式,理解基础理论用以实践应用。重点介绍用于创建、操作和研究复杂网络结构与功能的 Python 库。

盼小辉丶的博客 9102

【文末赠书】用Python实现一个电影订票系统!

来源丨Python小二一、效果展示通过Python实现一个电影订票系统,效果如下所示:二、整体结构图 三、代码分解 3.1 infos.py一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符画,比如电影《泰坦尼克号》的详细信息就可以按下面的形式保存到字典 titanic 中:infos=[ { 'name':'泰坦尼...

小詹学python的博客 437

YOLOv11改进策略【损失函数篇】| arXiv2025 TeLU双曲正切指数线性单元 强梯度防消失 + 解析光滑稳训练,极速提升收敛与泛化

本文记录的是。TeLU(Hyperbolic Tangent Exponential Linear Unit)通过。本文利用TeLU激活函数,以x⋅tanhex统一实现正区间强梯度加速收敛与负区间持续梯度避免死神经元,全程保持解析光滑与极低计算开销,,显著提升深度网络在分类、检测、分割、时序任务中的收敛速度、精度与泛化鲁棒性。

Limiiiing的博客 224

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 秒懂 23 种设计模式!有点污,但真得秒啊...
下一篇: 推荐七个Python效率工具!
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值