课程设计c++手机通讯录

来源:互联网 发布:大学access数据库作业 编辑:程序博客网 时间:2024/04/26 14:57

此程序即使使用链表完成简单功能,实现插入删除查找编辑等功能!

使用知识即为c语言课本指针部分,或者说是数据结构链表基本操作部分!

#include<stdio.h>
#include<iostream>
#include<iomanip>//控制输出格式 
#include<fstream>
#include<string>
#include<conio.h> 
#include<windows.h>
#include<malloc.h> 
#define FILE "businesscard.txt"
using namespace std;
class businesscard
{
 public:
    string name;
    string mobilenumber;
    string birthday;
    string telephonenumber;
    string sex;    
    string address;
    string email;
    string relationship;
    
 public: 
    //函数声明 
   void insert();
   void edit();
   struct tongxunlu* deletet();
   void query();
   void show();
   void save();
   friend istream & operator>>(istream &input,businesscard &card);
   friend ostream & operator<<(ostream &output,businesscard &card);
};
istream & operator>>(istream &input,businesscard &card)
{
input>>card.name>>card.mobilenumber>>card.birthday>>card.telephonenumber>>
           card.sex>>card.address>>card.email>>card.relationship;
return input;
}
ostream & operator<<(ostream &output,businesscard &card)
{
output<<card.name<<" "<<card.mobilenumber<<" "<<card.birthday<<" "<<
        card.telephonenumber<<" "<<card.sex<<" "<<card.address<<" "<<card.email
         <<" "<<card.relationship;
return output;
}
struct tongxunlu
{
    businesscard card;
    tongxunlu *next;
}; 
     //新建功能 
void businesscard::insert()                   

   // FILE*fp;
    //if((fp=fopen(FILE,"r"))==NULL)
    //{
     //   cout<<"cannot open the file"<<endl;
     //   exit(0);
    //}
    // cout<<"            输入姓名生日等信息"<<endl; 
 // string sign;
  //cout<<"           输入需要新建的联系人姓名"<<endl;
  //cin>>sign;   
  //fscanf(fp,"%s",&temp);
     //if(temp!=sign)     
  ifstream fin;     //建立文件流对象 
  fin.open(FILE);     //在适当时候打开 
  cout<<"            输入姓名生日等信息"<<endl; 
  string sign;
  cout<<"           输入需要新建的联系人姓名"<<endl;
  cin>>sign;
  if(fin)         //如果文件不为空 
  while(!fin.eof())      //当文件未到末尾时 
  {
   fin>>name;           //从文件中读入name 
  if(name==sign)               //如果输入的sign在文件中存在,跳出 
  break;
     //fclose(fp);n
 
 fin.close();       //关闭文件 
               
if(name!=sign)           //如果联系人不存在
   { 
   cout<<"此联系人不存在,按任意键将其保存在通讯录中"<<endl;
   cout<<"输入姓名"<<endl; 
   cin>>name;             //姓名 
   cout<<"输入移动电话 "<<endl; 
   cin>>mobilenumber;    // 移动电话 
   cout<<"输入生日"<<endl; 
   cin>>birthday;   //生日 
   cout<<"输入电话号码 "<<endl;  
   cin>>telephonenumber;//电话号码 
   cout<<"性别"<<endl; 
   cin>>sex;             //性别 
   cout<<"地址"<<endl; 
   cin>>address;    //地址 
   cout<<"电子邮箱"<<endl; 
   cin>>email;   //电子邮箱 
   cout<<"关系"<<endl; 
   cin>>relationship;   //关系 
   cout<<"添加联系人成功,任意键返回主页面"<<endl; 
   ofstream fout(FILE,ios::app);     //追加方式写入文件中 
   fout.setf(ios::left);                 //设置输出格式状态为左对齐 
   fout<<setw(11)<<name<<setw(14)<<mobilenumber<<setw(12)<<birthday<<setw(14)<<
   telephonenumber<<setw(7)<<sex<<setw(8)<<address<<setw(22)<<email<<setw(4)
   <<relationship<<endl;//控制输出格式,不足用空格补位 
   fout.unsetf(ios::left);               //  终止已设置的输出格式状态 
   fout.close();                       //关闭文件 
   
  }
   else
   {
      cout<<"此联系人已存在"<<endl; 
   } 

   
   //分类保存 
   //根据分类(朋友,亲人,同事,同学)新建 
void businesscard::save()
{
   fstream fin;
   fin.open(FILE); 
   cout<<"选择您需要新建的分类关系"<<endl;
   cout<<"1 朋友"<<endl;
   cout<<"2 亲人"<<endl; 
   cout<<"3 同事"<<endl;
   cout<<"4 同学"<<endl;
   int e;
   cin>>e;
   switch(e)
   {
   case(1):
     {
     cout<<"输入姓名"<<endl; 
     cin>>name;             //姓名 
     cout<<"输入移动电话 "<<endl; 
     cin>>mobilenumber;    // 移动电话 
     cout<<"输入生日"<<endl; 
     cin>>birthday;   //生日 
     cout<<"输入电话号码 "<<endl;  
     cin>>telephonenumber;//电话号码 
     cout<<"性别"<<endl; 
     cin>>sex;             //性别 
     cout<<"地址"<<endl; 
     cin>>address;    //地址 
     cout<<"电子邮箱"<<endl; 
     cin>>email;   //电子邮箱 
     relationship="朋友";    //关系为朋友 
     cout<<"添加成功,任意键返回主页面"<<endl;
     } break;
    case(2):
     {
     cout<<"输入姓名"<<endl; 
     cin>>name;             //姓名 
     cout<<"输入移动电话 "<<endl; 
     cin>>mobilenumber;    // 移动电话 
     cout<<"输入生日"<<endl; 
     cin>>birthday;   //生日 
     cout<<"输入电话号码 "<<endl;  
     cin>>telephonenumber;//电话号码 
     cout<<"性别"<<endl; 
     cin>>sex;             //性别 
     cout<<"地址"<<endl; 
     cin>>address;    //地址 
     cout<<"电子邮箱"<<endl; 
     cin>>email;   //电子邮箱 
     relationship="亲人";     //关系为亲人 
     cout<<"添加成功,任意键返回主页面"<<endl;
     } break;
     case(3):
     {
     cout<<"输入姓名"<<endl; 
     cin>>name;             //姓名 
     cout<<"输入移动电话 "<<endl; 
     cin>>mobilenumber;    // 移动电话 
     cout<<"输入生日"<<endl; 
     cin>>birthday;   //生日 
     cout<<"输入电话号码 "<<endl;  
     cin>>telephonenumber;//电话号码 
     cout<<"性别"<<endl; 
     cin>>sex;             //性别 
     cout<<"地址"<<endl; 
     cin>>address;    //地址 
     cout<<"电子邮箱"<<endl; 
     cin>>email;   //电子邮箱 
     relationship="同事";  //关系为同事 
     cout<<"添加成功,任意键返回主页面"<<endl;
     } break;
     case(4):
     {
     cout<<"输入姓名"<<endl; 
     cin>>name;             //姓名 
     cout<<"输入移动电话 "<<endl; 
     cin>>mobilenumber;    // 移动电话 
     cout<<"输入生日"<<endl; 
     cin>>birthday;   //生日 
     cout<<"输入电话号码 "<<endl;  
     cin>>telephonenumber;//电话号码 
     cout<<"性别"<<endl; 
     cin>>sex;             //性别 
     cout<<"地址"<<endl; 
     cin>>address;    //地址 
     cout<<"电子邮箱"<<endl; 
     cin>>email;   //电子邮箱 
     relationship="同学";   //关系为同学 
     cout<<"添加成功,任意键返回主页面"<<endl;
     } break;
     default:cout<<"此分组不存在"<<endl;break;
 }   
   ofstream fout(FILE,ios::app); 
   fout.setf(ios::left);
   fout<<endl;
   fout<<setw(11)<<name<<setw(14)<<mobilenumber<<setw(12)<<birthday<<setw(14)<<
   telephonenumber<<setw(7)<<sex<<setw(8)<<address<<setw(22)<<email<<setw(4)
   <<relationship<<endl;//控制输出格式,不足用空格补位 
   fout.unsetf(ios::left);
   fout.close();



       //创建链表 
struct tongxunlu*creat()
{
   struct tongxunlu *head;
   struct tongxunlu *p1,*p2;
   head=p1=p2=new tongxunlu;//申请结新点 
   p1->next=NULL;//将新结点的指针置空 
   ifstream fin(FILE);//打开文件 
   if(fin)
   while(!fin.eof())      //当文件未到末尾时 
{  
     fin>>p1->card;   //为新结点赋值 
     p1->next=NULL;   // 将新结点指针置空 
     if(p1!=head)
      p2->next=p1;//非空表,链接到表尾 
     p2=p1;
     p1=new tongxunlu;      //申请下一个新结点 
   }
   
     p1=head;
     while(p1!=NULL)
     {
// cout<<p1->card;若添加此句,会显示所有联系人信息 
p1=p1->next;
     }
   return head;
    

   
 //删除功能
struct tongxunlu* businesscard::deletet()                                       

    cout<<"欢迎进入删除选项"<<endl;
    cout<<"选择查找方式"<<endl;
    cout<<"1,姓名;2,电话号码;3,移动电话;"<<endl; 
    int e;
    cin>>e;
    struct tongxunlu*head=creat();
    //ifstream fin;
    //fin.open(FILE);
    struct tongxunlu*p1,*p2;
    p1=p2=head;
    if(1==e)                  //按姓名查找并删除 
    {
    cout<<"输入需要删除的联系人姓名"<<endl; 
    string sign;
    cin>>sign; 
    if(head==NULL)       //链表为空 
    cout<<"list is null"<<endl;
    else                     //非空 
    {
      p1=head;
      while(p1!=NULL)    
      {
          if(p1->card.name==sign)
          break;
          p2=p1;
        p1=p1->next;  //跟踪链表的增长,指针后移 
      }    
      if(p1==NULL) 
         cout<<"此联系人不存在"<<endl;
        else if(p1->card.name==sign) //找到要删除的结点 
        {
           if(p1==head)     //表头结点 
             {
               head=p1->next;
               cout<<"成功删除该联系人相关信息"<<endl;
               delete p1;  //释放被删除结点 
             }
           else
            {
               p2->next=p1->next; //表中结点 
               p1->next=NULL;
               cout<<"成功删除该联系人相关信息"<<endl;
               delete p1;
            }
        }
        
     
     }  
     
  }     
        
    if(2==e)                  //按电话号码查找并删除 
    {
    cout<<"输入需要删除的联系人电话号码"<<endl; 
    string sign;
    cin>>sign; 
    if(head==NULL)       //链表为空 
    cout<<"list is null"<<endl;
    else                     //非空 
    {
      p1=head;
      while(p1!=NULL)      
      {
          if(p1->card.name==sign)
          break;
          p2=p1;
        p1=p1->next;  //跟踪链表的增长,指针后移 
      }    
      if(p1==NULL) 
         cout<<"此联系人不存在"<<endl;
        else if(p1->card.name==sign) //找到要删除的结点 
        {
           if(p1==head)     //表头结点 
             {
               head=p1->next;
               cout<<"成功删除该联系人相关信息"<<endl;
               delete p1;  //释放被删除结点 
             }
           else
            {
               p2->next=p1->next; //表中结点 
               p1->next=NULL;
               cout<<"成功删除该联系人相关信息"<<endl;
               delete p1;
            }
        }
        
     
     }  
  }     
     if(3==e)                  //按移动电话查找并删除 
    {
    cout<<"输入需要删除的联系人移动电话"<<endl; 
    string sign;
    cin>>sign; 
    if(head==NULL)       //链表为空 
    cout<<"list is null"<<endl;
    else                     //非空 
    {
      p1=head;
      while(p1!=NULL)      
      {
          if(p1->card.name==sign)
          break;
          p2=p1;
        p1=p1->next;  //跟踪链表的增长,指针后移 
      }    
      if(p1==NULL) 
         cout<<"此联系人不存在"<<endl;
        else if(p1->card.name==sign) //找到要删除的结点 
        {
           if(p1==head)     //表头结点 
             {
               head=p1->next;
               cout<<"成功删除该联系人相关信息"<<endl;
               delete p1;  //释放被删除结点 
             }
           else
            {
               p2->next=p1->next; //表中结点 
               p1->next=NULL;
               cout<<"成功删除该联系人相关信息"<<endl;
               delete p1;
            }
        }
        
     
     }  
  }     


        return head;                           
}                 
                 
                  
  //编辑功能
void businesscard::edit()         
{  
    struct tongxunlu*head=creat();
    //ifstream fin;
    //fin.open(FILE);
    struct tongxunlu*p1,*p2;
    string sign;
    cout<<"输入您需要编辑的联系人姓名"<<endl;
    cin>>sign;
    if(head==NULL)       //链表为空 
    cout<<"list is null"<<endl;
    else                     //非空 
    {
      p1=head;
      while(p1!=NULL) 
                    
      {
        if(p1->card.name==sign)
          break;
        p2=p1;
        p1=p1->next;  //跟踪链表的增长,指针后移 
      }    
      if(p1==NULL) 
         cout<<"此联系人不存在"<<endl;
          else if(p1->card.name==sign)//找到要编辑的结点 
        {
          cout<<"原信息如下"<<endl;
          cout<<p1->card.name<<p1->card.birthday<<p1->card.mobilenumber<<
          p1->card.telephonenumber<<p1->card.sex<<p1->card.address
          <<p1->card.email<<p1->card.relationship<<endl; 
          
     cout<<"输入需要修改的项目"<<endl;
     cout<<"1  姓名name"<<endl;
     cout<<"2  生日birthday"<<endl;
     cout<<"3  移动电话mobilenumber"<<endl;
     cout<<"4  电话号码telephonenumber"<<endl;
     cout<<"5  性别sex"<<endl;
     cout<<"6 地址address"<<endl;
     cout<<"7电子邮箱email"<<endl;
     cout<<"8关系relationship"<<endl;
     int e;
     cin>>e;
      string s;  
     cout<<"输入需要修改的项目"<<endl;
     switch(e)
     {
      case(1):cout<<"输入姓名";cin>>s;p1->card.name=s;break;
      case(2):cout<<"输入生日";cin>>s;p1->card.birthday=s;break;
      case(3):cout<<"输入电话号码";cin>>s;p1->card.mobilenumber=s;break;
      case(4):cout<<"输入移动电话";cin>>s;p1->card.telephonenumber=s;break;
      case(5):cout<<"输入性别";cin>>s;p1->card.sex=s;break;
      case(6):cout<<"输入地址";cin>>s;p1->card.address=s;break;
      case(7):cout<<"输入电子邮箱";cin>>s;p1->card.email=s;break;
      case(8):cout<<"输入关系";cin>>s;p1->card.relationship=s;break;
      default:cout<<"此项目不存在,请重新输入" ;
      }
  }
  else
  {
     cout<<"此联系人不存在,您可以选择1键新建此联系人信息"<<endl; 
  } 
  }                
 }                 
                  
                          //查找功能 
void businesscard::query()                        
{
    struct tongxunlu*head=creat();
    //ifstream fin;
    //fin.open(FILE);
    struct tongxunlu*p1,*p2;
    p1=p2=head;
 cout<<"欢迎启用查找功能"<<endl;
 cout<<"请选择查找方式"<<endl;
 cout<<"1,姓名;2,电话号码;3,移动电话;"<<endl; 
 int e;
 cin>>e;
 switch(e)
 {
  case(1):
  {


  cout<<"输入需要查找的联系人姓名"<<endl; 
  string sign;
  cin>>sign;
  //if(fin)
  
  if(head==NULL)       //链表为空 
    cout<<"list is null"<<endl;
    else                     //非空 
    {
      p1=head;
      while(p1!=NULL) 
                   
      {
        if(p1->card.name==sign)
          break;
        p2=p1;
        p1=p1->next;  //跟踪链表的增长,指针后移 
      }    
      if(p1==NULL) 
         cout<<"此联系人不存在"<<endl;
          else if(p1->card.name==sign)//找到要编辑的结点 
        {
          cout<<"原信息如下"<<endl;
           cout<<p1->card.name<<"  "<<p1->card.birthday<<"  "<<p1->card.mobilenumber
          <<"  "<<p1->card.telephonenumber<<"  "<<p1->card.sex<<"  "<<
          p1->card.address<<"  "<<p1->card.email<<"  "<<p1->card.relationship
          <<"  "<<endl; 
        } 
    } 
}break;
 case(2):
  { 
  cout<<"输入需要查找的联系人电话号码"<<endl; 
  string sign;
  cin>>sign;
  //if(fin)
  
  
  if(head==NULL)       //链表为空 
    cout<<"list is null"<<endl;
    else                     //非空 
    {
      p1=head;
      while(p1!=NULL) 
                    
      {
        if(p1->card.name==sign)
          break;
        p2=p1;
        p1=p1->next;  //跟踪链表的增长,指针后移 
      }    
      if(p1==NULL) 
         cout<<"此联系人不存在"<<endl;
          else if(p1->card.name==sign)//找到要编辑的结点 
        {
          cout<<"原信息如下"<<endl;
          cout<<p1->card.name<<"  "<<p1->card.birthday<<"  "<<p1->card.mobilenumber
          <<"  "<<p1->card.telephonenumber<<"  "<<p1->card.sex<<"  "<<
          p1->card.address<<"  "<<p1->card.email<<"  "<<p1->card.relationship
          <<"  "<<endl; 
       }
   } 
}break;
   case(3):
  {
  
  cout<<"输入需要查找的联系人移动电话"<<endl; 
  string sign;
  cin>>sign;
  //if(fin)
  
  if(head==NULL)       //链表为空 
    cout<<"list is null"<<endl;
    else                     //非空 
    {
      p1=head;
      while(p1!=NULL) 
                    
      {
        if(p1->card.name==sign)
          break;
        p2=p1;
        p1=p1->next;  //跟踪链表的增长,指针后移 
      }    
      if(p1==NULL) 
         cout<<"此联系人不存在"<<endl;
          else if(p1->card.name==sign)//找到要查找的结点 
        {
          cout<<"原信息如下"<<endl;
          cout<<p1->card.name<<"  "<<p1->card.birthday<<"  "<<p1->card.mobilenumber
          <<"  "<<p1->card.telephonenumber<<"  "<<p1->card.sex<<"  "<<
          p1->card.address<<"  "<<p1->card.email<<"  "<<p1->card.relationship
          <<"  "<<endl; 
      }
     } 
 }break;
   default:
   cout<<"输入信息有误,请重新选择 1,姓名;2,电话号码;3,移动电话;"<<endl;
   break;
}           
}       
                   
        //显示功能          
void businesscard::show()                                
{  
 cout<<"欢迎进入显示项目"<<endl;         //输出文件中已存在的全部通讯记录
 char buffer[300];         //buffer临时存储器 
 fstream out;
 out.open(FILE,ios::in);   //以输入方式打开 
 while(!out.eof())                           //未到文件末尾时 
 {
 out.getline(buffer,300,'\n');//getline(char *,int,char)
  //表示该行字符达到300个或遇到换行就结束
 cout<<buffer<<endl;
  }
 out.close();
 cin.get();//cin.get() 是用来读取回车键的,如果没这一行,输出的结果一闪就消失了
    
}                    




int main()

  businesscard bcard;      //定义类的成员变量 


  system("mode con cols=130 lines=50");//改变宽高
  system("color 1e");//改变颜色
                                       
         //选择要完成的项目
//例如,用 system("color 0A"); 其中color后面的0是背景色代号,A是前景色代号。
//各颜色代码如下:
//0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 
//A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色      
  for(int i=0;i<10;i++)
{  
  cout<< ""<<endl; 
 }
  cout << "                  *****************************************"<<endl; 
  cout << "                  ****Welcome to the businesscard system!**"<<endl; 
  cout << "                  *****************************************"<<endl;   
  getch();
  system("CLS"); 


for(;;)
{
    cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;
cout << "                   *****************************************"<<endl; 
cout << "                   ****Welcome to the businesscard system!**"<<endl; 
cout << "                   *****************************************"<<endl; 
{
 cout<<"                   ********根据数字选择您需要完成的项目*****"<<endl;  
 cout<<"                   ******1   for inser         插入    *****"<<endl;
 cout<<"                   ******2   for edit          编辑    *****"<<endl;
 cout<<"                   ******3   for deletet       删除    *****"<<endl;
 cout<<"                   ******4   for query         查询    *****"<<endl;
 cout<<"                   ******5   for show      显示所有    *****"<<endl; 
 cout<<"                   ******6   for save      分类保存    *****"<<endl;
 cout<<"                   ******0   for out(exit)     退出    *****"<<endl;  
 cout<<"                   *****************************************"<<endl; 
  int e; 
  cin>>e; 
  switch(e)  
     {
         case(1):bcard.insert();break;  
         case(2):bcard.edit(); break; 
         case(3):bcard.deletet();break;
         case(4):bcard.query();break;
         case(5):bcard.show();break;
         case(6):bcard.save();break;
         case(0):return 0;break;     //退出系统 
         
     }      
   getch();              //任意键继续 
   system("CLS");          //完成清屏功能 
   


}
}      
       getch();       
       return 0;
}    

1 0
原创粉丝点击