要求:

目录

要求:


第1题  编写一个公交查询系统

随着公交系统的庞大,人们很难得到准确的公交信息,这样给人们的出行就带来了不便。因此,急需一个方便、快捷的公交信息查询方式,本系统提供换乘询功能、路线查询功能。乘客可以方便的进行查询,以防乘错车次。主要有4个模块:线路查询、站点查询、换乘查询和后台管理模块。

(1)线路查询:可以获得要查询公交所通过的各个站点。

(2)站点查询:通过输入的指定站点查询经过该站点的公交。

(3)换乘查询:分为公交直达、公交一次换乘,主要体现那些不可直达需要转车的路线的所有换乘方法。

(4)后台管理:用于管理员登录,添加、修改、删除公交线路等功能。

程序需要存储各公交线路站点信息,这里采用文件存储线路信息,形式如下:

1s%通利公交公司%长途客运西站%建设路国棉六厂%建设路桐柏路站%建设路文化宫路站%建设路工人路站%碧沙岗公园西门%绿城广场%嵩山路伊河路站%解放军测绘学院%市骨科医院%陇海路路寨%陇海路京广客运站%陇海路铁英街站%郑州铁路局%锦荣商贸城%福寿街大同路站%火车站%6:00-21:00 票价1元 ABCD卡有效

1x%火车站%一马路陇海路站%郑州铁路局%陇海路铁英街站%陇海路京广客运站%陇海路路寨%市骨科医院%解放军测绘学院%嵩山路伊河路站%绿城广场%碧沙岗公园西门%碧沙岗%建设路工人路站%建设路文化宫路站%建设路桐柏路站%建设路国棉六厂%华山路建设路站%通利公交公司%6:00-21:00 票价1元 ABCD卡有效

……

其中1s为上行,1x为下行。站点信息之间%分割。

提示:

公交查询系统程序从文件中读取线路信息,其中线路信息存入rote 字典中,线路名存入rotename列表中。rote 字典存储形式为{线路名:线路经过站点的列表}。

例如以上线路信息存入rote 字典时键名为线路名1s,键对应内容为1s线路经过站点的列表:

print(rote['1s'])

print(rote['1x'])

结果如下:

['通利公交公司', '长途客运西站', '建设路国棉六厂', '建设路桐柏路站', '建设路文化宫路站', '建设路工人路站', '碧沙岗公园西门', '绿城广场', '嵩山路伊河路站', '解放军测绘学院', '市骨科医院', '陇海路路寨', '陇海路京广客运站', '陇海路铁英街站', '郑州铁路局', '锦荣商贸城', '福寿街大同路站', '火车站']

['火车站', '一马路陇海路站', '郑州铁路局', '陇海路铁英街站', '陇海路京广客运站', '陇海路路寨', '市骨科医院', '解放军测绘学院', '嵩山路伊河路站', '绿城广场', '碧沙岗公园西门', '碧沙岗', '建设路工人路站', '建设路文化宫路站', '建设路桐柏路站', '建设路国棉六厂', '华山路建设路站', '通利公交公司']

当线路信息存入rote 字典后,线路查询、站点查询、换乘功能实现就可转换为对rote 字典的相应操作。

程序应采用模块化设计,主函数是程序入口,各模块独立,可分块调试,各模块由主函数控制调用。编写主菜单函数,返回相应的功能选项数字,主函数根据此数字调用相应的功能函数。编写各功能模块函数。最后进行综合调试。

将公交信息存储到数据库实现加分。

大致思路:

通过模块化程序来编写一个个函数来分别实现题目要求的功能.

信息由txt文档导入,存储在字典树中,key为公交线路名,value为该线路经过的各个站点以及该线路的车票价格.

公交路线文本下载地址:

gongjiao.txt-其它文档类资源-CSDN文库https://download.csdn.net/download/kilig_CSM/54031169

代码:

t = open("gongjiao.txt", 'r')
zidian = {}while True:informationlin = t.readline()  # 本列信息.if informationlin == '':breaknum_star = int(informationlin.find("%"))  # 第一个百分号位置num_end = -99999  # 最后一个%位置for j in range(0, len(informationlin)):if informationlin[len(informationlin) - j - 1] == "%":num_end = len(informationlin) - j - 1break#   print(num_end)jian = informationlin[:int(num_star)]  # 字典树关键字.# print(jian)# print(informationlin[num_star+1:num_end])liebiao = informationlin[num_star + 1:num_end].split('%')# print(liebiao)zidian[jian] = liebiao
t.close()def xianlu_find(information_xianlu):print(zidian[information_xianlu])def get_key1(dct, value):# print(value)#print(dct)print(list(filter(lambda k: dct[k] == value, dct)))def zhandian_find(name_zhandian):linshi=[]# print(name_zhandian)for i in zidian.keys():for j in range(0, len(zidian[i])):if zidian[i][j] == name_zhandian:linshi.append(i)return  linshidef tianjia():t = open("gongjiao.txt", 'a+')jian_tianjia = input("请输入想要添加的路线名:")zhandian_tianjia = []while True:zhandian_tianjia_right = input("请输入该路线想要添加的站点的名称(每行输入一个站点,若想停止输入则输入-99.)")if zhandian_tianjia_right == '-99':breakelse:zhandian_tianjia.append(zhandian_tianjia_right)t.write(jian_tianjia)t.write('%')for i in range(0, len(zhandian_tianjia)):t.write(zhandian_tianjia[i])t.write("%")tianjia_stat_time = input("请输入该路线开始时间(格式为xx:xx):")tianjia_finish_time = input("请输入该路线结束时间(格式为xx:xx):")t.write(tianjia_stat_time + '-' + tianjia_finish_time)tianjia_money = input('请输入该路线车票价格(格式为:x元):')t.write(' ' + tianjia_money + ' ')tianjia_ka = input("请输入有效卡:")t.write(tianjia_ka + '卡有效')def shanchu():t = open("gongjiao.txt", 'r')information = t.read()del_xianlu = input("请输入你要删除的线路的名称:")del_start = information.find(del_xianlu)del_finish = information.find('卡有效', del_start)# print(information[0:del_start])information_re = information[0:del_start] + information[del_finish + 4:len(information)]print(information_re)t.close()t = open("实验.txt", 'w')t.write(information_re)t.close()def xiugai():shanchu()tianjia()def houtai():print('1.添加')print('2.修改')print('3.删除')num_houtai=input('请输入您想要进行的操作的序列号:')if num_houtai == 1 :tianjia()elif num_houtai == 2 :xiugai()else:shanchu()def xiangtong_find(start_xiangtong,finish_xiangtong):start = []  ##出发点路线finish = []  # 结束站路线for i in zidian.keys():  # 将所有的拥有起始站的线路找出for j in range(0, len(zidian[i])):if zidian[i][j] == start_xiangtong:start.append(i)for i in zidian.keys():  # 将所有拥有终点站的线路找出for j in range(0, len(zidian[i])):if zidian[i][j] == finish_xiangtong:finish.append(i)end_0 = []  ##存放起点和终点在同一条路的路线名for i in range(0, len(start)):for j in range(0, len(finish)):if start[i] == finish[j]:end_0.append(start[i])breakreturn end_0
def huancheng_find(zhandian_start,zhandian_finish):end_0=[]start = []  ##出发点路线finish = []  # 结束站路线for i in zidian.keys():  # 将所有的拥有起始站的线路找出for j in range(0, len(zidian[i])):if zidian[i][j] == zhandian_start:start.append(i)for i in zidian.keys():  # 将所有拥有终点站的线路找出for j in range(0, len(zidian[i])):if zidian[i][j] == zhandian_finish:finish.append(i)xiangtong_find(zhandian_start,zhandian_finish)if end_0!= []:#不用换乘可直达.end_ringt = []  # 将所有该路线上的站点加入该列表for i in range(0, len(end_0)):  # 遍历每个路线start_id = int(9999)finish_id = int(-9999)for j in range(0, len(zidian[end_0[i]])):  # 遍历每个路线中的每个站点if zidian[end_0[i]][j] == zhandian_start:start_id = jelif zidian[end_0[i]][j] == zhandian_finish:finish_id = jif start_id <= finish_id:end_ringt.append(end_0[i] + '线路')for j in range(start_id, finish_id + 1):end_ringt.append(zidian[end_0[i]][j])breakreturn end_ringtelse:  # 当起始站点的路线和终点的路线没有相同的时需要换乘.可以先找出发点的所有站点能够连接目的站点的路线的站点再打印出来.end_right=[]for i in  range (0,len(start)):#起始站点相同的路线start[i]for j in range(0, len(zidian[start[i]])):#zidian[start[i]][j]路线对应的站点即目的站点对应的能达到站点zhuanchengluxian = xiangtong_find(zidian[start[i]][j], zhandian_finish)if zhuanchengluxian !=[]:for m in  range(0,len(zhuanchengluxian)):print(start[i] + zhandian_start + '到' + zidian[start[i]][j] + '换乘' + zhuanchengluxian[m]+zidian[start[i]][j]+'-'+zhandian_finish)return []while True:print("1.(1)线路查询:可以获得要查询公交所通过的各个站点。")print("2.(2)站点查询:通过输入的指定站点查询经过该站点的公交。")print("3.(3)换乘查询:分为公交直达、公交一次换乘,主要体现那些不可直达需要转车的路线的所有换乘方法。")print("4.(4)后台管理:用于管理员登录,添加、修改、删除公交线路等功能。")print("5.(5)退出程序.")num=input("请输入你想要执行的操作的序列号:")if(num=='1'):information_xianlu=input("请输入你要查询的线路:")xianlu_find(information_xianlu)elif(num=='2'):name_zhandian = input("请输入你要搜索的站点:")print(zhandian_find(name_zhandian))elif (num == '3'):zhandian_start = input("请输入你所在站点:")zhandian_finish = input("请输入你想要到达的站点:")if huancheng_find(zhandian_start,zhandian_finish)!=[]:print(huancheng_find(zhandian_start, zhandian_finish))elif (num == '4'):houtai()elif (num == '5'):break

一些比较关键的语句后跟的有注释以方便大家理解.

本实验具体内容于:

Python课设实验报告.docx-讲义文档类资源-CSDN文库

(本报告包含课设目的,开发环境,课设内容,需求分析,设计过程,存储方式,过程及代码,调试过程,小结,参考文献.)

题外话(吐槽):

本着资源共享的想法让更多因课设而苦恼的同学更加方便的完成课设,于是我上传了这篇博客以供大家参考.结果就在我上传题目时忽然发现题目最后有一句“将公交信息存储到数据库实现加分

人麻了,可惜离交课设的时间快到了没时间再改了.就只能这样了.

还有就是第三个功能实现的时候本来是使用了递归实现,但没想到的是pycharm报错说超出递归上线,第一次知道递归还有上限,之前用c从来没遇见过递归上线,感觉涨芝士了,之后改变思路重新实现该功能.

Python课设实验 之 公交查询系统.(文本导入 字典树 储存.)相关推荐

  1. Python课设实验 之 车票订购系统.(sqlite数据库 储存.)

    要求: 第2题 编写车票订购系统 (1)上网查询郑州到北京.西安.石家庄.济南.太原.武汉的距离以及票价,用数据库保存车次信息. (2)要求输入目的地,能够查询到里程和票价信息. (3)用数据库存储每 ...

  2. Python课设实验 之 爬虫应用——校园网搜索引擎(使用bs4进行数据分析.)

    题目要求: 第3题  爬虫应用--校园网搜索引擎 本题旨在使用Python建立一个适合校园网使用的Web搜索引擎系统,它能在较短时间内爬取页面信息,具有有效准确的中文分词功能,实现对校园网上新闻信息的 ...

  3. python公交查询系统

    python公交查询系统 公交查询系统实验可以实现一个方便.快捷的公交信息查询方式.要求实现以下功能:1.线路查询:可以获得要查询公交所通过的各个站点:2.站点查询:通过输入的指定站点查询经过该站点的 ...

  4. python课设_校园一卡通

    常州大学Python课设,校园一卡通 一.设计题目:校园一卡通管理系统 二. 设计内容: 用类的方法设计学生一卡通数据类型学生一卡通的基本数据成员至少包括:卡号(学号), 姓名, 性别, 余额,消费总 ...

  5. 基于JAVA的城市公交查询系统毕业论文(含源文件)

    获取项目源文件,学习交流联系Q:1225467431 摘要:公交查询系统是城市道路交通的重要组成部分,是城市发展的必然产物,是联系国民生活.社会生产和流通领域的关键环节.安阳城市公交查询系统的发展处于 ...

  6. java毕业设计——基于java+JSP+J2EE的城市公交查询系统设计与实现(毕业论文+程序源码)——城市公交查询系统

    基于java+JSP+J2EE的城市公交查询系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+J2EE的城市公交查询系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  7. 基于B/S的城市公交查询系统的设计与实现(附:源码+论文+答辩PPT))

    摘  要 近年来, Internet推动了以互联网技术为核心的各项工作蓬勃展开,互联网的强大也大大的促进了社会的发展,整个社会信息化进程逐步加快,网络也变成了我们日常活动中越来越重要的组成成分.为了使 ...

  8. 计算机毕业设计ssm基于Java的城市公交查询系统ac5p2系统+程序+源码+lw+远程部署

    计算机毕业设计ssm基于Java的城市公交查询系统ac5p2系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于Java的城市公交查询系统ac5p2系统+程序+源码+lw+远程部署 本源码技术栈 ...

  9. java毕业设计城市公交查询系统Mybatis+系统+数据库+调试部署

    java毕业设计城市公交查询系统Mybatis+系统+数据库+调试部署 java毕业设计城市公交查询系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

最新文章

  1. 【 C 】关于相邻字符串常量自动合并的标准(新旧标准)(新旧风格)(陷阱)
  2. 展示前一阵子做的小熊!
  3. centos llvm安装_在CentOS上编译安装llvm-3.8.1详细教程
  4. 【STM32】FreeRTOS创建和删除任务示例(动态方法)
  5. Windows系统安全从定制IP策略开始
  6. 弘辽科技:天猫国际预测2022六大进口消费趋势
  7. 一个免费、大小仅几MB但超好用的卸载工具——Geek Uninstaller
  8. 《ARM 嵌入式系统编程与优化》之 Linux/ARM 嵌入式平台
  9. 16/24点阵字库(经典)
  10. matlab 多项式排序,MATLAB多项式
  11. 多线程结果合并计算CyclicBarrier的使用
  12. uml 菱形_UML图符号的含义
  13. 【Hive】总体标准差stddev()
  14. 关于forward(转发)和redirect(重定向)的区别
  15. 信息系统开发(JAVA)设计一个银行账户类
  16. 浅谈在软件开发中的开发与测试 - 下
  17. JS-108~161
  18. Android 资源文件layout-sw500dp、layout-w500dp和layout-h500dp的区别
  19. exam平台Java试题阶段(一)
  20. Matlab查看矩阵中包含的所有数字种类

热门文章

  1. RedisUtil,Redis工具类
  2. LoadRunner中IP欺骗功能详解
  3. 依云工资查询系统升级方法
  4. XidianOJ 1081 锘爷与矩阵
  5. 金山词霸2005版词典文件对照表
  6. 2018 上半年总结
  7. zabbix自定义监控模板+grafana图形展示
  8. 修改注册表(设置首页)
  9. 承包经营与阿米巴经营的区别
  10. 网络配线架的安装步骤和注意事项