温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

基于Python如何制作公交车站查询系统

发布时间:2022-01-19 13:24:05 来源:亿速云 阅读:204 作者:kk 栏目:开发技术

这篇文章给大家介绍基于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如何制作公交车站查询系统

    五、需要设计的函数

    主函数。

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

    用户登录的函数。

    后台管理员界面的函数。

    定义修改线路的函数。

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

    线路查询的函数。

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

    站点查询的函数。

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

    添加线路的函数。

    清楚所有线路的函数。

    展示所有线路的函数。

    删除线路的函数。

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

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

    换乘信息的函数。

    判断线路直达的函数。

    存储数据的函数。

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

    六、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的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向对象,与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。3.可移植性,Python程序无需修改就可以在各种平台上运行。4.解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5.开源,Python是 FLOSS(自由/开放源码软件)之一。

    关于基于Python如何制作公交车站查询系统就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI