第一次写,有点小紧张。。。
这两天研究铁道部的余票查询系统,参考网上大牛们的经典案例,也有了一些自己的心得,写在自己程序猿的道路上记录一下,也和大家一起分享,写的不好莫怪,大牛可以自动过滤,非喜勿喷,谢谢~
今天先简单的介绍一下城市选择框的实现,与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是否可以换作别的控件之类的,我也会继续完善这个,有喜欢研究的朋友也可以帮忙研究一下,大家一起讨论学习。
结束语
第一次写,真的紧张,写的不好,非喜勿喷,本文介绍的城市选择文本框的实现过程,代码需要自行研究修改,如有需要源码的也可以留言。
新手文章,大神可以自动忽略,转载请注明出处哟!