最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python制作公交車站查詢系統(tǒng)

 更新時(shí)間:2022年01月19日 11:33:50   作者:Kinght_123  
這篇文章主要介紹了如何利用Python制作一個(gè)簡(jiǎn)單的公交車站查詢系統(tǒng)。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下

一、設(shè)計(jì)目的

1、教學(xué)目的

本課程設(shè)計(jì)是學(xué)生學(xué)習(xí)完《Python程序設(shè)計(jì)》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過(guò)課程設(shè)計(jì),更好地掌握使用Python語(yǔ)言進(jìn)行程序設(shè)計(jì)的方法,加深對(duì)Python語(yǔ)言特點(diǎn)和使用Python語(yǔ)言進(jìn)行程序設(shè)計(jì)開發(fā)過(guò)程的理解,加強(qiáng)動(dòng)手能力。其主要目的是:

(1)進(jìn)一步培養(yǎng)學(xué)生Python程序設(shè)計(jì)的思想,加深對(duì)高級(jí)語(yǔ)言基本語(yǔ)言要素和控制結(jié)構(gòu)的理解;

(2)針對(duì)Python語(yǔ)言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。

(3)掌握Python語(yǔ)言的編程技巧和上機(jī)調(diào)試程序的方法。

(4)掌握程序設(shè)計(jì)的常用算法。

2、教學(xué)要求

(1)要求從所給題目中任選若干個(gè),每個(gè)學(xué)生必須獨(dú)立完成課程設(shè)計(jì),不能互相抄襲。

(2)設(shè)計(jì)完成后,對(duì)所完成的工作進(jìn)行答辯。

(3)要求寫出一份詳細(xì)的課程設(shè)計(jì)報(bào)告。

(4)程序設(shè)計(jì)題目,須提交相應(yīng)的程序,并需提供加注釋的源程序,能正常運(yùn)行。

二、需求分析

1、問(wèn)題

根據(jù)需求,該系統(tǒng)所應(yīng)包含的信息有以下一些:

后臺(tái)用戶管理員的基本信息:

賬號(hào)、密碼

各路公交車的基本信息:

每路公交車對(duì)應(yīng)的線路信息

2、系統(tǒng)

采用Python語(yǔ)言實(shí)現(xiàn),開發(fā)環(huán)境為PythonCharm,可以運(yùn)行在操作系統(tǒng)windows98及以上皆可。

3、運(yùn)行要求

界面友好,操作方便,容錯(cuò)性強(qiáng)。

三、系統(tǒng)模塊設(shè)計(jì)

主界面模塊:完成系統(tǒng)菜單的顯示。

功能選擇模塊:根據(jù)用戶的選擇,完成其相應(yīng)的功能。

線路查詢模塊:根據(jù)用戶提供的線路,查詢?cè)摼€路所經(jīng)過(guò)的站點(diǎn)。

站點(diǎn)查詢的模塊:根據(jù)用戶提供的站點(diǎn),查詢經(jīng)過(guò)該站點(diǎn)的所有線路。

后臺(tái)管理員的模塊:后臺(tái)管理員可以進(jìn)行一些操作,例如:刪除所有線路、添加線路等

后臺(tái)管理員的賬號(hào)系統(tǒng)管理的模塊:注冊(cè)后臺(tái)管理員的賬號(hào)和密碼。

換乘信息的模塊:根據(jù)用戶提供的起點(diǎn)和終點(diǎn),幫助用戶找到最便捷的路線。

四、詳細(xì)設(shè)計(jì)

五、需要設(shè)計(jì)的函數(shù)

主函數(shù)。

管理員賬號(hào)管理界面的函數(shù)。

用戶登錄的函數(shù)。

后臺(tái)管理員界面的函數(shù)。

定義修改線路的函數(shù)。

判斷是否存在線路的函數(shù)。

線路查詢的函數(shù)。

判斷站點(diǎn)是否存在的函數(shù)。

站點(diǎn)查詢的函數(shù)。

檢查添加線路是否存在的函數(shù)。

添加線路的函數(shù)。

清楚所有線路的函數(shù)。

展示所有線路的函數(shù)。

刪除線路的函數(shù)。

判斷是否存在線路的函數(shù)。

展示特定線路中的站點(diǎn)的函數(shù)。

換乘信息的函數(shù)。

判斷線路直達(dá)的函數(shù)。

存儲(chǔ)數(shù)據(jù)的函數(shù)。

斷站點(diǎn)所在的線路的函數(shù)。

六、Python源碼

import os
import pickle


def main():  # 主函數(shù)
    while True:
        print('-' * 30)
        print('------菜單------')
        print('1.線路查詢')
        print('2.站點(diǎn)查詢')
        print('3.換乘信息')
        print('4.后臺(tái)管理員界面')
        print('5.管理員的賬號(hào)管理界面')
        print('6.退出程序')
        print('-' * 30)
        num = int(input('請(qǐng)選擇你的操作:\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('請(qǐng)重新做出你的選擇?。?)


def manager_account():  # 管理員賬號(hào)管理界面的函數(shù)
    def new_():
        file_path = 'D:\公交查詢系統(tǒng)\info.pkl'
        a = input('請(qǐng)?jiān)O(shè)置你的賬號(hào):')
        b = input('請(qǐng)?jiān)O(shè)置入你的密碼:')
        w = input('請(qǐng)?jiān)俅屋斎肽愕牡拿艽a:')
        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('您已經(jīng)注冊(cè)成功??!')
            else:
                with open('info.pkl', 'wb') as fp:
                    pickle.dump(d, fp)
                print('您已經(jīng)注冊(cè)成功?。?)
        else:
            print('對(duì)不起,你兩次輸入的密碼不一致,請(qǐng)您重新輸入!!')

    def xiaohui():
        h = open('info.pkl', 'w+')  # 清空文件里的內(nèi)容。。。
        h.truncate()
        print('你已經(jīng)銷毀成功。。。')

    while True:
        print('-----管理員的賬號(hào)管理界面------\n'
              '1.注冊(cè)\n'
              '2.注銷原有的所有賬戶\n'
              '3.退出管理員的賬號(hào)管理界面')
        choice = input('請(qǐng)做出你的選擇:\n')
        if choice == '1':
            new_()
        if choice == '2':
            xiaohui()
        elif choice == '3':
            print('-' * 35)
            print('------菜單------')
            print('1.線路查詢')
            print('2.站點(diǎn)查詢')
            print('3.換乘信息')
            print('4.后臺(tái)管理員界面')
            print('5.管理員的賬號(hào)管理界面')
            print('6.退出程序')
            print('-' * 35)
            break
        else:
            print('請(qǐng)重新做出你的選擇')


def login():  # 用戶登錄的函數(shù)
    with open('info.pkl', 'rb') as fp:
        q = input('請(qǐng)輸入你的的賬號(hào):')
        w = input('請(qǐng)輸入你的的密碼:')
        while True:
            try:
                data = pickle.load(fp)
                if q == data['user'] and w == data['password']:
                    print('您已經(jīng)登錄成功?。?!')
                    return True

            except:
                break


def manager():  # 后臺(tái)管理員界面的函數(shù)
    if login():
        while True:
            print('-' * 30)
            print('-----后臺(tái)管理員界面-----')
            print('1.添加線路')
            print('2.刪除線路')
            print('3.修改線路')
            print('4.查看所有線路')
            print('5.刪除所有線路')
            print('6.退出')
            print('-' * 30)
            num = input('請(qǐng)做出你的選擇:\n')
            if num == '3':
                revise_line()
                continue
            if num == '1':
                add_line()
                continue
            if num == '6':
                print('-' * 25)
                print('------菜單------')
                print('1.線路查詢')
                print('2.站點(diǎn)查詢')
                print('3.換乘信息')
                print('4.后臺(tái)管理員界面')
                print('5.管理員的賬號(hào)管理界面')
                print('6.退出程序')
                print('-' * 25)
                break
            if num == '5':
                clear_line_all()
                continue
            if num == '4':
                show_line_all()
                continue
            if num == '2':
                num = input('請(qǐng)輸入你要?jiǎng)h除的線路:\n').strip()
                clear_line(num)
                continue
            else:
                print('請(qǐng)重新做出你的選擇...')
    else:
        print('對(duì)不起,你登錄失敗,不可以讓您進(jìn)入后臺(tái)管理員界面')


def revise_line():  # 定義修改線路的函數(shù)
    num = input('請(qǐng)輸入您要修改的線路:').strip()
    if check_add_line(num):
        show_line_all()
        tag = input('請(qǐng)確認(rèn)是否繼續(xù)修改線路:(1為是,0為否)\n')
        if tag == '1':
            file_path = 'D:\公交查詢系統(tǒng)\line_info.pkl'
            a = input('請(qǐng)?jiān)俅屋斎胍薷牡木€路:').strip()
            clear_line(a)
            b = input('請(qǐng)輸入經(jīng)過(guò)的站點(diǎn):')
            d = {
                a: 
            }
            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('您已經(jīng)修改線路成功!!')
            else:
                with open('line_info.pkl', 'wb') as fp:
                    pickle.dump(d, fp)
                print("您已經(jīng)修改線路成功了!?。?!")
    else:
        print('您要修改的線路不存在,需要?jiǎng)?chuàng)建一個(gè)新的線路。。。')
        add_line()


def line_check(num):  # 判斷是否存在線路的函數(shù)
    with open('line_info.pkl', 'rb') as fp:
        while True:
            try:
                data = pickle.load(fp)
                if num in data:
                    print(f'{num}號(hào)線的路線經(jīng)過(guò)的站點(diǎn)為{data[num]}')
                    return True
            except:
                break


def line_find():  # 線路查詢的函數(shù)
    num = input('請(qǐng)輸入你要查詢的線路:\n').strip()
    if line_check(num):
        pass
    else:
        print('您要查找的線路不存在....')


def site_check():  # 判斷站點(diǎn)是否存在的函數(shù)
    res = []
    with open('line_info.pkl', 'rb') as fp:
        num = input('請(qǐng)輸入你要查詢的站點(diǎn)名:\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'經(jīng)過(guò){num}站點(diǎn)的線路為{key}號(hào)線')
                        continue
            except:
                break
    if res:
        print(res)
        return True
    else:
        return False


def site_find():  # 站點(diǎn)查詢的函數(shù)
    if site_check():
        pass
    else:
        print('您要查詢的站點(diǎn)不存在.....')


def check_add_line(num):  # 檢查添加線路是否存在的函數(shù)
    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():  # 添加線路的函數(shù)
    file_path = 'D:\公交查詢系統(tǒng)\line_info.pkl'
    a = input('請(qǐng)輸入添加的線路:').strip()
    b = input('請(qǐng)輸入經(jīng)過(guò)的站點(diǎn):')
    d = {
        a: 
    }
    if os.path.exists(file_path) and os.path.getsize(file_path):
        if check_add_line(a):
            print('您要添加的線路已經(jīng)存在了......')
        else:
            with open('line_info.pkl', 'ab') as f:
                pickle.dump(d, f)
            print('您已經(jīng)添加線路成功??!')
    else:
        with open('line_info.pkl', 'wb') as fp:
            pickle.dump(d, fp)
        print('您已經(jīng)添加線路成功了!!')


def clear_line_all():  # 清除所有線路的函數(shù)
    h = open('line_info.pkl', 'w+')  # 清空文件里的內(nèi)容。。。
    h.truncate()
    print('你已經(jīng)銷毀成功。。。')


def show_line_all():  # 展示所有線路的函數(shù)
    with open('line_info.pkl', 'rb') as fp:
        while True:
            try:
                data = pickle.load(fp)
                # 遍歷字典
                for key, value in data.items():
                    print(f'{key}線路經(jīng)過(guò)的站點(diǎn)是{value}')
            except:
                break


def clear_line(num):  # 刪除線路的函數(shù)
    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}線路已經(jīng)刪除成功??!')
                        pass
                    else:
                        ls.append(data)
            except:
                break
        save_data(ls)


def line_check(num):  # 判斷是否存在線路的函數(shù)
    with open('line_info.pkl', 'rb') as fp:
        while True:
            try:
                data = pickle.load(fp)
                if num in data:
                    print(f'{num}號(hào)線的路線經(jīng)過(guò)的站點(diǎn)為{data[num]}')
                    return True
            except:
                break


def show_site(num):  # 展示特定線路中的站點(diǎn)的函數(shù)
    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():  # 換乘信息的函數(shù)
    begin = input('請(qǐng)輸入你的起點(diǎn)站點(diǎn):\n').strip()
    end = input('請(qǐng)輸入你的終點(diǎn)站點(diǎn):\n').strip()
    if direct_line(begin, end):
        pass
    else:
        ls = []  # 存儲(chǔ)經(jīng)過(guò)起點(diǎn)的線路的全部站點(diǎn)
        ls_ = []  # 存儲(chǔ)經(jīng)過(guò)終點(diǎn)的線路的全部站點(diǎn)
        tag = True
        data = check_site(begin, end)
        # print(type(data[0]),type(data[1]))
        print(f'經(jīng)過(guò){begin}站點(diǎn)的線路為:{data[0]},經(jīng)過(guò){end}站點(diǎn)的線路為{data[1]}')  # 判斷經(jīng)過(guò)起始點(diǎn)和終點(diǎn)的對(duì)應(yīng)線路
        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_):  # 判斷是否存在相同的站點(diǎn)
                        tag = False
                        print(f"您可以通過(guò)從{data[0]}號(hào)線的站轉(zhuǎn)到{data[1]}號(hào)線來(lái)到達(dá)目的地??!")
            #             break
            #         break
            #     break
            # break
        if tag:
            print('對(duì)不起,無(wú)法通過(guò)換乘來(lái)到達(dá)目的地')


def direct_line(begin, end):  # 判斷線路直達(dá)的函數(shù)
    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'您可以通過(guò){key}號(hào)線路直接到達(dá)')
                        return True
            except:
                break


def save_data(ls):  # 存儲(chǔ)數(shù)據(jù)的函數(shù)
    with open('line_info.pkl', 'wb') as fp:
        for data in ls:
            pickle.dump(data, fp)


def check_site(begin, end):  # 判斷站點(diǎn)所在的線路的函數(shù)。
    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()



七、運(yùn)行效果

視頻鏈接

到此這篇關(guān)于基于Python制作公交車站查詢系統(tǒng)的文章就介紹到這了,更多相關(guān)Python公交車站查詢系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python日期時(shí)間轉(zhuǎn)為字符串或者格式化輸出的實(shí)例

    python日期時(shí)間轉(zhuǎn)為字符串或者格式化輸出的實(shí)例

    今天小編就為大家分享一篇python日期時(shí)間轉(zhuǎn)為字符串或者格式化輸出的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python迷宮問(wèn)題深度優(yōu)先遍歷實(shí)例

    python迷宮問(wèn)題深度優(yōu)先遍歷實(shí)例

    這篇文章主要給大家介紹了關(guān)于python迷宮問(wèn)題深度優(yōu)先遍歷的相關(guān)資料,深度優(yōu)先搜索算法(Depth-First-Search),是搜索算法的一種,需要的朋友可以參考下
    2021-06-06
  • python爬蟲之爬取谷歌趨勢(shì)數(shù)據(jù)

    python爬蟲之爬取谷歌趨勢(shì)數(shù)據(jù)

    這篇文章主要介紹了python爬蟲之爬取谷歌趨勢(shì)數(shù)據(jù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python使用Pyinstaller如何打包整個(gè)項(xiàng)目

    python使用Pyinstaller如何打包整個(gè)項(xiàng)目

    這篇文章主要介紹了python使用Pyinstaller如何打包整個(gè)項(xiàng)目,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python查找指定依賴包簡(jiǎn)介信息實(shí)現(xiàn)

    python查找指定依賴包簡(jiǎn)介信息實(shí)現(xiàn)

    這篇文章主要為大家介紹了python查找指定依賴包簡(jiǎn)介信息實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • pycharm安裝opencv的實(shí)現(xiàn)

    pycharm安裝opencv的實(shí)現(xiàn)

    本文主要介紹了pycharm安裝opencv的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Python中實(shí)現(xiàn)輸入一個(gè)整數(shù)的案例

    Python中實(shí)現(xiàn)輸入一個(gè)整數(shù)的案例

    這篇文章主要介紹了Python中實(shí)現(xiàn)輸入一個(gè)整數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 關(guān)于數(shù)據(jù)分析之滾動(dòng)窗口pandas.DataFrame.rolling方法

    關(guān)于數(shù)據(jù)分析之滾動(dòng)窗口pandas.DataFrame.rolling方法

    Pandas庫(kù)中的rolling方法是數(shù)據(jù)處理中常用的功能,它允許用戶對(duì)數(shù)據(jù)進(jìn)行滾動(dòng)窗口(滑動(dòng)窗口)操作,通過(guò)指定窗口大小,可以使用不同的聚合函數(shù)對(duì)窗口內(nèi)的數(shù)據(jù)進(jìn)行計(jì)算,例如最大值、最小值、平均值、中位數(shù)等,此外,rolling方法還可以計(jì)算方差、標(biāo)準(zhǔn)差、偏度、峰度
    2024-09-09
  • matplotlib 范圍選區(qū)(SpanSelector)的使用

    matplotlib 范圍選區(qū)(SpanSelector)的使用

    這篇文章主要介紹了matplotlib 范圍選區(qū)(SpanSelector)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python實(shí)現(xiàn)判斷字符串中包含某個(gè)字符的判斷函數(shù)示例

    Python實(shí)現(xiàn)判斷字符串中包含某個(gè)字符的判斷函數(shù)示例

    這篇文章主要介紹了Python實(shí)現(xiàn)判斷字符串中包含某個(gè)字符的判斷函數(shù),涉及Python自定義函數(shù)中使用find方法針對(duì)字符串的簡(jiǎn)單判斷查找相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

阳西县| 德令哈市| 临江市| 弥渡县| 邯郸市| 航空| 清水河县| 邯郸市| 岳池县| 漯河市| 土默特左旗| 东乡县| 尼勒克县| 包头市| 湖口县| 阜阳市| 永川市| 吴忠市| 广灵县| 茂名市| 平顺县| 大兴区| 礼泉县| 九江县| 讷河市| 牙克石市| 西安市| 乐东| 日照市| 商南县| 梓潼县| 老河口市| 平塘县| 福建省| 湟源县| 西乌珠穆沁旗| 南康市| 呼伦贝尔市| 乌兰县| 绥芬河市| 黄龙县|