课程设计——通讯录管理系统

分为四大板块,感觉做的还可以吧,但还是有点小遗憾。

 

#include<iostream>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<fstream>
#include<windows.h>
#include<ctime>
#include<cstdlib>
using namespace std;
//Sleep():睡眠函数 Sleep(3000);等待3s
//system("cls");清屏函数
char TEMP[2]=" ";//空格,不用NULL赋缺省值,要么很麻烦,程序很容易崩溃

/*------------------联系人类—------------------------------*/
/*--------------------------—------------------------------*/

class PhoneCard//手机卡类
{
protected:
    char *name,*Phonenum;//姓名,手机号码
public:
    PhoneCard(char *pname=TEMP,char *phonenum=TEMP);//构造,以空格作为缺省值
    virtual ~PhoneCard();//虚析构
    inline void set(char *pname=TEMP,char *phonenum=TEMP);//set函数。给对象赋值
    inline void modify();//修改
    PhoneCard & operator= (PhoneCard A);//重载赋值运算符,以防多次delete
    PhoneCard(const PhoneCard & A);//复制构造防止因字符指针浅复制导致程序崩溃
    friend istream & operator>> (istream &input,PhoneCard & A);
    friend ostream & operator<< (ostream &out,PhoneCard &A);
    friend class M_Card_AddressList;//定义M_Card_AddressList为PhoneCard的友元类,方便
    friend class User;//定义友元,方便访问

};
#if(1)
PhoneCard::PhoneCard(char *pname,char *phonenum)
{
    if(pname!=NULL)//new与strcpy不能对空指针操作
    {
    name=new char[strlen(pname)+1];
    Phonenum=new char[strlen(phonenum)+1];
    strcpy(name,pname);
    strcpy(Phonenum,phonenum);
    }
}
PhoneCard::~PhoneCard()//析构
{
      delete []name;
      delete []Phonenum;
}
PhoneCard::PhoneCard(const PhoneCard & A)//复制构造函数很重要!
{
    name=new char[strlen(A.name)+1];
     strcpy(name,A.name);
    Phonenum=new char[strlen(A.Phonenum)+1];
    strcpy(Phonenum,A.Phonenum);
}
void PhoneCard::set(char *pname,char *phonenum)
{

    if(pname!=NULL)
    {
    delete []name;//防止越界,重新生成空间
    delete []Phonenum;
    name=new char[strlen(pname)+1];
    Phonenum=new char[strlen(phonenum)+1];
    strcpy(name,pname);
    strcpy(Phonenum,phonenum);
    }
}
void PhoneCard::modify()//修改函数
{
  cout<<"1、修改姓名 2、修改号码 3、全部修改"<<endl;
    int a;
    cin>>a;
    char cname[120];
    char cnum[120];
    switch(a)
    {
        case 1:
          cout<<"请输入姓名 :"<<endl;
          cin>>cname;
          delete []name;
          name=new char[strlen(cname)+1];
          strcpy(name,cname);
          cout<<"修改成功!"<<endl;
          break;
        case 2:
          cout<<"请输入手机号码 :"<<endl;
          cin>>cnum;
          delete []Phonenum;
          Phonenum=new char[strlen(cnum)+1];
          strcpy(Phonenum,cnum);
          cout<<"修改成功!"<<endl;
          break;
        case 3:
          cout<<"请输入姓名 :"<<endl;
          cin>>cname;
          cout<<"请输入手机号码 :"<<endl;
          cin>>cnum;
          set(cname,cnum);
          cout<<"修改成功!"<<endl;
          break;
        default :
         cout<<"————输入无效————"<<endl;
    }
}
istream & operator>> (istream &input,PhoneCard & A)//重载插入符
{
    char cname[120];
    char cnum[1000];
    cout<<"请输入姓名 :"<<endl;
    input>>cname;
    cout<<"请输入手机号码 :"<<endl;
    input>>cnum;
    A.set(cname,cnum);
    return input;
}
 ostream & operator<< (ostream &out,PhoneCard &A)//重载提取符
{
    out<<"姓名 :"<<A.name<<'\t'<<"手机号码 :"<<A.Phonenum<<endl;
    return out;
}
PhoneCard & PhoneCard::operator= (PhoneCard A)//重载赋值号,类似深复制
{
    delete []name;
    delete []Phonenum;
    name=new char[strlen(A.name)+1];
     strcpy(name,A.name);
    Phonenum=new char[strlen(A.Phonenum)+1];
    strcpy(Phonenum,A.Phonenum);
    return *this;
}
class Phone:public PhoneCard
{
protected:
      char *Native,*Qnum;
public :
      Phone(char *cname=TEMP,char *cpum=TEMP,char *native=TEMP,char *qnum=TEMP);//构造,赋空格为缺省值
      virtual ~Phone();//虚析构
      inline void set(char *cname=TEMP,char *cpnum=TEMP,char *native=TEMP,char *qnum=TEMP);//set函数,为对象赋值
      inline void modify();//修改
      Phone & operator= (Phone A);//重载赋值运算符,防止多次delete
      Phone(const Phone & A);//复制构造以防对字符指针多次delete,防崩溃,很重要!!!
      friend istream & operator>>(istream &input,Phone &A);
      friend ostream & operator<<(ostream &out,Phone &A);
      friend class Mobile_AddressList;//声明Mobile_AddressList为Phone友元类,方便访问
      friend class User;//声明友元,方便访问
};
Phone::Phone(char *cname,char *cpnum,char *native,char *qnum):PhoneCard(cname,cpnum)
{
             Native=new char[strlen(native)+1];strcpy(Native,native);
             Qnum=new char[strlen(qnum)+1];strcpy(Qnum,qnum);
}
Phone::~Phone()
{
    delete []Native;
    delete []Qnum;
}
Phone::Phone(const Phone &A)//复制构造,很重要!!! 
{
    name=new char[strlen(A.name)+1];
    strcpy(name,A.name);
    Phonenum=new char[strlen(A.Phonenum)+1];
    strcpy(Phonenum,A.Phonenum);
    Native=new char[strlen(A.Native)+1];
    strcpy(Native,A.Native);
    Qnum=new char[strlen(A.Qnum)+1];
    strcpy(Qnum,A.Qnum);
}
void Phone::set(char *cname,char *cpnum,char *native,char *qnum)//为对象赋值
{
    PhoneCard::set(cname,cpnum);
    if(native!=NULL&&qnum!=NULL)
    {
    if(Native!=NULL) delete []Native;
    if(Qnum!=NULL)  delete []Qnum;
    Native = new char[strlen(native)+1];
    strcpy(Native,native);
    Qnum = new char[strlen(qnum)+1];
    strcpy(Qnum,qnum);
    }
}
void Phone::modify()//修改
{
    cout<<"您需要修改姓名号码吗 ?"<<endl;
    cout<<"1、需要 2、不需要"<<endl;
    int a;
    cin>>a;
    if(a==1) PhoneCard::modify();

    cout<<"您需要修改籍贯和QQ吗 ? "<<endl;
    cout<<"1、需要 2、不需要 "<<endl;
    int flag,k;
    char native[122];
    char qnum[122];
    cin>>flag;
      if(flag==1)
          {
          cout<<"修改 1、籍贯 2、QQ、3、以上都修改"<<endl;
          cin>>k;
          switch(k)
          {
              case 1:
               cout<<"请输入籍贯 :"<<endl;
               cin>>native;
               delete []Native;
               Native = new char[strlen(native)+1];
               strcpy(Native,native);
               cout<<"修改成功!"<<endl;
               break;
              case 2:
               cout<<"请输入QQ :"<<endl;
               cin>>qnum;
               delete []Qnum;
               Qnum = new char[strlen(qnum)+1];
               strcpy(Qnum,qnum);
               cout<<"修改成功!"<<endl;
               break;
              case 3:
               cout<<"请输入籍贯 :"<<endl;
               cin>>native;
               delete []Native;
               Native = new char[strlen(native)+1];
               strcpy(Native,native);
               cout<<"请输入QQ :"<<endl;
               cin>>qnum;
               delete []Qnum;
               Qnum = new char [strlen(qnum)+1];
               strcpy(Qnum,qnum);
             default :
              cout<<"————输入无效————"<<endl;

            }
          }
}
istream & operator>>(istream & in,Phone &A)//重载>>
{
     char cname[120],cnum[120],cnative[120],cqnum[120];
     cout<<"请输入姓名 :"<<endl;
     in>> cname;
     cout<<"请输入手机号码 :"<<endl;
     in>>cnum;
     cout<<"请输入籍贯 :"<<endl;
     in>>cnative;
     cout<<"请输入QQ :"<<endl;
     in>>cqnum;
     A.set(cname,cnum,cnative,cqnum);
     return in;
}
ostream & operator<<(ostream &out,Phone &A)//重载<<
{
    out<<"姓名 :"<<A.name<<endl;
    out<<'\t'<<"手机号码 :"<<A.Phonenum<<endl;
    out<<'\t'<<"籍贯 :"<<A.Native<<endl;
    out<<'\t'<<"QQ :"<<A.Qnum<<endl;
    return out;
}
Phone & Phone::operator= (Phone A)//重载赋值号
{
    delete []name;//防止溢出,重新申请内存
    delete []Phonenum;
    delete []Native;
    delete []Qnum;
    name=new char[strlen(A.name)+1];
    strcpy(name,A.name);
    Phonenum=new char[strlen(A.Phonenum)+1];
    strcpy(Phonenum,A.Phonenum);
    Native=new char[strlen(A.Native)+1];
    strcpy(Native,A.Native);
    Qnum=new char[strlen(A.Qnum)+1];
    strcpy(Qnum,A.Qnum);
    return *this;
}
/*----------------------------通讯簿类----------------------------*/
/*----------------------------------------------------------------*/
class AddressList//通讯簿抽象类
{
public:
    virtual void Add()=0;
    virtual void Delete(int idx)=0;
    virtual void Display()=0;
    virtual void Updata(int idx)=0;
    virtual void Query(int idx)=0;
};
class M_Card_AddressList:public AddressList//手机卡通讯簿
{
protected:
    static int number;//记录联系人的数量
    PhoneCard arr[1001];//手机卡联系人对象
public:
    M_Card_AddressList();
    virtual ~M_Card_AddressList();
    void Add();//添加
    void Delete(int idx);//删除
    void Display();//展示
    void Updata(int idx);//修改
    void Query(int idx);//查询
    friend class User;
};
M_Card_AddressList::M_Card_AddressList()//构造函数,从文件读取联系人
{
    ifstream fin("PhoneCard.txt",ios::in);
    if(!fin.is_open()) {
        cerr<<"PhoneCard File could not be open."<<endl;
    }
    else {
    char cname[120],cpnum[120];
    while(fin>>cname>>cpnum)
    {
        arr[number++].set(cname,cpnum);
    }
    fin.close();
    }
}
M_Card_AddressList::~M_Card_AddressList()//析构函数,把联系人信息输出文件中
{
    ofstream fout("PhoneCard.txt",ios::out);
    if(!fout.is_open()){
        cerr<<"PhoneCard File could not be open."<<endl;
    }
    else {
    for(int i=0;i<number;++i)
        fout<<arr[i].name<<" "<<arr[i].Phonenum<<" ";
    fout.close();
    }
}
void M_Card_AddressList::Add()//添加一个联系人
{
    if(number+1>1000) {
        cout<<"很抱歉,您的手机内存已满^_^ 你可以尝试清理后再进行添加!"<<endl;
    }
    else {
        cin>>arr[number++];
        cout<<" 添加成功 ! "<<endl;
    }
}
void M_Card_AddressList::Delete(int idx)//删除一个联系人
{
    if(number-1<0) {
        cout<<"您已经没有联系人了,3s后退出!"<<endl;
        Sleep(3000);
    }
    for(int i=idx;i<number-1;++i)//移位
        arr[i]=arr[i+1];
    number--;//总人数减一
}
void M_Card_AddressList::Display()//输出所有联系人
{
    for(int i=0;i<number;++i)
        cout<<arr[i];
    cout<<"总人数 :  "<<number<<endl;
}
void M_Card_AddressList::Updata(int idx)//修改联系人
{
    arr[idx].modify();
}
void M_Card_AddressList::Query(int idx)//查询一个联系人
{
    cout<<arr[idx];
}
int M_Card_AddressList::number=0;//总人数初值为0
class Mobile_AddressList:public AddressList//手机通讯簿
{
protected:
    static int number;//记录联系人的人数
    Phone arr[1001];//对象数组
public:
    Mobile_AddressList();
    virtual ~Mobile_AddressList();
    void Add();//添加
    void Delete(int idx);//删除
    void Display();//展示
    void Updata(int idx);//修改
    void Query(int idx);//查询
    friend class User;
};
Mobile_AddressList::Mobile_AddressList()
{
    ifstream fin("Phone.txt",ios::in);
    if(!fin.is_open()) {
        cerr<<"Phone File could not be open."<<endl;
    }
    else {
    char cname[120],cpnum[120],cnative[120],cqnum[120];
    while(fin>>cname>>cpnum>>cnative>>cqnum)
    {
        arr[number++].set(cname,cpnum,cnative,cqnum);
    }
    fin.close();
    }
}
Mobile_AddressList::~Mobile_AddressList()
{
    ofstream fout("Phone.txt",ios::out);
    if(!fout.is_open()){
        cerr<<"Phone File could not be open."<<endl;
    }
    else {
    for(int i=0;i<number;++i)
        fout<<arr[i].name<<TEMP<<arr[i].Phonenum<<TEMP<<arr[i].Native<<TEMP<<arr[i].Qnum<<endl;
    fout.close();
    }
}
void Mobile_AddressList::Add()
{
    if(number+1>1000) {
        cout<<"很抱歉,您的手机卡内存已满^_^ 你可以尝试清理后再进行添加!"<<endl;
    }
    else {
        cin>>arr[number++];
        cout<< " 添加成功 ! "<<endl;
    }
}
void Mobile_AddressList::Delete(int idx)
{
    if(number-1<0) {
        cout<<"您已经没有联系人了,3s后退出!"<<endl;
        Sleep(3000);
    }
    for(int i=idx;i<number-1;++i)
        arr[i]=arr[i+1];
    number--;


}
void Mobile_AddressList::Display()
{
    for(int i=0;i<number;++i)
        cout<<arr[i];
    cout<<"总人数  :   "<<number<<endl;
}
void Mobile_AddressList::Updata(int idx)
{
    arr[idx].modify();

}
void Mobile_AddressList::Query(int idx)
{
    cout<<arr[idx];
}
int Mobile_AddressList::number=0;
/*-------------------------------操作类---------------------------------*/
/*----------------------------------------------------------------------*/
#endif
#if(1)
class User
{
protected:
    M_Card_AddressList P_CardList;//手机卡通讯簿对象
    Mobile_AddressList PhoneList;//手机通讯簿对象
    AddressList *inedx;//抽象类指针,多态实现成员函数
public:
    inline void Add();//添加联系人
    inline void Delete();//删除联系人
    inline void Updata();//修改联系人
    inline void Query();//查询联系人
    inline void Scan();//输出所有联系人
    inline void TransP_to_C();//将手机的联系人转移/复制到手机卡里
    inline void TransC_to_P();//将手机的联系人转移/复制到手机卡里
};
void User::Add()
{
    cout<<"请选择添加位置 1、本机  2、手机卡  "<<endl;
    int flag;
    cin>>flag;
    if(flag==1){
        inedx=&PhoneList;
        inedx->Add();
    }
    else if(flag==2){
        inedx=&P_CardList;
        inedx->Add();
    }
    else {
        cout<<"————您的输入无效————"<<endl;
    }
}
void User::Delete()
{
    cout<<"请输入您要删除联系人的号码。"<<endl;
    char cnum[120];
    cin>>cnum;
    int k1,k2;
    bool r1=1,r2=1;
    for(int i=0;i<PhoneList.number;++i)//先查找
    {
        if(strcmp(PhoneList.arr[i].Phonenum,cnum)==0) {
            k1=i;r1=0;break;
        }
    }
    if(r1==0) {//如果有这个联系人
        inedx=&PhoneList;
        inedx->Delete(k1);
    }

    for(int i=0;i<P_CardList.number;++i)
    {
        if(strcmp(P_CardList.arr[i].Phonenum,cnum)==0) {
            k2=i;r2=0;break;
        }
    }

    if(r2==0) {
        inedx=&P_CardList;
        inedx->Delete(k2);
    }
    if(r1==1&&r2==1) {
        cout<<"抱歉 ,没有找到联系人 !"<<endl;
    }
    else cout<<" 删除成功 !"<<endl;

}
void User::Updata()
{
    cout<<endl<<"注:  因为可能在本机和手机卡中都有此联系人,所以可能多次需要您的输入哦 ~_~"<<endl;
    cout<<endl;
    cout<<"请输入您要修改联系人的号码。 "<<endl;
    char cnum[120];
    cin>>cnum;
    int k1=-1,k2=-1;
    for(int i=0;i<PhoneList.number;++i)//查找手机通讯簿
    {
        if(strcmp(PhoneList.arr[i].Phonenum,cnum)==0) {
            k1=i;break;
        }
    }
    if(k1!=-1) {
        inedx=&PhoneList;
        inedx->Updata(k1);
    }
    for(int i=0;i<P_CardList.number;++i)//查找手机卡通讯簿
    {
        if(strcmp(P_CardList.arr[i].Phonenum,cnum)==0) {
            k2=i;break;
        }
    }
    if(k2!=-1) {
        inedx=&P_CardList;
        inedx->Updata(k2);
    }
    if(k1==-1&&k2==-1) {
        cout<<" 很抱歉 ,未找到联系人 !"<<endl;
    }
}
void User::Query()
{
    char cname[120];
    cout<<"请输入您要查询联系人的姓名 :"<<endl;
    cin>>cname;
    cout<<"您要在哪个通讯簿查找该联系人呢? 1、本机 2、手机卡  "<<endl;
    int flag;
    cin>>flag;
    bool r=1;
    if(flag==1){
        inedx=&PhoneList;
        for(int i=0;i<PhoneList.number;++i)
        {
            if(strcmp(PhoneList.arr[i].name,cname)==0) {
                inedx->Query(i);
                r=0;
            }
        }
    }
    else if(flag==2){
        inedx=&P_CardList;
        for(int i=0;i<P_CardList.number;++i)
        {
            if(strcmp(P_CardList.arr[i].name,cname)==0){
                inedx->Query(i);
                r=0;
            }
        }
    }
    else cout<<"————输入无效————"<<endl;
    if(r==1&&flag<=2) {
        cout<<"不好意思  !_!  没查询到唉"<<endl;
    }
}
void User::Scan()
{
    cout<<"请输入您要查看的通讯簿:1、本机 2、手机卡通讯簿 "<<endl;
    int flag;
    cin>>flag;
    if(flag==1) {
        inedx=&PhoneList;
        inedx->Display();
    }
    else if(flag==2) {
        inedx=&P_CardList;
        inedx->Display();
    }
    else cout<<"————输入无效————"<<endl;
}
void User::TransP_to_C()
{
    cout<<"请问您要转移还是拷贝  :  1、转移    2、拷贝"<<endl;
    int p;
    cin>>p;
    if(P_CardList.number+PhoneList.number>1000){
        cout<<"您的手机卡内存好像储存不了这么多联系人呀!是否继续操作 1、继续 2、取消 "<<endl;
        int flag;
        cin>>flag;
        if(flag==2) return ;
    }
    if(p==1)
   {
    int k=0;
    int num=P_CardList.number;
    for(int i=P_CardList.number;i<=1000;++i,P_CardList.number++)
    {
        if(PhoneList.number==0) {
            cout<<"全部已转移完毕!"<<endl;return ;
        }
        bool r=1;
        for(int j=0;j<=P_CardList.number;++j){//判重  等号按理说不取 
            if(strcmp(PhoneList.arr[k].name,P_CardList.arr[j].name)==0&&strcmp(PhoneList.arr[k].Phonenum,P_CardList.arr[j].Phonenum)==0)
            {r=0;break;} 
        }
        if(r==0){i--;k++;P_CardList.number--; continue;}
        P_CardList.arr[i].set(PhoneList.arr[k].name,PhoneList.arr[k].Phonenum);
        PhoneList.Delete(k);//调用删除函数,k位置的值被后面覆盖,所有不用下面的k++语句
       //k++;//有delete函数,画蛇添足 
    }
   }
    else {
    int k=0;//一个指针,指向手机通讯簿对象数组的的位置
    int num=P_CardList.number;
    for(int i=P_CardList.number;i<=1000;++i,P_CardList.number++)
    {
        if(k==PhoneList.number) break;
        bool r=1;
        for(int j=0;j<=P_CardList.number;++j){//判重
            if(strcmp(PhoneList.arr[k].name,P_CardList.arr[j].name)==0&&strcmp(PhoneList.arr[k].Phonenum,P_CardList.arr[j].Phonenum)==0)
           { r=0;break;}
        }
        if(r==0){k++;i--;P_CardList.number--; continue;}//若有重复的话
        P_CardList.arr[i].set(PhoneList.arr[k].name,PhoneList.arr[k].Phonenum);
        k++;

   }
   cout<<"复制完成 !"<<endl;
    }

}
void User::TransC_to_P()
{
    cout<<"请问您要转移还是拷贝  :  1、转移    2、拷贝"<<endl;
    int p;
    cin>>p;
    if(P_CardList.number+PhoneList.number>1000){
        cout<<"您的手机内存好像储存不了这么多联系人呀!是否继续操作 1、继续 2、取消 "<<endl;
        int flag;
        cin>>flag;
        if(flag==2) return ;
    }
    if(p==1)
    {
    int k=0;//一个指针,指向手机卡通讯簿对象数组的的位置
    int num=PhoneList.number;
    for(int i=PhoneList.number;i<=1000;++i,PhoneList.number++)
    {
        if(P_CardList.number==0) {
            cout<<"全部已转移完毕!"<<endl;return ;
        }
        bool r=1;
        for(int j=0;j<=PhoneList.number;++j){//判重
            if(strcmp(PhoneList.arr[j].name,P_CardList.arr[k].name)==0&&strcmp(PhoneList.arr[j].Phonenum,P_CardList.arr[k].Phonenum)==0)
               {r=0;break;}
        }
        if(r==0) {
            i--;k++;PhoneList.number--; continue;
        }
        PhoneList.arr[i].set(P_CardList.arr[k].name,P_CardList.arr[k].Phonenum,(char *)"No",(char *)"No");
        P_CardList.Delete(k);//删除掉,调用删除函数,k位置的值被后面覆盖,所有不用下面的k++语句
       // k++;//有delete,不用k++; 
    }
    }
    else {
    int k=0;
    int num=P_CardList.number;//
    for(int i=PhoneList.number;i<=1000;++i,PhoneList.number++)
    {
        if(k==P_CardList.number) break;
        bool r=1;
        for(int j=0;j<=P_CardList.number;++j){//判重
            if(strcmp(PhoneList.arr[j].name,P_CardList.arr[k].name)==0&&strcmp(PhoneList.arr[j].Phonenum,P_CardList.arr[k].Phonenum)==0)
            {r=0;break;}
        }
        if(r==0) {
            k++;i--;PhoneList.number--; continue;
        }
        PhoneList.arr[i].set(P_CardList.arr[k].name,P_CardList.arr[k].Phonenum,(char *)"No",(char *)"No");
        k++;
    }
    cout<<"复制完成 !"<<endl;
    }
}
/*-----------------------------菜单类---------------------------*/
/*--------------------------------------------------------------*/

class Menu//递归加嵌套实现菜单功能
{
protected:
   User user;//用户类的对象
   static int  Record;//记录最优的成绩
public:
    inline void  display();//主菜单
    inline void  scan();//中转界面
    inline void  operate();//开机界面
    inline void  game();
};
void Menu::scan()//中转界面
{
    cout<<"***********************************************************************************"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|         Adress                               Book                           |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|       进入: 1                                     退出  2                  |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"**********************************************************************************"<<endl;
    cout<<endl<<"请输入您的选择    :"<<endl;
    int choose;
    cin>>choose;
    system("cls");
    if(choose==1) display();//调用通讯簿主菜单
    else  operate() ;//回到开机界面
}
void Menu::display()//主菜单
{
    cout<<"**********************************************************************************"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|            注: 中途退出通讯录可能会丢失数据哦!                             |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|         Adress                               Book                           |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|      * 1、New     Contact  /*新建*/                                         |-|"<<endl;
    cout<<"-|      |                                                                      |-|"<<endl;
    cout<<"-|      * 2、Delete   Contact  /*删除*/                                        |-|"<<endl;
    cout<<"-|      |                                                                      |-|"<<endl;
    cout<<"-|      * 3、Modify   Contact   /*修改*/                                       |-|"<<endl;
    cout<<"-|      |                                                                      |-|"<<endl;
    cout<<"-|      * 4、Query    Contact    /*查询*/                                      |-|"<<endl;
    cout<<"-|      |                                                                      |-|"<<endl;
    cout<<"-|      * 5、 Browse All Contact   /*查看*/                                    |-|"<<endl;
    cout<<"-|      |                                                                      |-|"<<endl;
    cout<<"-|      * 6、Transfer MobileCard  Contact  to Moblie Contact /*手机卡到手机*/  |-|"<<endl;
    cout<<"-|      |                                                                      |-|"<<endl;
    cout<<"-|      * 7、Transfer Mobile Contact to MobileCard Contact  /*手机到手机卡*/   |-|"<<endl;
    cout<<"-|      |                                                                      |-|"<<endl;
    cout<<"-|      * 0、Return To  The  upper  level       /*返回上一次层*/               |-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"**********************************************************************************"<<endl;
    cout<<endl<<"您想进行什么操作呢 ?  请输入  :  "<<endl;
    int flag;
    cin>>flag;
    system("cls");
    switch(flag)
    {
    case 1:
        user.Add();
        cout<<endl<<"请稍等  ~_~"<<endl;
        Sleep(3000);
        system("cls");
        display();//递归
        break;
    case 2:
        user.Delete();
        cout<<endl<<"请稍等  ~_~"<<endl;
        Sleep(3000);
        system("cls");
        display();//递归
        break;
    case 3:
        user.Updata();
        cout<<endl<<"请稍等  ~_~"<<endl;
        Sleep(3000);
        system("cls");;
        display();//递归
        break;
    case 4:
        user.Query();
        cout<<endl<<"按任意键返回  ~_~"<<endl;
        getchar();//作用:吃掉回车
        getchar();
        system("cls");
        display();//递归
        break;
    case 5:
        user.Scan();
        cout<<endl<<"按任意键返回  ~_~"<<endl;
        getchar();//作用:吃掉回车
        getchar();
        system("cls");
        display();//递归
        break;
    case 6:
        user.TransC_to_P();
        cout<<endl<<"请稍等  ~_~"<<endl;
        Sleep(3000);
        system("cls");
        display();//递归
        break;
    case 7:
        user.TransP_to_C();
        cout<<endl<<"请稍等 ~_~"<<endl;
        Sleep(3000);
        system("cls");
        display();//递归
        break;
    case 0:
        scan();//回到中转界面

    }
}
void Menu::operate()//开机界面
{
    cout<<"***********************************************************************************"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|               您的手机已开机,请选择您想要的功能                            |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|        1、通讯录       2、猜字游戏         3、关机                          |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"**********************************************************************************"<<endl;
    cout<<endl<<"请输入您的操作  :  "<<endl;
    int flag;
    cin>>flag;
    if(flag==1)  {
        system("cls");
        scan();//进入中转界面
    }
    else if(flag==2) game();//游戏函数
    else if(flag==3) return ;
    else {
      cout<<"您的输入无效呀!3s后返回主菜单"<<endl;
      Sleep(3000);
      system("cls");
      operate();//递归调用
    }
}
void Menu::game()//游戏函数
{
    system("cls");
    cout<<"***********************************************************************************"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|          欢迎来到猜数字游戏,你想挑战什么难度呢?                            |-|"<<endl;
    cout<<"-|                                                                             |-|"<<endl;
    cout<<"-|               1、easy    2、mid  3、hard     4、返回                        |-|"<<endl;
    cout<<"-|-----------------------------------------------------------------------------|-|"<<endl;
    cout<<"-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|"<<endl;
    cout<<"**********************************************************************************"<<endl;
    srand(time(0));
    int flag;
    int num;
    cout<<"请输入   :"<<endl;
    cin>>flag;
    if(flag==1) {
       num=rand()%11;int num=rand()%(n-m+1)+m;(产生[n,m]d的随机数)
    }
    else if(flag==2){
       num=rand()%101;
    }
    else if(flag==3)
    {
       num=rand()%1001;
    }
    else if(flag==4) {
        system("cls");
        operate();//回到开机界面
    }
    int input;
    int sum=0;
    system("cls");
    while(1)
    {
        cout<<"请输入数字   :"<<endl;
        cin>>input;
        if(input>num){
            cout<<"大了 !"<<endl;
            sum++;
        }
        else if(input<num){
            cout<<"小了 !"<<endl;
            sum++;
        }
        else {
            if(sum>5) {
                cout<<"还不错,再接再厉呀!"<<endl;break;
            }
            else cout<<"您真是太机智啦!"<<endl;break;
        }

    }
    if(Record>sum) {//记录最优次数
        Record=sum;
        cout<<endl<<"恭喜你创造了新纪录 : "<<sum<<"!"<<endl;
    }
    cout<<endl<<"请按任意键继续 ~_~ "<<endl;
    getchar();
    getchar();
    system("cls");
    operate();//回到开机界面


}
int Menu::Record=1000000;//最优记录一开始是大值
#endif
int main()
{
  Menu menu;
  menu.operate();//调用菜单类开机界面函数
}

 

源码实现了如下功能: 1.2 系统功能分析 1.2.1 基本功能 支持以下信息的录入: (1)基本信息:姓名、手机号码、电话、电子邮箱、生日、所属组、备注、相片 (2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、邮编、电话、传真 (3)网络信息:个人主页、即时通信工具及号码、备用邮箱 (4)家庭资料:国家、省份、城市、地址、邮编、电话 1.2.2 查询功能 (1)默认显示所有条目 (2)模糊查询:可以按姓名、姓名的汉语拼音的声母或全拼查询。支持模糊查询,即输入部分数据后,可以查询出符合条件的全部条目。如:输入“张”,列出所有名字中有“张”的条目;输入“xl”,列出声母为该2个字母的所有条目。 (写该实验报告时,暂未实现按手机号码、电话号码查询。) (3)指定分组后,列出某分组的所有条目。查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一个汉语拼音的字母分类。 1.2.3 删除和修改功能 (1)选中单个联系人后,可以修改其内容,可以删除该联系人 (2)选中一个分组后,可以删除该分组,同时删除分组下的全部联系人 (3)支持情况账户下的所有联系人数据 1.2.4 导入和导出 支持将账户下的所有文本文档联系人数据导出为CSV格式文件,支持将CSV文件导入到账户,并能够与主流手机或其他通讯录软件交换数据。 1.2.5 通讯录的显示 显示查询结果,可以设置一个条目可以显示或不显示哪些内容。 1.2.6 通讯录数据的录入 对于新建联系人,保存时如果有同名或同电话号码时,给出提示。 1.2.7 联系人星标 支持一键收藏联系人,联系人加星标后更加方便于用户查找与管理。 【系统设计文档】、【系统需求分析文档】、【系统实验报告】、【答辩展示PPT】另见我的资源……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值