#include #include #include #include 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(); }下载本文