-
2019-02-16 11:20:05
最近乘坐火车,在车上像快要看看列车时刻表,大概知道什么时间到达什么车站,起初是每次都打开12306APP查询,然后感觉每次打开APP很麻烦,就去微信小程序里边搜索,果然有我们伟大的猿类同胞做了这件事。于是乎,我就想12306是不是有开放平台提供了接口供我们使用,查了查竟然没有,聚合数据有此类接口(https://www.juhe.cn/docs/api/id/22),还是收费的。身为一个勤劳好学的猿,必须要亲自试一试。在查了查信息,看了一些前辈们的资料,自己终于也简单实现了。
1.获取全国所有车站
获取车站的目的是拿到全国所有车站的电码信息编号,后续需要用到。/** * 车站的电码信息编号 * 数据格式:@bjb|北京北|VAP|beijingbei|bjb|0 * 车站名缩写:bjb * 车站名称:北京北 * 车站电码编号:VAP * 车站数字编号:0 * author 江南极客 */ function get_station_code(){ $url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js'; $data = curl_request($url); if(!$data){ msgReturn('获取数据失败',-1); } //var station_names ='@bjb|北京北|VAP|beijingbei|bjb|0...'; $station_data = strrchr($data,'='); $station_name = ltrim($station_data,"='@"); $station_name = rtrim($station_name,"';"); $station_arr = explode('@',$station_name); if(empty($station_arr)){ msgReturn('获取数据失败',-1); } return $station_arr; }
由于车站信息需要做查询,所以我将数据爬出来存入数据库。
/** * 导入车站信息(至数据库) * author 江南极客 * @return array */ function import_train_station(){ $station_arr = get_station_code(); $station_data = array(); $time = date('Y-m-d H:i:s'); $month = date('n'); $db_config = array( 'hostname' => '127.0.0.1', 'username' => 'root', 'password' => 'root', 'database' => 'dmx_train', 'pconnect' => 0, 'log' => 0 ); $db = new DB($db_config); $update = false; //是否要更新数据 //数据一个月更新一次 $one_sql = 'select * from dmx_station_info where update_month='.$month; $curr_month_data = $db->get_one($one_sql); if(empty($curr_month_data)){ //当前月份没有数据,则截断表然后插入数据 $update = true; $truncate_sql = 'TRUNCATE dmx_station_info'; $db->query($truncate_sql); } foreach ($station_arr as $item){ $temp = explode('|',$item); $temp_arr = array( 'station_no' => $temp[5], 'station_abbr' => $temp[0], 'station_name' => $temp[1], 'station_telecode' => $temp[2], 'ch_pinyin' => $temp[3], 'simp_pinyin' => $temp[4], 'origin_info' => $item, 'update_time' => $time, 'update_month' => $month, ); $station_data[] = $temp_arr; if($update){ $db->insert('dmx_station_info',$temp_arr); } } return $station_data; }
导入数据库后的数据如下:
车站信息 2.拿到12306月排班表所有的车次信息
铁道部每日排班车次1万多条数据,每月30多万,一次取出来数据30多万条数据大概23M多,程序很容易就请求超时,可以取出来然后做缓存一个月更新一次。/** * 通过12306月排班表拿到所有的车次信息 * 铁道部 每日排班车次1万多条数据 , 每月30多万 , 一次取出来数据量非常庞大,可以取出来然后做缓存一个月更新一次 * author 江南极客 * @return mixed */ function get_train_list(){ $cache_file = __DIR__.'/train_list.json'; CHECKFILE: if(file_exists($cache_file)){ $cache_time = filemtime($cache_file); $month = date('n'); //一个月缓存一次 if(date('n',$cache_time) != $month){ @unlink($cache_file); goto CHECKFILE; } $train_list = file_get_contents($cache_file); }else{ $url = 'https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0'; $data = curl_request($url); $train_data = strrchr($data,'='); $train_list = ltrim($train_data,"="); $train_list = rtrim($train_list,","); @file_put_contents($cache_file,$train_list); } $train_arr = json_decode($train_list,true); return $train_arr; }
同样的为了便于查询,将数据爬出来存入数据库。一次取出来30多条数据,处理数据然后插入数据库,如果一次性做,就会超时,所以我使用了比较笨的方法:一次只操作一天的数据,可以循环倒入。
/** * 导入车次信息(至数据库) * author 江南极客 */ function import_train_list(){ //数据库配置 $db_config = array( 'hostname' => '127.0.0.1', 'username' => 'root', 'password' => 'root', 'database' => 'dmx_train', 'pconnect' => 0, 'log' => 0 ); $db = new DB($db_config); //获取一个月内列车排班信息列表 $station_arr = get_train_list(); $station_arr_count = count($station_arr); //一次取出来 一个月的信息 一次只操作一天的数据 $temp_times = 'youqijun'; session_start() ; if(isset($_SESSION[$temp_times])){ $temp = $_SESSION[$temp_times]; $temp += 1; $_SESSION[$temp_times] = $temp; }else{ $temp = 0; $_SESSION[$temp_times] = $temp; } if($temp >= $station_arr_count){ msgReturn('导入完毕',-1); } //截取数组的一部分(一次取一天的数据) $station_arr = array_slice($station_arr,$temp,1); if(empty($station_arr)){ msgReturn('暂无数据',-1); } $temp_arr = array(); $pattern = "/^(.*?)\((.*?)\-(.*?)\)$/"; $month = date('n'); foreach ($station_arr as $key1 => $date_arr){ $time = $key1; foreach ($date_arr as $key2 => $train_arr){ $type = $key2; foreach ($train_arr as $train){ $train['train_date'] = $time.' 00:00:00'; $train['train_type'] = $type; $train['update_month'] = $month; //K580(长沙-成都东) 匹配出车次 和 始发站,终到站 preg_match_all($pattern, $train['station_train_code'], $match); //$train_sn = strstr($train['station_train_code'],'(',true); $train['train_sn'] = $match[1][0]; $train['from_station'] = $match[2][0]; $train['to_station'] = $match[3][0]; $train['between_station'] = $match[2][0].'-'.$match[3][0]; $temp_arr[] = $train; $db->insert('dmx_train_list',$train); } } } print_r($temp_arr); }
导入数据库后的数据如下:
车次信息 3.获取列车运行时刻表
(1)通过车次和日期 , 在步骤2的数据中拿到该车次的始发站,终点站和车次编码
(2)在步骤1的数据中,拿到始发站和终点站的电码信息编号
(3)调用接口拿到该车次运行时刻信息/** * 获取列车时刻表 * @param string $train_sn 车次(如:G1207) * @param string $date 日期 * train_no: 车次编号 * from_station_telecode: 起始站点的电码编号 * to_station_telecode: 目的站点的电码编号 * depart_date: 查询日期 * author 江南极客 * @return mixed */ function get_train_timetable($train_sn='',$date=''){ $url = 'https://kyfw.12306.cn/otn/czxx/queryByTrainNo?'; if(empty($train_sn)){ msgReturn('请填写车次',-1); } if(empty($date)) { $date = date('Y-m-d'); }else{ $date_str = strtotime($date); $date = date('Y-m-d',$date_str); } $db_config = array( 'hostname' => '127.0.0.1', 'username' => 'root', 'password' => 'root', 'database' => 'dmx_train', 'pconnect' => 0, 'log' => 0 ); $db = new DB($db_config); $train_date = $date.' 00:00:00'; $train_sn = strtoupper($train_sn); //根据输入的车次 拿到 车次排班编号,始发站和终到站 $train_sql = "select * from dmx_train_list where train_sn='{$train_sn}' and train_date='{$train_date}'"; $train = $db->get_one($train_sql); if(empty($train)){ msgReturn('未查到当日当次列车信息',-1); } //取出始发站和终到站的电码编号 $from_station_name = $train['from_station']; $to_station_name = $train['to_station']; $from_station_sql = "select * from dmx_station_info where station_name='{$from_station_name}'"; $to_station_sql = "select * from dmx_station_info where station_name='{$to_station_name}'"; $from_station = $db->get_one($from_station_sql); if(empty($from_station)){ msgReturn('未查到始发车站',-1); } $to_station = $db->get_one($to_station_sql); if(empty($to_station)){ msgReturn('未查到终点车站',-1); } $param = [ 'train_no' => $train['train_no'], 'from_station_telecode' => $from_station['station_telecode'], 'to_station_telecode' => $to_station['station_telecode'], 'depart_date' => $date, ]; $http_param = http_build_query($param); $url = $url.$http_param; $header = array('User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'); $data = curl_request($url,true,'GET',null,$header); if(!$data){ msgReturn('网络错误',-1); } $data = json_decode($data,true); if(empty($data['data']['data'])){ msgReturn('列车时刻表数据不存在',-1); } return $data['data']['data']; }
附:存储车站信息和车次信息的数据库DDL:
CREATE TABLE IF NOT EXISTS `dmx_station_info` ( `id` INT(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `station_no` INT(6) NOT NULL DEFAULT '0' COMMENT '车站编号', `station_abbr` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '车站缩写', `station_name` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '车站名称', `station_telecode` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '车站电码编号', `ch_pinyin` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '车站拼音', `simp_pinyin` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '车站简拼', `origin_info` varchar(128) NOT NULL DEFAULT '' COMMENT '原始信息', `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间', `update_month` tinyint(2) NOT NULL DEFAULT '0' COMMENT '更新月份', KEY `inx_no`(`station_no`), KEY `inx_telecode`(`station_telecode`) ) ENGINE = MyISAM DEFAULT CHARSET=utf8 COMMENT='车站信息表'; CREATE TABLE IF NOT EXISTS `dmx_train_list` ( `id` INT(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `station_train_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '车次信息', `train_no` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '车次编号', `train_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '发车时间', `train_type` CHAR(1) NOT NULL DEFAULT '' COMMENT '类型(K D G)', `train_sn` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '车次', `from_station` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '始发站', `to_station` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '终到站', `between_station` varchar(32) NOT NULL DEFAULT '' COMMENT '始发-终到', `update_month` tinyint(2) NOT NULL DEFAULT '0' COMMENT '更新月份', KEY `inx_no`(`train_no`), KEY `inx_sn`(`train_sn`) ) ENGINE = MyISAM DEFAULT CHARSET=utf8 COMMENT='车次信息表';
简单写个界面,就可以查到信息啦:
附:源码(一个单文件搞定)
<?php header("Content-type: text/html; charset=utf-8"); require_once 'db.class.php.php';//数据库 error_reporting(0);//屏蔽错误警告 ignore_user_abort(); //忽略关闭浏览器 set_time_limit(0); //永远执行 //设置网络请求配置 function curl_request($curl,$https=true,$method='GET',$data=null,$aHeader=array()){ // 创建一个新cURL资源 $ch = curl_init(); // 设置URL和相应的选项 curl_setopt($ch, CURLOPT_URL, $curl); //要访问的网站 curl_setopt($ch, CURLOPT_HEADER, false); //启用时会将头文件的信息作为数据流输出。 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。 if( count($aHeader) >= 1 ){ curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); } if($https){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //FALSE 禁止 cURL 验证对等证书(peer's certificate)。 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //验证主机 } if(strtoupper($method) == 'POST'){ curl_setopt($ch, CURLOPT_POST, true); //发送 POST 请求 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //全部数据使用HTTP协议中的 "POST" 操作来发送。 } // 抓取URL并把它传递给浏览器 $content = curl_exec($ch); //关闭cURL资源,并且释放系统资源 if($content){ curl_close($ch); return $content; }else { $error = curl_errno($ch); echo "call faild, errorCode:$error\n"; curl_close($ch); return false; } } /** * 数据输出返回 * @param null $data * @param int $errCode * author 江南极客 */ function msgReturn($data=null,$errCode=0){ $returnArr = array( 'error_no'=>$errCode, ); if($errCode===0 || is_array($data)){ $returnArr['data'] = $data; }else{ $returnArr['error_msg'] = $data; } die(json_encode($returnArr)); } /** * 车站的电码信息编号 * 数据格式:@bjb|北京北|VAP|beijingbei|bjb|0 * 车站名缩写:bjb * 车站名称:北京北 * 车站电码编号:VAP * 车站数字编号:0 * author 江南极客 */ function get_station_code(){ $url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js'; $data = curl_request($url); if(!$data){ msgReturn('获取数据失败',-1); } //var station_names ='@bjb|北京北|VAP|beijingbei|bjb|0...'; $station_data = strrchr($data,'='); $station_name = ltrim($station_data,"='@"); $station_name = rtrim($station_name,"';"); $station_arr = explode('@',$station_name); if(empty($station_arr)){ msgReturn('获取数据失败',-1); } return $station_arr; } /** * 导入车站信息(至数据库) * author 江南极客 * @return array */ function import_train_station(){ $station_arr = get_station_code(); $station_data = array(); $time = date('Y-m-d H:i:s'); $month = date('n'); $db_config = array( 'hostname' => '127.0.0.1', 'username' => 'root', 'password' => 'root', 'database' => 'dmx_train', 'pconnect' => 0, 'log' => 0 ); $db = new DB($db_config); $update = false; //是否要更新数据 //数据一个月更新一次 $one_sql = 'select * from dmx_station_info where update_month='.$month; $curr_month_data = $db->get_one($one_sql); if(empty($curr_month_data)){ //当前月份没有数据,则截断表然后插入数据 $update = true; $truncate_sql = 'TRUNCATE dmx_station_info'; $db->query($truncate_sql); } foreach ($station_arr as $item){ $temp = explode('|',$item); $temp_arr = array( 'station_no' => $temp[5], 'station_abbr' => $temp[0], 'station_name' => $temp[1], 'station_telecode' => $temp[2], 'ch_pinyin' => $temp[3], 'simp_pinyin' => $temp[4], 'origin_info' => $item, 'update_time' => $time, 'update_month' => $month, ); $station_data[] = $temp_arr; if($update){ $db->insert('dmx_station_info',$temp_arr); } } return $station_data; } /** * 通过12306月排班表拿到所有的车次信息 * 铁道部 每日排班车次1万多条数据 , 每月30多万 , 一次取出来数据量非常庞大,可以取出来然后做缓存一个月更新一次 * author 江南极客 * @return mixed */ function get_train_list(){ $cache_file = __DIR__.'/train_list.json'; CHECKFILE: if(file_exists($cache_file)){ $cache_time = filemtime($cache_file); $month = date('n'); //一个月缓存一次 if(date('n',$cache_time) != $month){ @unlink($cache_file); goto CHECKFILE; } $train_list = file_get_contents($cache_file); }else{ $url = 'https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0'; $data = curl_request($url); $train_data = strrchr($data,'='); $train_list = ltrim($train_data,"="); $train_list = rtrim($train_list,","); @file_put_contents($cache_file,$train_list); } $train_arr = json_decode($train_list,true); return $train_arr; } /** * 导入车次信息(至数据库) * author 江南极客 */ function import_train_list(){ //数据库配置 $db_config = array( 'hostname' => '127.0.0.1', 'username' => 'root', 'password' => 'root', 'database' => 'dmx_train', 'pconnect' => 0, 'log' => 0 ); $db = new DB($db_config); //获取一个月内列车排班信息列表 $station_arr = get_train_list(); $station_arr_count = count($station_arr); //一次取出来 一个月的信息 一次只操作一天的数据 $temp_times = 'youqijun'; session_start() ; if(isset($_SESSION[$temp_times])){ $temp = $_SESSION[$temp_times]; $temp += 1; $_SESSION[$temp_times] = $temp; }else{ $temp = 0; $_SESSION[$temp_times] = $temp; } if($temp >= $station_arr_count){ msgReturn('导入完毕',-1); } //截取数组的一部分(一次取一天的数据) $station_arr = array_slice($station_arr,$temp,1); if(empty($station_arr)){ msgReturn('暂无数据',-1); } $temp_arr = array(); $pattern = "/^(.*?)\((.*?)\-(.*?)\)$/"; $month = date('n'); foreach ($station_arr as $key1 => $date_arr){ $time = $key1; foreach ($date_arr as $key2 => $train_arr){ $type = $key2; foreach ($train_arr as $train){ $train['train_date'] = $time.' 00:00:00'; $train['train_type'] = $type; $train['update_month'] = $month; //K580(长沙-成都东) 匹配出车次 和 始发站,终到站 preg_match_all($pattern, $train['station_train_code'], $match); //$train_sn = strstr($train['station_train_code'],'(',true); $train['train_sn'] = $match[1][0]; $train['from_station'] = $match[2][0]; $train['to_station'] = $match[3][0]; $train['between_station'] = $match[2][0].'-'.$match[3][0]; $temp_arr[] = $train; $db->insert('dmx_train_list',$train); } } } print_r($temp_arr); } /** * 获取列车时刻表 * @param string $train_sn 车次(如:G1207) * @param string $date 日期 * train_no: 车次编号,从步骤1中的数据获取 * from_station_telecode: 起始站点的电码编号 * to_station_telecode: 目的站点的电码编号 * depart_date: 查询日期 * author 江南极客 * @return mixed */ function get_train_timetable($train_sn='',$date=''){ $url = 'https://kyfw.12306.cn/otn/czxx/queryByTrainNo?'; if(empty($train_sn)){ msgReturn('请填写车次',-1); } if(empty($date)) { $date = date('Y-m-d'); }else{ $date_str = strtotime($date); $date = date('Y-m-d',$date_str); } $db_config = array( 'hostname' => '127.0.0.1', 'username' => 'root', 'password' => 'root', 'database' => 'dmx_train', 'pconnect' => 0, 'log' => 0 ); $db = new DB($db_config); $train_date = $date.' 00:00:00'; $train_sn = strtoupper($train_sn); //根据输入的车次 拿到 车次排班编号,始发站和终到站 $train_sql = "select * from dmx_train_list where train_sn='{$train_sn}' and train_date='{$train_date}'"; $train = $db->get_one($train_sql); if(empty($train)){ msgReturn('未查到当日当次列车信息',-1); } //取出始发站和终到站的电码编号 $from_station_name = $train['from_station']; $to_station_name = $train['to_station']; $from_station_sql = "select * from dmx_station_info where station_name='{$from_station_name}'"; $to_station_sql = "select * from dmx_station_info where station_name='{$to_station_name}'"; $from_station = $db->get_one($from_station_sql); if(empty($from_station)){ msgReturn('未查到始发车站',-1); } $to_station = $db->get_one($to_station_sql); if(empty($to_station)){ msgReturn('未查到终点车站',-1); } $param = [ 'train_no' => $train['train_no'], 'from_station_telecode' => $from_station['station_telecode'], 'to_station_telecode' => $to_station['station_telecode'], 'depart_date' => $date, ]; $http_param = http_build_query($param); $url = $url.$http_param; $header = array('User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'); $data = curl_request($url,true,'GET',null,$header); if(!$data){ msgReturn('网络错误',-1); } $data = json_decode($data,true); if(empty($data['data']['data'])){ msgReturn('列车时刻表数据不存在',-1); } return $data['data']['data']; } /*$checi = 'g1207'; $data = get_train_timetable($checi,'2019-5-18'); print_r($data);die;*/ $now = date('Y-m-d'); if($_SERVER['REQUEST_METHOD'] == 'POST'){ $train_no = trim($_POST['value1']); $train_date = trim($_POST['value2']); $data = get_train_timetable($train_no,$train_date); msgReturn($data); } ?> <html xmlns=""> <head> <meta http-equiv = "Content-Type" content = "text/html;charset = utf8"> <meta name = "description" content = "列车时刻表"> <title>列车时刻表-高铁动车运行时间查询</title> <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script> </head> <style type="text/css"> .key1{ width:100px; } .value1{ width:300px; margin:0 0 0 1px; } .main{ margin:0 auto; width:450px; height:auto; background:#B4E4E4; padding:20px 40px; /*background: url("https://www.12306.cn/index/images/pic/banner08.jpg") bottom center repeat-y #efeff4 ;*/ } .refer{ width:100px; height:24px; } .h1-title{ } .request-res{ width:300px; margin:0 0 0 1px; display: none; } .train-table{ margin-top: 10px; margin-left: 85px; display: none; } .train-table table{ /*border: 1px solid gray;*/ border-right: 1px solid gray; border-bottom: 1px solid gray; } .train-table table td{ font-size: 14px; border-left: 1px solid gray; border-top: 1px solid gray; } </style> <body> <div class="main"> <h1 class="h1-title" align="center">列车时刻表</h1> <form method="POST" action="" target="_blank" id="form"> <p>列车车次: <input class="value1" type="text" name="value1" value="" placeholder="列车车次 如:k16"></p> <p>发车日期: <input class="value1" type="text" name="value2" value="<?php echo $now; ?>" placeholder="发车时间"></p> <p class="request-res">查询结果:<span class="value1 res-return1">...</span></p> <div class="train-table"> <table width="300" border="0" cellpadding="0" cellspacing="0" class="table-result"> <!--<tr> <td>序号</td> <td>车站</td> <td>到/发时间</td> <td>停留</td> </tr> <tr> <td>01</td> <td>青岛</td> <td>16:26-16:30</td> <td>4分钟</td> </tr>--> </table> </div> <p style="text-align:center;"><input class="refer" type="submit" value="查询"></p> </form> </div> </body> <script> $(function(){ $("#form").submit(function(e){ e.preventDefault(); var data = {}; data.value1 = $("input[name=value1]").val(); data.value2 = $("input[name=value2]").val(); $(".request-res").show(); $.ajax({ url:'train.php', data:data, dataType:'json', type:'post', success:function(ret){ //console.log(ret); if(ret.error_no == 0){ var train_list_html = "<tr><td>序号</td><td>车站</td><td>到/发时间</td><td>停留</td></tr>"; $.each(ret.data,function(key,val){ //console.log(key+'----'+val.station_name); //train_list_html += "<tr><td>序号</td><td>车站</td><td>到/发时间</td><td>停留</td></tr>"; train_list_html += "<tr><td>"+val.station_no+"</td><td>"+val.station_name+"</td><td>"+val.arrive_time+"-"+val.start_time+"</td><td>"+val.stopover_time+"</td></tr>"; }); var train_info = ret.data[0]; var train_text = train_info.station_train_code+"( "+train_info.start_station_name+"-"+train_info.end_station_name+" )"; $(".train-table").show(); $(".res-return1").html(train_text); $(".request-res").css("color","green"); $(".table-result").html(train_list_html); }else{ $(".train-table").hide(); $(".request-res").css("color","red"); $(".res-return1").html(ret.error_msg); } }, complete:function (info) { //console.log('over:'+info); }, error:function (err) { //console.log('err:'+err); } }) }) }) </script> </html>
更多相关内容 -
列车时刻表在线查询系统
2010-04-02 10:06:08通过出发站-到达站在线查询火车车次,列车类型,里程,用时,出发时间和到达时间等信息,选择车次后,按照站次顺序列出本次列车所有站名,到达时间,开车时间,里程,票价等详细信息 -
春运抢票工具V0.7.0 我要火车票 余票查询 火车票转让信息 列车时刻表 车次查询
2011-01-24 12:23:23不去票务代理和火车站,就可以知道列车时刻表、余票数量等火车票信息 1.真正足不出户,在家里就可以查询余票数量; 2.实时获取网上最新火车票转让信息; 3.新票到达提醒,使你在工作的同时还能关注最新转让信息,不... -
春运抢票工具V0.5 火车票 余票查询 火车票转让信息 列车时刻表 车次查询
2011-01-07 13:13:04已有新版V 0.8.0 ... 出行买票不在困难,我要火车票来帮您 不去票务代理和火车站,就可以知道列车时刻表、余票数量等火车...我要火车票是一款集火车票转让信息搜集、火车票余票查询、列车时刻表等功能于一体的免费软件。 -
春运抢票工具V0.66 我要火车票 余票查询 火车票转让信息 列车时刻表 车次查询
2011-01-17 14:35:31不去票务代理和火车站,就可以知道列车时刻表、余票数量等火车票信息 1.真正足不出户,在家里就可以查询余票数量; 2.实时获取网上最新火车票转让信息; 3.新票到达提醒,使你在工作的同时还能关注最新转让信息,不... -
春运抢票工具V0.6 我要火车票 余票查询 火车票转让信息 列车时刻表 车次查询
2011-01-10 16:19:27不去票务代理和火车站,就可以知道列车时刻表、余票数量等火车票信息 1.真正足不出户,在家里就可以查询余票数量; 2.实时获取网上最新火车票转让信息; 3.新票到达提醒,使你在工作的同时还能关注最新转让信息,不... -
20190720全国列车时刻表(含高铁动车城轨).xlsx
2019-08-25 18:28:0720190720全国列车时刻表(含高铁动车城轨),通过12306.cn抓取的数据。 -
数据结构列车时刻表管理系统
2018-04-20 11:33:01数据结构上机作业,链表写列车时刻表管理系统,cpp文件 -
爬取携程网铁路列车时刻表.py
2021-01-25 17:45:45爬取携程网列车时刻表 -
基于QT4的列车时刻表查询系统
2012-09-15 23:44:11基于QT4的 列车时刻表查询系统,mini2440移植 教程 +源码 -
js显示屏特效火车站高铁站列车时刻表切换特效.rar
2020-04-12 11:14:04显示屏特效火车站高铁站列车时刻表切换特效, 模拟数据库读取列车时刻表数据。然后随机在页面显示滚动结果 -
春运抢票工具V0.8.0 我要火车票 余票查询 火车票转让信息 列车时刻表 车次查询
2011-01-28 17:05:35不去票务代理和火车站,就可以知道列车时刻表、余票数量等火车票信息 1.真正足不出户,在家里就可以查询余票数量; 2.实时获取网上最新火车票转让信息; 3.新票到达提醒,使你在工作的同时还能关注最新转让信息,不... -
mysql全国列车时刻表
2019-09-16 16:00:262019年7月1日更新的全国列车时刻表,包含120723条数据。 字段名 类型 说明 train_num varchar(5) 车次 stop_num int 到站顺序 station_name varchar(10) 站名 arrive_time time 到站时间 depart_time time 离... -
C语言 实现带菜单的火车列车时刻表,查询系统;
2012-06-04 11:29:06带菜单的,适合课设用。 printf("\n ||===============目录============||\n"); printf(" 添加信息......1\n"); printf(" 查看所有.......2\n"); printf(" 查找车辆.......3\n"); printf(" 删除车辆.......4\n... -
盛名列车时刻表 For JAVA 2012.11.01.rar
2019-07-11 00:25:09盛名列车时刻表·手机版是一款 运行在支持Java 手机上的查询全国列车时刻表的单机版软件,它的运行不需要网络支持。通过它您可以方便的查询全国铁路时刻表,无论你在身处何处只要您需要掏出手机便可查询全国所有线路... -
列车时刻表管理系统
2015-06-20 20:54:08java做的简单列车时刻表管理系统Demo,可以拿来参考 -
列车时刻表
2015-10-02 15:01:40列车时刻表 列车时刻表 列车时刻表 列车时刻表 列车时刻表 列车时刻表 列车时刻表 列车时刻表 列车时刻表 -
在线查询列车时刻表的WX小程序设计与实现.docx
2022-06-15 08:46:40在线查询列车时刻表的WX小程序设计与实现.docx在线查询列车时刻表的WX小程序设计与实现.docx在线查询列车时刻表的WX小程序设计与实现.docx在线查询列车时刻表的WX小程序设计与实现.docx在线查询列车时刻表的WX小程序... -
WebService+ksoap2列车时刻表
2021-03-16 12:02:01本项目是一个基于安卓的查询列车时刻表的小项目源码,,结合ksoap2进行数据解析。可以查询两站之间的车次信息和指定车次的到站信息。 -
列车时刻表 - 查询列车车次,支持在线,离线查询
2009-04-13 16:46:18列车时刻表AIR版本,超酷超牛逼,查询列车车次,支持在线,离线查询 -
最新列车时刻表数据库(SQL)通用版(火车时刻表数据库)【20131112】
2013-11-16 16:10:53数据格式为:'ID', 'Type', 'Station', 'S_No', 'Day', 'A_Time', 'D_Time', 'Distance', 'P1', 'P2', 'P3', 'P4' 如: INSERT INTO `train` VALUES ('D10', '动车组', '沈阳北', '1', '1', '-', '09:01', '0', '', ... -
Hi5360列车时刻表查询.NET版 v1.3.1108.rar
2019-07-09 03:53:16[程序名称]Hi5360列车时刻表查询(V1.3.1108) [功能简介] 本程序主要包括全国各地列车的站站查询、车站查询以及车次查询等功能;站站查询还提供了详尽的中转方案。 [V1.3版本更新说明] 新增了高级查询功能... -
2014年列车时刻表
2014-09-09 15:16:42更新于2014年9.9号的列车时刻表,下载前请注意: · 本文件是一个数据库文件,可以使用Firefox的SQLite工具进行查看 · 文件包含一个train表和一个station表,前者存储了某个车次的信息,如车次名,始发站,终点站,... -
极品列车时刻表余票版 2011.01.15
2019-11-01 04:40:44极品列车时刻表查询软件,不仅可查车次和票价,还能实时查询余票,以免你白跑一趟火车站!快速的在线升级功能,实力与技术完美体现。主要功能:1.车次查询:输入车次,可查找到该车次所经过的站名。2.站名查询:输入... -
列车时刻表数据库
2013-05-05 22:53:06这是 一个列车时刻表数据库 想研究火车订票系统的童鞋 可以看看 -
列车时刻表查询软件
2013-01-12 10:00:28列车到发时间,到发车次、春运高峰确定车次表、列车的票价及余票信息 -
华中科技大学 C语言课程设计 --列车时刻表信息管理系统
2018-04-24 09:19:11设计题目:列车时刻表信息管理系统 设计目的 1.巩固和加深学生对C语言课程的基本知识的理解和掌握; 2.掌握C语言编程和程序调试的基本技能; 3.利用C语言进行基本的软件设计; 4.掌握书写程序设计说明文档的...
收藏数
994
精华内容
397