中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Python如何制作公交車站查詢系統

發布時間:2022-01-19 13:24:05 來源:億速云 閱讀:200 作者: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

    黄梅县| 乐业县| 曲水县| 桃园市| 三门县| 禹城市| 青岛市| 石城县| 太谷县| 阿克苏市| 会泽县| 绍兴县| 隆子县| 远安县| 民乐县| 高邮市| 松滋市| 仁寿县| 晋宁县| 龙陵县| 革吉县| 通道| 青铜峡市| 桃园县| 车致| 正定县| 柳林县| 虹口区| 榆树市| 满城县| 安龙县| 陆丰市| 上饶县| 凉山| 思茅市| 浮梁县| 阿拉善左旗| 肇源县| 枣强县| 岳阳县| 马边|