回 帖 发 新 帖 刷新版面

主题:[讨论]数据结构通讯录代码 有一点错误 请改改 先 谢谢!

# include "stdio.h" 
# include "string.h" 
# include "stdlib.h" 
typedef struct 
{ char num[5]; 
  char name[10]; 
  char sex[5]; 
  char phone[15]; 
  char addr[30]; 
}datatype; 

typedef struct node 
{ datatype data; 
  struct node * next; 
}listnode; 

typedef listnode * linklist; 
linklist head; 
listnode * p; 



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


linklist createlist(void) 
{ linklist head=(listnode *)malloc(sizeof(listnode)); 
  listnode * p,* q; 
  char flag=0; 
  q=head; 
  while(flag==0) 
     {p=(listnode *)malloc(sizeof(listnode)); 
      printf("编号(5) 姓名(10) 性别 电话(15) 地址(31)\n"); 
  scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex, 
    p->data.phone,p->data.addr); 
  q->next=p; 
  q=p; 
  printf("要继续输入吗?(y/n):"); 
  scanf("%c",&flag); 
  } 
  q->next=NULL; 
  return head; 


void insertnode(linklist head,listnode *p) 
{ listnode * m,* n; 
  m=head; 
  n=m->next; 
  while(n!=NULL&&strcmp(n->data.num,p->data.num)<0) 
     {m=n; 
  n=n->next; 
  } 
  m->next=p; 
  p->next=n; 


listnode * findlist(linklist head) 
{ listnode * p; 
  char num[5]; 
  char name[10]; 
  int xz; 
  printf("*********************************\n"); 
  printf("         1.按编号查询            \n"); 
  printf("         2.按姓名查询            \n"); 
  printf("*********************************\n"); 
  printf("             请选择                "); 
  p=head->next; 
  scanf("%d",&xz); 
  if(xz==1) 
  {printf("请输入编号:"); 
       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.num,num)!=0) 
   p=p->next; 
  } 
return p; 


void deletenode(linklist head) 
{char j; 
 listnode *p,*q; 
 p=findlist(head); 
 if(p==NULL) 
   {printf("该通讯者不存在\n"); 
    return; 

printf("真的要删除吗?y/n:"); 
    scanf("%c",&j); 
    if(j=='y') 
    {  
q=head; 
while(q!=NULL&&q->next!=p) 
   q=q->next; 
   q->next=p->next; 
   free(p); 
   printf("已删除该通讯者!\n"); 



void printlist(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("=============================="); 
   p=p->next; 
   } 



int main() 
{ for(;;) 
    {switch(select()) 
        {case 1: 
           printf("**********通讯录链表的建立**********\n"); 
           head=createlist(); 
           break; 
         case 2: 
           printf("**********通讯者信息的添加**********\n"); 
           printf("编号(5) 姓名(5) 性别 电话(15) 地址(30)\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"); 
           deletenode(head); 
           break; 
         case 4: 
           printf("**********通讯者信息的查询**********\n"); 
           p=findlist(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("该通讯者不存在!"); 
            break; 
         case 5: 
           printf("**********通讯录链表的输出**********\n"); 
           printlist(head); 
           break; 
         case 0: 
           printf("\t**********退出**********\n"); 
           return 1; 
         } 
     } 
}

回复列表 (共2个回复)

沙发

哎,我的掉闹没有C/C++系统,就不帮你了,看错误在哪里,自己试着修改

板凳


朋友,你好!
不知问题解决了,没有!我在编译时发现如下函数:
void deletenode(linklist head) 
缺少一个'}',添加后已编译通过.但发现,代码不完整,
故希望本人能获得完整版(beta版).
改过后的代码,已发送到你的邮箱,请查收.......

我来回复

您尚未登录,请登录后再回复。点此登录或注册