目录
  • 一、设计目的
    • 1、教学目的
    • 2、教学要求
  • 二、需求分析
    • 1、问题
    • 2、系统
    • 3、运行要求
  • 三、系统模块设计
    • 四、详细设计
      • 五、需要设计的函数
        • 六、python源码
          • 七、运行效果

            一、设计目的

            1、教学目的

            本课程设计是学生学习完《python程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用python语言进行程序设计的方法,加深对python语言特点和使用python语言进行程序设计开发过程的理解,加强动手能力。其主要目的是:

            (1)进一步培养学生python程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;

            (2)针对python语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。

            (3)掌握python语言的编程技巧和上机调试程序的方法。

            (4)掌握程序设计的常用算法。

            2、教学要求

            (1)要求从所给题目中任选若干个,每个学生必须独立完成课程设计,不能互相抄袭。

            (2)设计完成后,对所完成的工作进行答辩。

            (3)要求写出一份详细的课程设计报告。

            (4)程序设计题目,须提交相应的程序,并需提供加注释的源程序,能正常运行。

            二、需求分析

            1、问题

            根据需求,该系统所应包含的信息有以下一些:

            后台用户管理员的基本信息:

            账号、密码

            各路公交车的基本信息:

            每路公交车对应的线路信息

            2、系统

            采用python语言实现,开发环境为pythoncharm,可以运行在操作系统windows98及以上皆可。

            3、运行要求

            界面友好,操作方便,容错性强。

            三、系统模块设计

            主界面模块:完成系统菜单的显示。

            功能选择模块:根据用户的选择,完成其相应的功能。

            线路查询模块:根据用户提供的线路,查询该线路所经过的站点。

            站点查询的模块:根据用户提供的站点,查询经过该站点的所有线路。

            后台管理员的模块:后台管理员可以进行一些操作,例如:删除所有线路、添加线路等

            后台管理员的账号系统管理的模块:注册后台管理员的账号和密码。

            换乘信息的模块:根据用户提供的起点和终点,帮助用户找到最便捷的路线。

            四、详细设计

            五、需要设计的函数

            主函数。

            管理员账号管理界面的函数。

            用户登录的函数。

            后台管理员界面的函数。

            定义修改线路的函数。

            判断是否存在线路的函数。

            线路查询的函数。

            判断站点是否存在的函数。

            站点查询的函数。

            检查添加线路是否存在的函数。

            添加线路的函数。

            清楚所有线路的函数。

            展示所有线路的函数。

            删除线路的函数。

            判断是否存在线路的函数。

            展示特定线路中的站点的函数。

            换乘信息的函数。

            判断线路直达的函数。

            存储数据的函数。

            断站点所在的线路的函数。

            六、python源码

            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()
            

            七、运行效果

            视频链接

            到此这篇关于基于python制作公交车站查询系统的文章就介绍到这了,更多相关python公交车站查询系统内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!