silu通信录(C语言)


 - #include<stdio.h>
   #include<stdlib.h>
   #include<string.h>
   #define SIZE 20
   #define OK 1
   #define Error 0 typedef struct Node  //定义一个存储数据的结构体 {
       char name[SIZE];
       char s;
       long int number;
       char remark[SIZE];
       struct Node *next; } Node; typedef struct Node *LinkList; //定义了结构体指针
   
   /************创建一个空的结点,作为头结点***************/ LinkList
   CreateEmptyLinkList() {
       LinkList p;                         //名称名为 p
       p=(LinkList)malloc(sizeof(Node));   //手动申请一个堆区的地址,为结点提供空间 (p变量就代表地址长度和Node一样所占内存空间同样大小的Linklist)
       if(p==NULL)                             //判断创建地址是否成功
       {
           printf("CreateEmptyLinkList Error\n");
           exit(0);                         //表示正常退出
       }
       p->next=NULL;                        //指向下一个
       return p; }
   
   
   /************头插法添加新的联系人************************/
   
   int CreateLinkList(LinkList Q) {
       LinkList p;
       char name[SIZE],s,remark[SIZE];
       long int num;
       p=(LinkList)malloc(sizeof(Node));      //p变量就代表地址长度和Node一样所占内存空间同样大小的Linklist(获取Node的字段长度,强制转换成LinkList类型,再赋值与p)
       if(p==NULL)
       {
           printf("CreateLinkList Error\n");
           return Error;
       }
       printf("请输入姓名:");
       scanf("%s",name);
       strcpy(p->name,name);                  //将输入的name复制到p->name
       printf("请输入性别(m/男,f/女):");
       scanf("%s",&s);
       while(s!='m'&&s!='f')                  //判断输入性别格式是否正确
       {
           printf("输入错误\n");
           printf("请输入性别(m/男,f/女):");
           scanf("%s",&s);
       }
       printf("请输入电话号码:");
       scanf("%ld",&num);
       printf("请输入备注:");
       scanf("%s",remark);
       p->s=s;                                  //s的值赋予p->s
       p->number=num;                           //num的值赋予p->number
       strcpy(p->remark,remark);                //将remake复制到p->remake
       p->next=Q->next;                         //p节点指向Q的下一个数据
       Q->next=p;                               //p的值赋予Q->next
       return OK; } /*********************制作原始联系人信息****************/ int FirstCreateLinkList(LinkList Q) {
       LinkList x,y,z,a,b,c,d;
       x=(LinkList)malloc(sizeof(Node));
       if(x==NULL)
       {
           printf("CreateLinkList Error\n");
           return Error;
       }
       strcpy(x->name,"yan");
       x->s='m';
       x->number=10110;
       x->next=Q->next;
       strcpy(x->remark,"yan");
       Q->next=x;
       y=(LinkList)malloc(sizeof(Node));
       if(y==NULL)
       {
           printf("CreateLinkList Error\n");
           return Error;
       }
       strcpy(y->name,"shi");
       y->s='f';
       y->number=11100;
       strcpy(y->remark,"shi");
       y->next=Q->next;
       Q->next=y;
       z=(LinkList)malloc(sizeof(Node));
       if(z==NULL)
       {
           printf("CreateLinkList Error\n");
           return Error;
       }
       strcpy(z->name,"思路");
       z->s='m';
       z->number=10000;
       strcpy(z->remark,"思路");
       z->next=Q->next;
       Q->next=z;
       return OK; } /*****************按姓名删除一个联系人****************************/
   
   int DeleteNameLinkList(LinkList L,char name1[SIZE]) {
       LinkList p,q;
       p=L;
       while(p->next && strcmp(p->next->name,name1))
       {
           p=p->next;
       }
       if(!p->next)
       {
           printf("该通讯录没有要删除的联系人,删除失败!\n");
           return Error;
       }
       else
       {
           q=p->next;
           printf("已删除联系人:\n");
           printf("姓名:%s\n",q->name);
           if(q->s=='m')
               printf("性别:男\n");
           else
               printf("性别:女\n");
           printf("电话号码:%ld\n",q->number);
           printf("备注:%s\n",q->remark);
   
           p->next=q->next;
           free(q);
           return OK;
       } } /*****************按号码删除一个联系人****************************/
   
   int DeleteNumLinkList(LinkList L,long int j) {
       LinkList p,q;
       p=L;
       while((p->next->number!=j)&&((p->next)!=NULL))
       {
           p=p->next;
           if((p->next)==NULL)
           {
               printf("该通讯录没有要删除的联系人,删除失败!\n");
               return Error;
           }
       }
       q=p->next;
       printf("已删除联系人:\n");
       printf("姓名:%s\n",q->name);
       if(q->s=='m')
           printf("性别:男\n");
       else
           printf("性别:女\n");
       printf("电话号码:%ld\n",q->number);
       printf("备注:%s\n",q->remark);
       p->next=q->next;
       free(q);
       return OK; }
   
   /******************按姓名查找一个联系人****************************/ int
   FindNameLinkList(LinkList L,char name2[SIZE]) {
       LinkList p,q;
       p=L;
       while(strcmp(p->next->name,name2)!=0&&(p->next!=NULL))
       {
           p=p->next;
           if(p->next==NULL)
           {
               printf("该通讯录没有您要找的人,查找失败\n");
               return Error;
           }
       }
       q=p->next;
       printf("找到记录:\n");
       printf("姓名:%s\n",q->name);
       if(q->s=='m')
           printf("性别:男\n");
       else
           printf("性别:女\n");
       printf("电话号码:%ld\n",q->number);
       printf("备注:%s\n",q->remark);
       printf("*********************************\n");
       return OK; } /******************按号码查找一个联系人****************************/ int
   FindNumLinkList(LinkList L,long int j) {
       LinkList p,q;
       p=L;
       while((p->next->number!=j)&&((p->next)!=NULL))
       {
           p=p->next;
           if((p->next)==NULL)
           {
               printf("该通讯录没有您要找的人,查找失败\n");
               return Error;
           }
       }
       q=p->next;
       printf("找到记录:\n");
       printf("姓名:%s\n",q->name);
       if(q->s=='m')
           printf("性别:男\n");
       else
           printf("性别:女\n");
       printf("电话号码:%ld\n",q->number);
       printf("备注:%s\n",q->remark);
       printf("*********************************\n");
       return OK; } /******************查找一个联系人****************************/ int
   FindLinkList(LinkList L) {
       LinkList head = L;
       printf("*********************************\n");
       printf("请输入查找联系人的方式:\n");
       printf("1:按姓名\n");
       printf("2:按号码\n");
       printf("0:返回\n");
       printf("*********************************\n");
       printf("请选择:");
       int k=3;   //确保下面while循环运行
       while(k)
       {
           scanf("%d",&k);
           char Delname1[SIZE];
           long int N;
           if(k>2||k<0)
           {
               printf("输入错误,请重新输入:");
               scanf("%d",&k);
               while(getchar()!='\n')
                   printf("\n");
           }
           switch(k)
           {
           case 1:
               printf("请输入姓名:");
               scanf("%s",Delname1);
               FindNameLinkList(head,Delname1);
               k=0;
               break;
           case 2:
               printf("请输入号码:");
               scanf("%ld",&N);
               FindNumLinkList(head,N);
               k=0;
               break;
           }
   
       } } /********************清空联系人信息*************************/ int ClearLinkList(LinkList L) {
       LinkList p,q;
       p=L->next;
       while(p)
       {
           q=p->next;
           free(p);
           p=q;
       }
       L->next=NULL;
       printf("清空所有联系人成功\n");
       return OK; } /*********************筛选所有男性联系人**********************/ int
   ScreenMaleLinkList(LinkList L) {
       LinkList p;
       p=L->next;
       int i=0;
       while(p)
       {
           if(p->s=='m')
           {
               printf("姓名:%s\n",p->name);
               if(p->s=='m')
                   printf("性别:男\n");
               else
                   printf("性别:女\n");
               printf("电话号码:%ld\n",p->number);
               printf("备注:%s\n",p->remark);
               printf("*********************************\n");
           }
           p=p->next;
           i++;
       }
       if(i==0&&!p)
       {
           printf("无男性联系人\n");
       }
       return OK; } /*********************筛选所女性联系人**********************/ int
   ScreenFemaleLinkList(LinkList L) {
       LinkList p;
       p=L->next;
       int i=0;
       while(p)
       {
           if(p->s=='f')
           {
               printf("姓名:%s\n",p->name);
               if(p->s=='m')
                   printf("性别:男\n");
               else
                   printf("性别:女\n");
               printf("电话号码:%ld\n",p->number);
               printf("备注:%s\n",p->remark);
               printf("*********************************\n");
           }
           p=p->next;
           i++;
       }
       if(i==0&&!p)
       {
           printf("无女性联系人\n");
       }
       return OK; } /************************通讯录功能界面*****************/ void FunctionalInterface() {
       printf("                                                              ********               *********                 \n");
       printf("*********************************                            ************            *********                 \n");
       printf(" 欢迎使用超级玛丽的通讯录!                                  ####....#.              *********                 \n");
       printf("********************************                           #..###.....##....          *******                \n");
       printf("& 1:输出全部联系人信息         &                           ###.......######            *****               \n");
       printf("& 2:插入新的联系人             &                              ...........               ***             \n");
       printf("& 3:删除一个联系人             &                             ##*#######                  *            \n");
       printf("& 4:查找某个联系人             &                          ####*******######             ***            \n");
       printf("& 5:清空全部联系人信息         &                         ...#***.****.*###....         ******              \n");
       printf("& 6:筛选全部男性联系人信息     &                         ....**********##.....        ********                \n");
       printf("& 7:筛选全部女性联系人信息     &                         ....****    *****....       **********                 \n");
       printf("& 0:退出                       &                           ####        ####          **********               \n");
       printf("********************************                         ######        ######        **********                 \n"); } /*****************删除一个联系人****************************/ int
   DeleteLinkList(LinkList L) {
       LinkList head = L;
       printf("*********************************\n");
       printf("请输入删除联系人的方式:\n");
       printf("1:按姓名\n");
       printf("2:按号码\n");
       printf("0:返回\n");
       printf("*********************************\n");
       printf("请选择:");
       int i=3;
       while(i)
       {
           scanf("%d",&i);
           char Delname[SIZE];
           long int j;
           if(i>2||i<0)
           {
               printf("输入错误,请重新输入:");
               scanf("%d",&i);
               while(getchar()!='\n')
                   printf("\n");
           }
           switch(i)
           {
           case 1:
               printf("请输入姓名:");
               scanf("%s",Delname);
               DeleteNameLinkList(head,Delname);
               i=0;
               break;
           case 2:
               printf("请输入号码:");
               scanf("%ld",&j);
               DeleteNumLinkList(head,j);
               i=0;
               break;
           }
   
       }
   
   } /*******************遍历打印整个链表**********************/ int
   PrintfLinkList(LinkList L) {
       LinkList p,q;
       q=p=L->next;
       int i=0;
       while(q)
       {
           i++;
           q=q->next;
           if(i==0&&!p)
           {
               printf("无联系人\n");
           }
       }
       printf("共有%d个联系人\n",i);
       while(p)
       {
           printf("*********************************\n");
           printf("姓名:%s\n",p->name);
           if(p->s=='m')
               printf("性别:男\n");
           else
               printf("性别:女\n");
           printf("电话号码:%ld\n",p->number);
           printf("备注:%s\n",p->remark);
           p=p->next;
       }
       printf("*********************************\n");
       return OK;
   
   } /*******************主函数控制函数**********************/ int main() {
       system("title 超级玛丽的通讯录");//设置标题
       system("mode con cols=120 lines=30");//设置界面
       system("color 75");//设置颜色
       LinkList head;
       head=CreateEmptyLinkList();
       FirstCreateLinkList(head);
       FunctionalInterface();
       int a=1;
       while(a)
       {
           printf("请输入您要选择的功能:");
           scanf("%d",&a);
           if(a>7||a<0)
           {
               printf("输入错误,请重新输入:");
               scanf("%d",&a);
               while(getchar()!='\n')
                   printf("\n");
           }
           switch(a)
           {
           case 1:
               PrintfLinkList(head);//输入1,就访问功能一的头结点,遍历打印整个链表
               break;
           case 2:
               CreateLinkList(head);//输入2,就访问功能二的头结点,头插法添加新的联系人
               break;
           case 3:
               DeleteLinkList(head);//输入3,就访问功能三的头结点,删除一个联系人
               break;
           case 4:
               FindLinkList(head);//输入4,就访问功能四的头结点,查找一个联系人
               break;
           case 5:
               ClearLinkList(head);//输入5,就访问功能五的头结点,清空联系人信息
               break;
           case 6:
               ScreenMaleLinkList(head);//输入6,就访问功能六的头结点,筛选所有男性联系人
               break;
           case 7:
               ScreenFemaleLinkList(head);//输入7,就访问功能七的头结点,筛选所女性联系人
               break;
           }
           if(a!=0)                         //输入0,结束应用
           {
               printf("请按回车键继续:");
               getchar();
               if(getchar()=='\n')
                   FunctionalInterface();
           }
       }
       printf("                                      超级玛丽:欢迎再次使用\n");
       printf("                ********\n");
       printf("               ************\n");
       printf("               ####....#.\n");
       printf("             #..###.....##....\n");
       printf("             ###.......######              ###            ###\n");
       printf("                ...........               #...#          #...#\n");
       printf("               ##*#######                 #.#.#          #.#.#\n");
       printf("            ####*******######             #.#.#          #.#.#\n");
       printf("           ...#***.****.*###....          #...#          #...#\n");
       printf("           ....**********##.....           ###            ###\n");
       printf("           ....****    *****....\n");
       printf("             ####        ####\n");
       printf("           ######        ######\n");
       printf("##############################################################\n");
       printf("#...#......#.##...#......#.##...#......#.##------------------#\n");
       printf("###########################################------------------#\n");
       printf("#..#....#....##..#....#....##..#....#....#####################\n");
       printf("##########################################    #----------#\n");
       printf("#.....#......##.....#......##.....#......#    #----------#\n");
       printf("##########################################    #----------#\n");
       printf("#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#\n");
       printf("##########################################    ############\n");
       return 0; }

上一篇:带头结点的单向链表应用实例


下一篇:超硬核!学霸把操作系统经典算法给敲完了!要知行合一