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

yizhihongxing

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

1.需求分析

在开始编写代码前,我们需要对需求进行分析。在本次的火车票查询系统中,主要包含以下几个功能:

  • 查询火车票信息
  • 筛选火车票信息
  • 订票

2.环境设置

在实现火车票查询系统前,我们需要对环境进行设置。通过以下步骤可以完成Python环境安装,以及Tkinter安装:

  1. 安装Python。从Python官网下载安装包,双击安装,根据提示完成安装步骤。

  2. 安装Tkinter。使用pip安装:打开终端或命令提示符,输入以下命令:

pip install tk

3.界面设计

我们需要设计一个简介明了的界面来帮助用户使用火车票查询系统。通过以下代码可以创建一个简单的窗口:

import tkinter as tk

window = tk.Tk()
window.title("火车票查询系统")
window.geometry("600x400")
window.mainloop()

通过以上代码,我们可以创建一个大小为600x400像素的窗口,并将窗口命名为"火车票查询系统"。

4.程序设计

在火车票查询系统中,我们需要获取用户输入的起始站和终点站,然后通过爬虫从12306获取信息,并通过筛选后将结果显示出来。通过以下代码,可以实现该过程:

import requests
import json

url = 'https://kyfw.12306.cn/otn/leftTicket/query'
params = {
    'leftTicketDTO.train_date': '2022-05-01',
    'leftTicketDTO.from_station': 'BJP',
    'leftTicketDTO.to_station': 'SHH',
    'purpose_codes': 'ADULT'
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}

res = requests.get(url, headers=headers, params=params).text
data = json.loads(res)
result = data['data']['result']
print(result)  # 打印所有查询结果

在以上代码中,通过requests.get()从12306网站获取数据,并通过json.loads(),将结果转换为python对象。最后,我们可以打印出所有查询结果。

除了火车票信息的查询,我们还需要实现订票的功能。通过以下代码,可以实现该过程:

import requests
import re

url = 'https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest'
data = {
    'secretStr': 'xxx',  # 从查询结果中获取的secretStr
    'train_date': '2022-05-01',
    'back_train_date': '2022-05-01',
    'tour_flag': 'dc',
    'purpose_codes': 'ADULT',
    'query_from_station_name': '北京',
    'query_to_station_name': '上海',
    'cancel_flag': 2,
    'bed_level_order_num': '000000000000000000000000000000',
    'passengerTicketStr': 'O,0,1,张三,1XXXXXXXXXXXXXXX,130XXXXXXXX,1,0,'  # 订票人信息,需要提前获取
} 
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init'
}

res = requests.post(url, headers=headers, data=data).text
result = re.findall('globalRepeatSubmitToken = \'(.*?)\'', res)
if result:
    globalRepeatSubmitToken = result[0]  # 获取globalRepeatSubmitToken
    print(globalRepeatSubmitToken)

在以上代码中,我们需要从查询结果中获取secretStr,并通过requests.post()方法进行订票。如果订票成功,还可以通过正则表达式获取globalRepeatSubmitToken。

5.功能演示

我们可以通过以下代码,将查询结果展示到图形化界面中:

import tkinter as tk

window = tk.Tk()
window.title("火车票查询系统")
window.geometry("600x400")
label = tk.Label(window, text='火车票查询结果', bg='yellow')
label.pack()

result = ['G101', 'G102', 'G103']  # 火车票查询结果,这里假设查询结果为3条

for i in range(len(result)):
    tk.Label(window, text=result[i]).pack()

window.mainloop()

通过设置Label组件,我们可以将查询结果展示出来,方便用户查看。

6.示例说明

假设某用户在火车票查询系统中输入起始站为“北京”、终点站为“上海”,则系统可以返回查询结果,其中第1条结果为“G101”,第2条结果为“G102”和第3条结果为“G103”,如下所示:

火车票查询结果
G101
G102
G103

另外,如果用户进行了订票操作,并成功订票,系统可以返回globalRepeatSubmitToken,以便用户完成支付等后续操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python实现火车票查询系统(带界面) - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 在Python中对点x的元组进行赫米特级数评估

    下面是Python中对点x的元组进行赫米特级数评估的完整攻略。 1. 背景知识 在进行赫米特级数评估之前,需要了解以下背景知识: 赫米特多项式:赫米特多项式是一类特殊的多项式函数,对于给定的实数 $x$ 和非负整数 $n$ ,赫米特多项式 $H_n(x)$ 可由下式递推得到: $$H_{n+1}(x)=2xH_n(x)-2nH_{n-1}(x), \ H_0…

    python-answer 2023年3月25日
    00
  • Python抓取网页图片难点分析

    Python抓取网页图片难点分析 1. 资源定位 要抓取网页中的图片,首先需要定位图片所在的资源路径,通常包括以下两种方式: 1.1 直接获取源代码中的图片链接 在页面源代码中,图片资源通常是通过<img>标签引用的,其路径可以通过标签的src属性获取。通过requests库获取网页源代码并对其进行解析,即可获取页面中所有图片的资源路径。 示例代…

    python 2023年6月3日
    00
  • 使用Python正则表达式操作文本数据的方法

    使用Python正则表达式操作文本数据的方法 正则表达式是一种强大的文本处理工具,可以用于各种文本处理,如数据清洗、文本分、信息提取等。Python中,我们使用re模块提供的函数来操作正表达式。本攻略将详细讲解Python中的re正则达式模块包括正则表达式的基本语法、常用函数等内容。 正表达式的基本语法 正则表达式是由普通和元字符组成的字符串。普表示它本身,…

    python 2023年5月14日
    00
  • Python如何通过百度翻译API实现翻译功能

    以下是Python如何通过百度翻译API实现翻译功能的完整攻略: 1. 注册百度翻译API账号 在开始之前,你需要先在百度翻译API官网注册并且获得自己的API密钥,具体注册流程可参考百度翻译API官方文档。注册完成并获取到自己的API密钥后,我们就可以开始使用Python代码调用API实现翻译功能了。 2. 安装必要的库 在使用Python代码调用百度翻译…

    python 2023年6月3日
    00
  • Python常用base64 md5 aes des crc32加密解密方法汇总

    Python常用加密解密方法汇总 在Python中,常用的加密解密方法有许多,比如base64、md5、aes、des、crc32等等。本文将对这些方法进行详细的讲解,并提供一些使用示例。 base64加密解密 base64是一种将二进制数据编码为ASCII字符的方法,通常用于在HTTP协议、电子邮件、XML等场景下传输较长的标识信息,以便于处理和传输。Py…

    python 2023年5月31日
    00
  • Python pandas中read_csv参数示例详解

    下面是详细的攻略: Python pandas中read_csv参数示例详解 pandas是Python中一个非常流行的数据处理库,其中的read_csv()函数可以用于读取CSV文件。read_csv()函数有很多参数,本文将介绍其中一些常用的参数及其用法。 参数说明 read_csv()函数的常用参数如下: filepath_or_buffer:CSV文…

    python 2023年5月14日
    00
  • python语音识别指南终极版(有这一篇足矣)

    Python语音识别指南终极版 语音识别是一种将人类语音转换为文本或命令的技术。Python提供了多种语音识别库,可以帮助我们实现语音识别功能。本文将详细介绍如何使用Python进行语音识别,包括使用第三方库和Python内置库等方法。 使用第三方库 1. SpeechRecognition SpeechRecognition是一个Python语音识别库,支…

    python 2023年5月14日
    00
  • 解析Python中的eval()、exec()及其相关函数

    解析Python中的eval()、exec()及其相关函数 Python中有三个内置函数eval()、exec()和compile()来执行动态代码。这些函数能够从字符串参数中读取Python代码并在运行时执行该代码。但是,使用这些函数时必须小心,因为它们的不当使用可能会导致安全漏洞。 eval() eval()函数可解析一个字符串表达式,并返回表达式的计算…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部