热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享基于Python制作公交车站查询系统

目录一、设计目的1、教学目的2、教学要求二、需求分析1、问题2、系统3、运行要求三、系统模块设计四、详细设计五、需要设计的函数六、python源码七、运行效果一、设计目的1、教学目
目录
  • 一、设计目的
    • 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制作公交车站查询系统

            五、需要设计的函数

            主函数。

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

            用户登录的函数。

            后台管理员界面的函数。

            定义修改线路的函数。

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

            线路查询的函数。

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

            站点查询的函数。

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

            添加线路的函数。

            清楚所有线路的函数。

            展示所有线路的函数。

            删除线路的函数。

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

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

            换乘信息的函数。

            判断线路直达的函数。

            存储数据的函数。

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

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

            需要了解更多python教程分享基于Python制作公交车站查询系统,都可以关注python教程分享栏目&#8212;编程笔记


            推荐阅读
            • Python3怎么获取文件属性
              这篇文章给大家分享的是有关Python3怎么获取文件属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。os.stat(path ... [详细]
            • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
            • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
            • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
            • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
            • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
            • 向QTextEdit拖放文件的方法及实现步骤
              本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
            • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
            • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
            • 开发笔记:加密&json&StringIO模块&BytesIO模块
              篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
            • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
            • android listview OnItemClickListener失效原因
              最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
            • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
            • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
            • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
            author-avatar
            dmcm0008
            这个家伙很懒,什么也没留下!
            PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
            Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有