#include
#include
#include
#include
using namespace std;
class student
{public:
char num[20];
char name[20];
char address[40];
char tel_num[12];
char post_code[7];
char e_mail[40];
};
class function:public student
{public:
void add();
void del();
void find_num();
void find_name();
void list_num();
void list_name();
void correct();
void format();
void show();
};
//主函数
int main()
{
function a;
char select1;
cout<
do
{
cout<<"---------------------------------学生通讯录-----------------------------------"<
cin>>select1;
cout<<"------------------------------------------------------------------------------"<
{
case'1':cout<<"1.添加 2.删除 3.修改 4.返回主菜单"<
cout<<"请选择:"<
switch(select2)
{
case '1':a.add();
break;
case'2':a.del();
break;
case'3':a.correct();
break;
case'4':break;
default:cout<<"输入错误!"<
break;
case'2':cout<<"1.姓名查找 2.学号查找 3.返回主菜单"<
cout<<"请选择:";
cin>>select3;
switch(select3)
{
case'1':a.find_name();
break;
case'2':a.find_num();
break;
case'3':break;
default:cout<<"输入错误!"<
break;
case'3':cout<<"1.按学号排序 2.按姓名排序 3.返回主菜单"<
char select4;
cin>>select4;
switch(select4)
{
case'1':a.list_num();
break;
case'2':a.list_name();
break;
case'3':break;
default:cout<<"输入错误!"<
break;
case'4':cout<<"请确认删除所有资料(Y/N)";
char select5;
cin>>select5;
if(select5=='Y'||select5=='y')
a.format();
break;
case'5':a.show();break;
case'6':system("cls");break;//清屏函数
case'7':m=1;cout<<"谢谢使用!"<
}while(m!=1);
return 0;
}
//添加联系人
void function::add()
{int i;
cout<<"输入添加个数(10个以内):";
cin>>i;
student stud1[40]={0};
ofstream outfile("学生通讯录.dat",ios::app|ios::binary);
if (! outfile)
{
cerr<<"打开错误,程序将退出!";
abort();
}
for(int j=0;j{
cout<<"学号:";
cin>>stud1[j].num;
cout<<"姓名:";
cin>>stud1[j].name;
cout<<"地址:";
cin>>stud1[j].address;
cout<<"电话号码:";
cin>>stud1[j].tel_num;
cout<<"邮编:";
cin>>stud1[j].post_code;
cout<<"电子邮件:";
cin>>stud1[j].e_mail;
outfile.write((char
*)&stud1[j],sizeof(stud1[j]));
}
outfile.close ();
}
//删除联系人
void function::del()
{
student stud2[40]={0};
char name[20]="\0";
cout<<"请输入要删除的学生的姓名:";
cin>>name;
ifstream infile("学生通讯录.dat",ios::binary);
if (!infile)
{
cerr<<"打开错误,程序将退出!";
abort();
}
int k=0;
while(1)
{
infile.read((char*)&stud2[k],sizeof(stud2[k]));
if(infile.eof())break;
k++;
}
infile.close();
remove("学生通讯录.dat");
ofstream outfile("学生通讯录.dat",ios::binary);
if (!outfile)
{
cerr<<"打开错误,程序将退出!";
abort();
}
int i=0;
while(1)
{if(i>k-1)break;//每删除一项就会减少一组数据,所以是k-1
if(!strcmp(stud2[i].name,name))
i=i+1;
if(i>k-1)break;
outfile.write((char*)&stud2[i],sizeof(stud2[i]));
i++;
}
outfile.close();
if(k-1==0)
remove("学生通讯录.dat");
}
//修改联系人
void function::correct()
{
student stud3[40]={0};
ifstream infile("学生通讯录.dat",ios::binary);
int k=0;
while(1)
{if(infile.eof())break;
infile.read((char*)&stud3[k],sizeof(stud3[k]));
k++;
}
infile.close();
char name[20]="\0";
cout<<"请输入要修改学生的姓名:";
cin>>name;
int x;
for(int i=0;i
if(!strcmp(stud3[i].name,name))
x=i;
}
char select;
cout<<"1.修改姓名 2.修改学号 3.修改地址 4.修改邮编 5.修改电话号码 6.修改E_MAIL"<
cin>>select;
char name1[20]="\0";
char num1[20]="\0";
char address1[40]="\0";
char post_code1[7]="\0";
char tel_num1[20]="\0";
char e_mail1[40]="\0";
switch(select)
{
case'1':cout<<"输入要修改的姓名:";
cin>>name1;
strcpy(stud3[x].name,name1);
cout<<"修改成功"<
case'2':cout<<"输入要修改的学号:";
cin>>num1;
strcpy(stud3[x].num,num1);
cout<<"修改成功"<
case'3':cout<<"输入要修改的地址:";
cin>>address1;
strcpy(stud3[x].address,address1);
cout<<"修改成功"<
case'4':cout<<"输入要修改的邮编:";
cin>>post_code1;
strcpy(stud3[x].post_code,post_code1);
cout<<"修改成功"<
case'5':cout<<"输入要修改的电话号码:";
cin>>tel_num1;
strcpy(stud3[x].tel_num,tel_num1);
break;
case'6':cout<<"输入要修改的E_MAIL";
cin>>e_mail1;
strcpy(stud3[x].e_mail,e_mail1);
cout<<"修改成功"<
default:cout<<"输入错误!";break;
}
remove("学生通讯录.dat");
ofstream outfile("学生通讯录.dat",ios::binary);
int l=0;
while(1)
{if(l>k-2)break;
outfile.write((char*)&stud3[l],sizeof(stud3[l]));
l++;
}
outfile.close();
}
//按学号查询
void function::find_num()
{
student stud4[40]={0};
ifstream infile("学生通讯录.dat",ios::binary);
if(infile.peek()==EOF) //
发现如果不判断文件是否为空,本程序格式化过后查找出现未知数据。
{
cout<<"文件为空"<
}
cout<<"请输入学号:";
char num[20]="\0";
cin>>num;
cout<<"------------------------------------------------------------------------------"<
while(1)
{
infile.read((char*)&stud4[i],sizeof(stud4[i]));
if((!strcmp(stud4[i].num,num))||infile.eof()) break;
i++;
}
if(!infile.eof())
{
cout<<"学号:"<
else
cout<<"输入的学号查不到"<
}
//按姓名查找
void function::find_name()
{
student stud5[40]={0};
ifstream infile("学生通讯录.dat",ios::binary);
if(infile.peek()==EOF)
{
cout<<"文件为空"<
}
cout<<"请输入姓名:";
char name[20]="\0";
cin>>name;
cout<<"------------------------------------------------------------------------------"<
{
infile.read((char*)&stud5[i],sizeof(stud5[i]));
if(!strcmp(stud5[i].name,name)||infile.eof())
break;
}
if(!infile.eof())
{
cout<<"学号:"<
else
cout<<"输入的姓名查不到"<
}
//按学号排序
void function::list_num()
{
student stud6[40]={0};
ifstream infile("学生通讯录.dat",ios::binary);
int k=0;
while(1)
{if(infile.eof())break;
infile.read((char*)&stud6[k],sizeof(stud6[k]));
k++;
}
char num[20]="\0";
char name[20]="\0";
char address[40]="\0";
char tel_num[12]="\0";
char post_code[7]="\0";
char e_mail[40]="\0";
for(int i=0;i
for(int j=0;j
if(strcmp(stud6[j].num,stud6[j+1].num)>0)
{
strcpy(num,stud6[j].num);
strcpy(stud6[j].num,stud6[j+1].num);
strcpy(stud6[j+1].num,num);
strcpy(name,stud6[j].name);
strcpy(stud6[j].name,stud6[j+1].name);
strcpy(stud6[j+1].name,name);
strcpy(address,stud6[j].address);
strcpy(stud6[j].address,stud6[j+1].address);
strcpy(stud6[j+1].address,address);
strcpy(tel_num,stud6[j].tel_num);
strcpy(stud6[j].tel_num,stud6[j+1].tel_num);
strcpy(stud6[j+1].tel_num,tel_num);
strcpy(post_code,stud6[j].post_code);
strcpy(stud6[j].post_code,stud6[j+1].post_code);
strcpy(stud6[j+1].post_code,post_code);
strcpy(e_mail,stud6[j].e_mail);
strcpy(stud6[j].e_mail,stud6[j+1].e_mail);
strcpy(stud6[j+1].e_mail,e_mail);
}
}
}
infile.close();
remove("学生通讯录.dat");
ofstream outfile("学生通讯录.dat",ios::binary);
int l=0;
while(1)
{if(l>k-2)break;
outfile.write((char*)&stud6[l+2],sizeof(stud6[l+2]));
l++;
}
outfile.close();
}
//按姓名排序
void function::list_name()
{
student stud7[40]={0};
char num[20]="\0";
char name[20]="\0";
char address[40]="\0";
char tel_num[20]="\0";
char post_code[7]="\0";
char e_mail[40]="\0";
ifstream infile("学生通讯录.dat",ios::binary);
int k=0;
while(1)
{if(infile.eof())break;
else
infile.read((char*)&stud7[k],sizeof(stud7[k]));
k++;
}
infile.close();
for(int i=0;i
for(int j=0;j
if(strcmp(stud7[j].name,stud7[j+1].name)>0)
{
strcpy(num,stud7[j].num);
strcpy(stud7[j].num,stud7[j+1].num);
strcpy(stud7[j+1].num,num);
strcpy(name,stud7[j].name);
strcpy(stud7[j].name,stud7[j+1].name);
strcpy(stud7[j+1].name,name);
strcpy(address,stud7[j].address);
strcpy(stud7[j].address,stud7[j+1].address);
strcpy(stud7[j+1].address,address);
strcpy(tel_num,stud7[j].tel_num);
strcpy(stud7[j].tel_num,stud7[j+1].tel_num);
strcpy(stud7[j+1].tel_num,tel_num);
strcpy(post_code,stud7[j].post_code);
strcpy(stud7[j].post_code,stud7[j+1].post_code);
strcpy(stud7[j+1].post_code,post_code);
strcpy(e_mail,stud7[j].e_mail);
strcpy(stud7[j].e_mail,stud7[j+1].e_mail);
strcpy(stud7[j+1].e_mail,e_mail);
}
}
}
remove("学生通讯录.dat");
ofstream outfile("学生通讯录.dat",ios::binary);
int l=0;
while(1)
{if(l>k-2) break;
outfile.write((char*)&stud7[l+2],sizeof(stud7[l+2]));
l++;
}
outfile.close();
}
//格式化(删除文件)
void function::format()
{
remove("学生通讯录.dat");
}
//显示通讯录
void function::show()
{
student stud8[40]={0};
ifstream infile("学生通讯录.dat",ios::in|ios::binary);
infile.seekg(0,ios::beg);
if(infile.peek()==EOF)
{
cout<<"文件为空"<
}
int i=0;
while(1)
{
infile.read((char*)&stud8[i],sizeof(stud8[i]));
if(infile.eof())
break;
else
cout<<"学号:"<
}
infile.close();
}