返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python制作公交车站查询系统
  • 786
分享到

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

2024-04-02 19:04:59 786人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

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

一、设计目的

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公交车站查询系统内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Python制作公交车站查询系统

本文链接: https://lsjlt.com/news/162968.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于Python制作公交车站查询系统
    目录一、设计目的1、教学目的2、教学要求二、需求分析1、问题2、系统3、运行要求三、系统模块设计四、详细设计五、需要设计的函数六、Python源码七、运行效果一、设计目的 1、教学目...
    99+
    2024-04-02
  • 基于Python如何制作公交车站查询系统
    这篇文章给大家介绍基于Python如何制作公交车站查询系统,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、设计目的1、教学目的本课程设计是学生学习完《Python程序设计》课程后,进行的一次全面的综合训练,通过课程设...
    99+
    2023-06-26
  • android实现查询公交车还有几站的功能
     上一篇文章介绍了如何在Android平台上利用百度地图进行定位,接下来就介绍一下在获取的定位功能的基础上采用百度地图来获取周边的公交信息。这里采用如上文同样的方式,单独写一个类,该类是对周边搜索功能的封装,NearbySearc...
    99+
    2023-05-31
    android 查询公交 还有
  • 基于Python的车牌识别系统实现
    本文将以基于Python的车牌识别系统实现为方向,介绍车牌识别技术的基本原理、常用算法和方法,并详细讲解如何利用Python语言实现一个完整的车牌识别系统。 目录 引言车牌识别技...
    99+
    2023-10-18
    python 车牌识别 计算机视觉 机器学习 原力计划
  • vba怎么制作查询系统
    要制作一个查询系统,你可以使用VBA编程来完成。以下是一个简单的示例,介绍了如何使用VBA创建一个基本的查询系统。首先,打开Exce...
    99+
    2023-09-01
    vba
  • Python脚本实现12306火车票查询系统
    最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来。(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:pytho...
    99+
    2022-06-04
    查询系统 火车票 脚本
  • 基于Python的车牌识别系统的实现
    目录 第1章 绪论 1 1.1研究背景与意义 1 1.2课题研究现状 1 1.3研究目标 1 1.4研究内容与论文组织结构 1 第2章 相关理论与关键技术 3 2.1计算机视觉概述 3 2.2 Ope...
    99+
    2023-10-20
    python 计算机视觉 opencv 车牌识别系统 毕业设计
  • 基于Python实现智能停车场车牌识别计费系统
    目录项目结构主要代码实现效果前段时间练习过的一个小项目,今天再看看,记录一下~ 项目结构 说明: datefile文件夹:保存车辆信息表的xlsx文件file文件夹:保存图片文件夹...
    99+
    2024-04-02
  • 基于C#制作考试答题系统
    目录效果展示:起始页代码考试页面代码有图标的应用程序效果展示: 1. 进入页面: 2. 答题界面: 3. 时间截止界面: 4. 提交界面: 起始页代码 public part...
    99+
    2024-04-02
  • 使用Python实现火车票查询系统(带界面)
    目录导语一、运行环境二、代码展示三、效果展示导语 周末、假期来了,七夕也快到了,又到一年中最一票难求的时候了! 那些假期想回家、过节异地恋的小可爱们,能准时抢到回家(约会对象)的城市...
    99+
    2024-04-02
  • 基于Python怎么实现智能停车场车牌识别计费系统
    这篇文章主要介绍“基于Python怎么实现智能停车场车牌识别计费系统”,在日常操作中,相信很多人在基于Python怎么实现智能停车场车牌识别计费系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Pytho...
    99+
    2023-06-30
  • 基于python制作简易版学生信息管理系统
    目录一、前言二、需求分析三、主函数四、功能菜单五、录入信息六、保存信息七、查找信息八、删除信息九、修改信息十、显示信息十一、按成绩排序十二、统计人数十三、最后记得运行主函数十四、将程...
    99+
    2024-04-02
  • 基于Python制作B站视频下载小工具
    目录1. 原理简介2. 网页分析3. 视频爬取4. 存入本地5. GUI工具制作1. 原理简介 原理很简单,就是获取视频资源的源地址,然后爬取视频的二进制内容,再写入到本地即可。 2...
    99+
    2024-04-02
  • 基于PyQT5制作一个课堂点名系统
    刷抖音的时候发现一个老师在用的课堂点名系统。用PyQt5实现了一下同款,导入学生姓名,测试了一下完美运行。 操作效果展示: 完整源代码块还是放在了文章的最后面 使用的时候准备好学生...
    99+
    2024-04-02
  • 网站域名备案查询系统怎么操作
    以下是网站域名备案查询系统的操作步骤:1. 打开网站域名备案查询系统的官方网站(如:https://beian.aliyun.com...
    99+
    2023-06-12
    网站域名备案查询 域名
  • 基于Java+SpringBoot+Vue前后端分离二手车交易系统设计和实现
    博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联...
    99+
    2023-08-31
    java spring boot vue.js 原力计划
  • 基于Python创建语音识别控制系统
    下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别 题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形...
    99+
    2024-04-02
  • 基于Python轻松制作一个股票K线图网站
    目录获取股票数据PyEcharts 作图构建 Web 框架视图函数编写模板编写编辑主逻辑前端页面编写在前面的文章中,我们学习了如何使用 Tkinter 构建股票数据抓取以及展示K线图...
    99+
    2024-04-02
  • 基于Matlab制作一个不良图片检测系统
    目录不良图片检测部分part.0 图片导入part.1 检查是否为肤色part.2 皮肤区域标记part.3 通过皮肤区域特点判定是否为不良图片完整代码批量处理部分不良图片检测部分 ...
    99+
    2024-04-02
  • Python制作基础学生信息管理系统
    目录 一.前言二.开发环境:三.涉及知识点四.接下来我们开始敲代码第一步:制作学生信息管理系统的界面第二步:新建学生信息第三步:显示全部学生信息第四步:查询学生信息第五步:修改学生信...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作