⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tongxun.cpp

📁 实现通信功能
💻 CPP
字号:
#include <stdio.h>
#include <malloc.h>  //得到指向大小为Size的内存区域的首字节的指针//
#include <string.h>
#include <stdlib.h>  //标准库函数//
#define NULL 0
#define LEN sizeof(struct txlproject)  //计算字节//
int n;
struct txlproject
{
char name[30];
char work[30];
char handset[30];
char email[30];
char address[30];
struct txlproject *next;
};
struct txlproject *shifang(struct txlproject *head); // 释放内存函数声明

///////////////     创建函数      /////////////////////////

struct txlproject *creat(void)
{
struct txlproject *head,*p1,*p2;
char name[20];
n=0;
p1=(struct txlproject *)malloc(LEN);
p2=p1;                              //强制内存转换//
printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");
printf("请输入姓名:"); gets(name);
if(strcmp(name,"0")!=0)
{
     strcpy(p1->name,name);
     printf("请输入职业:");     gets(p1->work);
     printf("请输入手机:");     gets(p1->handset);
     printf("请输入电子邮件:"); gets(p1->email);
  printf("请输入通讯地址:");  gets(p1->address);
     head=NULL;
     while(1)
     {
      n=n+1;   //记录通讯录人数个数//
      if(n==1)
       head=p1;
      else
       p2->next=p1;
      p2=p1;
      printf("请输入姓名:"); gets(name);
      if(strcmp(name,"0")==0)
      {
       break;
      }
      else
      {
       p1=(struct txlproject *)malloc(LEN);
       strcpy(p1->name,name);
       printf("请输入职业:"); gets(p1->work);
       printf("请输入手机:"); gets(p1->handset);
       printf("请输入电子邮件:"); gets(p1->email);
    printf("请输入通讯地址:");  gets(p1->address);
   }
     }
     p2->next=NULL;
     return(head);
}
else
{
     return 0;
}
}

/////////////////     输出函数     ///////////////////

void print(struct txlproject *head)
{
struct txlproject *p;
if(head!=NULL)
{
     p=head;
     printf("本通讯录现在共有%d人:\n",n);
     printf("---姓名-------职业--------手机-------Email-------通讯地址\n");
     printf("==================================\n");
     do
     {
      printf("== %s",p->name); printf("       ");
      printf("%s",p->work); printf("       ");
      printf("%s",p->handset); printf("       ");
      printf("%s",p->email); printf("       ");
      printf("%s",p->address); printf("       \n");
      p=p->next;
     }while(p!=NULL);
     printf("==================================\n");
}
else
     printf("通讯录为空,无法输出!\n");
}

////////////////////     增加函数     /////////////////////////

struct txlproject *insert(struct txlproject *head)
{
struct txlproject *p0,*p1,*p2;
char name[20];
p1=head;
printf("请输入增加的内容:\n");
printf("请输入姓名:"); gets(name);
if(strcmp(name,"0")==0)
{
     printf("姓名不能为0,增加失败!\n");
     return(head);
}
else
{
     p0=(struct txlproject *)malloc(LEN);
     strcpy(p0->name,name);
     printf("请输入职业:"); gets(p0->work);
     printf("请输入手机:"); gets(p0->handset);
     printf("请输入电子邮件:"); gets(p0->email);
     printf("请输入通讯地址:");  gets(p0->address);
     n=n+1;
     if(head==NULL)
     {
      head=p0;
      p0->next=NULL;
      return(head);
     }
     else
     {
      while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL))
      {
       p2=p1;
       p1=p1->next;
      }
      if(strcmp(p0->name,p1->name)<0||strcmp(p0->name,p1->name)==0)
      {
       if(head==p1)
       {
        head=p0;
       }
       else
       {
        p2->next=p0;
       }
       p0->next=p1;
      }
      else
      {
       p1->next=p0;
       p0->next=NULL;
      }
      return(head);
     }
}
}

////////////////     显示函数     /////////////////////

struct txlproject *xianshi(struct txlproject *head)
{
struct txlproject *p1,*p2;
char name[30];
int m;
if(head==NULL)
{
     printf("通讯录为空,无法显示!\n");
     return(head);
}
p1=head;
m=0;
printf("请输入需要显示人的姓名:");
gets(name);
while(p1!=NULL)
{
     while((strcmp(p1->name,name))!=0&&p1->next!=NULL)
     {
      p2=p1;
      p1=p1->next;
     }
     if(strcmp(p1->name,name)==0)
     {
      m++;
      printf("%s的通讯内容如下:\n",name);
      printf("---姓名--------职业--------手机-------Email------通讯地址\n");
      printf("==================================\n");
      printf("== %s",p1->name);printf("       ");
      printf("%s",p1->work);printf("       ");
      printf("%s",p1->handset);printf("       ");
      printf("%s",p1->email);printf("       ");
      printf("%s",p1->address); printf("       \n");
      printf("==================================\n");
     }
     p1=p1->next;
}
       if(m==0)
{
     printf("此人未在本通讯录中!\n");
}
return(head);
}

///////////////      排序函数     /////////////////////

struct txlproject *paixu(struct txlproject *head)
{
struct txlproject *p1,*p2;
int i,j;
struct txlproject1
{
     char name[30];
     char work[30];
     char handset[30];
     char email[30];
  char address[30];
};
struct txlproject1 px[200];
struct txlproject1 temp;
if(head==NULL)
{
     printf("通讯录为空,无法排序!\n");
     return(head);
}
p1=head;
for(i=0;i<n,p1!=NULL;i++)
{
     strcpy(px[i].name,p1->name);
     strcpy(px[i].work,p1->work);
     strcpy(px[i].handset,p1->handset);
     strcpy(px[i].email,p1->email);
     strcpy(px[i].address,p1->address);
     p2=p1;
     p1=p1->next;
}
     head=shifang(head);
for(j=0;j<n-1;j++)
{
     for(i=j+1;i<n;i++)
     {
      if(strcmp(px[i].name,px[j].name)<0)
      {
       temp=px[i];
       px[i]=px[j];
       px[j]=temp;
      }
     }
}
p1=(struct txlproject *)malloc(LEN);
p2=p1;
strcpy(p1->name,px[0].name);
strcpy(p1->work,px[0].work);
strcpy(p1->handset,px[0].handset);
strcpy(p1->email,px[0].email);
strcpy(p1->address,px[0].address);

head=p1;
for(i=1;i<n;i++)
{
           p1=(struct txlproject *)malloc(LEN);
     strcpy(p1->name,px[i].name);
     strcpy(p1->work,px[i].work);
     strcpy(p1->handset,px[i].handset);
     strcpy(p1->email,px[i].email);
     strcpy(p1->address,px[i].address);
     p2->next=p1;
     p2=p1;
}
p2->next=NULL;
printf("按姓名排序后为:\n");
print(head);
return(head);
}

/////////////    姓名查找函数      /////////////////////

struct txlproject *chazhao(struct txlproject *head)
{
    struct txlproject *p1,*p2;
    int m;
    char name[30];
    if(head==NULL)
 {
     printf("通讯录为空,无法分类查找!\n");
     return(head);
 }
p1=head;
printf("********************\n");
printf("**  请输入需要查找的姓名  **\n");
printf("********************\n");
m=0;
gets(name);
     while(p1!=NULL)
     {
      while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
      {
       p2=p1;
       p1=p1->next;
      }
      if(strcmp(p1->name,name)==0)
      {
       m++;
       printf("你查找的内容是:\n");
       printf("+++++++++++++++++++++++++++++++++++\n");
       printf("++ %s        %s       %s       %s        %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);
       printf("+++++++++++++++++++++++++++++++++++\n");
      }
      p1=p1->next;

     if(m==0)
     {
      printf("此人未在本通讯录中!\n");
     }
     break;
  }

return(head);
}

/////////////       释放内存函数        /////////////////

struct txlproject *shifang(struct txlproject *head)
{
struct txlproject *p1;
while(head!=NULL)
{
     p1=head;
     head=head->next;
     free(p1);
}
return(head);
}

/////////////       文件写入函数      ////////////////////

void save(struct txlproject *head)
{
FILE *fp;
struct txlproject *p1;
char tong[30];
if(head==NULL)
{
     printf("通讯录为空,无法存储!\n");
     return;
}
printf("请输入保存后的文件名:");
gets(tong);
fp=fopen("(tong).txt","w");
if(fp==NULL)
{
     printf("cannot open file\n");
     return;
}
p1=head;
fprintf(fp,"姓名    职业      手机     Email     通讯地址\n");
for(;p1!=NULL;)
{
     fprintf(fp,"%s       %s       %s        %s       %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);
     p1=p1->next;
}
printf("保存完毕!\n");
fclose(fp);
}

////////////////      文件读出函数      ////////////////////

struct txlproject *load(struct txlproject *head)
{
FILE *fp;
char tong[30];
struct txlproject *p1,*p2;
printf("请输入要输出的文件名:");
gets(tong);
fp=fopen("(tong).txt","r");
if(fp==NULL)
{
     printf("此通讯录名不存在,无法输出!\n");
     return(head);
}
else
{
           head=shifang(head);
}
p1=(struct txlproject *)malloc(LEN);
fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);
if(feof(fp)!=0)
{
     printf("文件为空,无法打开!\n");
     return(head);
}
else
{
     rewind(fp);
     p2=p1;
     head=p1;
     n=0;
     while(feof(fp)==0)
     {
      fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);
      if(feof(fp)!=0)
       break;
      p2->next=p1;
      p2=p1;
      p1=(struct txlproject *)malloc(LEN);
      n=n+1;
     }
     p2->next=NULL;
     p1=head;
     head=head->next;
     n=n-1;
     free(p1);
     print(head);
     printf("打开完毕!\n");
     return(head);
}
fclose(fp);
}

/////////////       综合操作函数       //////////////////////

struct txlproject *zonghe(struct txlproject *head)
{
char num[10];
while(1)
{
     printf("*********************\n");
     printf("*** 1 姓名查找      ****\n");
     printf("*** 2 单个显示      ****\n");
     printf("*** 3 增加          ****\n");
     printf("*** 4 退出          ****\n");
     printf("*********************\n");
     printf("请输入您选择的操作:");
     gets(num);
     switch(*num)
     {
     case '1':
      {
       head=chazhao(head);                          //姓名查找
       print(head);
      }
      break;
     case '2':
      {
       head=xianshi(head);                          //显示
      }
      break;
     case '3':
      {
       head=insert(head);                           //增加
       print(head);
      }
      break;
     case '4':
     goto hello;
     break;
     default:
      printf("操作错误,此项不存在!\n");
      break;
     }
     if(strcmp(num,"6")==0)
      break;
hello:return(head);}
return(head);

}

////////////////     主函数     ///////////////////////

void main()
{
struct txlproject *head;
head=NULL;
char num[10];
printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
printf("*=*               程序说明                *=*\n");
printf("*=* 请及时保存创建完毕的通讯录内容!       *=*\n");
printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
while(1)
{
     printf("************************\n");
     printf("***     1 创建通讯录      ****\n");
     printf("***     2 按名字排序      ****\n");
     printf("***     3 综合操作        ****\n");
     printf("***     4 保存            ****\n");
     printf("***     5 打开            ****\n");
     printf("***     6 退出            ****\n");
     printf("************************\n");
     printf("请输入您选择的操作:");
     gets(num);
     switch(*num)
     {
     case '1':
      {
       if(head==NULL)
       {
        head=creat();                                //创建
        print(head);
       }
       else
       {
                       head=shifang(head);
        head=creat();                                //重新创建
        print(head);
       }
      }
      break;
     case '2':
      {
       head=paixu(head);                               //排序
      }
      break;
     case '3':
      {
       head=zonghe(head);                              //综合操作
      }
      break;
     case '4':
      {
       save(head);                                   //文件保存
                   print(head);
      }
      break;
     case '5':
      {
       head=load(head);                              //文件输出
      }
      break;
     case '6':
      head=shifang(head);
      break;
     default:
      printf("操作错误,此项不存在!\n");
      break;
     }
     if(strcmp(num,"6")==0)
      break;
}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -