/**********************************************************/
/*人们在日常生活中经常需要查找某个人或某个单位的电话号码, */
/*本程序将实现一个简单的个人电话号码查询系统,根据用户输入*/
/*的信息(例如姓名等)进行快速查询。 */
/**********************************************************/
#include
#include
#include
using namespace std;
int x=0;
char a;
int j=1;
struct TeleNumber //电话号码类
{
char name[10]; //姓名
int phoneNumber; //固定电话号码
int mobileNumber; //移动电话号码
char email[10]; //电子邮箱
int s;
TeleNumber * Next; //下一指针
void ReadFile(istream & in); //读取数据文件
void input(); //数据输入函数
void display(); //数据显示函数
} ;
void TeleNumber::ReadFile(istream & in) //从文件把数据读入到程序{
in>>name>>phoneNumber>>mobileNumber>>email; //将文件信息读到相关变量里面}
void TeleNumber::input() //信息输入
{
cout<<"请输入姓名"< cin>>name; cout<<"请输入固定电话号码"< cin>>phoneNumber; cout<<"请输入移动电话号码"< cin>>mobileNumber; cout<<"请输入电子邮箱"< cin>>email; s=j++; //记录插入的人的信息的数量 } void TeleNumber::display() //信息输出 { cout<<"姓名:"< <<"移动电话号码:"< } class TeleMessage //功能类 { public: TeleMessage(); //构造数据结构 ~TeleMessage(); //释放单链表析构函数 void Save(); //数据保存到文件 TeleNumber * Search(char *); //信息查找 void Sort(); //排序 void Insert(); //插入 void Remove(); //删除 void Change(); //更改 void Show(); //显示 void Swap(TeleNumber *,TeleNumber *); //两个TeleNumber对象交换数据域private: TeleNumber * End,* Head; ifstream in; //定义读,写文件对象 ofstream out; }; TeleMessage::TeleMessage() //构造函数初始化 { Head=new TeleNumber; //头插法建立单链表 Head->Next=new TeleNumber; End=Head->Next; in.open("TeleNumber.text"); //打开外存文件,看是否有数据存在 if(!in) cout<<"电话系统中没有任何号码,请输入号码"< else { while(!in.eof()) //如果有,则打开,并将数据读取到程序 { End->ReadFile(in); if(End->name[0]=='\0')break; //如果名字为空 End->Next=new TeleNumber; //为下一个指针分配内存 End=End->Next; //指针下移 } in.close(); //in对象关闭 cout<<"读取电话号码系统成功!"< } cout<<"输入任意字母继续"< cin>>a; TeleMessage::~TeleMessage() //析构函数释放单链表 { TeleNumber * temp; //定义一个当前的指针 while(Head->Next!=End) { temp=Head->Next; Head=Head->Next; delete temp; //逐个释放内存空间} delete Head,End; //删除头尾指针 } void TeleMessage::Save() //保存文件 { out.open("TeleNumber.txt"); //建立外存文件TeleNumber.txt for(TeleNumber *p=Head->Next;p!=End;p=p->Next) out< out.close(); cout<<"保存成功!"< } void TeleMessage::Swap(TeleNumber *p1,TeleNumber *p2) //两个类对象数据域进行交换{ TeleNumber * temp=new TeleNumber; //定义一个中转指针 strcpy(temp->name,p1->name); //将当前要交换指针中间的 一个的name值赋值给中间变量 strcpy(temp->email,p1->email); temp->mobileNumber=p1->mobileNumber; temp->phoneNumber=p1->phoneNumber; temp->s=p1->s; strcpy(p1->name,p2->name); strcpy(p1->email,p2->email); p1->mobileNumber=p2->mobileNumber; p1->phoneNumber=p2->phoneNumber; p1->s=p2->s; strcpy(p2->name,temp->name); strcpy(p2->email,temp->email); p2->mobileNumber=temp->mobileNumber; p2->phoneNumber=temp->phoneNumber; p2->s=temp->s; //将p1,p2的各个成员变量 交换 } void TeleMessage::Sort() //起泡排序 TeleNumber *p=NULL,*q=NULL; int exchange=j-1; //要排序的电话号码的条数int bound; // int i; while(exchange) { bound=exchange; exchange=0; for(p=Head->Next,i=1;i if(p->mobileNumber>p->Next->mobileNumber) { Swap(p,p->Next); //调用交换函数 exchange=p->s; } } Show(); } void TeleMessage::Insert() //插入 { End->input(); //从单链表尾部插入 End->Next=new TeleNumber; End=End->Next; cout< } void TeleMessage::Remove() //删除 { char name[20]; TeleNumber * p=new TeleNumber,*temp=NULL; cout<<"请输入要删除人的姓名:"< cin>>name; p->Next=Search(name); //先进行查找,找到所要删除的结点 if(Search(name)) { temp=p->Next; p->Next=p->Next->Next; //摘链 delete temp; cout<<"\t\t删除成功!"< } else { cout<<"\t\t没有找到!"< } } TeleNumber * TeleMessage::Search(char * name) { for(TeleNumber *p=Head->Next;p!=End;p=p->Next) if(!strcmp(p->name,name)) { if(x==4) { p->display(); return p; } else return p; } if(x==4) cout<<"查无此人"< return 0; } void TeleMessage::Change() //修改信息 { char name[20]; cout<<"请输入要修改的人的姓名:"; cin>>name; if(Search(name)) { cout<<"\t\t已找到个人的信息,请输入新的信息!"< Search(name)->input(); cout<<"修改成功!"< } else { cout<<"\t\t没有找到!"< } } void TeleMessage::Show() { for(TeleNumber * p=Head->Next;p!=End;p=p->Next) p->display(); } int main() { bool flag=true; TeleMessage tele; char name[20]; while(flag) { system("cls"); cout<<"简单个人电话号码查询系统"< cout<<"1.增加信息"< cout<<"2.显示信息"< cout<<"3.排序个人电话号码"< cout<<"4.查找号码"< cout<<"5.删除信息"< cout<<"6.修改信息"< cout<<"7.保存信息"< cout<<"0.退出系统"< cout<<"请选择服务:"; cout<<"\n\t\t\n\t\t请选择:"; cin>>x; switch(x) { case 0:flag=false;break; case 1:tele.Insert();break; case 2:tele.Show();break; case 3:tele.Sort();break; case 4: cout<<"请输入欲查找认得姓名"< cin>>name; tele.Search(name);break; case 5:tele.Remove();break; case 6:tele.Change();break; case 7:tele.Save();break; } cout<<"输入任意字母返回"< cin>>a; } return 0; }