通过应用Java中常用的数组和字符串,编写一个简单的通讯录程序,来熟悉系统类和数组的应用。通讯录由多条记录构成。每条记录包括一个联系人的姓名、性别、电话、通信地址,并具有显示、查询、增加、修改、删除等功能,且每执行一次功能操作后,可以选择用类似以下的格式,输出通讯录的所有信息记录:
编号 姓名 性别 电话 通信地址
01 张三 男 123456 上海
02 李四 女 456789 桂林
可考虑用数组分别存储姓名,性别,电话,通信地址,那么显示、查询,增加、修改、删除操作就可转换为对数组元素的操作。通讯录中的所有记录的每一个字段可以采用一维或二维或其它类型数组来存放。 请发挥自己的思考能力,用自己熟悉的或者觉得更合理的方式来设计程序解决问题,完成该实验。
User.java
import java.util.Scanner;
public class User {
public static void main(String[] args) {
System.out.println("请输入您的操作:1、显示\t2、查询\t3、增加\t4、修改\t5、删除");
system sy = new system();
Scanner sc = new Scanner(System.in);
int choose = sc.nextInt();
while (true){
switch (choose){
case 1:sy.show();break;
case 2:
System.out.print("请输入您要查询的关键字:");
String key = sc.next();
sy.refer(key);
break;
case 3:
System.out.println("请输入您要增添的姓名、性别、电话、通讯地址:");
String name = sc.next();
String sex = sc.next();
String tele = sc.next();
String addr = sc.next();
sy.add(name,sex,tele,addr);
break;
case 4:
System.out.println("请输入您要更改的姓名:");
String name1 = sc.next();
System.out.println("请输入您要更改的选项1、性别\t2、电话\t3、通讯地址");
int upn = sc.nextInt();
if(upn == 1){ //利用方法的重写,选择性更改
System.out.println("请输入更改后的性别:");
String sex1 = sc.next();
sy.updata(name1,sex1);
}else if (upn == 2){
System.out.println("请输入更改后的电话:");
String tele1 = sc.next();
sy.updata(name1,tele1,upn);
}else {
System.out.println("请输入更改后的地址:");
String addr1 = sc.next();
sy.updata(name1,upn,addr1);
}
break;
case 5:
System.out.print("请输入您要删除的关键字:");
String key1 = sc.next();
sy.delete(key1);
break;
default:
System.out.println("放学了");
}
System.out.println("请输入您的操作:1、显示\t2、查询\t3、增加\t4、修改\t5、删除\t6、退出");
choose = sc.nextInt();
if(choose == 6){
break;
}
}
}
}
system.java
public class system {
static String[][] sys = new String[100][5];
static int first = 0; //用于标记某行有没有数据 0 表示没有 1 有
//显示
public void show(){
for(int i = 0; i<sys.length-1; i++){ // 减一为了防止溢出
for(int j = 0; j<sys[0].length; j++){
if(sys[i][j] == null){
break;
}else {
first = 1;
System.out.print(sys[i][j]+"\t");
}
}
if(first == 1 && sys[i+1][0] != null){ // 由于在大循环中,我们只要求有数据才换行
System.out.println();
}else if (first== 0){
System.out.println("表内无数据!");
break;
}
}
System.out.println();
}
//查找
public void refer(String key){
int flag=0; //标记是否有关键字
for(int i = 0; i<sys.length; i++){
for(int j = 0; j<sys[0].length; j++){
if(key.equals(sys[i][j])){ // 遍历数组找关键字,一样的那一行输出信息
flag = 1;
for(int t = 0; t<sys[0].length; t++){
System.out.print(sys[i][t]+"\t");
}
System.out.println();
}
}
}
if(flag == 0){
System.out.println("无此信息");
}
}
//增加
public void add(String name, String sex, String tele, String addr){
int flag = 0;
for(int i = 0; i<sys.length; i++){
for(int j = 0; j<sys[0].length; j++){
if(sys[i][0] == null){ //找到最后一行
sys[i][0]= i+1+"";
sys[i][1]= name;
sys[i][2]= sex;
sys[i][3]= tele+"";
sys[i][4]= addr;
flag = 1;
break;
}
}
if(flag == 1){
break;
}
}
if (flag == 0){
System.out.println("增加失败!");
}
}
//修改更新
public void updata(String name1, String sex1){ //方法重写,找关键字
int flag=0;
for(int i = 0; i<sys.length; i++){
for(int j = 0; j<sys[0].length; j++){
if(name1.equals(sys[i][j])){
flag = 1;
sys[i][j+1] = sex1;
System.out.println();
}
}
}
if(flag == 0){
System.out.println("无此信息");
}
}
public void updata(String name1,String tele1, int upn){
int flag=0;
for(int i = 0; i<sys.length; i++){
for(int j = 0; j<sys[0].length; j++){
if(name1.equals(sys[i][j])){
flag = 1;
sys[i][j+2] = tele1;
System.out.println();
}
}
}
if(flag == 0){
System.out.println("无此信息");
}
}
public void updata(String name1,int upn,String addr1){
int flag=0;
for(int i = 0; i<sys.length; i++){
for(int j = 0; j<sys[0].length; j++){
if(name1.equals(sys[i][j])){
flag = 1;
sys[i][j+3] = addr1;
System.out.println();
}
}
}
if(flag == 0){
System.out.println("无此信息");
}
}
//删除
public void delete(String key1){
int flag=0;
for(int i = 0; i<sys.length; i++){
for(int j = 0; j<sys[0].length; j++){
if(key1.equals(sys[i][j])){
flag = 1;
for(int o = i;o<sys.length; o++){ //o用来找行
for(int t = 0; t<sys[0].length; t++){
sys[o][t] = null;
sys[o][t] = sys[o+1][t];
sys[o+1][t] = null;
}
if(sys[o][0] != null){ //删完后就不再打印数字了
sys[o][0] = o+1+"";
}else {
break;
}
}
j--; //删完后后面一行补上,得回到改行进行核查关键字
System.out.println();
}
}
}
if(flag == 0){
System.out.println("无此信息");
}
}
}
效果如下: