以下是本篇文章正文内容
一、问题描述
公民身份证号码由18位数字组成:前6位为行政区划分代码。也就是说给出公民的身份真正号码,就可以知道该公民出生地位于哪个行政区。
编制一个程序,将身份证号.txt 中的信息读入到内存中,并进行一定的处理,方便查询。
- 使用Scanner读取该文件前10行,查看结果并分析,省的邮政编码有什么特点,市与县的邮政编码有什么特点?
- 将每一行进行解析,得到一个邮编与省或邮编与县市对应的字符串对。
- 根据输入的的身份证号显示出对应的省。
二、代码实现
1.具体代码
代码如下:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import javax.swing.JOptionPane;
import java.io.File;
import java.io.FileNotFoundException;
public class readhuman {
static Map<String,String> map = new HashMap<>();
private static void readfile(String filename) {
int count = 0;
try {
Scanner scanner = new Scanner(new File(filename));
scanner.useDelimiter(System.getProperty("line.separator"));
while (scanner.hasNext()) {
count++;
parseline(scanner.next(), count);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println(e);
}
}
private static void parseline(String line, int num) {
String city="无",country="无";
Scanner linescanner = new Scanner(line);
linescanner.useDelimiter(" ");// 可以修改参数以读取不同分隔符分隔的内容
String name = linescanner.next();
String ID = linescanner.next();
String gender = linescanner.next();
int age = linescanner.nextInt();
String province = linescanner.next();
int i=0;
while(linescanner.hasNext()) {
i++;
if(i==1) city = linescanner.next();
if(i==2) {
country = linescanner.next();
break;
}
}
System.out.println(num + ". 姓名:" + name + " 身份证号:" + ID + " 性别:" + gender + " 年龄:" + age + " 省份:" + province);
inquiryId(ID, province, city, country);
}
private static void inquiryId(String ID, String province, String city, String country) {
String number = ID.substring(0, 6);
map.put(number,province);
System.out.println(" 邮政编码:" + number + " 省份:" + province + " 市:" + city + " 县:" + country);
}
private static void dialogbox() {
JOptionPane.showMessageDialog(null, "消息对话框");
String x = JOptionPane.showInputDialog("请输入想要查询的身份证号:");
String number = x.substring(0,6);
int userOption = JOptionPane.showConfirmDialog(null,map.get(number),"提示",JOptionPane.OK_OPTION,JOptionPane.QUESTION_MESSAGE); //确认对话框
if (userOption == JOptionPane.OK_OPTION) {
System.err.println("是");
JOptionPane.showMessageDialog(null,"查询成功");
}else {
System.out.println("否");
JOptionPane.showMessageDialog(null,"查询失败");
}
}
public static void main(String[] args) {
readfile("身份证号.txt");
dialogbox();//信息对话框:用来显示消息。
}
}
2.运行结果
- 将身份证号数据库.txt 中的信息读入到内存中,进行处理后显示在控制台。
- 利用map实现邮政编号与省份的字符串对。
- 通过对话框获取输入的身份证号,并用对话框显示该身份号属于那个省
3.问题回答
- 相同省份的邮政编码前两位相同,市区决定邮政编码3,4位,县决定邮政编码5,6位。