在做公交查询系统时,要求用户输入起点和终点。可是如果用户输错了,自己要判断,很麻烦,因为我的算法全是SQL。于是就想了一种折衷的方案:让用户从DropDownList里选。这样既方便了用户,也方便了自己。
可是,如果全部站点放入一个DropDownList的话,太多了(我这个济南的有一千多个啊),所以就先选择汉字的拼音首字母,再选择站点,实验证明很方便,速度很快!
这里用到了一个汉字转拼音的函数:
static string Extract_HZ(string HZ)
{
byte[] ZW = new byte[2];
long HZ_INT;
ZW = System.Text.Encoding.Default.GetBytes(HZ);// get the array of byte from the single char
int i1 = (short)(ZW[0]);
int i2 = (short)(ZW[1]);
HZ_INT = i1 * 256 i2; // expresstion
// HZ_INT match the constant
if ((HZ_INT >= 45217) && (HZ_INT <= 45252))
{
return "A";
}
if ((HZ_INT >= 45253) && (HZ_INT <= 45760))
{
return "B";
}
if ((HZ_INT >= 45761) && (HZ_INT <= 46317))
{
return "C";
}
if ((HZ_INT >= 46318) && (HZ_INT <= 46825))
{
return "D";
}
if ((HZ_INT >= 46826) && (HZ_INT <= 47009))
{
return "E";
}
if ((HZ_INT >= 47010) && (HZ_INT <= 47296))
{
return "F";
}
if ((HZ_INT >= 47297) && (HZ_INT <= 47613))
{
return "G";
}
//**************************
if ((HZ_INT >= 47614) && (HZ_INT <= 48118))
{
//MessageBox.Show("H");
return "H";
}
if ((HZ_INT >= 48119) && (HZ_INT <= 49061))
{
return "J";
}
if ((HZ_INT >= 49062) && (HZ_INT <= 49323))
{
return "K";
}
if ((HZ_INT >= 49324) && (HZ_INT <= 49895))
{
return "L";
}
if ((HZ_INT >= 49896) && (HZ_INT <= 50370))
{
return "M";
}
if ((HZ_INT >= 50371) && (HZ_INT <= 50613))
{
return "N";
}
if ((HZ_INT >= 50614) && (HZ_INT <= 50621))
{
return "O";
}
if ((HZ_INT >= 50622) && (HZ_INT <= 50905))
{
return "P";
}
if ((HZ_INT >= 50906) && (HZ_INT <= 51386))
{
return "Q";
}
//*********************
if ((HZ_INT >= 51387) && (HZ_INT <= 51445))
{
return "R";
}
if ((HZ_INT >= 51446) && (HZ_INT <= 52217))
{
return "S";
}
if ((HZ_INT >= 52218) && (HZ_INT <= 52697))
{
return "T";
}
if ((HZ_INT >= 52698) && (HZ_INT <= 52979))
{
return "W";
}
if ((HZ_INT >= 52980) && (HZ_INT <= 53640))
{
return "X";
}
if ((HZ_INT >= 53689) && (HZ_INT <= 54480))
{
return "Y";
}
if ((HZ_INT >= 54481) && (HZ_INT <= 55289))
{
return "Z";
}
return ("");
}
把索引字母全部插入数据库后,我发现有些字这个函数没有处理。可能有些偏僻的字没有判断吧?不过就十几个,我手工加上了。。。。。
刚做完一次转乘,速度很快嘛,不用什么临时表了吧?