• 实现省市下来菜单


    (一)从网络找到一份省市对应表,到县级市一级(比较老),txt格式,如下图

    (二)读取数并整理到一个list列表中

    1)分别定义城市类和省类

    public class Province
    {
        public string provinceName;
        public List<City> cities;
    
        public Province(string provinceName)
        {
            this.provinceName = provinceName;
            cities = new List<City>();
        }
    }
    
    public class City
    {
        public string cityName;
        public List<string> subCities;
    
        public City(string cityName)
        {
            this.cityName = cityName;
            subCities = new List<string>();
        }
    }

    2)读取信息并分类

        private List<Province> provinces;
    
        void ReadFile()
        {
            string file = @"D:cityInfo.txt";
    
            using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                string info = sr.ReadLine();
    
                while (info != null)
                {              
                    string[] infoSplit = info.Split('	');
    
                    InsetItem(infoSplit);
                    //string newStr = i+":"+ infoSplit[0] + "-" + infoSplit[1] + "-" + infoSplit[2];
                    //Debug.Log(newStr);
                    info = sr.ReadLine();
                }
    
                sr.Dispose();
                sr.Close();
    
                fs.Dispose();
                fs.Close();
            }
        }
        void InsetItem(string[] item)
        {
            Province province = CatchProvince(item[0]);
    
            if(province==null)
            {
                province = new global::Province(item[0]);
                provinces.Add(province);
            }
    
            City city = CatchCity(province, item[1]);
    
            if(city==null)
            {
                city = new global::City(item[1]);
                province.cities.Add(city);
            }
            city.subCities.Add(item[2]);
        }
    
        Province CatchProvince(string provinceName)
        {
            Province province = null;
    
            //bool isFound = false;
    
            foreach(var p in provinces)
            {
                if(p.provinceName == provinceName)
                {
                    province = p;
                    //isFound = true;
                    break;
                }
            }
    
            return province;
        }
    
        City CatchCity(Province province,string cityName)
        {
            City city = null;
    
            foreach(var c in province.cities)
            {
                if(c.cityName == cityName)
                {
                    city = c;
                    break;
                }
            }
    
            return city;
        }


    3)输出省市信息以备用

        void OutputInfoXml()
        {
            XmlDocument cityXml = new XmlDocument();
            XmlDeclaration xmlDeclaration = cityXml.CreateXmlDeclaration("1.0", "gb2312", "");
            cityXml.AppendChild(xmlDeclaration);
    
            XmlElement xmlElem = cityXml.CreateElement("Menu");
            cityXml.AppendChild(xmlElem);
    
            for(int i=0;i<provinces.Count;i++)
            {
                XmlElement provinceElem = cityXml.CreateElement("Province");
                provinceElem.SetAttribute("Name", provinces[i].provinceName);
                xmlElem.AppendChild(provinceElem);
    
                for(int j=0;j<provinces[i].cities.Count;j++)
                {
                    XmlElement cityElem = cityXml.CreateElement("City");
                    cityElem.SetAttribute("Name", provinces[i].cities[j].cityName);
                    provinceElem.AppendChild(cityElem);
    
                    for(int k=0;k<provinces[i].cities[j].subCities.Count;k++)
                    {
                        XmlElement subcityElem = cityXml.CreateElement("Subcity");
                        subcityElem.SetAttribute("Name", provinces[i].cities[j].subCities[k]);
                        cityElem.AppendChild(subcityElem);
                    }
                }
            }
    
            cityXml.Save(exportFile);
        }

    (三)提供两个公共方法来获取省份以及省份对应的城市

        public List<Province> GetProvices()
        {
            return provinces;
        }
    
        public List<City> GetCities(int index)
        {
            if (index >= provinces.Count) return null;
    
            return provinces[index].cities;
        }

    (四)将结果输出到xml文件后续使用

        void OutputInfoXml()
        {
            XmlDocument cityXml = new XmlDocument();
            XmlDeclaration xmlDeclaration = cityXml.CreateXmlDeclaration("1.0", "gb2312", "");
            cityXml.AppendChild(xmlDeclaration);
    
            XmlElement xmlElem = cityXml.CreateElement("Menu");
            cityXml.AppendChild(xmlElem);
    
            for(int i=0;i<provinces.Count;i++)
            {
                XmlElement provinceElem = cityXml.CreateElement("Province");
                provinceElem.SetAttribute("Name", provinces[i].provinceName);
                xmlElem.AppendChild(provinceElem);
    
                for(int j=0;j<provinces[i].cities.Count;j++)
                {
                    XmlElement cityElem = cityXml.CreateElement("City");
                    cityElem.SetAttribute("Name", provinces[i].cities[j].cityName);
                    provinceElem.AppendChild(cityElem);
    
                    for(int k=0;k<provinces[i].cities[j].subCities.Count;k++)
                    {
                        XmlElement subcityElem = cityXml.CreateElement("Subcity");
                        subcityElem.SetAttribute("Name", provinces[i].cities[j].subCities[k]);
                        cityElem.AppendChild(subcityElem);
                    }
                }
            }
    
            cityXml.Save(exportFile);
        }

    txt以及xml地址:

    https://files.cnblogs.com/files/llstart-new0201/%E4%B8%AD%E5%9B%BD%E5%9F%8E%E5%B8%82%E4%BF%A1%E6%81%AF.zip

  • 相关阅读:
    十层框架
    大规模web服务开发技术
    ASP.NET三层架构基础详细操作图文教程
    ASP.NET MVC4中的异步控制器
    集成多个子系统的单点登录(网站入口方式)附源码
    我的C#全能Excel操作(无需Office,不使用XML)
    代码重构——程序员应有的基因
    通过监听Windows消息对复合控件进行整体控制
    Android游戏框架
    Ext.NET
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/9592530.html
Copyright © 2020-2023  润新知