百木园-与人分享,
就是让自己快乐。

Python实现电影订票系统

一、前言

大家都喜欢看电影吧,一部新剧上场的时候往往会抢不到票,今天通过Python实现一个电影订票系统,满足你想看电影的心。

在这里插入图片描述

二、整体结构图

在这里插入图片描述

三、代码分解

3.1 infos.py

一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符

画,比如电影《泰坦尼克号》的详细信息就可以按下面的形式保存到字典 titanic 中:

Python学习交流Q群:903971231###
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() 用于完成预订。

Python学习交流Q群:903971231####
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)    t
               ime.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)

 

最后

希望学会的你都能抢到票,带着心爱的女朋友去看电影了。喜欢的记得点赞收藏,不懂的评论留言,我一般看见都会回复的,下一章见啦。
在这里插入图片描述


来源:https://www.cnblogs.com/123456feng/p/16122194.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Python实现电影订票系统

相关推荐

  • 暂无文章