简易火车票查询系统

课程名称 Python课程设计指导
题 目 简易火车票查询系统
内容及任务
一、项目目的
1.巩固和加深学生对Python课程设计知识的理解,综合该课程中所学的理论知识,独立或联合完成一个应用课题的设计;
2.根据选题需要,通过查阅手册和文献资料,培养分析和解决实际问题的能力;
3.进一步提高使用Python语言进行软件开发的能力。
二、项目任务的主要内容和要求
1.主要内容
设计一个火车票查询系统,实现火车票实时查询,保存查询结果等功能。
2.要求
(1)对系统的功能进行模块分析,符合课题要求,实现相应功能 ;
(2)系统设计要实用,编程简练,可用,功能全面;
三、项目设计(研究)思路
查询kyfw.12306.cn 的查询方式,发送Get,将返回的结果数据处理,得到查询结果展示并保存。
四、具体成果形式和要求
成果形式:程序和报告。
具体要求:源码符合编码规范,可读性强,上机测试程序运行正确;设计报告结构合理,排版规范。

目录8

1.背景 1
2.设计思路 1
2.1课程设计思想 1
2.1.1设计内容 1
2.1.2设计要求 1
2.2功能需求 2
2.3软硬件运行环境及开发工具 2
3.过程论述 2
3.1概要设计 2
3.1.1数据类型的定义 2
3.1.2模块划分 2
3.2详细设计 3
3.2.1生成 3
3.2.2发送 4
3.2.3处理 4
4.结果分析 5
4.1测试与操作说明 5
4.2 综合测试 5
5.总结 5
参考文献 6

随着计算机技术的发展,特别是计算机网络技术的发展,使用人们的生活与工作方式发生了很大的改观。网络技术的应用使得计算机之间通信、信息共享成为可能,而爬虫技术的应用则为人们提供了数据存储、信息检索、信息分析等功能,从而使得工作更高效地进行本系统是一个为适应对火车票的迫切查询需求而设计开发的软件系统。
2.设计思路
第一,应该具有自动生成get请求功能。
第二,在长期运行过程中,系统请求数据要与kyfw.12306.cn信息保持一致。用户查询的结果信息变化是经常发生的。最好能让系统中数据自动更新,而不需要每次改变查询结果,还需要手动查询更新。
2.1课程设计思想
针对用户的查询信息的输入、查询操作繁琐等问题,火车票系统能够满足用户快速、长期查询的需求,方便快捷的得到所需要的信息,对火车票的查询的帮助很大。
2.1.1设计内容
设计一个火车票查询系统。实现:火车票实时查询,保存查询结果等功能。
(1)输入用户查询的信息,包含时间、出发地、目的地基本信息。
(2)获取kyfw.12306.cn中出发地和目的地对应的编号。
(3)生成查询的Get。
(4)包装模拟浏览器发出的get请求,更换User-Agent。
(5)从浏览器中获取kyfw.12306.cn需要的Cookie数据。
(6)发送请求,获取查询结果并处理。
(7)长期更新某个用户的未查询到的结果。
2.1.2设计要求
(1)使用Python相关的集成开发环境,开发一个系统;
(2) 一人一题,系统题目自拟;
(3)系统的功能模块自拟,学生可以任选框架、第三方包。
(4)要求按照学年设计的模板组织文档。
(5)使用的第三方库越多,功能越多,答辩越熟练,分数越高,满分100分。
(6)请在2周内将文档和系统代码提交给郭宇婕同学。

2.2功能需求
该程序实现简易的火车票查询,主要功能包括火车票实时查询,保存查询结果等,具体的系统功能如图2-1所示。

图2-1系统功能图
2.3软硬件运行环境及开发工具
Windows 10操作系统、Pycharm64
3.过程论述
3.1概要设计
3.1.1地址对应编号的获取
火车查询对应编号的获取可从https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9061,获得,因此如下。

def get_station():
    url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9061'
    r = requests.get(url, verify=False)
    pattern = u'([\u4e00-\u9fa5]+)\|([A-Z]+)'
    result = re.findall(pattern, r.text)
    station = dict(result)
    return station

3.1.2 Get请求的生成、发送、处理
本程序分三个部分,各部分对应的功能如下。
(1)生成
实现功能:根据输入信息,生成查询。
(2)发送
实现功能:添加Cookie,发送请求,为防止目标不响应,积极更换User-Agent。
(3)处理
实现功能:处理请求得到数据并展示,若结果不是目标结果,继续发送请求。
3.2详细设计
3.2.1请求
基本思想:让用户输入需要的信息,系统自动将用户的地址信息转换为对应的编号并生成请求
主要代码如下所示:

text = get_station()
#print(text)
date = input("please input date like'2020-09-20'\n")
from_station_name = input("please input from_station, like'上海'\n")
to_station_name = input("please input to_station, like'北京'\n")
seat_worst = input("选择座位: 一等座, 二等座, 软卧, 硬卧, 硬座, 无座,\n")
#防止有date,from_station_name,to_station_name有一个未输入:
try:
    from_station = text[from_station_name]
    to_station = text[to_station_name]
except:
    date, from_station, to_station = '--', '--', '--'
    print("输入错误,已终止程序")
    exit()

url = get_query_url(date, from_station, to_station)
#生成请求URL
def get_query_url(date, from_station, to_station):

    url = ('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT').format(date, from_station, to_station
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值