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”文件中的航班信息进行展示。

3.函数调用关系

3.1函数调用关系


代码展示如下:

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('感谢你的使用!')breakelse:continuedef 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():passdef search_info():passdef modify_info():passdef delete_info():passdef booking_service():passdef refund_system():passif __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':continueelse:breaksave(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':continueelse:breakelse: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:returnfly_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:breakfile.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=0if 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=1else:file.write(str(d) + '\n')if flag:print(f'航班号为{fly_fight_number}的航班信息已被删除')else:print(f'没有找到航班号为{fly_fight_number}的航班信息')else:print('无航班信息')breakshow()  # 删除之后重新显示所有学生信息answer = input('是否继续删除?y/n\n')if answer == 'y':continueelse: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)breakelse:breakdef booking_service_2(people_home_name,people_fight_data):ticket_list = []no_ticket_list=[]grade_ticket_list=[]grade_no_ticket_list = []people_ticket_number=0people_no_ticket_number = 0while 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:returnwith 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)breakwfile.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+=1else:answer = input('该航班没有余票,你将进入候补,您是否要预定?y/n')if answer == 'y' or answer == 'Y':grade_no_ticket_list.append(people_grade)people_no_ticket_number+=1if 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)breaksave(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=0if 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=1else: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:returnwith 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)breakwfile.write(str(d) + '\n')else:wfile.write(str(d) + '\n')else:print('无订票信息')break

下面是完整代码:

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('没有查询到航班信息,无数据显示!!!')returnformat_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('感谢你的使用!')breakelse:continuedef 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("乘员定额没有大于余票量!请重新输入信息")continuefly_list.append(fly_dict)answer=input('是否继续添加航班信息?y/n')if answer=='y'or answer=='Y':continueelse:breaksave(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':continueelse:breakelse:print('暂时未保存航班信息数据!!!')returndef modify_info():  #修改航班信息函数show()if os.path.exists(fly):with open(fly,'r') as rfile:fly_old=rfile.readlines()else:returnfly_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:breakfile.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=0if 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=1else:file.write(str(d) + '\n')if flag:print(f'航班号为{fly_fight_number}的航班信息已被删除')else:print(f'没有找到航班号为{fly_fight_number}的航班信息')else:print('暂时未保存航班信息数据!')breakshow()  # 删除之后重新显示所有学生信息answer = input('是否继续删除?y/n')if answer == 'y':continueelse:breakdef 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:returnpeople_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)breakelse:breakdef booking_service_2(people_home_name,people_fight_data):  #乘客信息录入函数ticket_list = []no_ticket_list=[]grade_ticket_list=[]grade_no_ticket_list = []people_ticket_number=0people_no_ticket_number = 0while 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:returnwith 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)breakwfile.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+=1else:answer = input('该航班没有余票,你将进入候补,您是否要预定?y/n')if answer == 'y' or answer == 'Y':grade_no_ticket_list.append(people_grade)people_no_ticket_number+=1if 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)breaksave(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=0if 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=0if 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=1else: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 = 1else: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:returnwith 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)breakwfile.write(str(d) + '\n')else:wfile.write(str(d) + '\n')else:print('无订票信息')breakif __name__ == '__main__':main()

python-数据结构-大学生-航空订票系统相关推荐

  1. [附源码]Python计算机毕业设计航空订票系统Django(程序+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...

  2. 数据结构课程设计【航空订票系统】

    /* * Copyright (c) 2017,烟台大学计算机学院 * All right reserved. * 文件名称:main.cpp * 作者:于嵩 * 完成日期:2017年12月22日 * ...

  3. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计

    VC++航空订票系统数据库设计 目录 一  绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...

  4. Python-Django毕业设计航空订票系统(程序+Lw)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...

  5. JAVA毕业设计航空订票系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计航空订票系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计航空订票系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  6. 基于JAVA航空订票系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA航空订票系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA航空订票系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  7. 基于android实现航空订票系统【100010286】

    研究意义 通过在 Android 系统,进行航空订票系统的设计与实现,充分运用所学的数据库.Java 语言.数据结构.操作系统.设计模式等知识.了解一个较完整的 Android 项目的构建过程,同时, ...

  8. 可操作性强!Python实现一个电影订票系统!

    来源丨Python小二 一.效果展示 通过Python实现一个电影订票系统,效果如下所示: 二.整体结构图 三.代码分解 3.1 infos.py 一部电影的详细信息适合用 字典 结构来存储,我们可以 ...

  9. c语言航班订票管理系统源代码,简易C语言航空订票系统

    代码片段和文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 目录        ...

  10. 航空订票系统界面java_Java命令行界面(第21部分):航空公司2

    航空订票系统界面java 本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个J ...

最新文章

  1. vagrant系列教程(二):vagrant的配置文件vagrantfile详解(转)
  2. 初识Hibernate之关联映射(一)
  3. [原创]修改oracle 数据库默认时间格式
  4. 36 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义目标成本版本
  5. applicationcontext and webapplicationcontext
  6. 转载关于使用Ant打包Flex的一些脚本
  7. java jdk使用教程_java初学者实践教程2-jdk的使用
  8. Authorware 函数说明
  9. FasterRCNN之整体框架详解
  10. 无缘晶振匹配电容计算方法
  11. 系统学习Spring之Spring in action(三)
  12. 编程专业人的良好习惯(练习、时间管理、压力、团队协作)
  13. ICCV 2019|70 篇论文抢先读,含目标检测/自动驾驶/GCN/等(提供PDF下载)
  14. html首页随机飘浮图片,jQuery 全屏随机漂浮图片广告
  15. 使用Euclid算法求最大公约数
  16. 12个同父异母的孩子都有自闭症,简历造假的捐精者吸引了全球顶级专家
  17. Android加密文件系统
  18. Minecraft一些红石技巧(1)
  19. 基因编辑最新研究进展(2022年3月)
  20. 中国移动刘光毅:从5G的发展经验看6G

热门文章

  1. 视觉SLAM十四讲学习笔记——ch10 后端2
  2. dex2jar java 1.8_dex2jar最新版下载-dex2jar下载 2.0官方版--pc6下载站
  3. 小米平板2wifi驱动下载_小米WiFi驱动官方下载_Xiaomi小米随身WiFi驱动官方最新版下载-华军软件园...
  4. python中jieba库使用教程
  5. 谷歌云盘将共享链接中的文件保存到自己的云盘中
  6. Multisim 版本针对3D元件库说明
  7. 计算机网络第五版谢希仁答案
  8. 博弈论基础知识--非合作博弈,零和博弈,负和博弈,主从博弈,Nash均衡
  9. php把字符串日期转成时间戳,php怎样把日期转成时间戳
  10. java面试笔试大全