用c++编写电话簿管理程序运行出错,求解决
//Main.cpp
#include "Address.h"
#include <iostream>
using namespace std;
int main()
{Address Book;
Book.menu();
return 0;
}
//Address.cpp
#include "Address.h"
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <string>
using namespace std;
void Address::menu()
{ cout <<endl;
cout <<" *************************** "<<endl;
cout <<" ******** 电话簿 ********* "<<endl;
cout <<" ** ** "<<endl;
cout <<" ** 1.添加联系人 ** "<<endl;
cout <<" ** ** "<<endl;
cout <<" ** 2.电话簿存盘 ** "<<endl;
cout <<" ** ** "<<endl;
cout <<" ** 3.读出电话簿 ** "<<endl;
cout <<" ** ** "<<endl;
cout <<" ** 4.显示联系人 ** "<<endl;
cout <<" ** ** "<<endl;
cout <<" ** 5.删除联系人 ** "<<endl;
cout <<" ** ** "<<endl;
cout <<" ** 6.修改联系人 ** "<<endl;
cout <<" ** ** "<<endl;
cout <<" ** 7.查询联系人 ** "<<endl;
cout <<" ** ** "<<endl;
cout <<" ******** 0.退出 ********* "<<endl;
cout <<" *************************** "<<endl;
cout <<endl;
while(1)
{ int n;
string check;
cout <<" 请输入(0-7)中的任意一个整数:";
cin >>n;
switch(n)
{ case 0: //退出程序
system("cls");
exit();
case 1: //添加联系人信息
system("cls");
InsertAddress();
if(back()==0)
system("cls");
menu();
break;
case 2: //电话簿存盘
system("cls");
SaveAddress();
if(back()==0)
system("cls");
menu();
break;
case 3: //从文件中读取联系人数据
system("cls");
ReadAddress();
if(back()==0)
system("cls");
menu();
break;
case 4: //显示联系人信息
system("cls");
OutputAddress();
if(back()==0)
system("cls");
menu();
break;
case 5: //删除联系人信息
system("cls");
OutputAddress();
DeleteAddress();
if(back()==0)
system("cls");
menu();
break;
case 6: //修改联系人信息
system("cls");
OutputAddress();
ChangeAddress();
if(back()==0)
system("cls");
menu();
break;
case 7: //查询联系人信息
system("cls");
SearchAddress();
if(back()==0)
system("cls");
menu();
break;
}
}
}
int Address::back()
{int back;
cout <<endl<<"请输入数字0返回主界面:";
cin >>back;
return back;
}
void Address::exit()
{cout <<endl<<endl;
cout <<" *************************** "<<endl;
cout <<" *************************** "<<endl;
cout <<" ******* 谢谢使用!******** "<<endl;
cout <<" *************************** "<<endl;
cout <<" *************************** "<<endl;
cout <<endl;
}
void Address::InsertAddress()
{Address_Book *p;
Address_Book *q;
q=new Address_Book;
string name;
string telnumber;
cout <<"请输入姓名:";
cin >>name;
cout <<endl<<"请输入电话号码:";
cin >>telnumber;
if(telnumber.length()!=11)
{cout <<endl<<"您输入的电话号码不是11位,请重新输入!"<<endl;
cout <<endl<<"请输入电话号码:";
cin >>telnumber;
}else
{p=new Address_Book;
p->Name=name;
p->TelNumber=telnumber;
if(head==NULL)
{p->lAddress=NULL;
p->rAddress=head;
head=p;
count++;
}else
{q=head;
while(q->rAddress)
q=q->rAddress;
p->rAddress=q->rAddress;
p->lAddress=q;
q->rAddress=p;
count++;
}
cout <<endl<<"信息已录入."<<endl;
}
}
void Address::SaveAddress()
{ Address_Book *p;
p=head;
ofstream outfile;
string fname;
cout <<endl<<"输入保存的文件名: ";
cin >>fname;
outfile.open(fname,ios::app);
if(!outfile)
{cout <<endl<<"打开文件失败!"<<endl;
exit();
}else
{while(p)
{outfile <<p->Name<<" "<<p->TelNumber<<endl<<endl;
p=p->rAddress;
}
outfile.close();
cout <<endl<<"保存文件成功!"<<endl;
}
}
void Address::ReadAddress()
{Address_Book *p,*q;
p=new Address_Book;
q=head;
ifstream infile;
string fname;
cout <<endl<<"输入要读取的文件名: ";
cin >>fname;
infile.open(fname,ios::in);
if(!infile)
{cout <<endl<<"打开文件失败!"<<endl;exit();
}else
{while(infile >>p->Name>>p->TelNumber,infile.good())
{ if(head==NULL)
{ p->lAddress=NULL;
p->rAddress=head;
head=p;
count++;
}else
{ q=head;
while(q->rAddress)
q=q->rAddress;
p->rAddress=q->rAddress;
p->lAddress=q;
q->rAddress=p;
count++;
}
p=new Address_Book;
}
infile.close();
cout <<endl<<"打开文件成功!"<<endl;
}
}
void Address::OutputAddress()
{Address_Book *p;
p=head;
cout <<endl;
if(!p) cout <<"电话簿是空的,请返回主界面录入!"<<endl;
else{cout <<endl<<"电话簿中的内容为:"<<endl<<endl;
cout <<"姓名 电话号码"<<endl<<endl;
while(p)
{cout <<p->Name<<" ";
cout <<p->TelNumber<<endl<<endl;
p=p->rAddress;
}
}
}
void Address::DeleteAddress()
{string name;
Address_Book *p;
p=head;
if(!p) cout <<endl<<"电话簿是空的,无法删除,请返回主界面录入!"<<endl;
else{ cout <<endl<<"请输入要删除的人的姓名:";
cin >>name;
while(p && p->Name!=name)
p=p->rAddress;
if(!p)cout <<endl<<"没有找到要删除的人的信息,无法删除!"<<endl;
if(p==head && head->rAddress)
{ head=head->rAddress;
head->lAddress=NULL;
free(p);
count--;
cout <<endl<<"删除成功!"<<endl;
} else if(p==head && !head->rAddress)
{free(p);
head=NULL;
count--;
cout <<endl<<"删除成功!"<<endl;
}else
{if(!p->rAddress)
{ p->lAddress->rAddress=NULL;
free(p);
count--;
cout <<endl<<"删除成功!"<<endl;
}else
{p->lAddress->rAddress=p->rAddress;
p->rAddress->lAddress=p->lAddress;
free(p);
count--;
cout <<endl<<"删除成功!"<<endl;
}
}
}
}
void Address::ChangeAddress()
{Address_Book *p;
int status=0;
p=head;
cout <<endl<<"请输入要修改的联系人的姓名:";
string name;
cin >>name;
while(p)
{if(p->Name==name)
{status=1;
cout <<endl<<"请输入要修改联系人的什么信息(1.姓名,2.电话号码):";
int i;
cin >>i;
if(i==1)
{cout <<endl<<"请输入姓名:";
string Aname;
cin >>Aname;
p->Name=Aname;
cout <<endl<<"修改成功!"<<endl;
}
if(i==2)
{cout <<endl<<"请输入电话号码:";
string Atelnumber;
cin >>Atelnumber;
if(Atelnumber.length()!=11)
{cout <<endl<<"您输入的电话号码不是11位,请重新输入!"<<endl;
cout <<endl<<"请输入电话号码:";
cin >>Atelnumber;
}
p->TelNumber=Atelnumber;
cout <<endl<<"修改成功!"<<endl;
}
}
p=p->rAddress;
}
if(status==0)cout <<endl<<"您要修改的联系人不存在,请返回!"<<endl;
}
void Address::SearchAddress()
{ Address_Book *p;
int status=0;
p=head;
if(count==0)cout <<endl<<"电话薄中有"<<count<<"条记录,不能查询!"<<endl;
else if(count>0)
{cout <<endl<<"电话薄中有"<<count<<"条记录,可以查询."<<endl;
cout <<endl<<"请输入按哪种方式查询联系人(1.按姓名;2.按电话号码):";
int i;
cin >>i;
if(i==1)
{cout <<endl<<"请输入姓名:";
string name;
cin >>name;
while(p)
{if(p->Name==name)
{status=1;
cout <<endl<<"您所要找的人的信息为:"<<endl<<endl;
cout <<"姓名 电话号码"<<endl<<endl;
cout <<p->Name<<" ";
cout <<p->TelNumber<<endl<<endl;
}
p=p->rAddress;
}
}
if(i==2)
{cout <<endl<<"请输入电话号码:";
string telnumber;
cin >>telnumber;
while(p)
{if(p->TelNumber==telnumber)
{status=1;
cout <<endl<<"您所要找的人的信息为:"<<endl<<endl;
cout <<"姓名 电话号码"<<endl<<endl;
cout <<p->Name<<" ";
cout <<p->TelNumber<<endl<<endl;
}
p=p->rAddress;
}
}
}
if(status==0)cout <<endl<<"找不到您所要找的人信息,请返回!"<<endl<<endl;
}
//Address.h
#include <iostream>
#include <string>
using namespace std;
class Address_Book{
public:
string Name;
string TelNumber;
Address_Book *lAddress,*rAddress;
};
class Address{
Address_Book *head;
int count;
public:
Address(){count=0;}
//~Address(){};
void menu(); //主界面函数
int back(); //返回主界面
void exit(); //退出界面
void InsertAddress(); //添加联系人
void SaveAddress(); //电话簿存盘
void SaveQuit_Address(); //退出保存
void ReadAddress(); //读出电话簿
void OutputAddress(); //显示联系人
void DeleteAddress(); //删除联系人
void ChangeAddress(); //修改联系人
void SearchAddress(); //查询联系人
};