| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 423 人关注过本帖
标题:通讯录问题
只看楼主 加入收藏
sd375055
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-3-2
结帖率:0
收藏
 问题点数:0 回复次数:1 
通讯录问题
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("请选择1-----5:");
  for(; ;)
  {
  scanf("%d",&sn);
  if(sn<0||sn>5)
   printf("\n\t输入错误,重选1---5:");
  else
      break;
  }
      return sn;
 }


LinkList CreateList(void)
{
LinkList head=(ListNode*)malloc(sizeof(ListNode));//*申请头结点*//
ListNode *p,*rear;
int flag=0,lk;//*结束标志置0*//
rear=head;
while(flag==0)
     {p=(ListNode *)malloc(sizeof(ListNode));//*申请新结点*//
      printf("编号  姓名   工作单位  电话   email地址\n");
 scanf("%5s%5s%5s%5s%5s",p->data.num,p->data.name,p->data.addr,p->data.phone,p->data.email);
 rear->next=p;//*新结点链接到未结点之后*//
 rear=p;//*未指针初始指向新结点*//
 printf("继续输入吗?1退出,0继续(1/0):");
 scanf("%d",&lk); flag=lk;
}
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("编号  姓名   工作单位  电话   email地址\n");
   printf("---------------------------------------\n");
   while(p!=NULL)
   {
        printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.addr,p->data.phone,p->data.email);
  printf("-----------------------------------\n");
  p=p->next;
   
   }

}
问题1.插入新节点,输出功能只输出新插入数据
2.查询功能出错
搜索更多相关主题的帖子: 通讯录 
2010-03-18 10:16
sd375055
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-3-2
收藏
得分:0 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
   char num[5];
   char name[9];
   char phone[13];
   char addr[31];
   char email[30];
}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(" 编号  姓名   工作单位  电话   email地址\n");
     printf("**********************************\n");
  p=(ListNode*)malloc(sizeof(ListNode));
  scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.addr,p->data.phone,p->data.email);
  InsertNode(head,p);
  break;
 case 3:
        printf("**********************************\n");
     printf("*******通讯者信息的查询**********\n");
  printf("**********************************\n");
  p=ListFind(head);
  if(p!=NULL){
      printf(" 编号  姓名   工作单位  电话   email地址\n");
      printf("**********************************\n");
            printf("%s%s%s%s%s",p->data.num,p->data.name,p->data.addr,p->data.phone,p->data.email);
      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("请选择1-----5:");
  for(; ;)
  {
  scanf("%d",&sn);
  if(sn<0||sn>5)
   printf("\n\t输入错误,重选1---5:");
  else
      break;
  }
      return sn;
 }


LinkList CreateList(void)
{
LinkList head=(ListNode*)malloc(sizeof(ListNode));//*申请头结点*//
ListNode *p,*rear;
int flag=0,lk;//*结束标志置0*//
rear=head;
while(flag==0)
     {p=(ListNode *)malloc(sizeof(ListNode));//*申请新结点*//
      printf("编号  姓名   工作单位  电话   email地址\n");
 scanf("%5s%5s%5s%5s%5s",p->data.num,p->data.name,p->data.addr,p->data.phone,p->data.email);
 rear->next=p;//*新结点链接到未结点之后*//
 rear=p;//*未指针初始指向新结点*//
 printf("继续输入吗?1退出,0继续(1/0):");
 scanf("%d",&lk); flag=lk;
}
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("编号  姓名   工作单位  电话   email地址\n");
   printf("---------------------------------------\n");
   while(p!=NULL)
   {
        printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.addr,p->data.phone,p->data.email);
  printf("-----------------------------------\n");
  p=p->next;
   
   }

}
程序如上
2010-03-18 10:17
快速回复:通讯录问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016886 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved