需求概述随着城市不断扩张公交线路随之增加公交换乘方式多种多样。如何选择耗时少费用低、路程近的方式成为人们公交出行最为关注的问题。本系统相应的功能需求如下展示所有的功能可以方便进行相应的操作搜索现在市面上的公交信息然后添加到公交站里面公交站多的时候将他们的线路整理出来方便去记录怎么坐公交在我们搜索一个目的地的时候能够清楚的知道我怎么去做哪路公交车以及转站换乘。项目功能1.功能展示列表向用户展示所有的功能并引导用户进行相应的操作除非用户自主选择退出否则可以循环使用所有功能。2.公交车站点添加和删除功能通过自己写的addBusStops方法添加搜索来的公交车站点方便后续查询相关站点使用3.公交车路线添加和删除功能通过自己写的addBusStation方法将一辆公交车经过的所有站点设为一条路线方便后续查询相关路线使用4.查询公交车的路线输入要查询的公交车去搜索该公交车经过的所有站点回显到命令行。5.查询公交车信息输入你所在的站点之后将该站点经过的所有公交策划线路查询出来回显到命令行。6.换乘查询查询两个站点起始站点和到达站点如果在一条线路就直接输出这条线路信息乘坐几站到达如果一条线路上没有两个站点那么就去寻找有这两个站点的其他线路如果有两条线路分别出现了起始站点和到达站点那么去找他们两条线路之间有没有重合的站点要是有便将起始站点信息输出几站到达该站并该站换乘到达站点线路乘坐几站到达终点站如果没有那就输出没有相关换乘路线。bus132 [新百广场, 市交通运输局(市二中), 中华和平路口, 市庄, 省委党校, 滹沱河南岸, 滹沱河北岸,现代城, 科技工程学院,正定一中, 北城门, 富康外国语学院, 省中医肝病医院, 江泰检车站, 三里屯办事处, 三里屯社区,中博电车厂]bus526 [九门公交枢纽站, 庄货头, 禅房, 周新庄, 黄庄, 信息学院, 固营北, 文化传媒学校, 财经商贸学院,罗家庄, 福泽,西上泽, 省中医肝病医院, 福康外国语学院, 正定一中, 正定火车站]subline1 [福泽, 会展中心, 西王, 白佛, 博物馆, 北国商城, 新百广场, 和平医院, 西杯]subline2 [柳辛庄, 铁道大学, 北国商城, 裕华路, 石家庄站, 嘉华路]subline3 [西三庄, 高柱, 柏林庄, 市庄, 市二中, 新百广场, 西三教, 石家庄站, 东王, 南王, 乐乡]分为三类代码如下#展示页面.pyfrom bus import Bus from busstation import BusStation bus132 [新百广场, 市交通运输局(市二中), 中华和平路口, 市庄, 省委党校, 滹沱河南岸, 滹沱河北岸, 现代城, 科技工程学院, 正定一中, 北城门, 富康外国语学院, 省中医肝病医院, 江泰检车站, 三里屯办事处, 三里屯社区, 中博电车厂] bus526 [九门公交枢纽站, 庄货头, 禅房, 周新庄, 黄庄, 信息学院, 固营北, 文化传媒学校, 财经商贸学院, 罗家庄, 福泽, 西上泽, 省中医肝病医院, 福康外国语学院, 正定一中, 正定火车站] subline1 [福泽, 会展中心, 西王, 白佛, 博物馆, 北国商城, 新百广场, 和平医院, 西杯] subline2 [柳辛庄, 铁道大学, 北国商城, 裕华路, 石家庄站, 嘉华路] subline3 [西三庄, 高柱, 柏林庄, 市庄, 市二中, 新百广场, 西三教, 石家庄站, 东王, 南王, 乐乡] busBus(1) bus.addBus(bus132) BusStation.addBus(bus) busBus(2) bus.addBus(bus526) BusStation.addBus(bus) busBus(3) bus.addBus(subline1) BusStation.addBus(bus) busBus(4) bus.addBus(subline2) BusStation.addBus(bus) busBus(5) bus.addBus(subline3) BusStation.addBus(bus) while True: print(————————————欢迎使用公交车查询系统————————————) print(——————请选择操作——————) print(1.查询公交线路) print(2.查询公交站点的公交车) print(3.公交车换乘路线查询) print(4.退出) choiceint(input(请输入操作)) if choice1: print(请输入要查询的公交线路) numinput() BusStation.queryStop(num) elif choice2: stopinput(请输入要查询的公交站点) bus_numberBusStation.queryBusStop(stop) print(f您要查询的{stop}站有{len(bus_number)}路公交车分别是 f{路.join(bus.number for bus in bus_number)}路) elif choice3: startinput(请输入起点站) endinput(请输入终点站) BusStation.transfer_stop(start,end) else: print(感谢您的使用,再见) break#bus.pyclass Bus: def __init__(self,number): self.stops[] self.numbernumber #几路车多少站点 def addBus(self,stops): if stops in self.stops: print(该站点已存在) for i in range(len(stops)): self.stops.append(stops[i]) def delBus(self,stops): self.stops.remove(stops)#busstation.pyclass BusStation: bus_list[] classmethod def addBus(cls,bus): if bus in cls.bus_list: print(该公交车已存在) cls.bus_list.append(bus) classmethod def queryStop(cls,number): for bus in cls.bus_list: if numberbus.number: print(f您查询的{number}路车经过的站点为:{路.join(bus.stops)}) classmethod def queryBusStop(cls,stop): number[] for bus in cls.bus_list: if stop in bus.stops: number.append(bus) return number classmethod def transfer_stop(cls,start,end): start_listcls.queryBusStop(start) end_listcls.queryBusStop(end) if not start_list: print(出发地并非公交站点请输入正确的出发点) return if not end_list: print(目的地并非公交站点请输入正确的目的地) return #是否直达 tmp[] for status in start_list: for end_status in end_list: if status.stopsend_status.stops: tmp.append(status.number) if tmp: print(f您可以乘坐{,.join(tmp)}直达公交路线) return #换乘 for status1 in start_list: for endbus1 in end_list: common_stopset(status1.stops)set(endbus1.stops) if common_stop: trasfer_stopnext(iter(common_stop)) print(f您好您可以从{start}站点出发乘坐{status1.number}路公交 f到达{trasfer_stop} f再乘坐{endbus1.number}路公交到达{end}站)
python实训小项目-公交车换乘系统
需求概述随着城市不断扩张公交线路随之增加公交换乘方式多种多样。如何选择耗时少费用低、路程近的方式成为人们公交出行最为关注的问题。本系统相应的功能需求如下展示所有的功能可以方便进行相应的操作搜索现在市面上的公交信息然后添加到公交站里面公交站多的时候将他们的线路整理出来方便去记录怎么坐公交在我们搜索一个目的地的时候能够清楚的知道我怎么去做哪路公交车以及转站换乘。项目功能1.功能展示列表向用户展示所有的功能并引导用户进行相应的操作除非用户自主选择退出否则可以循环使用所有功能。2.公交车站点添加和删除功能通过自己写的addBusStops方法添加搜索来的公交车站点方便后续查询相关站点使用3.公交车路线添加和删除功能通过自己写的addBusStation方法将一辆公交车经过的所有站点设为一条路线方便后续查询相关路线使用4.查询公交车的路线输入要查询的公交车去搜索该公交车经过的所有站点回显到命令行。5.查询公交车信息输入你所在的站点之后将该站点经过的所有公交策划线路查询出来回显到命令行。6.换乘查询查询两个站点起始站点和到达站点如果在一条线路就直接输出这条线路信息乘坐几站到达如果一条线路上没有两个站点那么就去寻找有这两个站点的其他线路如果有两条线路分别出现了起始站点和到达站点那么去找他们两条线路之间有没有重合的站点要是有便将起始站点信息输出几站到达该站并该站换乘到达站点线路乘坐几站到达终点站如果没有那就输出没有相关换乘路线。bus132 [新百广场, 市交通运输局(市二中), 中华和平路口, 市庄, 省委党校, 滹沱河南岸, 滹沱河北岸,现代城, 科技工程学院,正定一中, 北城门, 富康外国语学院, 省中医肝病医院, 江泰检车站, 三里屯办事处, 三里屯社区,中博电车厂]bus526 [九门公交枢纽站, 庄货头, 禅房, 周新庄, 黄庄, 信息学院, 固营北, 文化传媒学校, 财经商贸学院,罗家庄, 福泽,西上泽, 省中医肝病医院, 福康外国语学院, 正定一中, 正定火车站]subline1 [福泽, 会展中心, 西王, 白佛, 博物馆, 北国商城, 新百广场, 和平医院, 西杯]subline2 [柳辛庄, 铁道大学, 北国商城, 裕华路, 石家庄站, 嘉华路]subline3 [西三庄, 高柱, 柏林庄, 市庄, 市二中, 新百广场, 西三教, 石家庄站, 东王, 南王, 乐乡]分为三类代码如下#展示页面.pyfrom bus import Bus from busstation import BusStation bus132 [新百广场, 市交通运输局(市二中), 中华和平路口, 市庄, 省委党校, 滹沱河南岸, 滹沱河北岸, 现代城, 科技工程学院, 正定一中, 北城门, 富康外国语学院, 省中医肝病医院, 江泰检车站, 三里屯办事处, 三里屯社区, 中博电车厂] bus526 [九门公交枢纽站, 庄货头, 禅房, 周新庄, 黄庄, 信息学院, 固营北, 文化传媒学校, 财经商贸学院, 罗家庄, 福泽, 西上泽, 省中医肝病医院, 福康外国语学院, 正定一中, 正定火车站] subline1 [福泽, 会展中心, 西王, 白佛, 博物馆, 北国商城, 新百广场, 和平医院, 西杯] subline2 [柳辛庄, 铁道大学, 北国商城, 裕华路, 石家庄站, 嘉华路] subline3 [西三庄, 高柱, 柏林庄, 市庄, 市二中, 新百广场, 西三教, 石家庄站, 东王, 南王, 乐乡] busBus(1) bus.addBus(bus132) BusStation.addBus(bus) busBus(2) bus.addBus(bus526) BusStation.addBus(bus) busBus(3) bus.addBus(subline1) BusStation.addBus(bus) busBus(4) bus.addBus(subline2) BusStation.addBus(bus) busBus(5) bus.addBus(subline3) BusStation.addBus(bus) while True: print(————————————欢迎使用公交车查询系统————————————) print(——————请选择操作——————) print(1.查询公交线路) print(2.查询公交站点的公交车) print(3.公交车换乘路线查询) print(4.退出) choiceint(input(请输入操作)) if choice1: print(请输入要查询的公交线路) numinput() BusStation.queryStop(num) elif choice2: stopinput(请输入要查询的公交站点) bus_numberBusStation.queryBusStop(stop) print(f您要查询的{stop}站有{len(bus_number)}路公交车分别是 f{路.join(bus.number for bus in bus_number)}路) elif choice3: startinput(请输入起点站) endinput(请输入终点站) BusStation.transfer_stop(start,end) else: print(感谢您的使用,再见) break#bus.pyclass Bus: def __init__(self,number): self.stops[] self.numbernumber #几路车多少站点 def addBus(self,stops): if stops in self.stops: print(该站点已存在) for i in range(len(stops)): self.stops.append(stops[i]) def delBus(self,stops): self.stops.remove(stops)#busstation.pyclass BusStation: bus_list[] classmethod def addBus(cls,bus): if bus in cls.bus_list: print(该公交车已存在) cls.bus_list.append(bus) classmethod def queryStop(cls,number): for bus in cls.bus_list: if numberbus.number: print(f您查询的{number}路车经过的站点为:{路.join(bus.stops)}) classmethod def queryBusStop(cls,stop): number[] for bus in cls.bus_list: if stop in bus.stops: number.append(bus) return number classmethod def transfer_stop(cls,start,end): start_listcls.queryBusStop(start) end_listcls.queryBusStop(end) if not start_list: print(出发地并非公交站点请输入正确的出发点) return if not end_list: print(目的地并非公交站点请输入正确的目的地) return #是否直达 tmp[] for status in start_list: for end_status in end_list: if status.stopsend_status.stops: tmp.append(status.number) if tmp: print(f您可以乘坐{,.join(tmp)}直达公交路线) return #换乘 for status1 in start_list: for endbus1 in end_list: common_stopset(status1.stops)set(endbus1.stops) if common_stop: trasfer_stopnext(iter(common_stop)) print(f您好您可以从{start}站点出发乘坐{status1.number}路公交 f到达{trasfer_stop} f再乘坐{endbus1.number}路公交到达{end}站)