您的位置:首页 > 理论基础 > 数据结构算法

数据结构电话号码本源程序(链表)

2015-07-17 09:03 246 查看
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>  

#define ID struct tel 

struct tel

{

      char name[8];

      char num[11];

      ID * next;

};

    int m=0;

    ID* create()

    { 

             ID *head,*p1,*p2;

             void save(ID *head);

             char flag;

             head=p1=p2=NULL;

             printf("欢迎使用电话簿管理系统,按#键结束请按提示使用\n");

             while(1)

             {

                 p1= (ID*)malloc(sizeof(ID));

                 printf("请输入姓名\n");

                 scanf("%s",p1->name);

                 if(strcmp(p1->name,"#")==0) 

                 {

                     if(m==0)

                     {

                      printf("你输入了0条记录,单链表没有创建...\n");

                      free(p1);

                      return (head);

                     }

                     else

                     {

                         break;

                     }

                 }

                 printf("请输入电话号码: \n");

                 scanf("%s",p1->num);

                      if(head==NULL)

                      {

                          head=p1;

                          p2=p1;

                      }

                      else

                           {

                               p2->next=p1;

                               p2=p1;

                           }

                           m++;

             }

             p2->next=NULL;

             free(p1);

             printf("\n新建电话号码簿成功,共有%d个联系人,是否保存?Y/N \n",m);

             getchar();

             scanf("%c",&flag);

             if(flag=='y'||flag=='Y')

                 save (head);

                 else

                     printf("\n请在退出程序之前,保存当前的编辑工作!\n");

             return head;

        }

void print(ID *head)

{

        ID* temp;

        temp=head;

        system("cls");/*清屏*/ 

        printf("姓名: \t电话号码:\n");

        if(head==NULL)

        {

            printf("当前链表为空,请先创建新的链表或者加载文件\n");

           

        } else

            do

            {

               printf("%s\t%s\n",temp->name,temp->num);

               temp=temp->next;

               

            }while(temp!=NULL);

}

void save(ID *head)

{

       FILE *fp;

       ID* t ;  

       if ((fp=fopen("telephone.txt","w"))==NULL)

       {

           printf("打开文件失败!\n");

           getch();

           exit(1);

       }

      

       t=head;

       while(t!=NULL)

       {

          fwrite(t,sizeof(ID),1,fp);

          t=t->next;

       }

       fclose(fp);

       printf("文件保存成功\n");

}

    

   

    

ID* delete_(ID *head)

{

   
int i;
int j=1;

    ID *p,*q;

    char flag;

    p=head;

    printf("请输入要删除的位置: ");

    scanf("%d",&i);
while(p!=NULL && j<i-1 )
{
p=p->next;
++j;
}
if(p==NULL){ printf("删除位置错误\n"); return (head);}
if (i==1)
{
head=head->next;
}
else{
q=p->next;
   p->next=q->next;
free(q);
}
printf("删除电话号码成功,是否存盘?Y/N?\n");

    getchar();/*吸收回车*/ 

    scanf("%c",&flag);

    if(flag=='y'||flag=='Y')

        save(head);

    else

        printf("请在退出之前保存当前的编辑工作!\n");

    return(head);

}

ID* Initlist(ID* head)


ID *p;
if(!head)


       return 0; 

       printf("分配存储失败\n");

else
while (head->next!=NULL) 
{
p=head->next; 
head->next=p->next;
}
free(head);

printf("文件已清空\n");

return  0; 

}

/*插入*/

ID* append(ID* head)

{
int j=0;
int i;

    char flag;

    ID *p,*info;

    p=head;

    info=(ID*)malloc(sizeof(ID));

    system("cls");

    printf("请输入添加的姓名:");

    scanf("%s",info->name);

    printf("请输入添加的号码:");

    scanf("%s",info->num);

    printf("请输入你要插入的位置:");

    scanf("%d",&i);

    while(p!=NULL && j<i-2 )
{
p=p->next;
j++;
}
if(p==NULL || j>i-1) { printf("插入位置错误\n"); return (head);}

    
if(i==1){
info->next=head;
head=info;
}
else{
info->next=p->next;
p->next=info;
}

    printf("新添加电话号码成功,是否存盘?Y/N?\n");

    getchar();/*吸收回车*/ 

    scanf("%c",&flag);

    if(flag=='y'||flag=='Y')

        save(head);

    else

        printf("请在退出之前保存当前的编辑工作!\n");

    return(head);

}

    int main()

    

    

    {

          ID *head=NULL;  /*struct tel * head;*/    

        int choice;  /*代表用户的选择*/ 

      w
4000
hile(1)  /*死循环*/

    {         

              printf("\n");     

              printf("\n");  

              printf("\n");     

              printf("\t\t    **********电话簿管理系统**********\n");

              printf("\t\t    ****  0 create  建立新的电话号码簿  ****\n");

              printf("\t\t    ****  1 delete  删除新的电话号码    ****\n");

              printf("\t\t    ****  2 print   打印电话号码        ****\n");

              printf("\t\t    ****  3 save    保存电话号码簿      ****\n");

              printf("\t\t    ****  4 append  插入新的电话号码    ****\n");
 printf("\t\t    ****  5 Initlist 清空电话号码簿  ****\n");

              printf("\t\t    ****  6 exit    退出电话号码簿系统  ****\n");

              printf("\t\t    **********//请按提示使用**********\n");

              scanf("%d",&choice);

              getchar(); /*吸收回车*/

    

              switch(choice)

              {

                            case 0: head=create();      break;

                            case 1: head=delete_(head); break;

                            case 2: print(head);        break;

                            case 3: save(head);         break;

                            case 4: head=append(head);  break;
case 5: head=Initlist(head);    break;

                            case 6: exit(0);break;

                            default:printf("选择错误,请在0-6之间选择\n");

              }

    

    }

    return 0;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: