赵晓东-课程设计 201311671432

时间:2021-12-04 14:31:15



.题目2:李刚是一爱折腾的人,当然爱折腾的人均有梦想,他想当中国的盖次呢。可不,现在个人好友信息多了,复杂了,他想制作一个个人通讯录的制作管理软件。 刚好这个学期学了数据结构课,所以他准备使用数据结构知识来实现了。并考虑使用双向链表作数据结构。并制定了初步要求:

1每个好友信息包含姓名、住址、邮编、电话、QQ、微信帐号、等。

2作为一个完整的系统,应具有友好的界面和较强的容错能力。


使用数据结构相关知识来做。语言工具不受限。

1、独立完成,设计算法并编写代码,调试通过。

2、写设计说明书。

内容:题目、功能、要求、分析、代码,收获和体会及不足等。

3、以个人独立完成。每一个选择一个题目。选题方式是:自己学号整除5所得的余数是几就做几号题。如学号为122号题,学号为5的做0号题。



#include<iostream>

#include<fstream>

#include<string>

using namespace std;

int x=0;

char a;

int j=1;

struct Number                                  //数据类

{

char name[30];          //姓名

char home[30];          //家庭住址

char phoneNumber[30];   //手机电话号码

char email[30];         //电子邮箱

char qqandweixin[30];    //QQ和微信

int s;  

Number * next; 

void ReadFile(istream & in);     ////文件开闭

void input();

void print();

};

 

void Number::ReadFile(istream & in)          //从文件把数据读入到程序

{

in>>name>>home>>phoneNumber>>email>>qqandweixin;

}

 

void Number::input()                           //信息输入

cout<<"请输入姓名"<<endl;

cin>>name;

cout<<"请输入家庭住址"<<endl;

cin>>home;

cout<<"请输入手机号码"<<endl;

cin>>phoneNumber;

cout<<"请输入电子邮箱"<<endl;

cin>>email;

cout<<"请输入Q号和微信号"<<endl;

cin>>qqandweixin;

 

s=j++;

}

 

void Number::print()                        //信息输出

{

cout<<"姓名:"<<name<<endl;

cout<<"家庭住址:"<<home<<endl;

cout<<"手机号码:"<<phoneNumber<<endl;

cout<<"电子邮箱:"<<email<<endl;

cout<<"QQ和微信:"<<qqandweixin<<endl;

 

cout<<endl;

}

 

class Message                                 //功能类

{

public:

Message();                           //构造数据结构 

~Message();                          //释放单链表

void Save();                             //数据保存到文件

Number * Search_name(char *);        //用名字查找

Number * Search_home(char *);    ////用家庭住址查找 

Number * Search_phoneNumber(char *);   /////用手机号码查找

void Show();                            ////显示

void Insert();                           //插入

void Remove();                           //删除指针

void Change();                     //更改

////void Removeword();              ////删除内容

private:

Number * front,* rear;

ifstream in;                              //定义读,写文件对象

ofstream out;

}; 

 

Message::Message()

{

front=new Number;                            //初始化

front->next=new Number;

rear=front->next;

in.open("Number.txt");                        //打开外存文件,看是否有数据存在

if(!in)                                       ////打不开

cout<<"电话系统中没有任何号码,请输入号码"<<endl;

else

{

while(!in.eof())         //将数据读取到程序,eof()就是文件结束,在输入为结束的情况下

{

rear->ReadFile(in);                     

if(rear->name[0]=='\0')break;           ////没有数据就跳出

rear->next=new Number;                   ////有数据就插在链表后面

rear=rear->next;

}

in.close();

cout<<"读取电话号码系统成功!"<<endl;

}

cout<<"输入任意字母继续"<<endl;        

cin>>a;

 }

 

Message::~Message()                       //释放单链表

{

Number * temp;

while(front->next!=rear)

{

temp=front;

front=front->next;

delete temp;

}

delete front,rear;                                 //删除头尾指针

}

 

void Message::Save()                          //保存文件

{

out.open("Number.txt");                    //建立外存文件TeleNumber.txt

for(Number *p=front->next;p!=rear;p=p->next)    ////从头走到尾

out<<p->name<<"\t"<<p->home<<"\t"<<p->phoneNumber<<"\t"<<p->email<<p->qqandweixin<<endl;  //将数据存到外存文件里

out.close();

cout<<"保存成功!"<<endl;

}

 

void Message::Insert()                         //插入

{

rear->input();                                 //从单链表尾部插入

rear->next=new Number;

rear=rear->next;

cout<<endl<<"插入成功"<<endl;

}

 

void Message::Remove()                          //删除

{

char name[30];

Number * p=new Number,*temp=NULL;

cout<<"请输入要删除人的姓名:"<<endl;

cin>>name;

p->next=Search_name(name);  //先进行查找,找到所要删除的结点

if(Search_name(name))

{

 

temp=p->next;

p->next=temp->next;       //摘链 p->next->next

delete temp;

///Removeword()

cout<<"\t\t删除成功!"<<endl;

}

else

{

cout<<"\t\t查无此人!"<<endl;

}

}

 

 

///void Message::Removeword()

///{

///char name[30];

///int n=30;

///cin>>name;

////Number * p=new Number;

///p->next=Search_name(name);

///for(p=front->next;p!=rear;p=p->next)

///{

///if(Search_name(name))

///{

///for(int i=0;i<n;i++)

///{

//name[i]=name[n-1];

//n--;

//}

//}

//}

//}

 

Number * Message::Search_name(char * name)         /////用名字查找

{

for(Number *p=front->next;p!=rear;p=p->next)

if(p!=NULL&&!strcmp(p->name,name))

{

if(x==4)

{

p->print();

return p;

}

else

return p;

}

if(x==4)

cout<<"查无此人"<<endl;

return 0;

}

 

Number * Message::Search_home(char * home)  /////用家庭住址查找

{

for(Number *p=front->next;p!=rear;p=p->next)

if(p!=NULL&&!strcmp(p->home,home))

{

if(x==3)

{

p->print();

return p;

}

else

return p;

}

if(x==3)

cout<<"查无此人"<<endl;

return 0;

 

}

 

Number * Message::Search_phoneNumber(char * phoneNumber)      /////用手机号码查找

{

for(Number *p=front->next;p!=rear;p=p->next)

if(p!=NULL&&!strcmp(p->phoneNumber,phoneNumber))

{

if(x==5)

{

p->print();

return p;

}

else

return p;

}

if(x==5)

cout<<"查无此人"<<endl;

return 0;

}

 

void Message::Change()           //修改信息

{

char name[30];

cout<<"请输入要修改的人的姓名:";

cin>>name;

if(Search_name(name))

{

cout<<"\t\t已找到个人的信息,请输入新的信息!"<<endl;

Search_name(name)->input();

cout<<"修改成功!"<<endl;

}

else

{

cout<<"\t\t查无此人!"<<endl;

}

}

 

void Message::Show()

{

for(Number * p=front->next;p!=rear;p=p->next)

p->print();

}

 

int main()

{

bool flag=true;

Message tele;

char name[30];

char home[30];

char phoneNumber[30];

while(flag)

{

system("cls");

cout<<"                         简单个人电话号码查询系统                "<<endl;

cout<<"                                                                 "<<endl;

cout<<"                            1.增加电话号码                       "<<endl;

cout<<"                            2.显示电话号码                       "<<endl;

cout<<"                            3.用家庭住址查找                      "<<endl;

cout<<"                            4.用姓名查找                          "<<endl;

cout<<"                            5.用手机号码查找                      "<<endl;

cout<<"                            6.删除个人信息                        "<<endl;

cout<<"                            7.修改个人信息                        "<<endl;

cout<<"                            8.保存个人信息                        "<<endl;

cout<<"                            0.退出系统                            "<<endl;

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:

cout<<"请输入欲查找人的家庭住址"<<endl;

cin>>home;

tele.Search_home(home);break;

case 4:

cout<<"请输入欲查找人的姓名"<<endl;

cin>>name;

tele.Search_name(name);break;

case 5:

cout<<"请输入欲查找人的手机号码"<<endl;

cin>>phoneNumber;

tele.Search_phoneNumber(phoneNumber);break;

case 6:tele.Remove();break;

case 7:tele.Change();break;

case 8:tele.Save();break;

}

cout<<"输入任意字母返回"<<endl;

cin>>a;

}

return 0;

}