python-数据结构-大学生-航空订票系统

这篇具有很好参考价值的文章主要介绍了python-数据结构-大学生-航空订票系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python-数据结构-大学生-航空订票系统

1.问题描述及任务描述

1.1问题描述

航空订票系统:可以实现航空客运订票的主要业务活动
基本要求:
(1)航线管理:每条航线所涉及的信息由:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量;
(2)客户管理:有关订票的客户信息(包括姓名、订票数、舱位等级(1、2和3))以及等候替补的客户名单(包括姓名、所需票量);
(3)系统实现的主要操作和功能(查询航线、承办订票业务和承办退票业务);

1.2问题分析

按照IPO的程序撰写操作。本问题是设计一款航空订票系统,其中涵盖航线管理、订票服务和退票服务。
航线管理涉及添加航班信息、查询航班信息、修改航班休息、删除航班信息等操作,其中必须要保证成员定额必须大于等于余票量,否则不符合程序。同时需要将航班信息进行存储。
订票服务需包含航班信息的查找和修改操作以及添加乘客信息,并将乘客信息进行存储。按照余票量的有无,乘客需分为已定票和候补票两种,分别将这两类乘客信息存储到不同的文件中,防止数据的混乱。
退票服务涉及航班信息的查找、乘客信息的查找、乘客信息的删除、航班信息中余票量的修改。
根据问题分析,可以确定程序需要具备含有添加、删除、修改、查询、订票、退票功能,并能够对数据文件进行读写操作。完成程序基本思路的确定,程序主要框架的建立,编写主函数及子函数,同时编写文件的读写操作,数据的展示操作。设计完成后,对程序进行总体测试和优化。

2.概要设计

2.1基本思路

根据题目信息,确定好程序功能模块,建立主菜单,其中包含航班信息的添加、查询、删除、修改、乘客的订票服务和退票服务、以及退出系统,共计七大模块,利用函数对各个功能模块进行打包封装。在主函数中以while循环形式确定用户输入的指令,根据用户输入的不同指令调用不同的函数功能入口,从而实现航空订票系统的各项功能。

2.2功能模块设计

功能模块设计图如图所示,模块根据航空订票系统内容来划分,具体操作由用户键盘输入选择功能,将航班信息和乘客已定票和候补票信息分别存储到fly=“fly.txt”、ticket=“ticket.txt”、no_ticket=“no_ticket.txt”文件中。并对fly=“fly.txt”文件中的航班信息进行展示。
python-数据结构-大学生-航空订票系统

3.函数调用关系

3.1函数调用关系

python-数据结构-大学生-航空订票系统
代码展示如下:

def main():  #主函数
    while 1:
        print_menu()
        choice=int(input("请选择:"))
        if choice in [1,2,3,4,5,6]:
            if choice==1:
                add_info()            #1.添加航班信息
            elif choice==2:
                search_info()         #2.查询航班信息
            elif choice==3:
                modify_info()         #3.修改航班信息
            elif choice==4:
                delete_info()         #4.删除航班信息
            elif choice==5:
                booking_service()     #5.客户订票服务
            elif choice==6:
                refund_system()       #6.客户退票服务
            elif choice==7:
                answer=input('你确定要退出系统吗?y/n')
                if answer =='y'or answer =='Y':
                    print('感谢你的使用!')
                    break
                else:
                    continue


def print_menu():  #菜单目录
    print('*' * 30)
    print('-' * 13 + '菜单' + '-' * 13)
    print('1.添加航班信息')
    print('2.查询航班信息')
    print('3.修改航班信息')
    print('4.删除航班信息')
    print('5.客户订票服务')
    print('6.客户退票服务')
    print('7.退出系统')
    print('*' * 30)

def add_info():
	pass

def search_info():
	pass

def modify_info():
	pass

def delete_info():
	pass

def booking_service():
	pass

def refund_system():
	pass

if __name__ == '__main__':
    main()

3.2子函数功能设计

3.2.1添加航班信息

函数add_info()无返回值,无形参。函数的主要功能是让管理员输入航班信息并添加到fly.txt文件中。在函数体中,首先创建了一个fly_list=[]列表,然后依次输入航班信息,并将信息储存在字典fly_dict{}中,然后将字典添加进fly_list.append(fly_dict)完成对航班信息的存储。输入信息时,按照要求,乘员定额必须大于或等于余票量,若违反此条规定,则重新输入航班信息。函数内部是以一个while无限循环为主体,顺利完成一组航班信息的录入之后,系统会自动提示,是否继续添加航班信息?y/n,输入“Y”或“y”则退出while无限循环即可安全退出添加航班信息操作,重新回到系统菜单。若输入“N”或“n”则再次循环,可再次添加航班信息。

def add_info():  #1、添加航班信息函数
    fly_list=[]
    while 1:
        home_name = input('终点站名称:')
        fight_number = input('航班号:')
        plane_number = input('飞机号:')
        fight_data = input('飞行日期(标准输入格式:星期三):')
        carrying_capacity = input('该型号飞机乘员定额:')
        tickets_left = input('余票量:')
        fly_dict= {'home_name':home_name,'fight_number':fight_number,'plane_number':plane_number,
                   'fight_data':fight_data,'carrying_capacity':carrying_capacity,'tickets_left':tickets_left}
        fly_list.append(fly_dict)
        answer=input('是否继续添加航班信息?y/n')
        if answer=='y'or answer=='Y':
            continue
        else:
            break
    save(fly_list,fly)
    print('航班信息录入完毕')

3.2.2查询航班信息

函数search_info()无返回值,无形参。函数主要功能是让管理员输入航班号或终点站名称查询航班具体信息。在函数体中,首先创建了一个fly_query=[]列表,然后根据系统提示“按照航班号查找请输入1,按照终点站名称查找请输入2”,输入正确的格式即可进入查询模块,若输入格式错误,则重新输入,此时在函数体中嵌套了search_info()函数。进入查询模块之后,系统会读取fly.txt中航班信息数据,将读取的航班信息与输入的航班信息对比,若相等则将文件fly.txt中含该特定信息的整行航班信息添加到fly_query=[]列表中,然后利用函数show_fly(fly_query),对fly_query=[]列表中的信息进行展示。展示完成后,对fly_query=[]列表中的信息进行清除,以待下一次查询。函数内部是以一个while无限循环为主体,顺利完成一组航班信息的查询之后,系统会自动提示,是否继续查询航班信息?y/n,输入“Y”或“y”则退出while无限循环即可安全退出查询航班信息操作,重新回到系统菜单。若输入“N”或“n”则再次循环,可再次查询航班信息。若fly.txt文件中没有存储航班信息,系统会打印输出“暂时未保存航班信息数据!!!”,然后退回菜单系统。

def search_info():
    fly_query=[]
    while 1:
        fight_number=''
        home_name=''
        if os.path.exists(fly):
            mode=input('按照航班号查找请输入1,按照终点站名称查找请输入2:')
            if mode=='1':
                fight_number=input('请输入航班号:')
            elif mode=='2':
                home_name=input('请输入终点站名称:')
            else:
                print('您的输入格式有误,请重新输入!')
                search_info()
            with open(fly,'r') as rfile:
                fly_info=rfile.readlines()
                for item in fly_info:
                    d=dict(eval(item))
                    if fight_number!='':
                        if d['fight_number']==fight_number:
                            fly_query.append(d)
                    elif home_name!='':
                        if d['home_name']==home_name:
                            fly_query.append(d)
            show_fly(fly_query)
            fly_query.clear()
            answer = input('是否继续查询航班信息?y/n')
            if answer == 'y' or answer == 'Y':
                continue
            else:
                break
        else:
            print('暂未保存此航班信息!!!')
            return

3.2.3修改航班信息

函数modify_info()无返回值,无形参。函数主要功能是让管理员输入航班号来修改已经存储完成的航班信息。在函数体中,首先套用了show()函数,目的是展示以存储的全部航班信息,便于接下来的操作。然后判断fly.txt文件中是否有数据存在,若没有数据存在,则返回主菜单。根据系统提示,输入航班号,接着打开文件,对文件内的航班信息进行行遍历操作。若航班信息中的航班号与输入信息相同,则修改该航班号所在行的所有航班信息,并将修改完成后的航班信息重新写入文件。若文件中没有与输入信息相同的航班号,则显示“未找到航班号为{fly_fight_number}的航班信息,无法进行删除操作!”。修改操作完成后,系统会自动提示,,是否继续修改航班信息?y/n,输入“Y”或“y”即可安全退出修改航班信息操作,重新回到系统菜单。若输入“N”或“n”则重新执行修改航班信息操作。

def modify_info():  #航班信息修改函数
    show()
    if os.path.exists(fly):
        with open(fly,'r') as rfile:
            fly_old=rfile.readlines()
    else:
        return
    fly_fight_number=input('请输入要修改的航班的航班号:')
    with open(fly,'w') as file:
        for item in fly_old:
            d=dict(eval(item))
            if d['fight_number']==fly_fight_number:
                print('已经找到航班信息,可以进行修改操作')
                while 1:
                    try:
                        d['home_name']=input('请输入终点站名称:')
                        d['plane_number']=input('请输入飞机号:')
                        d['fight_data']=input('请输入飞行日期:')
                        d['carrying_capacity']=input('请输入乘员定额:')
                        d['tickets_left']=input('请输入余票量:')
                    except:
                        print('你的输入有误,请重新输入!')
                    else:
                        break
                file.write(str(d)+'\n')
                print('信息修改成功!')
            else:
                file.write(str(d) + '\n')
        answer=input('是否继续修改其他航班信息?y/n')
        if answer=='y' or answer=='Y':
            modify_info()

3.2.4删除航班信息

函数delete_info()无返回值,无形参。函数主要功能是让管理员输入航班号来删除已经存储完成的航班信息。在函数体中,首先套用了show()函数,目的是展示以存储的全部航班信息,便于接下来的操作。按照系统提示“请输入要删除航班信息的航班号:”然后接着打开文件,对文件内的航班信息进行行遍历操作fly_old=file.readlines()。若航班信息中的航班号与输入信息相同,则删除该航班号所在行的所有航班信息,并将其他不相关的航班信息再次写进文件fly.txt中。若文件中没有航班信息,系统会显示“暂时未保存航班信息数据!”并返回系统菜单。删除完成之后,显示文件中的航班信息。函数内部是以一个while无限循环为主体,顺利完成一组航班信息的删除操作之后,系统会自动提示,是否继续删除航班信息?y/n,输入“Y”或“y”则退出while无限循环即可安全退出删除航班信息操作,重新回到系统菜单。若输入“N”或“n”则再次循环,可再次删除航班信息。

def delete_info():
    while 1:
        fly_fight_number=input('请输入要删除航班信息的航班号:')
        if fly_fight_number!='':
            if os.path.exists(fly):#判断括号里的文件是否存在
                with open (fly,'r') as file:
                    fly_old=file.readlines()
            else:
                fly_old=[]
            flag=0
            if fly_old:
                with open(fly, 'w') as file:
                    for item in fly_old:
                        d = dict(eval(item))  # 将字符串转成字典
                        if d['fight_number'] == fly_fight_number:
                            flag=1
                        else:
                            file.write(str(d) + '\n')
                    if flag:
                        print(f'航班号为{fly_fight_number}的航班信息已被删除')
                    else:
                        print(f'没有找到航班号为{fly_fight_number}的航班信息')
            else:
                 print('无航班信息')
                 break
            show()  # 删除之后重新显示所有学生信息
            answer = input('是否继续删除?y/n\n')
            if answer == 'y':
                continue
            else:
                break

3.2.5客户订票服务

函数booking_service()无返回值,无形参。函数主要功能是让用户输入终点站名称和飞行日期来选择航班。在函数体中,首先创建了两个列表people_list = []、people_grade_list = []。然后系统会判断文件fly.txt中是否含有航班信息,若没存储航班信息,系统会自动返回到系统菜单。若文件中含有航班信息,会打开文件,对文件内的航班信息进行行遍历操作fly_old=rfile.readlines()。接着按照系统提示输入“请输入终点站名称:”和“请输入你的起飞日期(标准输入格式:星期三):”。根据用户订票习惯,依靠终点站名称和飞行日期可以满足用户的飞行需求。输入完成后,依靠for循环检验fly_old中的信息是否有同时符合用户输入的终点站名称和飞行日期。若有符合条件的航班信息,将信息添加至people_list = []列表中people_list.append(d)。检验列表people_list的长度,若len(people_list)==0,则系统显示“没有查询到航班信息,无数据显示!!!”,并再次执行booking_service()(我们在if语句中嵌套了booking_service()函数)。接着使用show_fly(people_list)展示符合条件的航班信息。函数内部是以一个while无限循环为主体,用户顺利完成一组航班信息的搜索之后,系统会自动提示,该航班基本符合情况是否预定?y/n,输入“Y”或“y”则退出while无限循环进入乘客信息录入函数booking_service_2()。若输入“N”或“n”则再次循环,则退出while无限循环进入系统菜单。

def booking_service():
    people_list = []
    people_grade_list = []
    print('航空客服:欢迎进入乘客订票系统,很高兴为你服务。')
    while 1:
        print('航空客服:下面是航班信息一览图,请选择合适的航班。')
        show()
        people_home_name=input('请输入终点站名称:')
        people_fight_data=input('请输入你的起飞日期(标准输入格式:星期三):')
        with open(fly, 'r') as rfile:
            fly_info = rfile.readlines()
            for item in fly_info:
                d = dict(eval(item))
                if people_home_name != ''and people_fight_data!='':
                    if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                        people_list.append(d)
        if len(people_list) == 0:
            print('没有查询到航班信息,无数据显示!!!')
            booking_service()
        show_fly(people_list)
        answer = input('该航班基本符合情况是否预定?y/n')
        if answer == 'y' or answer == 'Y':
            booking_service_2(people_home_name,people_fight_data)
            break
        else:
            break


def booking_service_2(people_home_name,people_fight_data):
    ticket_list = []
    no_ticket_list=[]
    grade_ticket_list=[]
    grade_no_ticket_list = []
    people_ticket_number=0
    people_no_ticket_number = 0
    while 1:
        people_name = input('请输入你的姓名:')
        people_number = input('请输入你需要的飞机票数:')
        for i in range(1, eval(people_number) + 1):
            print(f'由于你订购了{people_number}张飞机票,接下来,你将选择第{i}张飞机票的舱位等级。')
            people_grade = input('请输入你的舱位等级(舱位等级:1、2、3):')
            if os.path.exists(fly):
                with open(fly, 'r') as rfile:
                    fly_old = rfile.readlines()
            else:
                return
            with open(fly,'w') as wfile:
                for item in fly_old:
                    d = dict(eval(item))
                    if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                        while 1:
                            d['tickets_left']=str(eval(d['tickets_left'])-1)
                            break
                        wfile.write(str(d) + '\n')
                    else:
                        wfile.write(str(d) + '\n')
            with open(fly, 'r') as rfile:
                fly_info = rfile.readlines()
                for item in fly_info:
                    d = dict(eval(item))
                    if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                        if eval(d['tickets_left'])>=0:
                            grade_ticket_list.append(people_grade)
                            people_ticket_number+=1
                        else:
                            answer = input('该航班没有余票,你将进入候补,您是否要预定?y/n')
                            if answer == 'y' or answer == 'Y':
                                grade_no_ticket_list.append(people_grade)
                                people_no_ticket_number+=1
        if people_ticket_number!=0:
            ticket_dict={"终点站名称":people_home_name,"飞行日期":people_fight_data,
                         "乘客姓名":people_name,"飞机票数":people_ticket_number,"舱位等级":grade_ticket_list}
            ticket_list.append(ticket_dict)
        if people_no_ticket_number!=0:
            no_ticket_dict = {"终点站名称": people_home_name, "飞行日期": people_fight_data,
                           "乘客姓名": people_name, "飞机票数": people_no_ticket_number, "舱位等级": grade_no_ticket_list}
            no_ticket_list.append(no_ticket_dict)
        break
    save(ticket_list,ticket)
    save(no_ticket_list, no_ticket)
    print('订票成功')

3.2.6客户退票服务

函数refund_system()无返回值,无形参。函数主要功能是让用户输入姓名来进行飞机票退票操作。首先系统会提示用户“请输入你的姓名:”,输入完成后。系统会判断文件ticket.txt和no_ticket.txt中是否含有乘客信息,若没有乘客信息,系统会自动返回到系统菜单。若文件中含有乘客信息,系统会打开文件,并对文件内的乘客信息进行遍历操作fly_old_1=file_1.readlines()、fly_old_2=file_2.readlines()。依靠for循环检验fly_old_1中的信息是否有符合用户输入的姓名。若有符合条件的乘客信息,令people_home_name=str(d[“终点站名称”])、people_fight_data=str(d[“飞行日期”])、people_ticket_number+=d[‘飞机票数’]便于下一步操作。再次依靠for循环检验fly_old_2中的信息是否有符合用户输入的姓名。若有符合条件的乘客信息,令people_ticket_number += d[‘飞机票数’]。同时系统会删除文件ticket.txt和no_ticket.txt中该名乘客信息。紧接着系统会判断文件fly.txt中是否含有航班信息,若没有航班信息,系统会自动返回到系统菜单。若文件中含有航班信息,系统会打开文件,并对文件内的航班信息进行遍历操作fly_old = rfile.readlines()。依靠for循环检验fly_old中的信息是否有同时符合people_home_name和people_fight_data,若有同时符合的航班信息,将该条航班信息中的余票量进行修改d[‘tickets_left’] = str(eval(d[‘tickets_left’]) + people_ticket_number)并写入文件中进行保存。完成系统提示操作后,系统会回到系统菜单。

def refund_system():
    while 1:
        people_name=input('请输入你的姓名:')
        people_home_name=''
        people_fight_data=''
        if people_name!='':
            if os.path.exists(ticket):#判断括号里的文件是否存在
                with open (ticket,'r') as file:
                    fly_old=file.readlines()
            else:
                fly_old=[]
            flag=0
            if fly_old:
                with open(ticket, 'w') as file:
                    for item in fly_old:
                        d = dict(eval(item))  # 将字符串转成字典
                        if d['乘客姓名'] == people_name:
                            people_home_name=str(d["终点站名称"])
                            people_fight_data=str(d["飞行日期"])  
                            flag=1
                        else:
                            file.write(str(d) + '\n')
                    if flag:
                        print(f'姓名为{people_name}的订票信息已被删除')
                    else:
                        print(f'没有找到姓名为{people_name}的订票信息')
                if os.path.exists(fly):
                    with open(fly, 'r') as rfile:
                        fly_old = rfile.readlines()
                else:
                    return
                with open(fly, 'w') as wfile:
                    for item in fly_old:
                        d = dict(eval(item))
                        if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                            while 1:
                                d['tickets_left'] = str(eval(d['tickets_left']) + 1)
                                break
                            wfile.write(str(d) + '\n')
                        else:
                            wfile.write(str(d) + '\n')
            else:
                 print('无订票信息')
                 break

下面是完整代码:文章来源地址https://www.toymoban.com/news/detail-491044.html

import os.path
import os
fly='fly.txt'               #储存航班信息的文件夹
ticket='ticket.txt'         #储存完成订票操作的乘客
no_ticket='no_ticket.txt'   #储存候补乘客信息


def save(lst,txt):  #写入文件函数
    try:
        txt=open(txt,'a')
    except:
        txt = open(txt, 'w')
    for item in lst:
        txt.write(str(item)+'\n')
    txt.close()


def show_fly(lst):  #航班信息展示函数
    if len(lst) == 0:
        print('没有查询到航班信息,无数据显示!!!')
        return
    format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    print(format_title.format('终点站名称','航班号','飞机号','飞行日期',
                              '乘员定额','余票量'))
    # 定义内容的显示格式
    format_data = '{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^14}\t{:^16}'
    for item in lst:
        print(format_data.format(item.get('home_name'),
                                 item.get('fight_number'),
                                 item.get('plane_number'),
                                 item.get('fight_data'),
                                 item.get('carrying_capacity'),
                                 item.get('tickets_left')
                                 ))


def show():
    fly_lst=[]
    if os.path.exists(fly):
        with open(fly,'r') as rfile:
            fly_info=rfile.readlines()
            for item in fly_info:
                fly_lst.append(eval(item))
            if fly_lst:
                show_fly(fly_lst)
    else:
        print('暂时未保存航班信息数据!')


def main():  #主函数
    while 1:
        print_menu()
        choice=int(input("请选择:"))
        if choice in [1,2,3,4,5,6,7]:
            if choice==1:
                add_info()            #1.添加航班信息
            elif choice==2:
                search_info()         #2.查询航班信息
            elif choice==3:
                modify_info()         #3.修改航班信息
            elif choice==4:
                delete_info()         #4.删除航班信息
            elif choice==5:
                booking_service()     #5.客户订票服务
            elif choice==6:
                refund_system()       #6.客户退票服务
            elif choice==7:
                answer=input('你确定要退出系统吗?y/n')
                if answer =='y'or answer =='Y':
                    print('感谢你的使用!')
                    break
                else:
                    continue


def print_menu():  #菜单目录函数
    print('*' * 30)
    print('-' * 13 + '菜单' + '-' * 13)
    print('1.添加航班信息')
    print('2.查询航班信息')
    print('3.修改航班信息')
    print('4.删除航班信息')
    print('5.客户订票服务')
    print('6.客户退票服务')
    print('7.退出系统')
    print('*' * 30)


def add_info():  #1、添加航班信息函数
    fly_list=[]
    while 1:
        home_name = input('终点站名称:')
        fight_number = input('航班号:')
        plane_number = input('飞机号:')
        fight_data = input('飞行日期(标准输入格式:星期三):')
        carrying_capacity = input('该型号飞机乘员定额:')
        tickets_left = input('余票量:')
        if eval(carrying_capacity)>=eval(tickets_left):
            fly_dict= {'home_name':home_name,'fight_number':fight_number,'plane_number':plane_number,
                       'fight_data':fight_data,'carrying_capacity':carrying_capacity,'tickets_left':tickets_left}
        else:
            print("乘员定额没有大于余票量!请重新输入信息")
            continue
        fly_list.append(fly_dict)
        answer=input('是否继续添加航班信息?y/n')
        if answer=='y'or answer=='Y':
            continue
        else:
            break
    save(fly_list,fly)
    print('航班信息录入完毕')


def search_info():  #查询航班信息函数
    fly_query=[]
    while 1:
        fight_number=''
        home_name=''
        if os.path.exists(fly): #检测文件中是否含有航班信息
            mode=input('按照航班号查找请输入1,按照终点站名称查找请输入2:')
            if mode=='1':
                fight_number=input('请输入航班号:')
            elif mode=='2':
                home_name=input('请输入终点站名称:')
            else:
                print('您的输入格式有误,请重新输入!')
                search_info()
            with open(fly,'r') as rfile:
                fly_info=rfile.readlines()
                for item in fly_info:
                    d=dict(eval(item))
                    if fight_number!='':
                        if d['fight_number']==fight_number:
                            fly_query.append(d)
                    elif home_name!='':
                        if d['home_name']==home_name:
                            fly_query.append(d)
            show_fly(fly_query)
            fly_query.clear()
            answer = input('是否继续查询航班信息?y/n')
            if answer == 'y' or answer == 'Y':
                continue
            else:
                break
        else:
            print('暂时未保存航班信息数据!!!')
            return


def modify_info():  #修改航班信息函数
    show()
    if os.path.exists(fly):
        with open(fly,'r') as rfile:
            fly_old=rfile.readlines()
    else:
        return
    fly_fight_number=input('请输入要修改的航班的航班号:')
    with open(fly,'w') as file:
        for item in fly_old:
            d=dict(eval(item))
            if d['fight_number']==fly_fight_number:
                print('已经找到航班信息,可以进行修改操作')
                while 1:
                    try:
                        d['home_name']=input('请输入终点站名称:')
                        d['plane_number']=input('请输入飞机号:')
                        d['fight_data']=input('请输入飞行日期:')
                        d['carrying_capacity']=input('请输入乘员定额:')
                        d['tickets_left']=input('请输入余票量:')
                    except:
                        print('你的输入有误,请重新输入!')
                    else:
                        break
                file.write(str(d)+'\n')
                print('信息修改成功!')
            else:
                file.write(str(d) + '\n')
    answer=input('是否继续修改其他航班信息?y/n')
    if answer=='y' or answer=='Y':
        modify_info()


def delete_info():  #删除航班信息函数
    while 1:
        show()  # 删除之后重新显示所有学生信息
        fly_fight_number=input('请输入要删除航班信息的航班号:')
        if fly_fight_number!='':
            if os.path.exists(fly):#判断括号里的文件是否存在
                with open (fly,'r') as file:
                    fly_old=file.readlines()
            else:
                fly_old=[]
            flag=0
            if fly_old:
                with open(fly, 'w') as file:
                    for item in fly_old:
                        d = dict(eval(item))  # 将字符串转成字典
                        if d['fight_number'] == fly_fight_number:
                            flag=1
                        else:
                            file.write(str(d) + '\n')
                    if flag:
                        print(f'航班号为{fly_fight_number}的航班信息已被删除')
                    else:
                        print(f'没有找到航班号为{fly_fight_number}的航班信息')
            else:
                 print('暂时未保存航班信息数据!')
                 break
            show()  # 删除之后重新显示所有学生信息
            answer = input('是否继续删除?y/n')
            if answer == 'y':
                continue
            else:
                break


def booking_service():  #乘客订票系统
    people_list = []
    people_grade_list = []
    print('航空客服:欢迎进入乘客订票系统,很高兴为你服务。\n')
    while 1:
        print('航空客服:下面是航班信息一览图,请选择合适的航班。\n')
        show()
        if os.path.exists(fly):
            with open(fly,'r') as rfile:
                fly_old=rfile.readlines()
        else:
            return
        people_home_name=input('请输入终点站名称:')
        people_fight_data=input('请输入你的起飞日期(标准输入格式:星期三):')
        with open(fly, 'r') as rfile:
            fly_info = rfile.readlines()
            for item in fly_info:
                d = dict(eval(item))
                if people_home_name != ''and people_fight_data!='':
                    if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                        people_list.append(d)
        if len(people_list) == 0:
            print('没有查询到航班信息,无数据显示!!!')
            booking_service()
        show_fly(people_list)
        answer = input('该航班基本符合情况是否预定?y/n')
        if answer == 'y' or answer == 'Y':
            booking_service_2(people_home_name,people_fight_data)
            break
        else:
            break


def booking_service_2(people_home_name,people_fight_data):  #乘客信息录入函数
    ticket_list = []
    no_ticket_list=[]
    grade_ticket_list=[]
    grade_no_ticket_list = []
    people_ticket_number=0
    people_no_ticket_number = 0
    while 1:
        people_name = input('请输入你的姓名:')
        people_number = input('请输入你需要的飞机票数:')
        for i in range(1, eval(people_number) + 1):
            print(f'由于你订购了{people_number}张飞机票,接下来,你将选择第{i}张飞机票的舱位等级。')
            people_grade = input('请输入你的舱位等级(舱位等级:1、2、3):')
            if os.path.exists(fly):
                with open(fly, 'r') as rfile:
                    fly_old = rfile.readlines()
            else:
                return
            with open(fly,'w') as wfile:
                for item in fly_old:
                    d = dict(eval(item))
                    if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                        while 1:
                            d['tickets_left']=str(eval(d['tickets_left'])-1)
                            break
                        wfile.write(str(d) + '\n')
                    else:
                        wfile.write(str(d) + '\n')
            with open(fly, 'r') as rfile:
                fly_info = rfile.readlines()
                for item in fly_info:
                    d = dict(eval(item))
                    if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                        if eval(d['tickets_left'])>=0:
                            grade_ticket_list.append(people_grade)
                            people_ticket_number+=1
                        else:
                            answer = input('该航班没有余票,你将进入候补,您是否要预定?y/n')
                            if answer == 'y' or answer == 'Y':
                                grade_no_ticket_list.append(people_grade)
                                people_no_ticket_number+=1
        if people_ticket_number!=0:
            ticket_dict={"终点站名称":people_home_name,"飞行日期":people_fight_data,
                         "乘客姓名":people_name,"飞机票数":people_ticket_number,"舱位等级":grade_ticket_list}
            ticket_list.append(ticket_dict)
        if people_no_ticket_number!=0:
            no_ticket_dict = {"终点站名称": people_home_name, "飞行日期": people_fight_data,
                           "乘客姓名": people_name, "飞机票数": people_no_ticket_number, "舱位等级": grade_no_ticket_list}
            no_ticket_list.append(no_ticket_dict)
        break
    save(ticket_list,ticket)
    save(no_ticket_list, no_ticket)
    print('订票成功')



def refund_system():  #乘客退票系统函数
    while 1:
        people_name=input('请输入你的姓名:')
        people_home_name=''
        people_fight_data=''
        people_ticket_number=0
        if people_name!='':
            if os.path.exists(ticket):#判断括号里的文件是否存在
                with open(ticket , 'r') as file_1,open(no_ticket,'r') as file_2:
                    fly_old_1=file_1.readlines()
                    fly_old_2=file_2.readlines()
            else:
                fly_old_1=[]
                fly_old_2 = []
            flag=0
            if fly_old_1 and fly_old_2:
                with open(ticket , 'w') as file_1,open(no_ticket,'w') as file_2:
                    for item in fly_old_1:
                        d = dict(eval(item))  # 将字符串转成字典
                        if d['乘客姓名'] == people_name:
                            people_home_name=str(d["终点站名称"])
                            people_fight_data=str(d["飞行日期"])
                            people_ticket_number+=d['飞机票数']
                            flag=1
                        else:
                            file_1.write(str(d) + '\n')
                    for item in fly_old_2:
                        d = dict(eval(item))  # 将字符串转成字典
                        if d['乘客姓名'] == people_name:
                            people_ticket_number += d['飞机票数']
                            flag = 1
                        else:
                            file_2.write(str(d) + '\n')
                    if flag:
                        print(f'姓名为{people_name}的订票信息已被删除')
                    else:
                        print(f'没有找到姓名为{people_name}的订票信息')
                if os.path.exists(fly):
                    with open(fly, 'r') as rfile:
                        fly_old = rfile.readlines()
                else:
                    return
                with open(fly, 'w') as wfile:
                    for item in fly_old:
                        d = dict(eval(item))
                        if d['home_name'] == people_home_name and d['fight_data'] == people_fight_data:
                            while 1:
                                d['tickets_left'] = str(eval(d['tickets_left']) + people_ticket_number)
                                break
                            wfile.write(str(d) + '\n')
                        else:
                            wfile.write(str(d) + '\n')
            else:
                 print('无订票信息')
                 break

if __name__ == '__main__':
    main()

到了这里,关于python-数据结构-大学生-航空订票系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用python语言爬虫爬取微博评论--上--初步爬虫(超详细版,大学生不骗大学生)

    目录 一、找到页面  二、学会使用检查元素 2.1 打开检查元素界面 2.2 找到所有评论所在的位置 2.2.1 搜索评论 2.2.2  找到data表 三、基础部分代码实现 ​​​​​​​ 全部已经更完(下面两个链接是中和下) https://blog.csdn.net/m0_68325382/article/details/137234661?spm=1001.2014.3001.5502 爬

    2024年04月10日
    浏览(55)
  • 第六篇【传奇开心果系列】Python的自动化办公库技术点案例示例:大学生数据全方位分析挖掘经典案例

    Pandas在大学生数据的分析和挖掘中发挥着重要作用,帮助研究人员和教育工作者更好地理解大学生群体、优化教学管理和提升教育质量。 Pandas库可以用来分析挖掘大学生数据的各各方面,包括但不限于: 学生成绩数据:可以通过Pandas对大学生的成绩数据进行统计分析、可视

    2024年03月15日
    浏览(92)
  • (源码版)2023 年高教社杯全国大学生数学建模竞赛-E 题 黄河水沙监测题一数据分析详解+Python代码

    十分激动啊啊啊题目终于出来了!!官网6点就进去了结果直接卡死现在才拿到题目,我是打算A-E题全部做一遍。简单介绍一下我自己:博主专注建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。参与过十余次数学

    2024年02月09日
    浏览(50)
  • 大学生选修选课系统|基于Springboot的大学生选修选课系统设计与实现(源码+数据库+文档)

    大学生选修选课系统目录 目录 基于Springboot的大学生选修选课系统设计与实现 一、前言 二、系统功能设计  三、系统实现  1、用户信息管理 2、 课程信息管理 3、排课信息管理 4、公告信息管理  四、数据库设计 1、实体ER图   五、核心代码   六、论文参考 七、最新计算机

    2024年03月11日
    浏览(77)
  • python+vue 大学生社团管理系统

    本系统分为学生,管理员,社团负责人三个角色,学生可以注册登陆系统,查看社团,申请入团,查看参加社团活动,查看社团新闻,社团负责人对社团信息,入团审核,社团新闻,社团活动和资费进行管理;管理员对学生信息,社团信息,负责人信息,新闻信息,活动信息

    2023年04月23日
    浏览(65)
  • 大学生精通Python从由浅入深(Python基础篇)

    看到这位 头发浓密 大叔了吗!1989年,为了打发圣诞节假期,龟叔(吉多·范·罗苏姆)开始写Python语言的编译器 。 1991年 ,第一个Python编译器诞生 Python这个名字,来自龟叔所挚爱的电视剧Monty Python’s Flying Circus (蒙蒂·蟒蛇的飞行马戏团) 我们为什么要学习这一项语言,Pytho

    2024年02月10日
    浏览(39)
  • 【统计模型】大学生恋爱数据分析报告

    目录 大学生恋爱数据分析报告 一、研究目的 二、数据来源和相关说明 三、描述性统计分析 3.1 基本情况 (1)年级、性别、家乡情况 (2)身高、体重情况 3.2 恋爱情况 (1)恋爱比例 (2)恋爱史 3.3 职务担任情况 3.4 运动情况 3.5 才艺情况 3.6 颜值情况 3.7 生活规划情况 3.8

    2024年02月09日
    浏览(45)
  • 大学生Python期末复习冲刺(有这一篇足够)

    还愁要自己总结知识点?有这一篇就足够 👌🏻   干货满满不看后悔 👍👍👍 📝个人主页→数据挖掘博主ZTLJQ的主页 ​ 个人推荐python学习系列: ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 数据类型和变量 👑1、数字类型(int) 1.浮点

    2024年02月03日
    浏览(48)
  • 大学生数学建模赛题解析及优秀论文-2021电工杯A题高铁牵引供电系统运行数据分析及等值建模(附Python代码)

    我国是世界上电气化铁路运营里程最长、服役电力机车型号最多、运营最 繁忙的国家。截至 2020 年底,我国铁路年消耗电量约 800 亿千瓦时,约占三峡 年总发电量的 80% 。 图 1 为高速铁路牵引供电系统示意图,主要包括牵引变电所、牵引网和动车 组。牵引变电所将 220kV 三相

    2024年02月06日
    浏览(41)
  • 数据库系统实现 大学生宿舍管理系统

    目录 目录 第一章绪论 1.1项目研究的背景 第二章可行性分析与需求分析 2.1可行性分析 2.1.1操作可行性 2.1.2技术可行性 2.1.3设计可行性 2.2需求分析 2.2.1处理对象分析 2.2.2功能需求分析 2.2.3安全性与完整性分析 第三章系统设计 3.1系统架构图 3.2 E-R图 3.3 数据结构 3.3.1 用户信息结

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包