Bàn về chương trình tìm kiếm TỈNH, HUYỆN, XÃ trong nước

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Trước đây có vài người làm chương trình này rồi nhưng vài hôm trước tôi chợt nghĩ ra giải thuật tìm kiếm mới, tin chắc sẽ cho tốc độ tìm kiếm nhanh hơn rất nhiều so với những gì ta đã làm
Hiện tại tôi đang có trong tay:
- Toàn bộ CSDL tỉnh huyện xã trong nước
- Giải thuật tìm kiếm
Vấn đề đang gặp phải của tôi là:
- Tôi không biết người dùng cần 1 chương trình như thế nào?
- Người dùng cần 1 giao diện như thế nào?
- Tương tác giữa chương trình và bảng tính ra sao?

Vân.. vân...
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Vậy hy vọng những ai cần dùng chương trình này đóng góp ý kiến (như phần tô màu xanh ở trên), tôi sẽ ra chương trình đúng như nhu cầu của số đông
(nói thêm rằng: tôi không cần dùng chương trình này để làm gì cả, chỉ là... có "hứng" muốn viết chơi)
 
Dạng bài này chỉ là 1 công cụ (Tool) để áp cho 1 ứng dụng nào đó - nó khó có thể là 1 ứng dụng lớn.
Tuy thế, việc thống nhất Postal Code cho cả nước là vấn đề cần thiết, thuận cho thời kỳ số hiện nay
 
Upvote 0
Upvote 0
Anh làm hết luôn vô ko cho người ta tùy chọn tỉnh, huyện Or xã nữa sao .... hay ý tưởng test xem sao xong điều chỉnh sau
Làm thử thôi mà, chủ yếu cho mọi người xem thuật toán và cách bố trí dữ liệu. Còn chuyện sau đó... quá dễ, có ý tưởng thiết kế mới sẽ làm tiếp (cái mình bí chính là ý tưởng thiết kế, vì không biết người dùng muốn cái gì)
------------------------------------
Vừa đăng bài trước xong, tự dưng nghĩ ra cách mã hóa ID kiểu khác: Mã theo hệ thập lục phân, như vậy từ 9 ký tự chỉ còn 6
Version 1.1 ---> Xin mời
 

File đính kèm

  • Danh muc TINH, HUYEN, XA_V1.1.xlsb
    205.7 KB · Đọc: 57
Upvote 0
Làm thử thôi mà, chủ yếu cho mọi người xem thuật toán và cách bố trí dữ liệu. Còn chuyện sau đó... quá dễ, có ý tưởng thiết kế mới sẽ làm tiếp (cái mình bí chính là ý tưởng thiết kế, vì không biết người dùng muốn cái gì)
------------------------------------
Vừa đăng bài trước xong, tự dưng nghĩ ra cách mã hóa ID kiểu khác: Mã theo hệ thập lục phân, như vậy từ 9 ký tự chỉ còn 6
Version 1.1 ---> Xin mời
Với Excel, mình nghỉ mã nên có ký tự "L" (Local) ở đầu: L01, L02... để mã luôn là chuổi, tránh tình trạng vì lý do nào đó chuổi "01" thành số 1
 
Upvote 0
.... (cái mình bí chính là ý tưởng thiết kế, vì không biết người dùng muốn cái gì)
------------------------------------.....

nếu làm 1 công cụ có ích - có lẽ làm dạng kiểu calendar (nhập ngày tháng) có thể gắn vào tra cứu từng cell (ô) trên sheet / hoặc textbox nhập trên form => thì sẽ có ích cho phát triển các ứng dụng cần nhập Tỉnh huyện xã...
 
Upvote 0
Em sẽ tự tạo mã riêng của mình trên nguyên tắc:
- Mã tỉnh 3 ký tự
- Mã huyện 6 ký tự, trong đó có chứa luôn 3 ký tự mã tỉnh mà nó thuộc
- Mã xã 9 ký tự, trong đó có chứa 6 ký tự mã huyện mà nó thuộc
Vậy chỉ cần nắm được 1 mã là lập tức có thể truy ra "cha" hoặc "ông" của nó
Ví dụ:
- Ta có xã Tân Thái có mã: 012007022
- Vậy thì 012007 chính là mã huyện mà nó thuộc, tức huyện Đại Từ
- Suy ra tiếp 012 là mã tỉnh, tức Thái Nguyên
Đặt mã kiểu này giống như hồi trước em làm cái file gia phả. Từ mã của một người có thể truy ra tất cả những người có quan hệ với người đó.
http://www.giaiphapexcel.com/diendan/threads/cùng-xây-dựng-file-gia-phả.88861/
 
Upvote 0
Với Excel, mình nghỉ mã nên có ký tự "L" (Local) ở đầu: L01, L02... để mã luôn là chuổi, tránh tình trạng vì lý do nào đó chuổi "01" thành số 1
Mình vẫn giữ quan điểm nhất quán về độ dài của mã. Nếu lo số 0 đằng trước bị biến mất (vì lý do gì đó) thì ta chuyển nó thành số 1 là xong. Tức mã luôn bắt đầu = 1 (trước đây mã bắt đầu =01 thì giờ đổi lại bắt đầu =10)
Để chuyển đổi mã đang có sang kiểu mới, chỉ cần công thức:
Mã:
=D2H(DECIMAL(A2,16)+DECIMAL(REPT("0F",LEN(A2)/2),16),LEN(A2))
Với D2H là hàm tự tạo:
Mã:
Function D2H(ByVal Num As Long, Optional ByVal Places As Long) As String
  Dim qt As Long, rd As Long, sTmp As String
  qt = Num
  Do
    rd = qt Mod 16
    qt = Int(qt / 16)
    sTmp = Mid("0123456789ABCDEF", rd + 1, 1) & sTmp
  Loop Until qt = 0
  If Places = 0 Then Places = Len(sTmp)
  D2H = Right(String(Places, "0") & sTmp, Places)
End Function
----------------------------------------------
Nếu đã muốn chọn mã dạng chuỗi thì sao không là ABC######, các bạn?
Ví dụ
HNi123321
HPg214300
HCM123456
LSn951002
Mã của em tuy nhìn thấy là dạng chuỗi nhưng có thể tính toán được đấy sư phụ à (cộng trừ nhân chia ngon luôn như sư phụ đã thấy ở công thức em chuyển đổi mã ở trên). Trường hợp sau này có tách Tỉnh, Huyện, Xã, em chỉ cần lấy mã đang có rồi cộng thêm 1 gia số nữa là xong
Mấy ký tự HNi, HP gì đó nhìn "ngon" nhưng "ăn" không "ngon" đâu sư phụ (không tính toán được và chỉ khiến cho việc tìm kiếm chậm thêm)
-------------------------------------------
Đặt mã kiểu này giống như hồi trước em làm cái file gia phả. Từ mã của một người có thể truy ra tất cả những người có quan hệ với người đó.
http://www.giaiphapexcel.com/diendan/threads/cùng-xây-dựng-file-gia-phả.88861/
Từ mã con truy ra mã cha <---- Chính xác là tôi đang dùng cách này
Tôi cũng có ý tưởng xa hơn là với cách bố trí và đặt mã như hiện nay, có thể áp dụng cho nhiều bài toán khác (gia phả là 1 ví dụ). Bài toán Tỉnh, Huyện, Xã chỉ là "khởi động"
 

File đính kèm

  • Danh muc TINH, HUYEN, XA_V1.2.xlsb
    206.9 KB · Đọc: 42
Upvote 0
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Theo em thì phải tạo 3 bảng, nếu dùng CSDL quan hệ:

Bước đầu tiên của thiết kế phần mềm là xác định tầm vực và giới hạn của nó:
- Phần mềm sẽ làm gì và không làm gì.
- Trong tương lai có hể nới rộng hay không, và nới rộng tối đa đến mức nào.
- Khả năng giao diện với phần mềm khác
Bước đầu tiên của CSDL là xác định tầm vực của nó. Tuỳ theo ứng dụng phần mềm mà cách xác định khác nhau. Trong trường hợp này thì xác định ra sau:
- Có tất cả bao nhiêu tỉnh, (ước lượng) bao nhiêu huyện, (ước lượng) bao nhiêu xã. Và khả năng trong tương lai mức độ tăng giảm của các con số này ra sao?
- Mỗi tỉnh có tối đa/ tối thiểu bao nhiêu huyện, mỗi huyện có tối đa/ tối thiểu bao nhiêu xã.
Riêng trong trường hợp này ta có thêm điều rắc rối là cấp quận và phường của thành phố. Như vậy sự tuonwg quan quận phường huyện xã ra sao? Đây là CSDL, mọi vệc phải xác định, khong thể nói chuyện hiểu ngầm.

Trước khi xác định tầm vực thì đặt vấn đề mã là quá sớm.
 
Upvote 0
Trước khi xác định tầm vực thì đặt vấn đề mã là quá sớm.
Cách đặt mã đã nói lên tất cả. Tầm vực là <256
Thật ra cũng không có tỉnh nào có 100 huyện, không có huyện nào 100 xã nên dùng 2 ký tự Hexa đặt mã là quá thừa rồi
 
Upvote 0
Dạng bài này chỉ là 1 công cụ (Tool) để áp cho 1 ứng dụng nào đó - nó khó có thể là 1 ứng dụng lớn. . . .
Mình cũng tán thành với í kiến này.
Chủ iếu công cụ này xài để nhập liệu cho CSDL nhân sự có trường/cột địa điểm hay địa fương nào đó ở VN
Như nhập nơi sinh, trú quán, thường trú,. . .
Nhập nơi đến trong giấy đi fép, giấy đi đường, lập các loại biên bản hành chính, tòa án, . . . .

Trên diễn đàn cũng đã có vài công cụ nhỏ lẽ để nhập điểm (cho các em HS) cho nhanh, nhập cho trường [Ngày-tháng] cho lẹ hơn bình thường mà thôi.

Để tiện hòa nhập & trở thành công cụ nhỏ trong chu trình nhập liệu, ta nên đưa lên Form; Sẽ gọi công cụ này ra khi cần & đóng lại hay cho ẩn đi khi nhập xong cho 1 dòng bất kì.

Rất vui sẽ nhận được fản hồi & góp ý từ các bạn trong cộng đồng về suy nghĩ riêng của mình!
 
Upvote 0
Với Excel, mình nghỉ mã nên có ký tự "L" (Local) ở đầu: L01, L02... để mã luôn là chuổi, tránh tình trạng vì lý do nào đó chuổi "01" thành số 1
Nghĩ lại thấy việc đặt mã với ký tự đầu dạng chuỗi thấy cũng hợp lý! Vậy tôi quyết định đổi từ 10 ---> A0, cộng thêm 90 nữa bằng cách dùng công thức giống bài 28
=D2H(DECIMAL(A2,16)+DECIMAL(REPT("90",LEN(A2)/2),16),LEN(A2))
Không lo hàm VLOOKUP bị lẫn lộn giữa số và chữ
--------------------------------------
Theo tính toán thì:
- Từ A0 đến FF là 96 trường hợp
Theo thống kê số liệu về số lượng đơn vị hành chánh trong nước thì:
- Số quận/huyện nhiều nhất có trong 1 tỉnh là 30 (TP Hà Nội)
- Số phường/xã nhiều nhất có trong 1 huyện là 48 (Huyện Thái Thụy)
Vậy mã hóa tính từ A0 đến FF = 96 trường hợp là quá thừa
 
Lần chỉnh sửa cuối:
Upvote 0
Nhàn cư cũng xin góp hệ mã tỉnh như sau:
A0 - An Giang
. . . .
G0 - Gia Lai (Rai?)
H0 - Hà Giang
H1 - Hà Nam
H2 - Hà Nội
H3 - Hà Tĩnh
H4 - Hải Dương
H5 - Hải Fòng
H6 - Hậu Giang
H7 - Hồ Chí Minh
H8 - Hòa Bình
H9 -Hưng Iên
. . . . . .
 
Upvote 0
Anh ndu có thể tham khảo cách tìm kiếm này xem sao
Trên textBox Tỉnh ta có thể thực hiện vài thao tác sau:

1/ Khi ta đặt vị trí con chuột tai đó nhấn phín tắt VD: F9 thì nó sổ ra toàn bộ các tỉnh có thanh cuộn lên xuông coi các tỉnh
trong khi ta keo lên xuống coi các tỉnh thì cột bên phải là mã các tỉnh cùng với dòng của tỉnh đó ... Mục đích là khi mới sử dụng làm quen với mã tỉnh để nhớ

2/ khi ta quen và nhớ mã tỉnh rồi thì ta không cần nhấn phín tắt F9 nữa mà ta gõ thẳng mã Tỉnh vào đó là nó Tìm ra: VD Thanh hóa : TH01 chẳng hạn nó tìm ra

3/ Trường hợp ta không nhớ mã tỉnh hay ko nhấn F9 ta có thể Gõ chữ Th nó sẻ tìm ra 1 số tỉnh có Chữ Th

Khi thực hiên thao tác Tìm tỉnh xong thì Mặc định logic các TexBox Huyện, Xã kia nó cũng đã lọc ra ta chỉ việc thực hiên bước 1,2 hay 3 là ok

đó là những gì Em thấy trên phần mềm VPN do FPT (Vietnam Viết) mà em đang xài tìm kiếm thấy khoa học và logicCapture.PNG
 
Upvote 0
Trước đây có vài người làm chương trình này rồi nhưng vài hôm trước tôi chợt nghĩ ra giải thuật tìm kiếm mới, tin chắc sẽ cho tốc độ tìm kiếm nhanh hơn rất nhiều so với những gì ta đã làm
Hiện tại tôi đang có trong tay:
- Toàn bộ CSDL tỉnh huyện xã trong nước
- Giải thuật tìm kiếm
Vấn đề đang gặp phải của tôi là:
- Tôi không biết người dùng cần 1 chương trình như thế nào?
- Người dùng cần 1 giao diện như thế nào?
- Tương tác giữa chương trình và bảng tính ra sao?

Vân.. vân...
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Vậy hy vọng những ai cần dùng chương trình này đóng góp ý kiến (như phần tô màu xanh ở trên), tôi sẽ ra chương trình đúng như nhu cầu của số đông
(nói thêm rằng: tôi không cần dùng chương trình này để làm gì cả, chỉ là... có "hứng" muốn viết chơi)
Gởi anh Ndu

Thắng không có nhu cầu sử dung chương trình tìm kiếm này nhưng theo Thắng hình dung thì màn hình tìm kiếm này sẽ bao gồm 4 ô tìm kiếm có pop up kiểu như data validation, list vậy:
1/ Ô đầu tiên: miền, vùng. đơn giản nhất là Bắc, Trung Nam, nếu chi tiết hơn thì có vùng, ví dụ: miền Bắc có Tây Bắc, Đông Bắc, Trung du, ...; mien Trung có Bắc Trung bộ, Trung Trung bộ, Nam Trung bộ, .....

2/ ô thứ 2: Tỉnh, các tỉnh tương ứng sẽ hiện ra tương ứng với miền, vùng ở ô thứ 1.

3/ Ô thứ 3: huyện, các huyện tương ứng sẽ hiện ra tương ứng với tỉnh ở ô thứ 2.

4/ Ô thứ 4: xã, các xã tương ứng sẽ hiện ra tương ứng với huyện ở ô thứ 3.

Các ô tìm kiếm nên có chức năng tìm theo chữ người dung gõ vào ở từng ô, bên cạnh chức năng pop up sổ xuống.
 
Upvote 0
. . . . Nhưng theo Thắng hình dung thì màn hình tìm kiếm này sẽ bao gồm 4 ô tìm kiếm có pop up kiểu như data validation, list vậy:
1/ Ô đầu tiên: miền, vùng. đơn giản nhất là Bắc, Trung Nam, nếu chi tiết hơn thì có vùng, ví dụ: miền Bắc có Tây Bắc, Đông Bắc, Trung du, ...; mien Trung có Bắc Trung bộ, Trung Trung bộ, Nam Trung bộ, .....
2/ ô thứ 2:
3/ . . . .
4/ . . . .
Nếu theo bạn thì những người sử dụng fải biết & nhớ địa lí VN trình độ 'B' trở lên; Theo mình có nghĩa là fải đạt 60 - 80 % câu trả lời là tỉnh cụ thể nào đó ở vùng, miền nào!
Chuyện này có thể là không tưởng, . . . ( /(hà, Khà, khà,. . . )
Nên đổi qua trường hợp: Nhập 1 kí tự đầu tên tỉnh, thì xuất hiện trong danh sách các tỉnh có kí tự đầu như đã gõ.

Đã lâu rồi giờ mới lại xuất hiện Thắng nhỉ?
Dạo này nhậu còn khỏe không?

Chúc vui!
PHP:
'
Mã T     Tên tỉnh         Mã H     Tên Huyện'
A0     An Giang         A0A0     An Phú
B0     Bà Rịa - Vũng Tàu  A0C0     Châu Đốc
B1     Bắc Cạn           A0C1     Châu Phú
B2     Bắc Giang         A0C2     Châu Thành
B3     Bạc Liêu         A0C3     Chợ Mới
B4     Bắc Ninh         A0P0     Phú Tân
B5     Bến Tre           A0T0     Tân Châu
B6     Bình Định         A0T1     Thoại Sơn
B7     Bình Dương         A0T2     Tịnh Biên
B8     Bình Phước         A0T3     Tri Tôn
B9     Bình Thuận         B0B0     Bà Rịa
       Cà Mau            B0C0     Châu Đức
       Cần Thơ            B0B1     Côn Đảo
       Cao Bằng            B0F0     Đất đỏ
       Đà Nẵng            B0L0     Long Điền
       Đắc Lắc            B0T0     Tân Thành
       Đắk Nông            B0V0     Vũng Tàu
       Điện Biên            B0X0     Xuyên Mộc
       Đồng Nai            B1B0     Ba Bể
       Đồng Tháp            B1B1     Bắc Cạn
       Gia Lai            B1B2     Bạch Thông
       Hà Giang            B1C0     Chợ Đồn
       Hà Nam            B1C1     Chợ mới
       Hà Nội            B1N0     Na Rì
       Hà Tĩnh            B1N1     Ngân Sơn
       Hải Dương         B1P0   Pác Nặm
. . .     . . . .
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu theo bạn thì những người sử dụng fải biết & nhớ địa lí VN trình độ 'B' trở lên; Theo mình có nghĩa là fải đạt 60 - 80 % câu trả lời là tỉnh cụ thể nào đó ở vùng, miền nào!
Chuyện này có thể là không tưởng, . . . ( /(hà, Khà, khà,. . . )
Nên đổi qua trường hợp: Nhập 1 kí tự đầu tên tỉnh, thì xuất hiện trong danh sách các tỉnh có kí tự đầu như đã gõ.

Đã lâu rồi giờ mới lại xuất hiện Thắng nhỉ?
Dạo này nhậu còn khỏe không?

Chúc vui!
PHP:
'
Mã T     Tên tỉnh         Mã H     Tên Huyện'
A0     An Giang         A0A0     An Phú
B0     Bà Rịa - Vũng Tàu  A0C0     Châu Đốc
B1     Bắc Cạn           A0C1     Châu Phú
B2     Bắc Giang         A0C2     Châu Thành
B3     Bạc Liêu         A0C3     Chợ Mới
B4     Bắc Ninh         A0P0     Phú Tân
B5     Bến Tre           A0T0     Tân Châu
B6     Bình Định         A0T1     Thoại Sơn
B7     Bình Dương         A0T2     Tịnh Biên
B8     Bình Phước         A0T3     Tri Tôn
B9     Bình Thuận         B0B0     Bà Rịa
       Cà Mau            B0C0     Châu Đức
       Cần Thơ            B0B1     Côn Đảo
       Cao Bằng            B0F0     Đất đỏ
       Đà Nẵng            B0L0     Long Điền
       Đắc Lắc            B0T0     Tân Thành
       Đắk Nông            B0V0     Vũng Tàu
       Điện Biên            B0X0     Xuyên Mộc
       Đồng Nai            B1B0     Ba Bể
       Đồng Tháp            B1B1     Bắc Cạn
       Gia Lai            B1B2     Bạch Thông
       Hà Giang            B1C0     Chợ Đồn
       Hà Nam            B1C1     Chợ mới
       Hà Nội            B1N0     Na Rì
       Hà Tĩnh            B1N1     Ngân Sơn
       Hải Dương         B1P0   Pác Nặm
. . .     . . . .
Sư phụ đặt mã kiểu này mà gặp huyện Thái Thụy thì rắc rối to.
Huyện Thái Thụy có tổng cộng 48 xã, trong đó hết 45 xã có tên bắt đầu bằng chữ Thái. Nội cái chuyên suy nghĩ tên không trùng cũng đủ mệt. Vậy thì T01 đến T48 chăng? Thế thì lại phá vỡ quy luật về độ dài mã rồi
Trong khi em dùng mã Hexa, chẳng phải suy nghĩ gì cả
 
Upvote 0
T0, . . . T9, TA,. . . TZ, T@, T#, . . . .
 
Upvote 0
T0, . . . T9, TA,. . . TZ, T@, T#, . . . .
Thì đằng nào sư phụ cũng phải... suy nghĩ, sao cho "lòi" ra được 48 ký tự khác nhau. Đặt trường hợp sau này nó thêm xã thành 90 thì còn ký tự nào nữa mà suy nghĩ? Trong khi cách đặt mã của em chỉ cần kéo fill, khỏi lo lắng gì cả. Chấp luôn trường hợp có đến 500 xã hoặc 5000 xã hay bao nhiêu em cũng không lo, thay đổi mã trong vòng 1 nốt nhạc (ưu điểm có được là vì mã của em cộng trừ nhân chia được)
Ở đây em không nói cách đặt mã nào hay hơn, em chỉ thấy rằng cách của em nó.. khỏe re là em thích rồi. Mỗi lần nhà nước thay đổi cơ cấu là mỗi lần phải vắt óc ra suy nghĩ ký tự thay thế cho mã mới, thấy không "ngon" rồi sư phụ à!
 
Upvote 0
Tôi có 1 ý tưởng, ví dụ như sau:
Có 4 cột: Tỉnh (TP) - Huyện (Quận, TP, TX) - Xã (Phường) - Ấp (thôn)
1/ Nếu tôi nhập cột Tỉnh, cột Huyện sẽ có List các Huyện (Quận, TP, TX) của tỉnh (TP) đó, tương tự cho các cột Huyện, Xã.
2/ Nếu tôi nhập Huyện(Quận, TP, TX):
2.1- Nếu Không trùng thì tự động cột Tỉnh điền tên Tỉnh(TP), kèm List cho cột Xã (Phường).
2.2- Nếu có trùng thì cột Tỉnh sẽ có list để chọn tỉnh(TP), khi chọn tỉnh (TP) xong sẽ có list cho cột Xã (Phường)
3/ Nếu tôi nhập tên Xã (Phường):
3.1 - Nếu Không trùng thì tự động cột Huyện điền tên Huyện(Quận), kèm List cho cột Xã (Phường).
3.2- Nếu có trùng thì cột Huyện sẽ có list để chọn Huyện(Quận), khi chọn Huyện (Quận) xong sẽ kèm List cho cột Xã (Phường).
4/ ...
5/ ...

Híc! Viết một hồi lại thấy "lung tung beng"
 
Upvote 0
Web KT
Back
Top Bottom