时间:2023-03-01 15:11:13 | 栏目: | 点击:次
本课程设计是学生学习完《Python程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用Python语言进行程序设计的方法,加深对Python语言特点和使用Python语言进行程序设计开发过程的理解,加强动手能力。其主要目的是:
(1)进一步培养学生Python程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;
(2)针对Python语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
(3)掌握Python语言的编程技巧和上机调试程序的方法。
(4)掌握程序设计的常用算法。
(1)要求从所给题目中任选若干个,每个学生必须独立完成课程设计,不能互相抄袭。
(2)设计完成后,对所完成的工作进行答辩。
(3)要求写出一份详细的课程设计报告。
(4)程序设计题目,须提交相应的程序,并需提供加注释的源程序,能正常运行。
根据需求,该系统所应包含的信息有以下一些:
后台用户管理员的基本信息:
账号、密码
各路公交车的基本信息:
每路公交车对应的线路信息
采用Python语言实现,开发环境为PythonCharm,可以运行在操作系统windows98及以上皆可。
界面友好,操作方便,容错性强。
主界面模块:完成系统菜单的显示。
功能选择模块:根据用户的选择,完成其相应的功能。
线路查询模块:根据用户提供的线路,查询该线路所经过的站点。
站点查询的模块:根据用户提供的站点,查询经过该站点的所有线路。
后台管理员的模块:后台管理员可以进行一些操作,例如:删除所有线路、添加线路等
后台管理员的账号系统管理的模块:注册后台管理员的账号和密码。
换乘信息的模块:根据用户提供的起点和终点,帮助用户找到最便捷的路线。
主函数。
管理员账号管理界面的函数。
用户登录的函数。
后台管理员界面的函数。
定义修改线路的函数。
判断是否存在线路的函数。
线路查询的函数。
判断站点是否存在的函数。
站点查询的函数。
检查添加线路是否存在的函数。
添加线路的函数。
清楚所有线路的函数。
展示所有线路的函数。
删除线路的函数。
判断是否存在线路的函数。
展示特定线路中的站点的函数。
换乘信息的函数。
判断线路直达的函数。
存储数据的函数。
断站点所在的线路的函数。
import os import pickle def main(): # 主函数 while True: print('-' * 30) print('------菜单------') print('1.线路查询') print('2.站点查询') print('3.换乘信息') print('4.后台管理员界面') print('5.管理员的账号管理界面') print('6.退出程序') print('-' * 30) num = int(input('请选择你的操作:\n')) if num == 1: line_find() continue if num == 2: site_find() continue if num == 3: change_line() continue if num == 5: manager_account() continue if num == 6: break if num == 4: manager() continue else: print('请重新做出你的选择!!') def manager_account(): # 管理员账号管理界面的函数 def new_(): file_path = 'D:\公交查询系统\info.pkl' a = input('请设置你的账号:') b = input('请设置入你的密码:') w = input('请再次输入你的的密码:') d = { 'user': a, 'password': b } if b == w: if os.path.exists(file_path) and os.path.getsize(file_path): o = open('info.pkl', 'rb') m = pickle.load(o) with open('info.pkl', 'ab') as fp: pickle.dump(d, fp) print('您已经注册成功!!') else: with open('info.pkl', 'wb') as fp: pickle.dump(d, fp) print('您已经注册成功!!') else: print('对不起,你两次输入的密码不一致,请您重新输入!!') def xiaohui(): h = open('info.pkl', 'w+') # 清空文件里的内容。。。 h.truncate() print('你已经销毁成功。。。') while True: print('-----管理员的账号管理界面------\n' '1.注册\n' '2.注销原有的所有账户\n' '3.退出管理员的账号管理界面') choice = input('请做出你的选择:\n') if choice == '1': new_() if choice == '2': xiaohui() elif choice == '3': print('-' * 35) print('------菜单------') print('1.线路查询') print('2.站点查询') print('3.换乘信息') print('4.后台管理员界面') print('5.管理员的账号管理界面') print('6.退出程序') print('-' * 35) break else: print('请重新做出你的选择') def login(): # 用户登录的函数 with open('info.pkl', 'rb') as fp: q = input('请输入你的的账号:') w = input('请输入你的的密码:') while True: try: data = pickle.load(fp) if q == data['user'] and w == data['password']: print('您已经登录成功!!!') return True except: break def manager(): # 后台管理员界面的函数 if login(): while True: print('-' * 30) print('-----后台管理员界面-----') print('1.添加线路') print('2.删除线路') print('3.修改线路') print('4.查看所有线路') print('5.删除所有线路') print('6.退出') print('-' * 30) num = input('请做出你的选择:\n') if num == '3': revise_line() continue if num == '1': add_line() continue if num == '6': print('-' * 25) print('------菜单------') print('1.线路查询') print('2.站点查询') print('3.换乘信息') print('4.后台管理员界面') print('5.管理员的账号管理界面') print('6.退出程序') print('-' * 25) break if num == '5': clear_line_all() continue if num == '4': show_line_all() continue if num == '2': num = input('请输入你要删除的线路:\n').strip() clear_line(num) continue else: print('请重新做出你的选择...') else: print('对不起,你登录失败,不可以让您进入后台管理员界面') def revise_line(): # 定义修改线路的函数 num = input('请输入您要修改的线路:').strip() if check_add_line(num): show_line_all() tag = input('请确认是否继续修改线路:(1为是,0为否)\n') if tag == '1': file_path = 'D:\公交查询系统\line_info.pkl' a = input('请再次输入要修改的线路:').strip() clear_line(a) b = input('请输入经过的站点:') d = { a: {b} } if os.path.exists(file_path) and os.path.getsize(file_path): with open('line_info.pkl', 'ab') as f: pickle.dump(d, f) print('您已经修改线路成功!!') else: with open('line_info.pkl', 'wb') as fp: pickle.dump(d, fp) print("您已经修改线路成功了!!!!") else: print('您要修改的线路不存在,需要创建一个新的线路。。。') add_line() def line_check(num): # 判断是否存在线路的函数 with open('line_info.pkl', 'rb') as fp: while True: try: data = pickle.load(fp) if num in data: print(f'{num}号线的路线经过的站点为{data[num]}') return True except: break def line_find(): # 线路查询的函数 num = input('请输入你要查询的线路:\n').strip() if line_check(num): pass else: print('您要查找的线路不存在....') def site_check(): # 判断站点是否存在的函数 res = [] with open('line_info.pkl', 'rb') as fp: num = input('请输入你要查询的站点名:\n').strip() while True: try: data = pickle.load(fp) # 遍历字典 for key, value in data.items(): ls = str(value) if num in ls: res.append(f'经过{num}站点的线路为{key}号线') continue except: break if res: print(res) return True else: return False def site_find(): # 站点查询的函数 if site_check(): pass else: print('您要查询的站点不存在.....') def check_add_line(num): # 检查添加线路是否存在的函数 with open('line_info.pkl', 'rb') as fp: while True: try: data = pickle.load(fp) # 遍历字典 for key, value in data.items(): if num in key: return True except: break def add_line(): # 添加线路的函数 file_path = 'D:\公交查询系统\line_info.pkl' a = input('请输入添加的线路:').strip() b = input('请输入经过的站点:') d = { a: {b} } if os.path.exists(file_path) and os.path.getsize(file_path): if check_add_line(a): print('您要添加的线路已经存在了......') else: with open('line_info.pkl', 'ab') as f: pickle.dump(d, f) print('您已经添加线路成功!!') else: with open('line_info.pkl', 'wb') as fp: pickle.dump(d, fp) print('您已经添加线路成功了!!') def clear_line_all(): # 清除所有线路的函数 h = open('line_info.pkl', 'w+') # 清空文件里的内容。。。 h.truncate() print('你已经销毁成功。。。') def show_line_all(): # 展示所有线路的函数 with open('line_info.pkl', 'rb') as fp: while True: try: data = pickle.load(fp) # 遍历字典 for key, value in data.items(): print(f'{key}线路经过的站点是{value}') except: break def clear_line(num): # 删除线路的函数 with open('line_info.pkl', 'rb') as fp: ls = [] while True: try: data = pickle.load(fp) # 遍历字典 for key, value in data.items(): if num in key: print(f'{num}线路已经删除成功!!') pass else: ls.append(data) except: break save_data(ls) def line_check(num): # 判断是否存在线路的函数 with open('line_info.pkl', 'rb') as fp: while True: try: data = pickle.load(fp) if num in data: print(f'{num}号线的路线经过的站点为{data[num]}') return True except: break def show_site(num): # 展示特定线路中的站点的函数 with open('line_info.pkl', 'rb') as fp: while True: try: data = pickle.load(fp) if num in data: return data[num] except: break def change_line(): # 换乘信息的函数 begin = input('请输入你的起点站点:\n').strip() end = input('请输入你的终点站点:\n').strip() if direct_line(begin, end): pass else: ls = [] # 存储经过起点的线路的全部站点 ls_ = [] # 存储经过终点的线路的全部站点 tag = True data = check_site(begin, end) # print(type(data[0]),type(data[1])) print(f'经过{begin}站点的线路为:{data[0]},经过{end}站点的线路为{data[1]}') # 判断经过起始点和终点的对应线路 for i in range(len(list(data)[0])): ls.append(show_site(data[0][i])) print(f"{line_check(str(data[0][i]))}") for j in range(len(list(data)[1])): ls_.append(show_site(data[1][j])) print(f"{line_check(str(data[1][j]))}") for i in ls: # i为集合的形式 for a in list(i): for b in str(a).split(): # 切割字符串 if b in str(ls_): # 判断是否存在相同的站点 tag = False print(f"您可以通过从{data[0]}号线的{b}站转到{data[1]}号线来到达目的地!!") # break # break # break # break if tag: print('对不起,无法通过换乘来到达目的地') def direct_line(begin, end): # 判断线路直达的函数 with open('line_info.pkl', 'rb') as fp: while True: try: data = pickle.load(fp) # 遍历字典 for key, value in data.items(): ls = str(value) if begin in ls and end in ls: print(f'您可以通过{key}号线路直接到达') return True except: break def save_data(ls): # 存储数据的函数 with open('line_info.pkl', 'wb') as fp: for data in ls: pickle.dump(data, fp) def check_site(begin, end): # 判断站点所在的线路的函数。 with open('line_info.pkl', 'rb') as fp: ls = [] ls_ = [] while True: try: data = pickle.load(fp) # 遍历字典 for key, value in data.items(): ls1 = str(value) if begin in ls1: ls.append(key) if end in ls1: ls_.append(key) except: break return ls, ls_ # def help_change_line_info(i, j): # with open('line_info.pkl', 'rb') as fp: # ls = [] # ls_ = [] # while True: # try: # data = pickle.load(fp) # # 遍历字典 # for key, value in data.items(): # ls1 = str(key) # if i in ls1: # ls.append(value) # if j in ls1: # ls_.append(value) # except: # break # return ls, ls_ if __name__ == 'main': main() main()