您的位置:首页 > 其它

类似于铁道部12306的城市选择框的实现

2016-10-21 08:47 302 查看
第一次写,有点小紧张。。。
这两天研究铁道部的余票查询系统,参考网上大牛们的经典案例,也有了一些自己的心得,写在自己程序猿的道路上记录一下,也和大家一起分享,写的不好莫怪,大牛可以自动过滤,非喜勿喷,谢谢~

今天先简单的介绍一下城市选择框的实现,与12306官网有一点差距,上图,先看看效果:







如图所示,支持拼音首字母查询,全拼音查询,汉字查询等

好了,现在谈一谈我是怎么实现的

首先是准备工作:

  我们需要把城市的信息存入我们的数据库中,城市数据来源:https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8241

  分析一下里面的数据,发现是有固定格式的

,这就好办了是吧,我们可以用程序的方式来取出每条记录并存入数据库,当然咯,闲的蛋疼的程序猿们完全可以自己手动加入数据库,数据嘛,我看了一下,不是很多,2367条而已,还是可以试试的嘛

  找到数据以后,将他存为本地txt文件,记得修改文件编码方式为utf-8,不然小心乱码哟~

  剩下的就是导入了,在c#中读取txt文件,然后split('@'),得到如图的数据组:

,再对每一条数据split('|'),相信接下来怎么操作不需要我说了吧,导入数据库的时间可能会有点久吧,大概在几十秒的样子,程序也有可能会死掉一会儿,耐心的等等,他会活过来的,要相信自己写的程序可是很坚强的!

准备工作完了就是文本框的实现咯:

  讲讲我的思路吧:拉一个textBox文本框和一个listBox,设置textBox的TextChanged事件,在事件中获取textBox的text值,利用数据库的通配符在数据库中进行查找,将返回的数据组一条条显示在listBox中,然后设置listBox的MouseClick事件即可,废话不多说,上代码:

textBox的TextChanged事件代码:

private void fromStationText_TextChanged(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
if (this.fromStationText.Text == "")
{
this.listBox1.Visible = false;
}
else
{
this.listBox1.Visible = true;
string key = this.fromStationText.Text;
string strWhere = " where c_Spy like '" + key + "%' or c_name like '" + key + "%' or c_Fpy like '" + key + "%' ";
List<string> list = new List<string>();
list = CityInfoHelper.nameSelect(strWhere);
int i = 0;
for(i = 0;i < list.Count;i++)
{
this.listBox1.Items.Add(list[i]);
}
}
}


listBox的MouseClick事件代码:

private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
this.fromStationText.Text = this.listBox1.Text;
this.listBox1.Visible = false;
}


至于数据库的操作,我就不在这里贴出来~

简单的城市选择框就完成了,当然还有很多可以改进的地方,例如说那个listBox是否可以换作别的控件之类的,我也会继续完善这个,有喜欢研究的朋友也可以帮忙研究一下,大家一起讨论学习。

结束语

第一次写,真的紧张,写的不好,非喜勿喷,本文介绍的城市选择文本框的实现过程,代码需要自行研究修改,如有需要源码的也可以留言。

新手文章,大神可以自动忽略,转载请注明出处哟!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: