C ++地址簿数组和文本文件

时间:2013-12-04 00:13:27

标签: c++

很抱歉我之前的学校作业没有解释。这就是我正在与之合作以及我必须做的事情。

我有一个在数组中填充地址簿的基本结构,但是,填充文本文件背后的逻辑有点超出我的知识。我研究了一些例子,然而,由于我的新手编程能力,实现有点棘手。

我已经查看了一些与我的要求相关的代码:

ifstream input("addressbook.txt"); 
ofstream out("addressbook.txt");

对于ifstream,我相信将其实现到voidAddBook :: AddEntry()会起作用,虽然我已经尝试过但代码编译失败,原因有多种。

对于ostream,我迷失了,并且不确定如何正确实现这一点。我理解基本文件输入和输出到文本文件中,但是,这种方法有点高级,因此我采用stackoverflow的指导。

#include <iostream>
#include <string.h> //Required to use string compare                         

using namespace std;

class AddBook{

public:
    AddBook()
      {
         count=0;
      }

   void AddEntry();
   void DispAll();
   void DispEntry(int i); // Displays one entry                              
   void SearchLast();

   int Menu();

   struct EntryStruct
   {
      char FirstName[15];
      char LastName[15];
      char Birthday[15];
      char PhoneNum[15];
      char Email[15];
   };

   EntryStruct entries[100];
   int count;
};


void AddBook::AddEntry()
{

   cout << "Enter First Name: ";
   cin >> entries[count].FirstName;

   cout << "Enter Last Name: ";
   cin >> entries[count].LastName;

   cout << "Enter Date of Birth: ";
   cin >> entries[count].Birthday;

    cout << "Enter Phone Number: ";
   cin >> entries[count].PhoneNum;

   cout << "Enter Email: ";
   cin >> entries[count].Email;

   ++count;                                                
}


void AddBook::DispEntry(int i)
{                
   cout << "First name : " << entries[i].FirstName << endl;
   cout << "Last name : " << entries[i].LastName << endl;
   cout << "Date of birth : " << entries[i].Birthday << endl;
   cout << "Phone number : " << entries[i].PhoneNum << endl;
   cout << "Email: " << entries[i].Email << endl;
}

void AddBook::DispAll()
{
   cout << "Number of entries : " << count << endl;

   for(int i = 0;i < count;++i)
      DispEntry(i);
}

void AddBook::SearchLast()
{
   char lastname[32];
   cout << "Enter last name : ";
   cin >> lastname;

   for(int i = 0;i < count;++i)
   {
      if(strcmp(lastname, entries[i].LastName) == 0)
      {
         cout << "Found ";
         DispEntry(i);
         cout << endl;
      }
   }
}

AddBook AddressBook;

int Menu()
{
   int num;
   bool BoolQuit = false;

   while(BoolQuit == false)
   {                     

      cout << "Address Book Menu" << endl;
      cout << "(1) Add A New Contact" << endl;
      cout << "(2) Search By Last Name" << endl;
      cout << "(3) Show Complete List" << endl;
      cout << "(4) Exit And Save" << endl;
      cout << endl;

        cout << "Please enter your selection (1-4) and press enter: ";      
      cin >> num;
      cout << endl;

      if (num == 1)
         AddressBook.AddEntry();
      else if (num == 2)
         AddressBook.SearchLast();
      else if (num == 3)
         AddressBook.DispAll();
      else if (num == 4)
         BoolQuit = true;
      else
         cout << "Please enter a number (1-4) and press enter: " << endl;

      cout << endl;                                                            
   }

   return 0;
}

int main (){
   Menu();

   return 0;
}

目前看来,我仍然陷入困境。这是我相信我应该开始的地方:

cout << "Please enter your selection (1-4) and press enter: ";      
      cin >> num;
      cout << endl;

      if (num == 1)
         AddressBook.AddEntry();
      else if (num == 2)
         AddressBook.SearchLast();
      else if (num == 3)
         AddressBook.DispAll();
      else if (num == 4)
         BoolQuit = true;
      //save first name
      //save last name
      //save dob
      //save phone number
      //save email
      //exit
      else
         cout << "Please enter a number (1-4) and press enter: " << endl;

      cout << endl;                                                            
   }

不知何故,在菜单选项4中,数组应该将数据转储到.txt文件中,并以重新加载程序时可以轻松导入的方式对其进行排列。关于如何将每个字符数组中的数组数据存储到.txt文件中,我有点困惑。

1 个答案:

答案 0 :(得分:0)

首先,如果输入来自文件input,那么您必须执行cin >> x而不是input >> x。如果它来自标准输入(键盘),那么您可以使用cin

此外,您的else if声明应该是这样的:

while (true)
{
    // ...
    else if (num == 4)
    {

        for (int i = 0; i < AddressBook.count; ++i)
        {
            AddBook::EntryStruct data = AddressBook.entries[i];

            out << data.FirstName << " " << data.LastName
                                  << std::endl
                << data.Birthday  << std::endl
                << data.PhoneNum  << std::endl
                << data.Email;
        }
    }
    break;
}