求大神帮改错,调试
#ifndef ADDRESS_H //如果程序中未定义标识符ADDRESS_H,则编译ADDRESS_H段
#define ADDRESS_H
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
class Address
{
bool status; //通信录状态
char Name[31]; //姓名
char Phone[21]; //电话
public:
Address()
{status=true;} //构造时通信录清空
string GetName()const; //取姓名
string GetPhone()const; //取电话
bool isEmpty(); //取通信录状态
void Enter(string& name,string& phone); //输入通信录
void Set(); //置通信录状态0,非空
void Clear(); //置通信录状态1,空
};
#endif
//Address.h文件结束
//Addressbook.h文件的内容,通信薄定义
#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H
#include "Address.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int ItemNum=100;
class AddreesBook //通信录
{
Address Item[ItemNum]; //ItemNum为通信录最大数量,定义为常量100
int Num; //通信录数量
int FindFree(); //查找空的通信录
public:
AddressBook() {Num=0;}
void Enter(); //输入
void Erase(); //删除
void Load(); //读盘
void Save(); //存盘
void List(); //显示
};
#endif
//Addressbook.h文件结束
//Address.cpp文件的内容
#include "Address.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
string Address::GetName()const
{
string s=Name;
return s;
}
string Address::GetPhone()const
{
string s=Phone;
return s;
}
bool Address::isEmpty(){return Status}
void Address::Enter(string& name,string& phone)
{
int len=name.length();
if (len>30) len=30; //输入超长时截断
name.copy(Name,len,0);
Name[len]=0; //字符串结束符,把string转换成char*
len=phone.length();
if (len>20) len=20;
phone.copy(Phone,len,0);
Phone[len]=0;
}
void Address::Set() {Status=false;}
void Address::Clear() {Status=true;}
//Address.cpp文件结束
//Address.cpp文件的内容
#include "Address.h"
#include "AddressBook.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
ostream &operator<<( ostream &output,const Address& addr )
{
//重载<<,直接用cout输出通信录
output<<setiosflags(ios::left)<<setw(31)
<<addr.GetName()<<setw(21)<<addr.GetPhone();
return output;
}
int AddressBook::FindFree()
{
int t;
for(t=0;t<ItemNum;t++)
if (Item[t].isEmpty()) return t;
return -1; //电话薄已记满
}
void AddressBook::Enter() //添加通信录
{
string name,phone;
int pointer;
pointer=FindFree();
if (pointer==-1)
cout<<"电话薄已记满";
else{
cout<<"电话薄中有"<<Num<<"条通信录"<<endl;
cout<<"输入姓名:";
cin>>name;
cout<<"输入电话号码:";
cin>>phone;
Item[pointer].Enter(name,phone);
Item[pointer].Set();
Num++;
}
}
void AddressBook::Erase() //删除通信录
{
int t;
string s;
cout<<"电话薄中有"<<Num<<"条通信录"<<endl;
if (!Num) cout<<"电话薄已空!\n";
else
{
cout<<"输入姓名:";
cin>>s;
for(t=0;t<ItemNum;t++) {
if (!Item[t].isEmpty()&&Item[t].GetName()==s)
{
Item[t].Clear();
Num--;
cout<<"已经删除"<<s<<"的通信录。\n";
break;
}
}
if (t==ItemNum)
{
cout<<"该名字不存在\n";
cin.get();
}
}
void AddressBook::List() //按字典顺序先是多有通信录
{
int t,i,j;
Address list[ItemNum],temp;
if (!Num) cout<<"电话薄已空!"<<endl;
else
{
cout<<"电话薄中有"<<Num<<"条通信录"<<endl;
for(t=0;t<ItemNum;t++) list[t]=Item[t];
for(i=0;i<ItemNum;i++)
{ //排序
for(j=ItemNUm-1;j>i;j--)
if(list[j-1].GetName()>list[j].GerName())
if {
temp=list[j-1];
list[j-1]=list[j];
list[j]=temp;
}
}
cout<<setiosflags(ios::left) <<setw(31)
<<"姓名"<<setw(21)<<"电话"<<endl;
for (t=0;t<ItemNum;++t)
{
if (!list[t].isEmpty())
cout<<list[t]<<endl;
}
}
}
void AddressBook::Save() //电话薄存盘
{
ofstream file;
int i;
char fname[41];
cout<<"输入保存的文件名:";
cin>>fname;
file.open(fname,ios::out);
if(!file)
{
cout<<"打开文件夹失败1\n";
cin.get();
}
else{
for(i=0;i<ItemNum;i++)
{
if(file&&!file.eof())
file.write(reinterpret_cast char*>(&Item[i]),sizeof(Address));
}
file.close();
}
}
void AddressBook::Load() //读出电话薄
{
ifstream file;
int i;
char fname[41];
cout<<"输入读取的文件名:";
cin>>fname;
file.open(fname,ios::in);
if (!file)
{
cout<<"打开文件失败!\n";
cin.get();
}
else
{
Num=0;
for(i=0;i<ItemNUm;i++)
{
if(file&&!file.eof())
file.read(reinterpret_cast<char*>(&Item[i]),sizeof(Address));
if(!Item[i].isEmpty()) Num++;
}
file.close();
}
}
//AddressBook.cpp文件结束
//Fmain.cpp文件的内容,含有主函数/#include "Address.h"
#include "AddressBook.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int menu_select()
int main()
{
char chocie;
AddressBook maillist;
for(;;)
{ //循环,直到键盘输入结束代码
choice=menu_select();
switch(choice){ //根据键盘输入,调用相应的功能
case 1:maillist.Enter();break;
case 2:maillist.Erase();break;
case 3:maillist.List();break;
case 4:maillist.Save();break;
case 5:maillist,Load();break;
case 6:exit(0);
}
}
rentur o;
}
int menu_select()
{ //显示主菜单
char c;
cout<<"*********************************\n";
cout<<"* 模拟电话簿 *\n";
cout<<"* 1.添加通信录 *\n";
cout<<"* 2.删除通信录 *\n";
cout<<"* 3.显示通信录 *\n";
cout<<"* 4.电话薄存盘 *\n";
cout<<"* 5.读出电话薄 *\n";
cout<<"* 6.退出 *\n";
cout<<"*********************************\n";
cout<<"\n请输入(1~6):";
do { //键盘输入循环
cin.get(c);
}
while(c<'1'||c>'6');
return c-48;
}
//Fmain.cpp文件结束
[解决办法]
还想把代码给你直接赋值到IDE中调试看看,又发现没有提供address.h,算了,撸过一顶
[解决办法]
回楼上:address.h文件有提供。
看在100分的份上,帮楼主纠正了N个书写错误,毫无技术含量。修正后的代码去这里下载:
http://www.ccrun.com/temp/csdn.topic.390627501.7z
[解决办法]
能看到出来,楼主是个新手。希望楼主会结帖。
[解决办法]