别人写的通信录,以后可以参考一下

http://blog.csdn.net/Hugohut/archive/2009/04/11/4065216.aspx

 

花了两个晚上的时间写了一个通讯录的程序,代码如下,希望有高手指点指点。。。

   运行环境:Visual C++ 6.0

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
   char num[5];
   char name[9];
   char sex[3];
   char phone[13];
   char addr[31];
}DataType;

typedef struct node{
 DataType data;
  struct node *next;
}ListNode;

typedef ListNode *LinkList;
LinkList head;
ListNode *p;

//*函数说明*//
int menu_select();
LinkList CreateList(void);
void InsertNode(LinkList head,ListNode *p);
ListNode * ListFind(LinkList head);
void DelNode(LinkList head);
void PrintfList(LinkList head);
void main()
{
 for( ; ; ){
 switch(menu_select())
 {
 case 1:
  printf("**********************************/n");
  printf("******通讯录链表的建立***********/n");
        printf("**********************************/n");
  head=CreateList( );
  break;
 case 2:
  printf("**********************************/n");
        printf("*******通讯者信息的添加**********/n");
  printf(" 编号(4)  姓名(8) 性别   电话(11) 地址(31)/n");
     printf("**********************************/n");
  p=(ListNode*)malloc(sizeof(ListNode));
  scanf("%S%S%S%S%S",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
  InsertNode(head,p);
  break;
 case 3:
        printf("**********************************/n");
     printf("*******通讯者信息的查询**********/n");
  printf("**********************************/n");
  p=ListFind(head);
  if(p!=NULL){
      printf(" 编号   姓名   性别   电话  地址  /n");
      printf("**********************************/n");
            printf("%S%S%S%S%S",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
      printf("**********************************/n");
  }
  else
    printf("没有查到要查询的通讯录!/n");
        break;
 case 4:
  printf("**********************************/n");
        printf("*******通讯者信息的删除**********/n");
  printf("**********************************/n");
    DelNode(head);
    break;
 case 5:
        printf("**********************************/n");
        printf("*******通讯者信息的输出**********/n");
  printf("**********************************/n");
  PrintfList(head);
  break;
 case 0:
  printf("/t Good Bye!/n");
   return;
         }
        }
}

int menu_select()
{
    int sn;
 printf("通讯录管理系统/n");
 printf("==============/n");
 printf("  1.通讯录链表的建立  /n");
 printf("  2.通讯录的结点的插入/n");
 printf("  3.通讯录的结点的删除/n");
 printf("  4.通讯录的结点的查询/n");
 printf("  5.通讯录的链表的输出/n");
 printf("================/n");
 printf("请选择0-----5:");
  for(; ;)
  {
  scanf("%d",&sn);
  if(sn<0||sn>5)
   printf("/n/t输入错误,重选0---5:");
  else
      break;
  }
      return sn;
 }


LinkList CreateList(void)
{
LinkList head=(ListNode*)malloc(sizeof(ListNode));//*申请头结点*//
ListNode *p,*rear;
int flag=0;//*结束标志置0*//
rear=head;
while(flag==0)
     {p=(ListNode *)malloc(sizeof(ListNode));//*申请新结点*//
      printf("编号(4)  姓名(8) 性别   电话(11) 地址(31)/n");
 scanf("%S%S%S%S%S",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
 rear->next=p;//*新结点链接到未结点之后*//
 rear=p;//*未指针初始指向新结点*//
 printf("继续输入吗?(1/0):");
 scanf("%d,&flag");
}
rear->next=NULL;
return head;
}


void InsertNode(LinkList head,ListNode *p)
{
      ListNode *p1,*p2;
   p1=head;
   p2=p1->next;
   while(p2=NULL && strcmp(p2->data.num,p->data.num)<0)
   {
     p1=p2;
  p2=p2->next;
   }
         p1->next=p;
   p->next=p2;
}

 

  //*在有序通讯录链表上的查找*//
ListNode * ListFind(LinkList head)
{
    ListNode *p;
 char num[5];
 char name[9];
 int xz;
 printf("=============/n");
 printf("1.按编号查询              /n");
 printf("2.按姓名查询              /n");
 printf("=============/n");
 printf("请选择:                    /n");
    p=head->next;
 scanf("%d","xz");
 if(xz=1){
      printf("请输入要查找的标号:/n");
   scanf("%s",num);
   while(p && strcmp(p->data.num,num)<0)
    p=p->next;
   if(p==NULL || strcmp(p->data.num,num)>0)
    p=NULL;
          }
 else
  if(xz==2){
  printf("请输入查找者的名字:");
   scanf("%s",name);
   while(p && strcmp(p->data.name,name)!=0)
      p=p->next;
  }
 return p;
}


void DelNode(LinkList head)
{
    char jx;
 ListNode *p,*q;
    p=ListFind(head);
    if(p==NULL)
    {
     printf("没有查到要删除的通讯录/n");
     return;
    }
    printf("真的要删除节点吗?(y/n):");
    scanf("%c",&jx);
    if(jx=='y'||jx=='Y'){
        q=head;
    while(q!=NULL && q->next!=p)
     q=q->next;
    q->next=p->next;
    free(p);
    printf("通讯者已经被删除!/n");
       }

}

void PrintfList(LinkList head)
{
   ListNode *p;
   p=head->next;
   printf("编号   姓 名    性别   联系电话   地址/n");
   printf("---------------------------------------/n");
   while(p!=NULL)
   {
        printf("%s,%s,%s,%s,%s/n",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
  printf("-----------------------------------/n");
  p=p->next;
  
   }

}

你可能感兴趣的:(struct,null,menu,通讯,电话,通讯录管理)