一、 问题描述
实现一个许昌地区常用电话号码检索系统,其中信息包括:商家名称,联系电话,属性(可补充其它属性)。要求有合适的交互界面,方便用户操作。
主要功能:
(1)从文本文件中的数据输入建立电话号码系统。
(2)插入,删除,修改电话号码。
(3)查询电话号码,可按商家名称查询,和按电话号码查询。
(4)可按商家名称或电话号码排序。
(5)数据输出保存在文本文件中。
数据构成:12个不同属性类别的文本文档,每个文档中存储了上百条的商家姓名及电话信息。
二、 数据结构设计
本题目要求实现一个带有多个属性的商家信息的电话号码检索系统,数据结构为12个不同属性类别的文本文档,每个文档中存储了上百条商家信息,包括商家姓名、商家电话。电话检索系统需要考虑存储空间的利用率,还要实现功能的高效性,在数据存储上不能采用单链表存储,后期对数据查找效率不高,为实现数据的高效存储、查询,采用了线性表的顺序存储结构,方便后期对数据进行查找、排序操作。
三、源码如下:
----------------------------------------------------------------------------------------User.java
package zhangchunlan;
public class User {
public static void main(String []args)throws Exception {
Gongneng m=new Gongneng();
m.type();
}
}
---------------------------------------------------------------------------------------Tongxun.java
package zhangchunlan;
public class Tongxun { //创建类
String name; //定义字符串变量,设为私有化
String phoneNumber;
public String getName() { //构造getName方法,对私有变量进行操作
return name;
}
public void setName(String name) { //构造setName方法
this.name = name; //变量赋值
}
// set()是给属性赋值的,get()是取得属性值的
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String toString() { //对象引用toString() 方法返回该对象的字符串类型
String s = “姓名:” + name + “电话:” + phoneNumber;
return s;
}
}
---------------------------------------------------------------------------------------Gongneng.java
package zhangchunlan;
import java.io.*;
import java.util.*;
public class Gongneng
{
Scanner sc=new Scanner(System.in);
Tongxun[] Tongxun = new Tongxun[500];
int curlen=0;
public void type()throws Exception{//一级菜单
System.out.println(“欢迎进入许昌市部分电话号码检索系统”);
System.out.println(" 1.餐饮美食电话:");
System.out.println(" 2.商务服务电话:");
System.out.println(" 3.生活服务电话:");
System.out.println(" 4.休闲娱乐电话:");
System.out.println(" 5.教育培训科研:");
System.out.println(" 6.房产建材电话:");
System.out.println(" 7.医疗卫生电话:");
System.out.println(" 8.企业工厂电话:");
System.out.println(" 9.旅游出行电话:");
System.out.println(" 10.农林渔牧电话:");
System.out.println(" 11.政党社团电话:");
System.out.println(" 12.其他类别电话:");
System.out.println("********************************************");
System.out.println(“请选择您要查询的类别:”);
int s=sc.nextInt();
File f;
String str;
switch(s){
case 1:f=new File("(1)许昌餐饮美食电话.txt");
xuanZe(f);break;
case 2:f=new File("(2)许昌商务服务电话.txt");
xuanZe(f);break;
case 3:f=new File("(3)许昌生活服务电话.txt");
xuanZe(f); break;
case 4:f=new File("(4)许昌休闲娱乐电话.txt");
xuanZe(f);break;
case 5:f=new File("(5)许昌教育培训科研电话.txt");
xuanZe(f);break;
case 6:f=new File("(6)许昌房产建材电话.txt");
xuanZe(f);break;
case 7:f=new File("(7)许昌医疗卫生电话.txt");
xuanZe(f);break;
case 8:f=new File("(8)许昌企业工厂电话.txt");
xuanZe(f);break;
case 9:f=new File("(9)许昌旅游出行电话.txt");
xuanZe(f);break;
case 10:f=new File("(10)许昌农林渔牧电话.txt");
xuanZe(f);break;
case 11:f=new File("(11)许昌党政社团电话.txt");
xuanZe(f);break;
case 12:f=new File("(12)许昌其它类别电话.txt");
xuanZe(f);break;
case 0:break;
}
}
public void xuanZe(File f) throws Exception{
boolean flag=true;
while(flag){
System.out.println("###########################");
System.out.println("—许昌地区常用电话号码检索系统----");
System.out.println("# 1—插入 #");
System.out.println("# 2—删除 #");
System.out.println("# 3—修改 #");
System.out.println("# 4—按姓名查询 #");
System.out.println("# 5—按电话查询 #");
System.out.println("# 6—排序 #");
System.out.println("# 7—显示所有商家信息 #");
System.out.println("# 8—导入 #");
System.out.println("# 9—导出 #");
System.out.println("# 0—退出 #");
System.out.println("###########################");
Scanner sc=new Scanner(System.in);
int a = sc.nextInt();
switch (a) {
case 1:add();break;
case 2:delete(); break;
case 3:xiuGai();break;
case 4:selectByName();break;
case 5:selectByTel();break;
case 6:paiXu();break;
case 7:selectAll();break;
case 8:FileReade(f);break;
case 9:FileWrite(f);break;
case 0:
flag=false;
break;
default:
System.out.println(“输入指令错误!请重新输入!”);
break;
}
}
}
public void FileReade(File f)throws Exception { // 导入文本文件
FileReader reader = new FileReader(f);
BufferedReader br = new BufferedReader(reader);
// 创建一个BufferedReader缓冲对象
String str;
while ((str = br.readLine()) != null) { // 每次读取一行文本,判断是否到文件末尾
// 每次读取一行文本,判断是否到文件末尾
String []s=str.split("?;
Tongxun[curlen]=new Tongxun();
Tongxun[curlen].setName(s[0]);
Tongxun[curlen].setPhoneNumber(s[1]);
curlen++;
}
br.close();
}
public void FileWrite(File f)throws Exception {//导出信息到文本文件
FileWriter writer = new FileWriter(f);
// 创建一个BufferdWriter缓冲区对象
BufferedWriter bw = new BufferedWriter(writer);
for(int i=0;i<=this.curlen;i++)
{
String str01=Tongxun[i].getName()+","+Tongxun[i].getPhoneNumber();
bw.write(str01);
bw.newLine(); // 写入一个换行符,该方法会根据不同的操作系统生成相应的换行符
}
bw.close();
}
public void add()throws Exception { //增加信息
Tongxun b = new Tongxun();
System.out.println("------添加电话本---------");
System.out.println(“请输入相关信息:”);
System.out.print(“姓名:”);
String name = sc.next();
b.setName(name); //变量定义
System.out.print(“电话:”);
String dianhua = sc.next();
b.setPhoneNumber(dianhua);
Tongxun[curlen++]=b;
System.out.println(“添加成功”);
System.out.println(b.toString());
}
public void delete()throws Exception {
System.out.println("------删除电话本----------");
System.out.println(“请输入你要删除的电话本:”);
Scanner sc=new Scanner(System.in);
String s = sc.next();
int a=-1;
for (int i = 0; i < curlen; i++) {
if (Tongxun[i] != null) {
if (Tongxun[i].getName().equals(s)) {
a=0;
System.out.println(“你要删除的是:” + Tongxun[i].toString());
System.out.println(“你确定要删除吗?\n [Y]确定,[N]取消”);
String s2 = sc.next();
if (s2.equals(“y”)) {
Tongxun[i] = Tongxun[curlen-1];
curlen–;
System.out.println(“删除成功!”);
try { //try catch 实现异常的处理
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else if (sc.next().equals(“n”)) {
System.out.println(“已取消,请重新选择操作”);
} else {
System.out.println(“输入指令不正确,请重新输入!”);
delete();
}
}
}
}
if(a==-1) {
System.out.println(“你输入的账号不存在!请重新输入!”);
delete();
}
}
public void xiuGai() {
System.out.println("--------修改电话本-------------");
System.out.println(“请输入你要修改的账号:”);
Scanner sc=new Scanner(System.in);
String s = sc.next();
int a=-1;
for (int i = 0; i < curlen; i++) {
if (Tongxun[i] != null) {
if (Tongxun[i].getName().equals(s)) {
System.out.println(“你要修改的是:” + Tongxun[i].toString());
System.out.println(“请重新输入相关信息:”);
System.out.print(“姓名:”);
String name = sc.next();
Tongxun[i].setName(name);
System.out.print(“电话:”);
String dianhua = sc.next();
Tongxun[i].setPhoneNumber(dianhua);
System.out.print(“修改成功!”);
System.out.println(“修改后为:” + Tongxun[i].toString());
a=0;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
if(a==-1) {
System.out.println(“你输入的账号不存在!请重新输入!”);
xiuGai();
}
}
public void paiXu()//直接插入排序
{
Tongxun temp;
int i,j;
for(i=1;i<this.curlen;i++)
{
temp=Tongxun[i];
for(j=i-1;j>=0&&temp.name.compareTo(Tongxun[j].name)>0;j–)
{
Tongxun[j+1]=Tongxun[j];
}
Tongxun[j+1]=temp;
}
}
public void selectAll()throws Exception {
System.out.println("--------所有电话信息---------------");
for (int i = 0; i < curlen; i++) {
if (Tongxun[i] != null) {
System.out.println(Tongxun[i].toString());
}
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void selectByName() throws Exception { //按商家名字搜索
System.out.println("---------根据名字查询---------------");
System.out.println(“请输入你要查找的名字:”);
String sname=sc.next();
int w=0;
for(int i=0;i<curlen;i++){
if(Tongxun[i].getName().contains(sname)){
System.out.println(Tongxun[i].toString());
w=-1;
}
}
if(w==0)
System.out.println(“未找到”);
}
public void selectByTel() throws Exception {
System.out.println("---------根据电话查询---------------");
System.out.println(“请输入你要查找的电话:”);
String stel=sc.next();
int w=0;
for(int i=0;i<curlen;i++){
if(Tongxun[i].getPhoneNumber().contains(stel)){
System.out.println(Tongxun[i].toString());
w=-1;
}
}
if(w==0)
System.out.println(“未找到”);
}
public void tuiChu() {
System.out.println(“谢谢使用!O(∩_∩)O \n”);
System.gc();// 系统回收资源
Runtime.getRuntime().runFinalization();// 没起作用;
}
public void finalize() {// 并未被调用
System.out.println(“已回收资源,成功退出系统”);
}
}