,,使用Python实现火车票查询系统(带界面)

,,使用Python实现火车票查询系统(带界面)

周末~我爱你~假期来了,七夕也快到了,又到一年中最一票难求的时候了!本文将用python(python语言)制作一个简单的火车票查询系统,感兴趣的可以了解一下

目录

导语一~我爱你~运行环境二~我爱你~代码展示三~我爱你~效果展示

导语

周末~我爱你~假期来了,七夕也快到了,又到一年中最一票难求的时候了!

那些假期想回家~我爱你~过节异地恋的小可爱们,能准时抢到回家(约会对象)的城市票嘛?

为了让大家尽早的和亲朋好友家人团聚,小编今年很英勇的出来提醒大家早点儿抢火车票啦!

(时不我待,有票的时候妖提前买好啦~不然到时候在卖科能没票了滴)

特地为大家写了一款代码基于python(python语言)的有界面火车票查询系统,随时随地查询,不然去专门购票的地方问,没票白跑一趟也麻烦了——如果有票记得早点儿买买买哈!

注:需要不需要都要学一下,万一哪天就用上了呢,学到了也不亏哈!

一、运行环境

(1)小编使用的环境:python 3、pycharm社区版PyQt5请求模块~我爱你~部分自带就不一一展示啦。

模块安装:pip install-I 339 pypi。豆瓣。com/simple/模块名

二、代码展示

(1)爬取数据

导入关于

汇入urllib

从urllib导入请求

#来自pprint汇入pprint

URL=' 339 kyfw。12306 .cn/OTN/资源/js/框架/站名。js?桩号_版本=1.9048'

req=urllib.request.Request(url)

r=urllib.request.urlopen(req).读取()。解码(' utf-8 ')"

桩号=re。findall(r)([\ U4和00-\ u9 fa 5])\ |([a-z])r #匹配中文和对应的英文

桩号=字典(桩号)#转化成字典

# pprint车站#以列的形式打印出来

(2)主程序

""选项卡

火车票查询系统

""选项卡

-==破烂熊乐园倾情奉献==-本字幕仅供学习交流,严禁用于商业用途

导入[计]系统复制命令(system的简写)

来自PyQt5 .QtCore导入Qt,QDateTime

来自PyQt5 .QtWidgets导入QWidget,qmessagebox,qapplication,QLabel,QTableWidget,QLineEdit,qhboxlayout,QGridLayout,QVBoxLayout,qpushbutton,QTableWidgetItem,QFrame,QDateTimeEdit

来自PyQt5 .QtGui导入QFont、QColor、QBrush

从获取_电台导入站

导入警告

导入请求

类表格构件:

def __init_(自我):

太棒了()。_ _ _ init _()

自我。initui()

定义initUi(自我):

#self.setWindowFlags(Qt).windowclosebuttonhint .WindowMinimizeButtonHint)

#self.setWindowFlags(Qt).WindowMinimizeButtonHint)

self.setWindowTitle('火车票查询系统)

#self.setGeometry(40、80、1500、720)

#第一部分,输入出发地~我爱你~目的地和日期

控件布局=qgridlayout()#栅格布局

self.label1=QLabel('出发地:')

自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我Editlabel1=QLineEdit()

self.label2=QLabel('目的地:')

自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我Editlabel2=QLineEdit()

self.label3=QLabel('乘车日期:')

自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我Editlabel3=QDateTimeEdit()

now=QDateTime.currentDateTime()

#打印(现在)

自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我Editlabel3.setDateTime(现在)

自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我editlabel 3。setdisplayformat(' yyyy-mm-DD ')#小写m先生为分钟

自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我啊自我editlabel 3。setalendapopup(true)

自我。buttonok=qpushbutton('确定)

controlslalayout。添加小部件(qlabel(')、0、0、1、6)

self.message=QLabel('暂未查询车次信息我的天)

控制布局。添加小部件(自我。消息,0,7,1,4)

控制布局。添加小部件(自我。标签1,0,11,1,1)

控制播放。addwidget(自我)。编辑标签1,0,12,1,2)

controlslalayout。添加小部件(qlabel(')、0、14、1、1)

控制布局。添加小部件(自我。标签2,0,15,1,1)

控制播放。addwidget(自我)。编辑标签2、0、16、1、2)

controlslalayout。添加小部件(qlabel(')、0、18、1、1)

控制布局。添加小部件(自我。标签3,0,19,1,1)

控制播放。addwidget(自我)。编辑标签3、0、20、1、2)

controlslalayout。添加小部件(qlabel(')、0、22、1、1)

控制布局。添加小部件(自我。按钮ok,0,23,1,1)

controlslalayout。添加小部件(qlabel(')、0、25、1、8)

#第二部分,显示查询到的车次信息

horizontalHeader=['车次','车站','时间','历时','商务座','一等座','二等座','高级软卧','软卧','动卧','硬卧','软座','硬座','无座','其他]

self.table=QTableWidget()

self.table.setColumnCount(15)

self.table.setRowCount(0) #初始化为0行

自我。桌子。sethorizontalheaderlabels(水平标题)

自我。桌子。setedittriggers(QTableWidget .NoEditTriggers) #不能编辑

自我。桌子。setselectionbehavior(QTableWidget .选择行)#选中整行

自我。桌子。setselectionmode(QTableWidget .单项选择)

对于范围内的索引(self.table.columnCount()):

头项=自身。桌子。horizontalheaderitem(索引)

headItem.setFont(QFont('宋,12,QFont .粗体))

标题项目。设置前景(q画笔(Qt。灰色))

标题项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

#自我。桌子。setframeshape(q帧.HLine)#设定样式

#自我。桌子。setshowgrid(False)#取消网格线

#self.table.verticalHeader().setVisible(False) #隐藏垂直表头

#row_count=self.table.rowCount()

#self.table.setColumnWidth(0,200)

mainLayout=QHBoxLayout()

主要布局。添加小部件(自我。表格)

layout=QVBoxLayout()

布局。添加布局(控件布局)

layout.addLayout(主布局)

self.setLayout(布局)

自我。按钮正常。点击了。连接(自我。显示消息)

self.showMaximized()

def closeEvent(self,event): #关闭时弹窗提示

reply=qmessagebox。问题(自我,警告', '查询记录不会被保存,\n确认退出?',QMessageBox .是的,QMessageBox .否)

if reply==QMessageBox .是:

event.accept()

否则:

event.ignore()

定义显示消息(自身):#显示查询信息

stations _ FZ=dict(map(lambda t:(t[1],t[0]),stations。items())#反转字典

from_s=self .Editlabel1.text() #获取文本框内容

to_s=self .Editlabel2.text()

if (from_s in stations.keys())和(to_s in stations.keys()):

f=车站[从_s] #通过字典转化为车站对应的缩写字母

t=车站[目的地] #通过字典转化为车站对应的缩写字母

日期=自己Editlabel3.text()

d=字符串(日期)

#打印(四)

#打印('正在查询'从_s '至'到_s '的列车.')

网址='https://kyfw.12306.cn/otn/leftTicket/queryO?左票dto。train _ date=' d '左票dto。from _ station=' f '左票dto。to _ station=' t '目的代码=成人'

#打印(网址)

警告。过滤器警告('忽略')#这个网站是有安全警告的,这段代码可以忽略警告

r=requests.get(url,verify=False)

raw _ trains=r . JSON()[' data '][' result ']#获取车次信息

#打印(原始火车)

num=len(raw_trains) #获取车次数目

#打印('共查询到%d个车次信息%num)

self.message.setText('共查询到%d个车次信息%num)

if raw_trains==[]:

QMessageBox.warning(self,'提示', '暂无所查询的车次信息!')

i=0

self.table.setRowCount(num)

自我。桌子。sethorizontalscrollbar策略(第四季度).ScrollBarAlwaysOff) #关闭水平滚动条

对于原始列车中的原始列车:

#拆分分割之后得到的是一个列表

data_list=raw_train.split('| ')

#打印(数据列表)

tra_no=数据列表[2]#火车号

发件人编号=数据列表[16]#发件人编号

收件人编号=数据列表[17]#收件人编号

seat _ type=data _ list[35]# seat _ types

列车日期=d #列车日期

checi=data_list[3] #车次

cfd=stations_fz[data_list[6]] #出发地,通过字典转换

mdd=stations_fz[data_list[7]] #目的地

fctime=data_list[8] #发车时间

ddtime=data_list[9] #到达时间

lishi=data_list[10] #历时

尚武座=data_list[32]或'- ' #商务座/特等座

yidengzoo=data _ list[31]或'- ' #一等座

erdengzoo=data _ list[30]或'- ' #二等座

gjruangwo=data _ list[21]或'- ' #高级软卧

ruanwo=data_list[23]或'- ' #软卧

dongwo=data_list[33]或'- ' #动卧

yingwo=data_list[28]或'- ' #硬卧

阮佐=data_list[24]或'- ' #软座

左颖=data_list[29]或'- ' #硬座

左雾=data_list[26]或'- ' #无座

其他=数据_列表[22]或'- ' #其他

price _ URL='https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train _ no=' tra _ no ' from _ station _ no=' from _ s _ no ' to _ station _ no=' to _ s _ no ' seat _ types=' seat _ type ' train _ date=' tra _ date

r1=requests.get(价格url,验证=假)

#打印(价格_网址)

raw_prices=r1.json()['data'] #获取车次信息

if 'A1' in raw_prices.keys(): #A1:硬座

pr_yz=raw_prices['A1']

否则:

pr_yz=' '

if 'A2' in raw_prices.keys(): # A2:软座

pr_rz=raw_prices['A2']

否则:

pr_rz=' '

if 'A3' in raw_prices.keys(): # A3:硬卧

pr_yw=raw_prices['A3']

否则:

pr_yw=' '

if 'A4' in raw_prices.keys(): # A4:软卧

pr_rw=raw_prices['A4']

否则:

pr_rw=' '

if 'A6' in raw_prices.keys(): # A6:高级软卧

pr_gjrw=raw_prices['A6']

否则:

pr_gjrw=' '

if 'A9' in raw_prices.keys(): # A9:商务座,特等座

pr_swz=raw_prices['A9']

否则:

pr_swz=' '

如果WZ的在raw_prices.keys(): # WZ:无座

pr_wz=raw_prices['WZ']

否则:

pr_wz=' '

如果raw_prices.keys()中有M ':# M:一等座

pr_ydz=raw_prices['M']

否则:

pr_ydz=' '

if 'O' in raw_prices.keys(): # O:二等座

pr_edz=raw_prices['O']

否则:

pr_edz=' '

如果是原始价格。keys():# F:动卧

pr_dw=raw_prices['F']

否则:

pr_dw=' '

# print(pr_yz,pr_rz,pr_yw,pr_rw,pr_gjrw,pr_swz,pr_wz,pr_ydz,pr_edz,pr_dw)

NewItem=QTableWidgetItem(checi)

新项目。设置前景(QColor(Qt。红色))

新项目。设置校准(Qt .对齐中心第四季度.居中对齐)#垂直居中

self.table.setItem(i,0,NewItem)

新项目=QTableWidgetItem(CFD ' \ n-\ n ' MDD)

NewItem.setFont(QFont('宋,9,QFont .粗体))

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,1,NewItem)

新项目=QTableWidgetItem(fc时间' \ n-\ n '添加时间)

NewItem.setFont(QFont('宋,9,QFont .粗体))

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,2,NewItem)

NewItem=QTableWidgetItem(离石)

NewItem.setFont(QFont('宋,9,QFont .粗体))

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,3,NewItem)

NewItem=QTableWidgetItem(上五座\n' pr_swz)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,4,NewItem)

new item=QTableWidgetItem(yidengzoo ' \ n ' pr _ ydz)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,5,NewItem)

new item=QTableWidgetItem(erdengzoo ' \ n ' pr _ edz)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,6,NewItem)

new item=QTableWidgetItem(gjruanwo ' \ n ' pr _ gjrw)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,7,NewItem)

new item=QTableWidgetItem(Ruan wo ' \ n ' pr _ rw)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,8,NewItem)

new item=QTableWidgetItem(dongwo ' \ n ' pr _ dw)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,9,NewItem)

new item=QTableWidgetItem(yingwo ' \ n ' pr _ yw)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,10,NewItem)

NewItem=QTableWidgetItem(阮左\n' pr_rz)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,11,NewItem)

NewItem=QTableWidgetItem(左颖\n' pr_yz)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,12,NewItem)

NewItem=QTableWidgetItem(左雾\n' pr_wz)

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,13,NewItem)

NewItem=QTableWidgetItem(其他\n ' ' ' ')

新项目。设置校准(Qt .对齐中心第四季度.AlignVCenter)

self.table.setItem(i,14,NewItem)

self.table.setRowHeight(i,60) #设置行高

i=i 1

#self.table.setSpan(0,8,2,1) #合并单元格

否则:

如果从_s不在stations.keys()中:

#打印('请输入正确的出发地)

QMessageBox.warning(self,'提示','请输入正确的出发地!')

如果到_s不在stations.keys()中:

#打印('请输入正确的目的地)

QMessageBox.warning(self,'提示','请输入正确的目的地!')

if __name__=='__main__ ':

app=QA应用程序(sys。argv)

table=TableSheet()

table.show()

sys.exit(app.exec_())

三、效果展示

1)界面效果

2)时间日期

3)记录删除

到此这篇关于使用计算机编程语言实现火车票查询系统(带界面)的文章就介绍到这了,更多相关计算机编程语言火车票查询系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: