又见天津......

作者在六点半的火车上,利用74分钟行程学习Kerberos,认为《密码编码学与网络安全:原理与实践(第二版)》是好书。到达天津后,作者感慨两天后将回北京,自己在北京工作一年多仍在继续艰苦打拼。

六点半的火车上,是一座大蒸炉!
74分钟的行程,
在车上居然看Kerberos,
“《密码编码学与网络安全:原理与实践(第二版)》是本好书”,
是此时此环境中最大价值的体会!
八点的天津湿忽忽的,感觉不像冬天。
两天后我会从这里踏上又见北京的路,
在北京混了一年多了,
艰苦工作还继续着的我--
“努力吧,加油吧!!!!!”

from IPython.core.display import display_pretty # type: ignore import os class Trains: def __init__(self, name, id, trains, origin, arrival, seat, time1, time2): #初始化乘客信息类 self.name = name#乘客姓名 self.id = id#乘客身份证号 self.trains = trains#车次编号 self.origin = origin#出发站 self.arrival = arrival#到达站 self.seat = seat#座位号 self.time1 = time1#出发时间 self.time2 = time2#到达时间 def __str__(self): #定义打印乘客信息的格式 return (f" 乘客身份证:{self.id}\n " f"乘客姓名:{self.name}\n " f"车次:{self.trains}\n " f"车次起始点:{self.origin}\n " f"车次终点:{self.arrival}\n " f"乘客的座位号:{self.seat}\n " f"车次的起始时间:{self.time1}\n " f"车次的到达时间:{self.time2}\n") class Manager: def __init__(self, data_path="./data.txt", trains_path="./trains.txt", seats_path="./seats.txt"): #初始化管理器类,定义文件路径好数据结构 self.trains = [] # 乘客信息列表 self.data_path = data_path # 乘客信息文件路径 self.trains_path = trains_path # 车次信息文件路径 self.seats_path = seats_path # 座位信息文件路径 self.ticket_info = {} # 车次信息字典 self.seat_map = {} # 座位映射字典 {车次: 座位图} self.load_data() # 加载乘客信息 self.load_trains_data() # 加载车次信息 self.load_seats_data() # 加载座位信息 def load_data(self): """加载乘客信息""" try: if os.path.exists(self.data_path): #检查文件是否存在 with open(self.data_path, 'r', encoding="utf-8") as f: for line in f.readlines(): line = line.strip("\n") if not line: # 跳过空行 continue datas = line.split(" ") # 修正数据解析,确保正确分配到各个字段 #创建乘客对象并加入列表 train = Trains( name=datas[1], id=int(datas[0]), trains=datas[2], origin=datas[3], arrival=datas[4], seat=datas[5], time1=datas[6], time2=datas[7] ) self.trains.append(train) print(f"已加载 {len(self.trains)} 条乘客信息") else: print(f"数据文件 {self.data_path} 不存在,将在保存时创建") except Exception as e: print(f"加载乘客数据出错: {e}") def save_data(self): """保存乘客信息""" try: with open(self.data_path, 'w', encoding="utf-8") as f: passenger_records = [] for passenger in self.trains: # 修正数据保存格式,确保各字段之间有空格 #乘客信息转换为字符串并保存到文件 passenger_records.append( f"{passenger.id} {passenger.name} {passenger.trains} {passenger.origin} " f"{passenger.arrival} {passenger.seat} {passenger.time1} {passenger.time2}\n" ) f.writelines(passenger_records) print(f"已保存 {len(self.trains)} 条乘客信息") except Exception as e: print(f"保存乘客数据出错: {e}") def load_trains_data(self): """加载车次信息""" try: if os.path.exists(self.trains_path): #检查文件是否存在 with open(self.trains_path, 'r', encoding="utf-8") as f: for line in f.readlines(): line = line.strip() if not line: # 跳过空行 continue parts = line.split(',') if len(parts) >= 5: train_id = parts[0]#车次编号 route = parts[1]#路线 departure = parts[2]#出发时间 arrival = parts[3]#到达时间 duration = parts[4]#历时 self.ticket_info[train_id] = [route, departure, arrival, duration] print(f"已加载 {len(self.ticket_info)} 条车次信息") else: # 如果文件不存在,创建默认车次信息 self.ticket_info = { 'G1569': ['北京南-天津南', '18:06', '18:39', '00:33'], 'G1570': ['北京南-天津东', '18:08', '18:39', '00:31'], 'G1572': ['北京南-天津西', '18:09', '18:49', '00:40'], 'G1576': ['北京南-天津北', '18:11', '18:41', '00:30'] } self.save_trains_data() # 保存默认车次信息 print(f"已创建默认车次信息文件 {self.trains_path}") except Exception as e: print(f"加载车次数据出错: {e}") def save_trains_data(self): """保存车次信息""" try: with open(self.trains_path, 'w', encoding="utf-8") as f: for train_id, info in self.ticket_info.items(): # 格式: 车次编号,线路,发车时间,到达时间,历时 line = f"{train_id},{info[0]},{info[1]},{info[2]},{info[3]}\n" f.write(line) print(f"已保存 {len(self.ticket_info)} 条车次信息") except Exception as e: print(f"保存车次数据出错: {e}") def load_seats_data(self): """加载座位信息""" try: if os.path.exists(self.seats_path): #检查文件是否存在 with open(self.seats_path, 'r', encoding="utf-8") as f: for line in f.readlines(): line = line.strip() if not line: # 跳过空行 continue parts = line.split(':') if len(parts) == 2: train_id = parts[0] #车次编号 seats = parts[1].split(';') # 将座位字符串转换为二维列表 seat_map = [] for row in seats: seat_map.append(list(row)) self.seat_map[train_id] = seat_map print(f"已加载 {len(self.seat_map)} 条车次的座位信息") else: # 如果文件不存在,为每个车次创建默认座位图 for train_id in self.ticket_info: # 创建50个座位的座位图 (10行x5列) self.seat_map[train_id] = [['*' for _ in range(5)] for _ in range(10)] self.save_seats_data() # 保存座位信息 print(f"已创建默认座位信息文件 {self.seats_path}") except Exception as e: print(f"加载座位数据出错: {e}") def save_seats_data(self): """保存座位信息""" try: with open(self.seats_path, 'w', encoding="utf-8") as f: for train_id, seat_map in self.seat_map.items(): # 将座位图转换为字符串表示 seat_str = ':'.join([train_id, ';'.join([''.join(row) for row in seat_map])]) f.write(seat_str + '\n') print(f"已保存 {len(self.seat_map)} 条车次的座位信息") except Exception as e: print(f"保存座位数据出错: {e}") def menu(self): print("\n--- 乘客信息管理 ---") print("1.添加乘客信息") print("2.删除乘客信息") print("3.更新乘客信息") print("4.查找乘客信息") print("5.显示所有乘客信息") print("6.退出") def auto_save(self): '''自动保存所有数据''' try: self.save_data() self.save_trains_data() self.save_seats_data() except Exception as e: print(f"自动保存失败:{e}") def show(self): if not self.trains: print("暂无乘客信息") return for s in self.trains: print(s) def add(self): while True: try: id = int(input("请输入乘客身份证:")) # 检查身份证是否已存在 if any(train.id == id for train in self.trains): print("该身份证已存在") return break except ValueError: print("身份证格式错误,请输入数字") name = input("请输入乘客姓名:") trains = input("请输入车次:") origin = input("请输入起始点:") arrival = input("请输入到达点:") seat = input("请输入座位号:") time1 = input("请输入车次起始时间:") time2 = input("请输入车次到达时间:") self.trains.append( Trains(name, id, str(trains), str(origin), str(arrival), str(seat), str(time1), str(time2))) print("添加成功:") self.show() self.auto_save() def delete(self): '''删除用户信息''' try: id = int(input("请输入乘客身份证:")) found = False for index, train in enumerate(self.trains): if train.id == id: # 释放座位 if train.seat != "待分配" and train.trains in self.seat_map: seat = train.seat row = ord(seat[0]) - ord('A') col = int(seat[1:]) - 1 if 0 <= row < len(self.seat_map[train.trains]) and 0 <= col < 5: self.seat_map[train.trains][row][col] = '*' # 标记为可用 print(f"已释放座位 {seat}") del self.trains[index] found = True print("删除成功") self.save_seats_data() break if not found: print("未找到该乘客信息") self.show() self.auto_save() except ValueError: print("身份证格式错误,请输入数字") def update(self): try: train_id = input("请输入需要更新的乘客身份证:") train_id = int(train_id) for index, train in enumerate(self.trains): if train.id == train_id: # 输入需要更新的信息 new_name = input(f"当前姓名: {train.name},请输入新姓名(直接回车跳过): ") or train.name new_origin = input(f"当前起始点: {train.origin},请输入新起始点(直接回车跳过): ") or train.origin new_arrival = input(f"当前到达点: {train.arrival},请输入新到达点(直接回车跳过): ") or train.arrival # 座位更新需要特殊处理 new_seat = input(f"当前座位号: {train.seat},请输入新座位号(直接回车跳过): ") if new_seat: # 释放原座位 if train.seat != "待分配" and train.trains in self.seat_map: seat = train.seat row = ord(seat[0]) - ord('A') col = int(seat[1:]) - 1 if 0 <= row < len(self.seat_map[train.trains]) and 0 <= col < 5: self.seat_map[train.trains][row][col] = '*' # 标记为可用 print(f"已释放原座位 {seat}") # 分配新座位 train.seat = new_seat if train.trains in self.seat_map: row = ord(new_seat[0]) - ord('A') col = int(new_seat[1:]) - 1 if 0 <= row < len(self.seat_map[train.trains]) and 0 <= col < 5: if self.seat_map[train.trains][row][col] == '*': self.seat_map[train.trains][row][col] = '#' # 标记为已预订 print(f"已分配新座位 {new_seat}") else: print(f"座位 {new_seat} 不可用或已被预订") else: new_seat = train.seat new_time1 = input( f"当前车次起始时间: {train.time1},请输入新车次起始时间(直接回车跳过): ") or train.time1 new_time2 = input( f"当前车次终点时间: {train.time2},请输入新车次终点时间(直接回车跳过): ") or train.time2 # 更新字段 self.trains[index].name = new_name self.trains[index].origin = new_origin self.trains[index].arrival = new_arrival self.trains[index].seat = new_seat self.trains[index].time1 = new_time1 self.trains[index].time2 = new_time2 print("更新成功:") self.show() self.save_seats_data() self.auto_save() return print("未找到该乘客信息") except ValueError: print("身份证格式错误,请输入数字") def find(self): '''查找乘客信息''' try: id = int(input("请输入要查找的乘客身份证:")) for s in self.trains: if s.id == id: print(s) return print("没有找到这个乘客的相关信息") except ValueError: print("身份证格式错误,请输入数字") def get_seat_map(self, train_id): """获取指定车次的座位图""" if train_id in self.seat_map: return self.seat_map[train_id] else: # 如果车次没有座位图,创建一个 self.seat_map[train_id] = [['*' for _ in range(5)] for _ in range(10)] return self.seat_map[train_id] def passenger_info_management(manager): '''乘客信息管理主函数''' while True: manager.menu() op = input("请选择:") if op == '1': manager.add() elif op == '2': manager.delete() elif op == '3': manager.update() elif op == '4': manager.find() elif op == '5': manager.show() elif op == '6': manager.save_data() break else: print("无效选择,请重新输入!") '''==============车次管理系统==============''' def train_management(manager): """显示菜单""" while True: print("\n=== 车次管理系统 ===") print("1. 添加车次") print("2. 删除车次") print("3. 修改车次") print("4. 查询车次") print("0. 返回主菜单") print("=================") choice = input("请选择操作:") if choice == '1': add_train(manager) elif choice == '2': delete_train(manager) elif choice == '3': modify_train(manager) elif choice == '4': query_train(manager) elif choice == '0': print("返回主菜单") break else: print("无效的选择,请重新输入!") """添加车次""" def add_train(manager): while True: train_id = input("请输入车次编号(格式:Gxxxx):") if not train_id.startswith("G") or not train_id[1:].isdigit(): print("车次编号格式错误,请重新输入!") continue if train_id in manager.ticket_info: print(f"车次 {train_id} 已存在,请勿重复添加!") continue break route = input("请输入线路(格式:起点-终点):") departure_time = input("请输入出发时间(HH:MM 格式):") arrival_time = input("请输入到达时间(HH:MM 格式):") duration = input("请输入历时(HH:MM 格式):") manager.ticket_info[train_id] = [route, departure_time, arrival_time, duration] # 为新列车添加座位图 manager.seat_map[train_id] = [['*' for _ in range(5)] for _ in range(10)] manager.save_trains_data() # 保存到文件 manager.save_seats_data() # 保存座位信息 print(f"车次 {train_id} 添加成功!") """删除车次""" def delete_train(manager): train_id = input("请输入要删除的车次编号:") if train_id in manager.ticket_info: del manager.ticket_info[train_id] if train_id in manager.seat_map: del manager.seat_map[train_id] manager.save_trains_data() # 保存到文件 manager.save_seats_data() # 保存座位信息 print(f"车次 {train_id} 删除成功!") else: print(f"车次 {train_id} 不存在!") """修改车次""" def modify_train(manager): train_id = input("请输入要修改的车次编号:") if train_id in manager.ticket_info: print("请输入新的车次信息(直接回车保持原值):") current_info = manager.ticket_info[train_id] new_route = input(f"当前线路: {current_info[0]},新线路: ") or current_info[0] new_departure = input(f"当前发车时间: {current_info[1]},新发车时间: ") or current_info[1] new_arrival = input(f"当前到达时间: {current_info[2]},新到达时间: ") or current_info[2] new_duration = input(f"当前历时: {current_info[3]},新历时: ") or current_info[3] manager.ticket_info[train_id] = [new_route, new_departure, new_arrival, new_duration] manager.save_trains_data() # 保存到文件 print(f"车次 {train_id} 修改成功!") else: print(f"车次 {train_id} 不存在!") """查询车次""" def query_train(manager): if not manager.ticket_info: print("暂无车次信息!") return print("\n所有车次信息:") print('车次\t线路\t\t发车时间\t到达时间\t历时') for train_id, info in manager.ticket_info.items(): print(f"{train_id}\t{info[0]}\t{info[1]}\t{info[2]}\t{info[3]}") '''============座位管理==============''' def seat_management(manager): """座位管理系统""" # 选择车次 if not manager.ticket_info: print("暂无车次信息!") return print("\n可选车次:") for train_id in manager.ticket_info: print(f"- {train_id}") train_id = input("请选择要管理座位的车次: ") if train_id not in manager.ticket_info: print("车次不存在!") return # 获取座位图 seat_map = manager.get_seat_map(train_id) def display_seats(): '''显示座位图''' print(f"\n=== {train_id} 车次座位图 ===") print(" " + " ".join(str(i) for i in range(1, 6))) for i, row in enumerate(seat_map): print(f"{chr(65 + i)} " + " ".join(row)) print("====================") print("说明: * - 可用座位, # - 已预订座位, X - 不可用座位") def book_seat(): """预订座位""" display_seats() seat = input("请输入要预订的座位号(例如A1): ").upper() if len(seat) < 2 or not seat[0].isalpha() or not seat[1:].isdigit(): print("无效的座位号格式!") return False row = ord(seat[0]) - ord('A') col = int(seat[1:]) - 1 if row < 0 or row >= len(seat_map) or col < 0 or col >= 5: print("座位不存在!") return False if seat_map[row][col] == "*": seat_map[row][col] = "#" print(f"座位 {seat} 预订成功!") manager.save_seats_data() # 保存座位信息 return True elif seat_map[row][col] == "#": print("该座位已被预订!") return False else: print("该座位不可用!") return False def cancel_booking(): """取消预订座位""" display_seats() seat = input("请输入要取消预订的座位号(例如A1): ").upper() if len(seat) < 2 or not seat[0].isalpha() or not seat[1:].isdigit(): print("无效的座位号格式!") return False row = ord(seat[0]) - ord('A') col = int(seat[1:]) - 1 if row < 0 or row >= len(seat_map) or col < 0 or col >= 5: print("座位不存在!") return False if seat_map[row][col] == "#": seat_map[row][col] = "*" print(f"座位 {seat} 的预订已取消!") # 查找并删除相关乘客信息 for index, passenger in enumerate(manager.trains): if passenger.trains == train_id and passenger.seat == seat: del manager.trains[index] print(f"已删除乘客 {passenger.name} 的信息") break manager.save_data() # 保存乘客信息 manager.save_seats_data() # 保存座位信息 return True elif seat_map[row][col] == "*": print("该座位未被预订!") return False else: print("该座位不可用!") return False while True: print(f"\n=== {train_id} 车次座位管理系统 ===") print("1. 显示座位图") print("2. 预订座位") print("3. 取消预订") print("0. 返回主菜单") choice = input("请选择操作:") if choice == '1': display_seats() elif choice == '2': book_seat() elif choice == '3': cancel_booking() elif choice == '0': break else: print("无效选择!") '''============车票预定==============''' def ticket_booking(manager): # 打印车次信息 print('\n=== 可预订车次 ===') print('车次\t线路\t\t发车时间\t到达时间\t历时') for key, value in manager.ticket_info.items(): print(f"{key}\t{value[0]}\t{value[1]}\t{value[2]}\t{value[3]}") # 车票预订逻辑 while True: choice = input("\n请输入要预订的车次(输入'0'返回): ") if choice == '0': break if choice in manager.ticket_info: # 显示座位图 seat_map = manager.get_seat_map(choice) print(f"\n=== {choice} 车次座位图 ===") print(" " + " ".join(str(i) for i in range(1, 6))) for i, row in enumerate(seat_map): print(f"{chr(65 + i)} " + " ".join(row)) print("====================") print("说明: * - 可用座位, # - 已预订座位, X - 不可用座位") # 选择座位 seat = input("请选择座位号(例如A1): ").upper() if len(seat) < 2 or not seat[0].isalpha() or not seat[1:].isdigit(): print("无效的座位号格式!") continue row = ord(seat[0]) - ord('A') col = int(seat[1:]) - 1 if row < 0 or row >= len(seat_map) or col < 0 or col >= 5: print("座位不存在!") continue if seat_map[row][col] != "*": print("该座位不可用或已被预订!") continue # 输入乘客信息 passenger_name = input("请输入乘车人姓名: ") try: passenger_id = int(input("请输入乘客身份证号: ")) except ValueError: print("身份证格式错误,请重新输入!") continue # 检查是否已存在 if any(train.id == passenger_id for train in manager.trains): print("该乘客已存在,信息将更新!") # 自动填写一些信息 origin, arrival = manager.ticket_info[choice][0].split('-') # 添加乘客信息 manager.trains.append( Trains( name=passenger_name, id=passenger_id, trains=choice, origin=origin, arrival=arrival, seat=seat, time1=manager.ticket_info[choice][1], time2=manager.ticket_info[choice][2] ) ) # 标记座位为已预订 seat_map[row][col] = '#' manager.save_data() manager.save_seats_data() print(f"\n您已成功预订车次 {choice}:") print(f"线路: {manager.ticket_info[choice][0]}") print(f"发车时间: {manager.ticket_info[choice][1]}, 到达时间: {manager.ticket_info[choice][2]}") print(f"历时: {manager.ticket_info[choice][3]}") print(f"座位号: {seat}") print(f"请 {passenger_name} 准时乘车。") else: print("对不起,您输入的车次不存在,请重新输入。") def main_menu(): # 初始化乘客信息管理器 passenger_manager = Manager("./data.txt", "./trains.txt", "./seats.txt") while True: print("\n=== 火车票务管理系统 ===") print("1. 乘客信息管理") print("2. 车次管理") print("3. 座位管理") print("4. 车票预订") print("5. 取消预订") print("6. 退出系统") choice = input("请输入功能序号: ") if choice == "1": passenger_info_management(passenger_manager) elif choice == "2": train_management(passenger_manager) elif choice == "3": seat_management(passenger_manager) elif choice == "4": ticket_booking(passenger_manager) elif choice == "5": # 直接进入座位管理的取消预订功能 seat_management(passenger_manager) elif choice == "6": # 退出前保存所有数据 passenger_manager.save_data() passenger_manager.save_trains_data() passenger_manager.save_seats_data() print("感谢使用,再!") break else: print("无效输入,请重新选择!") if __name__ == "__main__": main_menu()运行结果
06-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值