我已经完成了一个小的通讯录程序,该程序允许用户执行以下操作:

  1. 增加联系人
  2. 搜索联系人
  3. 删除联系人
  4. 显示所有联系人

输入一个选项后结束,我希望它继续运行直到用户说出例如5-退出

另一个问题是我想将数据写入并读取到data.dat文件中

我是一个新手,可以告诉我如何将其拆分为单独的类并相互继承。

我的代码:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class AddressBookOperations
{


    public static void main(String[] args) throws IOException
    {
        String s = null;
        String s2 = null;
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        // Console in = System.console();

        System.out.println(" Please select the required operations.\n"
                        + " 1- Add contact\t 2- search contact\t 3- delete contact\t 4- display all contacts\n");
        s2 = in.readLine();
        if (s2 != null && !(s2.equals("1") || s2.equals("2") || s2.equals("3") || s2.equals("4")))
        {
            System.out.println("Invalid Operation Selected\n");
            System.exit(0);
        }

        else
        {
            s = s2;
        }

        if (s != null)
        {
            String dataLine;
            String data;
            if (s.equals("1")) {
                System.out.println("Name: ");
                dataLine = in.readLine();
                data = dataLine;
                in = new BufferedReader(new InputStreamReader(System.in));
                System.out.println("PhoneNumber: ");
                dataLine = in.readLine();
                data = data + ":" + dataLine;
                writeToFile("C:/AddressBook.bat", data, true, true);
            } else if (s.equals("2")) {
                System.out.println("Enter Name 0r PhoneNumber: ");
                dataLine = in.readLine();
                String result = readFromFile("C:/AddressBook.bat", dataLine);
                System.out.println("Search Results\n" + result);
            } else if (s.equals("3")) {
                System.out.println("Enter Name: ");
                dataLine = in.readLine();
                data = dataLine;
                System.out.println("PhoneNumber: ");
                dataLine = in.readLine();
                data = data + ":" + dataLine;
                deleteFromFile("C:/AddressBook.bat", data);
            } else if (s.equals("4")) {
                String result = readFromFile("C:/AddressBook.bat", null);
                System.out.println("Search Results\n" + result);
            }
        }

    }

    private static void deleteFromFile(String string, String dataLine) {
        String data = readFromFile(string, null);
        data = data.replaceAll(dataLine, "");
        writeToFile(string, data, false, false);
    }

    public static boolean writeToFile(String fileName, String dataLine,
            boolean isAppendMode, boolean isNewLine) {
        if (isNewLine) {
            dataLine = "\n" + dataLine;
        }

        try {
            File outFile = new File(fileName);
            DataOutputStream dos;
            if (isAppendMode) {
                dos = new DataOutputStream(new FileOutputStream(fileName, true));
            } else {
                dos = new DataOutputStream(new FileOutputStream(outFile));
            }

            dos.writeBytes(dataLine);
            dos.close();
        } catch (FileNotFoundException ex) {
            return (false);
        } catch (IOException ex) {
            return (false);
        }
        return (true);

    }

    /*
     * Reads data from a given file
     */
    public static String readFromFile(String fileName, String dataLine2) {
        String DataLine = "";
        String fileData = "";
        try {
            File inFile = new File(fileName);
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    new FileInputStream(inFile)));
            if (dataLine2 != null)
            {
                while ((DataLine = br.readLine()) != null)
                {
                    if (DataLine.contains(dataLine2)) {
                        fileData = DataLine;
                    }
                }
            }

            else
            {
                while ((DataLine = br.readLine()) != null)
                {
                    fileData = fileData + "\n" + DataLine;
                    //System.out.println(DataLine);
                }
            }
            br.close();
        }

        catch (FileNotFoundException ex)
        {
            return (null);
        } catch (IOException ex)
        {
            return (null);
        }
        return (fileData);

    }

    public static boolean isFileExists(String fileName) {
        File file = new File(fileName);
        return file.exists();
    }
}

===============>>#1 票数:1

您可以将逻辑包装在while循环中,该循环在给定boolean值为true时终止,因此在执行每个操作后,您将继续回到开始。 例如:

boolean isRunning = true;

while (isRunning) {
  //your code here

  if (s2.equals("5")) {
    isRunning = false;
  }
}

您还应该将所有逻辑移出main()并移入其自己的单独函数,该函数从main()调用。 我也不确定为什么要写入.bat文件? 如果要写入.dat文件,请将扩展名更改为.dat。

===============>>#2 票数:0

我想您只需要常规代码审查。 这是我的想法:

1. 扫描程序更易于用于控制台输入,因为您可以指定输入类型,例如nextInt() 要初始化它,只需使用

Scanner sc = new Scanner(System.in);

您可以在Scanner执行过程中为每个用户输入使用相同的Scanner 另外,请记住在程序退出之前调用Scanner.close()

2.如下初始化您的BufferedReader

// file is a String variable
BufferedReader in = new BufferedReader(new FileReader(file));

类似地,读取文件如下:

BufferedWriter br = new BufferedWriter(new BufferedReader(file));

3.为使程序保持运行,请练习实现do-while块:

boolean quit = false;
do {
  // loop program; when user is finished, set quit = true
} while (!quit)

4.对于基于“请选择所需的操作”的条件,请练习实施一个开关块。

5.通过将控制台接口作为单独的类(例如AddressBookUI ,将用于解析用户输入的逻辑和用于在通讯簿上进行操作的逻辑分开。 当它运行时,它应该立即创建AddressBookOperations类的实例,并根据用户输入从那里调用适当的方法AddressBookOperations对于每个操作都应该有一个单独的方法(这也会使您的开关很短)。 它还应该具有以下private (但不是static )变量来存储文件名和BufferedRead / Writer。 该类应具有一个带有String filename参数的构造函数,以初始化这些变量。

6.在Java中,删除文件中的特定行相当棘手。 尝试这个:

  1. 为该文件创建一个BufferedReader
  2. 创建一个新的临时文件,并为其创建一个BufferedWriter
  3. 逐行读取文件。 对于每一行,如果不是您要删除的行,请将其写入临时文件。
  4. 关闭读者和作者
  5. 删除旧文件
  6. 将临时文件重命名为文件名。

  ask by David Needham translate from so

未解决问题?本站智能推荐:

2回复

具有更多课程的地址簿程序

你好。 我正在寻找帮助,将我的代码分成不同的类,以便更好地运行。 这是一个简单的地址簿程序,允许用户执行以下操作: 增加联系人 搜索 删除 全部显示 出口 我是java的新手,所以我需要所有的帮助! 我的代码:
2回复

Java地址簿-后续步骤

我被要求创建一个GUI地址簿。 我为每个屏幕创建了几种不同的GUI,例如,一个类中的Main Method,Main Menu类,Add New Contact类(由13个JTextField组成新联系人),Search 1类,Search 2类,Import MUAB类,导出MUAB类,导入
3回复

免费的API,可将地址簿从gmail yahoo aol和hotmail导入到Web应用程序

从3天开始,我就想从gmail,yahoo aol和hotmail导入地址簿。 用户将登录到Web应用程序并创建一个事件,他应该以HTML邮件的形式与他的朋友共享事件详细信息,他应该能够从gmail yahoo aol和hotmail导入联系人,然后发送电子邮件。任何可用的免费API或插件,它
4回复

是否可以从纯Java访问Mac地址簿API?

只是想知道是否可以从纯Java 6代码访问Mac OS X地址簿API? 我想保持这个完全平台独立,因为我的程序也是为Windows和Linux构建的(开源和免费: http : //jsmsirl.sourceforge.net/ )。 任何帮助深表感谢!
4回复

在地址簿中添加和检查Java中的条目

我有一个地址簿程序,它可以: 添加条目 删除条目 更新条目 查看所有条目 查看具体条目 所有功能都很好,但我的问题是,一旦用户输入了NAME我想检查它是否已经存在 这是我的addEntry方法: 请帮我添加一些过滤用户输入的条件。
1回复

地址簿中的逻辑问题,应该没有空白条目或相同的条目...请帮助

希望你能帮我编码。 我需要做的事情:1。)我不应该允许用户有一个空白条目..我应该提示他们像“没有输入名字!” 2.)我不应该允许用户输入相同的条目.. 我不知道如何编码我,请帮忙。 这是我的完整代码: 公共类AddressBook { } 我的代码发生了
1回复

地址簿-如何比较两个化合物名称

我必须为一个学校项目制作一个通讯录。 我已使基本功能正常工作,但随后我们被询问以下内容。 “使用get和set方法,创建一个比较方法compareNames(name1,name2),用于比较字符串name1和name2的名字,中间名称和姓氏。假定name1和name2遵循以下格式:“
1回复

在通讯簿中删除和修改

最近,我一直在研究通讯簿,其中大多数都具有以下操作: 联系人的输入 更改联系人 显示联系人 显示所有联系人 删除联系人。 输入联系人并显示所有联系人都可以,但是我不知道如何进行其余操作。 这是我到目前为止所做的:主类: 和数据类:
2回复

通讯录应用程序-@SuppressWarnings

我正在使用Eclipse ADT构建通讯簿应用程序,并且某些代码有问题。 我收到@SuppressWarnings为SimpleCursorAdapter和deactivate 。 将@SuppressWarnings SuppressWarnings'depresiation'添加到o
2回复

如何在不打开应用程序的情况下使ContentObserver工作?

我需要让我的应用程序侦听Android中通讯录中的更改。 我已经阅读到可以使用ContentObserver并侦听ContactsContract.Contacts更改来完成此操作。 关闭应用程序后,ContentObserver的生命周期似乎结束了。 即使未打开应用程序,如何使Con