0

我正在为学校开发这个数据库类型的程序。到目前为止,我已经能够使这部分代码完全正常工作:

import jpb.*;
//jpb is a package that lets me use SimpleIO as you'll see below

public class PhoneDirectory {
  public static void main(String[] args) {
    PhoneRecord[] records = new PhoneRecord[100];
    int numRecords = 0;

    // Display list of commands
    System.out.println("Phone directory commands:\n" +
                       "  a - Add a new phone number\n" +
                       "  f - Find a phone number\n" +
                       "  q - Quit\n");

    // Read and execute commands
    while (true) {

      // Prompt user to enter a command
      SimpleIO.prompt("Enter command (a, f, or q): ");
      String command = SimpleIO.readLine().trim();

      // Determine whether command is "a", "f", "q", or
      // illegal; execute command if legal.
      if (command.equalsIgnoreCase("a")) {

        // Command is "a". Prompt user for name and number,
        // then create a phone record and store it in the
        // database.
        if (numRecords < records.length) {
          SimpleIO.prompt("Enter new name: ");
          String name = SimpleIO.readLine().trim();
          SimpleIO.prompt("Enter new phone number: ");
          String number = SimpleIO.readLine().trim();
          records[numRecords] = 
            new PhoneRecord(name, number);
          numRecords++;
        } else
          System.out.println("Database is full");

      } else if (command.equalsIgnoreCase("f")) {

        // Command is "f". Prompt user for search key.
        // Search the database for records whose names begin
        // with the search key. Print these names and the
        // corresponding phone numbers.
        SimpleIO.prompt("Enter name to look up: ");
        String key = SimpleIO.readLine().trim().toLowerCase();
        for (int i = 0; i < numRecords; i++) {
          String name = records[i].getName().toLowerCase();
          if (name.startsWith(key))
            System.out.println(records[i].getName() + " " + 
                               records[i].getNumber());
        }

      } else if (command.equalsIgnoreCase("q")) {
        // Command is "q". Terminate program.
        return;

      } else {
        // Command is illegal. Display error message.
        System.out.println("Command was not recognized; " +
                           "please enter only a, f, or q.");
      }

      System.out.println();
    }
  }
}

// Represents a record containing a name and a phone number
class PhoneRecord {
  private String name;
  private String number;

  // Constructor
  public PhoneRecord(String personName, String phoneNumber) {
    name = personName;                       
    number = phoneNumber;
  }

  // Returns the name stored in the record
  public String getName() {
    return name;
  }

  // Returns the phone number stored in the record
  public String getNumber() {
    return number;
  }
}

我正在尝试做一些事情,它们可能是我正在查看的简单解决方案。我需要为删除创建一个命令“d”,它将提示输入名称并删除所有匹配的记录。我尝试使用与允许部分匹配的“f”命令相同的方法,但我再次无法让它工作。

接下来我需要修改f命令,使其在列中排列名称和数字。我试图通过使其=数组长度来强制字符串为一定长度,但无济于事,它只是返回看起来空白。本质上它需要看起来像这样:

Smith, John    555-5556
Shmoe, Joe     565-5656

而且我需要将记录设置为 1 而不是 100,并且每次满时都会增加一倍的大小。我还没有搞砸这个,但我不知道从哪里开始。

4

1 回答 1

0

因为要求能够删除记录,所以我建议使用动态增长的 ArrayList,您可以轻松删除记录。

它是这样的声明者:

ArrayList<PhoneRecord> records = new ArrayList<PhoneRecord>();

你添加这样的:

records.add(PhoneRecord(name, number)));

您可以删除这样的记录:

records.remove(i);

删除列表的第 i 个记录。

列表的当前大小由 records.size() 函数给出。

至于你的第二个问题,你可以使用字符串格式来告诉它为指定数量的字符格式化名称,例如你可以使用这个:

System.out.println(String.format("%s%15s", records[i].getName(), records[i].getNumber());

在此示例中,将在电话之前添加空格字符,以便总字符数为 15。

因此,如果您的号码是 555-5556,那么将在号码前添加 7 个空格字符。

于 2012-10-13T23:31:06.630 回答