65,187
社区成员




#ifndef 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]; //电话
char Add[51]; //地址
char Postcode[8]; //邮编
char Email[31]; //Email
public:
Address(){Status=true;} //构造时通信录清空
string GetName()const; //取姓名
string GetPhone()const; //取电话
string GetAdd()const; //取地址
string GetPostcode()const; //取邮编
string GetEmail()const; //取Email
bool isEmpty(); //取通信录状态
void Enter(string&name,string&phone,string&add,string&postcode,string&email); //输入通信录
void Set(); //置通信录状态0,非空
void Clear(); //置通信录状态1,空
};
#endif
#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;
}
string Address::GetAdd()const
{
string s=Add;
return s;
}
string Address::GetPostcode()const
{
string s=Postcode;
return s;
}
string Address::GetEmail()const
{
string s=Email;
return s;
}
bool Address::isEmpty(){return Status;}
void Address::Enter(string&name,string&phone,string&add,string&postcode,string&email)
{
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;
len=add.length();
if(len>50)
len=50;
add.copy(Add,len,0);
Add[len]=0;
len=postcode.length();
if(len>7)
len=7;
postcode.copy(Postcode,len,0);
Postcode[len]=0;
len=email.length();
if(len>30)
len=30;
email.copy(Email,len,0);
Email[len]=0;
}
void Address::Set(){Status=false;}
void Address::Clear(){Status=true;}
#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H
#include"Address.h"
#include<iostream>
#include<fstream>
#include<iomanip>
#include<string>
using namespace std;
const int ItemNum=100; //通信录最大数量
class AddressBook
{
Address Item[ItemNum];
int Num; //通信录数量
int FindFree(); //查找空的通信录
public:
AddressBook(){Num=0;}
void Enter(); //输入
void Erase(); //删除
void Load(); //读盘
void Save(); //存盘
void List(); //显示
};
#endif
#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()<<setw(51)
<<addr.GetAdd()<<setw(8)<<addr.GetPostcode()<<setw(31)
<<addr.GetEmail();
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,add,postcode,email;
int pointer;
pointer=FindFree();
if(pointer==-1)
cout<<"电话不已存满";
else
{
cout<<"电话簿中有"<<Num<<"条通信录"<<endl;
cout<<"输入姓名:";
cin>>name;
cout<<"输入电话号码:";
cin>>phone;
cout<<"输入地址:";
cin>>add;
cout<<"输入邮编:";
cin>>postcode;
cout<<"输入Email:";
cin>>email;
Item[pointer].Enter(name,phone,add,postcode,email);
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].GetName())
{
temp=list[j-1];
list[j-1]=list[j];
list[j]=temp;
}
}
cout<<setiosflags(ios::left)<<setw(31)
<<"姓名"<<setw(21)<<"电话"<<setw(51)
<<"地址"<<setw(8)<<"邮编"<<setw(31)<<"Email"<<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];
file.open(fname,ios::out);
if(!file)
{
cout<<"打开文件失败!\n";
cin.get();
}
else
{
for(i=0;i<ItemNum;i++)
{
if(file&&!file.eof())
file.write(reinterpret_cast<const 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()) //mark ?
Num++;
}
file.close();
}
}
#include"Address.h"
#include"AddressBook.h"
#include<iostream>
#include<fstream>
#include<iomanip>
#include<string>
using namespace std;
int menu_select();
int menu_select() //显示主菜单
{
char c;
cout<<"************************************\n";
cout<<"* 模拟电话簿 v2.0修正版*\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;
}
int main()
{
char choice;
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);
}
}
return 1;
}