#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<fstream.h>
class list
{
public:
char name[20]; //姓名
char firm[20]; //公司
long tel; //电话
char post[20]; //邮编
void setpost(char pp[]) //设置邮编
{
strcpy(post,pp);
}
void setfirm(char ff[]) //设置公司资料
{
strcpy(firm,ff);
}
void settel(long tt) //设置电话
{
tel=tt;
}
void addp(char *nn,char *ff,long tt,char *pp) //添加
{
strcpy(name,nn);
strcpy(firm,ff);
tel=tt;
strcpy(post,pp);
}
void display()
{
cout<<name<<'\t'<<firm<<'\t'<<tel<<'\t'<<post<<endl;
}
};
void add(fstream);
void modify(fstream);
void scan(fstream);
void count(fstream);
void add(fstream f)
{
char title[20]; //姓名
char company[20]; //公司
long num; //电话
char mail[20]; //邮编
int choice;
list one; //声明类对象
f.seekp(0,ios::end); //读指针移到文件末尾
long poeEnd=f.tellp(); //记录文件尾位置
while(1)
{
cout<<"********* 添加菜单 *********"<<endl;
cout<<"请输入操作\n"
<<"1: 添加\t"
<<"0: 退出\n";
cin>>choice;
switch(choice)
{
case 1:
{
cout<<"姓名:";
cin>>title;
cout<<"单位:";
cin>>company;
cout<<"电话:";
cin>>num;
cout<<"邮编:";
cin>>mail;
one.addp(title,company,num,mail);
f.write( (char *) & one , sizeof(list)) ; //写入信息
one.display();
}
case 0:
{
cout<<"退出系统。"<<endl;
return;
}
default:
{
cout<<"Error!"<<endl;
return;
}
}
}
}
void modify(fstream f)
{
list one;
int choice;
char title[20];
char company[20];
char mail[20];
long num;
f.seekp(0,ios::end);
long posEnd=f.tellp();
cout<<"********* 修改菜单 *********\n";
while(1)
{
cout<<"请输入操作:\n";
cout<<"1:修改信息\t"
<<"0: 退出\n";
cin>>choice;
switch(choice)
{
case 1:
{
f.seekp(0,ios::beg);
cout<<"请输入要修改信息的姓名:";
cin>>title;
do
{ f.read((char *) & one , sizeof (list )) ;
}
while ( strcmp(one.name,title)!=0 && f.tellg() != posEnd ) ;
if(strcmp(one.name,title)==0)
{
one.display ();
cout<<"单位:";
cin>>company;
one.setfirm(company);
cout<<"邮编:";
cin>>mail;
one.setpost(mail);
cout<<"电话:";
cin>>num;
one.settel(num);
cout<<"修改后的信息:"<<endl;
f.write( (char *) & one , sizeof(list)) ;
one.display();
}
else
{
cout<<"Error!"<<endl;
return;
}
break;
}
case 0:
{
cout<<"退出系统。"<<endl;
return;
}
default:
{
cout<<"输入错误。"<<endl;
return;
}
}
}
}
void scan(fstream f)
{
list one;
int choice;
char title[20];
f.seekg(0,ios::end);
long posEnd=f.tellg();
cout<<"********* 查询菜单 *********\n";
while(1)
{
cout<<"请输入操作:\n";
cout<<"1:查询\t"
<<"2: 浏览\t"
<<"0: 退出\n";
cin>>choice;
switch(choice)
{
case 1:
{
f.seekg(0,ios::beg);
cout<<"请输入要查询的姓名:";
cin>>title;
do
{ f.read((char *) & one , sizeof (list)) ;
}
while ( strcmp(one.name,title)!=0 && f.tellg() != posEnd ) ;
if(strcmp(one.name,title)==0)
one.display();
else
{
cout<<"输入有误!"<<endl;
return;
}
break;
}
case 2: // 浏览文件
{ f.seekg( 0, ios::beg );
do // 输出所有记录
{
f.read((char *) & one , sizeof(list)) ;
one.display();
}
while( f.tellp()!=posEnd);
}
break ;
case 0 : return ;
}
}
}
void count (fstream f)
{
char company[20];
int choice;
int countp=0;
list one;
f.seekg( 0, ios::end ) ; // 读指针移到文件末尾
long posEnd = f.tellg() ; // 记录文件尾位置
cout<<"********* 统计菜单 *********\n";
while(1)
{
cout<<"请输入操作\n"
<<"1:统计\t"
<<"0: 退出\n";
cin>>choice;
switch(choice)
{ case 1://统计人数
{ f.seekg(0,ios::beg);//读指针移到文件开头
cout<<"请输入要统计人数的单位:\n";
cin>>company;
do
{
f.read((char *) & one,sizeof(list));
countp++;
}
while(strcmp(one.firm,company)==0 && f.tellp()!=posEnd);
cout<<"该单位人数统计为:"<<countp<<endl;
}
break;
case 0:
return;
}
}
}
void main()
{
list one;
int choice;
fstream iof( "d:\\address-list.dat" , ios::binary|ios::in|ios::out ) ;
if (!iof)
{ cerr << "文件不能打开。" << endl ;
return ;
}
cout<<"********* 通讯录管理系统 *********"<<endl;
while(1)
{
cout<<"1: 添加\t"
<<"2: 修改\t"
<<"3: 查询\t"
<<"4: 统计\t"
<<"0: 退出\n";
cout<<"请输入操作:"<<endl;
cin>>choice;
switch(choice)
{
case 1:
add(iof);
break;
case 2:
modify(iof);
break;
case 3:
scan(iof);
break;
case 4:
count(iof);
break;
case 0:
cout<<"退出系统。"<<endl;
return;
default:
cout<<"输入错误!"<<endl;
}
}
iof.close();
}