利用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)

相关推荐

  • 基于Python实现电影售票系统

    目录 一.系统要求 二.用户信息 三.主要代码 四.效果图展示 一.系统要求 电影售票系统程序,应具备以下几点功能: 1.用户认证 系统用户分为用户.管理员两个角色,系统可根据不同用户角色权限进入不同界面,所有用户角色需要通过身份验证才能登录系统进行操作. 2.用户登录 主要实现用户登录系统可查看本人会员信息.购买影票.查看订票.影票退订.修改信息等功能. 3.管理登录 主要实现管理员登录系统可查看会员和管理信息.添加会员.注销会员.查看购票.影票出售.影票退订.查看影票余票和售票.增删管理.增

  • Python利用多线程同步锁实现多窗口订票系统(推荐)

    利用Python实现多窗口订票系统,利用 threading.Lock() 避免出现一票多卖,无票也卖的情况,并规范化输出情况. 代码: import threading import time tickets, lock = 20, threading.Lock() class TicketWindows(threading.Thread): def __init__(self, window_name): threading.Thread.__init__(self) self.window

  • 利用Python实现电影订票系统

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

  • Python基于机器学习方法实现的电影推荐系统实例详解

    推荐算法在互联网行业的应用非常广泛,今日头条.美团点评等都有个性化推荐,推荐算法抽象来讲,是一种对于内容满意度的拟合函数,涉及到用户特征和内容特征,作为模型训练所需维度的两大来源,而点击率,页面停留时间,评论或下单等都可以作为一个量化的 Y 值,这样就可以进行特征工程,构建出一个数据集,然后选择一个合适的监督学习算法进行训练,得到模型后,为客户推荐偏好的内容,如头条的话,就是咨询和文章,美团的就是生活服务内容. 可选择的模型很多,如协同过滤,逻辑斯蒂回归,基于DNN的模型,FM等.我们使用的方式

  • Java实现电影院订票系统代码

    程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势...但是由于时间原因,小编并未在代码中添加可视化图形界面,有兴趣的朋友可自行添加. 可参阅:Java图形化界面设计之容器(JFrame)详解 演示结果: 下面是具体实现代码: public class Test { public static void main(String[] args) { BookTicket bookTicket = new BookTicket(); bookTicket.init()

  • C语言实现航空订票系统课程设计

    本文实例为大家分享了C语言实现航空订票系统的具体代码,供大家参考,具体内容如下 大一写的时候没有写注释,后来也懒得加了.在这里说一下读写文件的思路吧. 就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体中的数据保存到链表中. 以下代码可直接复制粘贴就能运行,绝对是新手的好福利! 如果有第一次写这种大作业不知道如何下手,但又不想直接复制粘贴,想搞清楚这个代码的原理的可以私信我,毕竟我当时也第一次写这种大作业时也很苦恼(我

  • C语言实现飞机订票系统

    问题描述与题目要求 问题描述: 假定某民航有M个航次的班机,每个航次都只到达一个地方.试为该机场售票处设计一个自动订票和退票系统,要求系统具有以下功能: (1) 订票:若该航次余票大于等于乘客订票数,则在该航次的乘客表中,插入订票乘客的信息项,并修改该航次有关数据,否则给出相应信息. (2) 退票:若该航次当前退票数小于等于乘客原订票数,则在相应的乘客表中找到该乘客项,修改该航次及乘客表中有关数据:当某乘客由于退票使订票数为零时,则从乘客表中撤消该数据项. 要求: (1)描述对航次表和乘客表选用

  • C语言实现航班订票系统

    本文实例为大家分享了C语言实现航班订票系统的具体代码,供大家参考,具体内容如下 描述: 点定义两个链表,一个存储航班信息,一个存储客户信息: 进行一系列简单的增删查找: 代码如下 #include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> using namespace std; const int MAXN=250; typedef struct { string p_id

  • C++实现航空订票系统课程设计

    本文实例为大家分享了C++实现航空订票系统的具体代码,供大家参考,具体内容如下 一.题目 1.录入功能 可以录入航班信息(如航班号,起飞降落时间,城市,座位数,票价) 2.查询功能 可以查询航班的各项信息(如根据航班号,起飞降落城市查找航班并显示航班信息) 3.修改删除功能 可以修改删除航班的信息 4.追加航线 在原本的航线之后可以继续添加航线方便操作 5.订票功能 可以订票并且记录下乘客的相关信息(如姓名,身份证号码) 6.退票功能 可以退票并且记录乘客的相关信息以及退票信息 二.代码 #in

  • C++实现飞机订票系统

    本文实例为大家分享了C++实现飞机订票系统的具体代码,供大家参考,具体内容如下 // 飞机订票系统.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <string.h> #include<stdlib.h> #include<conio.h> #define N 2 typedef struct plane {     char ID[10];

  • C语言实现飞机订票系统的完整代码

    目录 题目 总体设计和需求分析 设计目的 总体设计和功能 结构体设计 机票信息结构体 主函数的设计 各功能代码的实现 前置 添加机票 查找机票信息 修改机票信息 显示机票信息 推荐机票信息 订票 退票 保存信息 显示时间 测试 总结 题目 本文将设计一个飞机订票系统,主要包括机票的添加.修改.查找.订票.退票.推荐机票功能,用C语言编程实现,并用链表存储产生的航班信息和订票信息数据,最后可以把链表中的数据保存到文件中. 总体设计和需求分析 设计目的 1.怎样去合理的设计一个数据结构来存储订票信息

  • C语言实现火车订票系统

    本文实例为大家分享了C语言实现火车订票系统的具体代码,供大家参考,具体内容如下 程序介绍 1.运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分.其运行效果如图所示.在主界面上输入数字0——6,实现相应的功能. 2.主界面输入“1”,进入添加火车信息界面,如图所示.根据屏幕上给出的提示输入火车的车次,起点,终点,出发时间,到达时间,票价和可以订购的票数. 3.主界面输入“2”,可以查询火车信息,可以选择查询的方法有两种,一种是按照车次查询,一种是按照你想要到达的地方查询,运行效

随机推荐