我正在创建一个列表,允许我输入数据,然后搜索或显示输入的数据。由于某种原因,我无法产生输出。问题可能是输出功能。我怎样才能解决这个问题?这是代码:
#include<iostream>
#include<string>
#include<cstdlib>
#include <stdio.h>
#include <string.h>
using namespace std;
class contact{
private:
string fn;
string ln;
string email;
string number;
public:
// Accessor and Mutator method for contacts variable
void setfname(string f_n);
string getfname();
void setlname(string l_n);
string getlname();
void setemail(string emaila);
string getemail();
void setnumber(string num);
string getnumber();
// takes input entered for contacts
void input();
// display output
void output();
contact();
contact(string f_n, string l_n, string emaila,string num);
};
void menu();
void EnterContact(contact contacts[], int size, int& numberUsed);
void show(contact contacts[], int sizeOfa);
int search_contacts(contact contacts[], string& lastname, int& size);
int main(){
string opt="";
const int MAX=2;
int size;
contact contacts[MAX];
contact c[MAX];
for(int i=0; i<MAX; i++){
EnterContact(contacts, MAX, size);
}
menu();
return 0;
}
//use these variables globally
const int MAX = 2;
contact contacts[MAX];
void EnterContact(contact contacts[], int size, int& numberUsed)
{
char ans;
bool done = false;
int index = 0;
cout << "Enter up to " << size << endl;
while ((!done) && (index < size))
{
contacts[index].input();
cout << "Do you want to add another contact?(y/n followed by Return): ";
cin >> ans;
if ((ans == 'y') && (ans == 'Y'))
index++;
else
done = true;
}
numberUsed = index+1;
}
int search_contacts(contact contacts[], string& lastname, int& size)
{
int index = 0;
bool found = false;
for(int index=0; index<size ; index++){
if (lastname == contacts[index].getlname()){
found = true;
cout<<"found";
break;
}
}
if (!found)
cout<<"no";
return index;
}
void show(contact contacts[], int sizeOfa)
{
for (int index = 0; index < sizeOfa; index++)
contacts[index].output();
}
void menu()
{
cout<<"\nContact Menu"<<endl;
cout << "1. Add a New Contact. " << endl;
cout << "2. Search for a Contact. " << endl;
cout << "3. Delete Contact from list. " << endl;
cout << "4. View All Contacts. " << endl;
cout << "5. Exit the program. " << endl;
cout << "Enter your choice: ";
int opt; int result, a; char ans; string lastname;
cin>>opt;
switch (opt)
{
case 1: cout<<"func to Add a New Contact"<<endl;
cout<<"\nAdd another contact";
break;
case 2:
do
{
cout << "\nSearch contact by lastname: ";
cin >> lastname;
result = search_contacts(contacts, lastname, result);
if (result == -1)
cout << lastname << " Contact not found.\n";
else
contacts[result].output();
cout << lastname << " is stored in array position "<< result << endl;
cout << "Search again? (y/n): ";
cin >> ans;
} while ((ans != 'n') && (ans != 'N'));
menu();
break;
case 3: cout<<"func to Delete Contact from list";
break;
case 4: cout<<"\nAll Contacts"<<endl;
show(contacts, MAX);
cout<<endl;
menu();
break;
case 5: cout<<"\nContact Book is closed"<<endl;
exit(1);
break;
default: cout<<"\nInvalid entry...Closing Contact Book"<<endl;
}
}
contact::contact()
{
fn=""; ln=""; email=""; number="";
}
contact::contact(string f_n, string l_n, string emaila,string num)
{
fn= f_n; ln= l_n; email= emaila;number= num;
}
void contact::input()
{
cout<<"\nFirst Name: ";
cin>>fn;
cout<<"Last Name: ";
cin>>ln;
cout<<"Email: ";
cin>>email;
cout<<"Phone number: ";
cin>>number;
}
void contact::output()
{
cout<<"\nName: "<<fn<<" "<<ln;
cout<<"\nEmail: "<<email;
cout<<"\nPhone number: "<<number;
cout<<endl;
}
void contact::setfname(string f_n)
{
fn= f_n;
}
string contact::getfname();
{
return fn;
}
void contact::setlname(string l_n)
{
ln= l_n;
}
string contact::getlname()
{
return ln;
}
void contact::setemail(string emaila)
{
email= emaila;
}
string contact::getemail()
{
return email;
}
void contact::setnumber(string num)
{
number= num;
}
string contact::getnumber()
{
return number;
}
答案 0 :(得分:2)
您的问题是如何使用菜单功能,尝试使用主功能中的选择菜单,而不是将其声明为功能。如果要将其用作函数,请考虑使用if else语句。这应该照顾你的输入和输出。
int main(){
string opt="";
const int MAX=2;
int size;
contact contacts[MAX];
contact c[MAX];
for(int i=0; i<MAX; i++){
EnterContact(contacts, MAX, size);
}
cout<<"\nContact Menu"<<endl;
cout << "1. Add a New Contact. " << endl;
cout << "2. Search for a Contact. " << endl;
cout << "3. Delete Contact from list. " << endl;
cout << "4. View All Contacts. " << endl;
cout << "5. Exit the program. " << endl;
cout << "Enter your choice: ";
int opt; int result, a; char ans; string lastname;
cin>>opt;
switch (opt)
{
case 1: cout<<"func to Add a New Contact"<<endl;
cout<<"\nAdd another contact";
break;
case 2:
do
{
cout << "\nSearch contact by lastname: ";
cin >> lastname;
result = search_contacts(contacts, lastname, result);
if (result == -1)
cout << lastname << " Contact not found.\n";
else
contacts[result].output();
cout << lastname << " is stored in array position "<< result << endl;
cout << "Search again? (y/n): ";
cin >> ans;
} while ((ans != 'n') && (ans != 'N'));
menu();
break;
case 3: cout<<"func to Delete Contact from list";
break;
case 4: cout<<"\nAll Contacts"<<endl;
show(contacts, MAX);
cout<<endl;
menu();
break;
case 5: cout<<"\nContact Book is closed"<<endl;
exit(1);
break;
default: cout<<"\nInvalid entry...Closing Contact Book"<<endl;
}
return 0;
}
你也已经有了一个功能来处理你的输入你不需要把它放在主函数的for循环中。
答案 1 :(得分:1)
您的计划中有多处错误。阻止您显示联系人列表的是:
您有两个名为contacts
的变量。首先,您在main()
声明了一个局部变量:
contact contacts[MAX];
接下来,您在main()
之后立即声明了一个全局变量:
contact contacts[MAX];
这两个变量是截然不同的 - 它们之间没有任何关系,除非是巧合的名字。 EnterContact
写入其中一个数组,但show
显示另一个数组的值。
您可能应该将所有全局声明移到任何代码之前,并从main()
中删除类似命名的声明。
答案 2 :(得分:0)
contact contacts[MAX];
for(int i=0; i<MAX; i++){
EnterContact(contacts, MAX, size);
}
我认为您需要将i
传递给EnterContact函数,以便为contacts
数组中的每个对象提供输入。截至目前,您在循环的每次迭代中都在编写相同的对象。