Posted on 2005-10-22 22:53
水如烟(LzmTW) 阅读(20503)
评论(92) 编辑 收藏 网摘 所属分类:
k、制作通用类
Author:水如烟
身份证的前6位就是表示开出身份证所在地的区划代码。
图:测试示图
类:
''' -----------------------------------------------------------------------------
''' Project : LzmTW.Common
''' Class : Common.RegionalCodeClass
'''
''' -----------------------------------------------------------------------------
''' <summary>
''' 全国县及县以上行政区划代码信息类
''' </summary>
''' <remarks>
''' 代码由六位数字组成,每两位数字一组共三组,即XX XX XX,意义如下:
'''首组,代表省;
'''中组,其中01-20、51-70表示省直辖市,21-50表示地区(州、盟);
'''尾组,01-18表示市辖区或地辖区,21-80表示县(旗),81-99表示省直辖县级市。
'''国家统计局设管司 2005-08-01 15:56:18;
'''最新数据截止2005年6月30日;
'''数据更新网址: http://www.stats.gov.cn/tjbz/xzqhdm/index.htm;
'''数据表明,实际应是:
'''首组,代表省;
'''中组,其中01-20、51-99表示省直辖市,21-50表示地区(州、盟);
'''尾组,01-20表示市辖区或地辖区,21-80表示县(旗),81-99表示省直辖县级市。
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Class RegionalCodeClassClass RegionalCodeClass
Private _Collection As RegionalCollection
Private _Enumerator As System.Collections.IDictionaryEnumerator
'默认数据文件
Private _TxtFile As String = System.AppDomain.CurrentDomain.BaseDirectory & "\全国行政区划代码.txt"
Private _XmlFile As String = System.AppDomain.CurrentDomain.BaseDirectory & "\全国行政区划代码.xml"

Sub New()Sub New()
_Collection = New RegionalCollection
End Sub

对外属性#Region "对外属性"
''' -----------------------------------------------------------------------------
''' <summary>
''' 区划信息
''' </summary>
''' <param name="iCode">代码</param>
''' <value>区划</value>
''' <remarks>
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Default Public ReadOnly Property Item()Property Item(ByVal iCode As String) As Regional
Get
Return _Collection.Item(iCode)
End Get
End Property
''' -----------------------------------------------------------------------------
''' <summary>
''' 区划集
''' </summary>
''' <value>区划</value>
''' <remarks>
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public ReadOnly Property Items()Property Items() As Regional()
Get
Dim tmp(_Collection.Count - 1) As Regional
Dim n As Integer = 0
_Enumerator = _Collection.GetEnumerator
With _Enumerator
While .MoveNext
tmp(n) = CType(.Value, Regional)
n += 1
End While
End With
Return tmp
End Get
End Property
#End Region

装入数据方式#Region "装入数据方式"
''' -----------------------------------------------------------------------------
''' <summary>
''' 从文本文件导入数据
''' </summary>
''' <remarks>
''' 默认文件为程序运行目录下的"全国行政区划代码.txt"
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub LoadFromTxt()Sub LoadFromTxt()
If Not System.IO.File.Exists(_TxtFile) Then
MsgBox("文件不存在!")
Exit Sub
End If
Me.Load_BeforBegin()
Dim fs As IO.FileStream = New IO.FileStream(_TxtFile, IO.FileMode.Open)
Dim sr As IO.StreamReader = New IO.StreamReader(fs, System.Text.Encoding.Default)
Dim Line As String
Dim tmpCode As String
Dim tmpName As String
While sr.Peek <> -1
Line = sr.ReadLine.Trim '除去前后空格
If Line.Length > 6 Then
tmpCode = Line.Substring(0, 6)
tmpName = Line.Substring(6)
Add(tmpCode, tmpName)
End If
End While
sr.Close()
fs.Close()
Me.Load_AfterDataFinish()
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' 从文本文件导入数据
''' </summary>
''' <param name="FileName">文件名</param>
''' <remarks>
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub LoadFromTxt()Sub LoadFromTxt(ByVal FileName As String)
_TxtFile = FileName
LoadFromTxt()
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' 从DataTable导入数据
''' </summary>
''' <param name="Table">DataTable</param>
''' <remarks>
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub LoadFromTable()Sub LoadFromTable(ByVal Table As DataTable)
If Table Is Nothing OrElse Table.Rows.Count = 0 Then
MsgBox("没数据!")
Exit Sub
End If
Me.Load_BeforBegin()
Dim tmpCode As String
Dim tmpName As String
For Each row As DataRow In Table.Rows
tmpCode = row.Item(0)
tmpName = row.Item(1)
Add(tmpCode, tmpName)
Next
Me.Load_AfterDataFinish()
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' 从xml文件导入数据
''' </summary>
''' <remarks>
''' 默认文件为程序运行目录下的"全国行政区划代码.xml"
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub LoadFromXml()Sub LoadFromXml()
If Not System.IO.File.Exists(_XmlFile) Then
MsgBox("文件不存在!")
Exit Sub
End If
Dim tmpDataSet As New DataSet
tmpDataSet.ReadXml(_XmlFile)
If tmpDataSet.Tables.Count = 0 OrElse tmpDataSet.Tables(0).Rows.Count = 0 Then
MsgBox("没有数据,或文件不符!")
Exit Sub
End If
Me.LoadFromTable(tmpDataSet.Tables(0))
tmpDataSet.Clear()
tmpDataSet.Dispose()
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' 从xml文件导入数据
''' </summary>
''' <param name="FileName">文件名</param>
''' <remarks>
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub LoadFromXml()Sub LoadFromXml(ByVal FileName As String)
_XmlFile = FileName
LoadFromXml()
End Sub

Private Sub Add()Sub Add(ByVal iCode As String, ByVal iName As String)
iCode = iCode.Trim
iName = iName.Trim
If iCode.Length = 6 AndAlso Microsoft.VisualBasic.IsNumeric(iCode) Then '保证是六位数字
Dim tmp As Regional = New Regional(iCode, iName)
_Collection.Add(tmp)
End If
End Sub
'装入数据前的处理

Private Sub Load_BeforBegin()Sub Load_BeforBegin()
_Collection.Clear()
End Sub
'装入数据后的处理

Private Sub Load_AfterDataFinish()Sub Load_AfterDataFinish()
Dim tmp As Regional() = Me.Items
Me.Sort(tmp)
For Each o As Regional In tmp
Me.IniRegionalFullName(o)
Next
End Sub
'取全名

Private Sub IniRegionalFullName()Sub IniRegionalFullName(ByVal iRegional As Regional)
Dim iCode As String
iCode = iRegional.Code
Dim tmp1 As Regional
Dim tmp2 As Regional
Select Case Convert.ToInt16(iCode.Substring(2, 2)) '中组
Case 0 'XX00XX
Select Case Convert.ToInt16(iCode.Substring(4, 2)) '尾组
Case 0 'XX0000
iRegional.FullName = iRegional.Name
Case Else 'XX00--
'未定义
End Select
Case Else 'XX--XX
Select Case Convert.ToInt16(iCode.Substring(4, 2)) '尾组
Case 0 'XX--00
tmp1 = Me.Item(iCode.Substring(0, 2) & "0000")
If Not tmp1 Is Nothing Then iRegional.FullName = tmp1.Name & iRegional.Name
Case Else 'XX----
tmp1 = Me.Item(iCode.Substring(0, 2) & "0000")
If Not tmp1 Is Nothing Then
tmp2 = Me.Item(iCode.Substring(0, 4) & "00")
If Not tmp2 Is Nothing Then
If tmp1.Name.EndsWith("市") Then
iRegional.FullName = tmp1.Name & iRegional.Name
Else
iRegional.FullName = tmp2.FullName & iRegional.Name
End If
End If
End If
End Select
End Select
End Sub
#End Region

导出数据方式#Region "导出数据方式"
''' -----------------------------------------------------------------------------
''' <summary>
''' 导出到xml文件
''' </summary>
''' <remarks>
''' 默认文件为程序运行目录下的"全国行政区划代码.xml"
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub WriteXml()Sub WriteXml()
If _Collection.Count = 0 Then
MsgBox("没有数据!")
Exit Sub
End If
Dim tmpDataSet As New DataSet
Dim Table As New DataTable
Table.Columns.AddRange(New DataColumn() {New DataColumn("Code"), New DataColumn("Name")})
WriteTable(Table)
tmpDataSet.Tables.Add(Table)
Try
tmpDataSet.WriteXml(_XmlFile)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Table.Clear()
Table.Dispose()
tmpDataSet.Clear()
tmpDataSet.Dispose()
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' 导出到xml文件
''' </summary>
''' <param name="FileName">文件名</param>
''' <remarks>
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub WriteXml()Sub WriteXml(ByVal FileName As String)
_XmlFile = FileName
WriteXml()
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' 导出到DataTable
''' </summary>
''' <param name="Table">DataTable</param>
''' <remarks>
''' </remarks>
''' <history>
''' [lzmtw] 2005-10-24 Created
''' </history>
''' -----------------------------------------------------------------------------

Public Sub WriteTable()Sub WriteTable(ByVal Table As DataTable)
If _Collection.Count = 0 Then
MsgBox("没有数据!")
Exit Sub
End If
Table.Clear()
Sort(Me.Items)
With Table
.BeginInit()
For Each r As Regional In Me.Items
.Rows.Add(New String() {r.Code, r.Name})
Next
'不作AcceptChanges处理,便于上载到数据库
.EndInit()
End