您的位置:首页 > 其它

通信录作业,在链表中的结构体数组有点多此一举了

2016-11-17 19:08 204 查看
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct user

{
char name[100];//姓名
char sex[2];//性别
char age[3];//年龄
char job[20];//工作
char tel_num[20];//电话
char emal_add[50];//邮箱地址
char address[100];//家庭住址
char postcode[10];//邮编
struct user *next;

};

typedef struct user Node;

typedef struct user *Link;//用户自定义

/*初始化结点并判断是否分配成功*/

void is_malloc_ok(Link *new_node)

{
if(new_node == NULL)
{
printf("malloc error!\n");
exit(-1);
}

}

void create_link(Link *new_node)

{
(*new_node) = (Link)malloc(sizeof(Node));//创建一个结点,返回其地址
is_malloc_ok(new_node);

}

void create_link_head(Link* head)

{
create_link(head);
(*head)->next = NULL;

}//建立头结点

/*头插函数*/

void insert_node_head(Link* head,Link new_node)

{
Link tmp = *head;
new_node->next = tmp->next;
tmp->next = new_node;

}

/*用户录入函数*/

void add_people(Link* head,int num)

{
int n;//用户定义输入数量

  static int i = 0;//循环变量
static int j = 0;
static int temp = 0;
temp+=num;
Link new_node = NULL;//定义结点
create_link(&new_node);

    Node users[30];//定义结构体数组
printf("请按以下要求输入:\n");
for (i  ; i < temp; i++)
{
printf("姓名:");
scanf("%s",users[i].name);
printf("性别:");
scanf("%s",users[i].sex);
printf("年龄:");
scanf("%s",users[i].age);
printf("职位:");
scanf("%s",users[i].job);
printf("电话:");
scanf("%s",users[i].tel_num);
printf("邮箱地址:");
scanf("%s",users[i].emal_add);
printf("家庭住址:");
scanf("%s",users[i].address);
printf("邮编:");
scanf("%s",users[i].postcode);
printf("\n");
printf("******************\n");
users[i].next = NULL;
}
for (j ; j < temp ; j++)
{
create_link(&new_node);
strcpy(new_node->name,users[j].name);
strcpy(new_node->sex,users[j].sex);
strcpy(new_node->age,users[j].age);
strcpy(new_node->job,users[j].job);
strcpy(new_node->tel_num,users[j].tel_num);
strcpy(new_node->emal_add,users[j].emal_add);
strcpy(new_node->address,users[j].address);
strcpy(new_node->postcode,users[j].postcode);
new_node->next = users[j].next;
   insert_node_head(head,new_node);//头插 
}

   menu(head);

}

/*用户查询函数*/

void find_people(Link* head,char find[])

{

    printf("按姓名查找\n");
Link tmp;
Link p;
tmp = p = (*head)->next;
if ((*head)->next == NULL)
{
printf("目前无用户\n");

}
else
{
   while(strcmp(tmp->name,find) != 0 && tmp->next != NULL)
   {
   p = tmp;
   tmp = tmp->next;
   }
   if ( strcmp(tmp->name,find) == 0)

        {  
       printf("姓名:%s\n",tmp->name);
   printf("性别:%s\n",tmp->sex);

            printf("年龄:%s\n",tmp->age);
   printf("职位:%s\n",tmp->job);
   printf("电话:%s\n",tmp->tel_num);
   printf("邮箱地址:%s\n",tmp->emal_add);
   printf("家庭住址:%s\n",tmp->address);
   printf("邮编:%s\n",tmp->postcode);

        }
   else
       {
            printf("未找到该用户\n");
       }
}
menu(head);

}

/*用户删除函数*/

void del_people(Link* head,char out[])

{
Link tmp;
Link p;
tmp = p = *head;
if ((*head)->next == (*head))
{
printf("目前无用户,不执行删除操作,返回菜单\n");
}
else
{
   while(strcmp(tmp->name,out) != 0 && tmp->next != NULL)
   {
   p = tmp;
   tmp = tmp->next;
   }
   if ( strcmp(tmp->name,out) == 0)
   {
       if(tmp == ((*head)->next))
   {
       (*head)->next = (*head)->next->next;
   free(tmp);
   }
   else
   {  
       p->next = tmp->next;
   free(tmp);
   }
   }
   else
       {
       printf("未找到所要删除的用户\n");
       }
}
menu(head);

}

/*查看全部函数*/

void display_all_people(Link* head)

{
Link tmp = NULL;//防止野指针
tmp = (*head)->next;
if (tmp == NULL)
{
   printf("无联系人i\n");
}
while ( tmp != NULL )
{
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("年龄:%s\n",tmp->age);
printf("职位:%s\n",tmp->job);
printf("电话:%s\n",tmp->tel_num);
printf("邮箱地址:%s\n",tmp->emal_add);
printf("家庭住址:%s\n",tmp->address);
printf("邮编:%s\n",tmp->postcode);
tmp = tmp->next;
printf("****************************\n");
}
menu(head);

}

/*修改联系人函数*/

void change_people(Link* head,char change_name[])

{

    printf("按姓名查找\n");
Link tmp;
Link p;
char name_change[100];
char sex_change[2];
char age_change[3];
char job_change[20];
char tel_num_change[20];
char emal_add_change[50];
char address_change[100];
char postcode_change[10];
int i;//用户决定修改项目
tmp = p = (*head)->next;
if ((*head)->next == NULL)
{
printf("目前无用户\n");

}
else
{
   while(strcmp(tmp->name,change_name) != 0 && tmp->next != NULL)
   {
   p = tmp;
   tmp = tmp->next;
   }
   if ( strcmp(tmp->name,change_name) == 0)

        {  
       printf("请选择修改项:\n");
printf("1,姓名 2,性别 3,年龄 4,工作 5电话 6,邮箱地址 7,家庭住址 8,邮编\n");
scanf("%d",&i);
switch(i)
{
case 1:
printf("请输入要修改的姓名:\n");
scanf("%s",name_change);
strcpy(tmp->name,name_change);
break;
case 2:
printf("请输入要修改的性别:\n");
scanf("%s",sex_change);
strcpy(tmp->sex,sex_change);
break;
case 3:
printf("请输入要修改的年龄:\n");
scanf("%s",age_change);
strcpy(tmp->age,age_change);
break;
case 4:
printf("请输入要修改的工作:\n");
scanf("%s",job_change);
strcpy(tmp->job,job_change);
break;
case 5:
printf("请输入要修改的电话:\n");
scanf("%s",tel_num_change);
strcpy(tmp->tel_num,tel_num_change);
break;
case 6:
printf("请输入要修改的邮箱地址:\n");
scanf("%s",emal_add_change);
strcpy(tmp->emal_add,emal_add_change);
break;
case 7:
printf("请输入要修改的家庭住址:\n");
scanf("%s",address_change);
strcpy(tmp->address,address_change);
break;
case 8:
printf("请输入要修改的邮编:\n");
scanf("%s",postcode_change);
strcpy(tmp->postcode,postcode_change);
break;
}

        }
   else
       {
            printf("未找到该用户\n");
       }
}
menu(head);

}

/*菜单显示函数*/

int menu(Link* head)

{
printf("/***************欢迎使用通信录****************/\n");
printf("/*               1.添加联系人                */\n");
printf("/*               2.查询联系人                */\n");
printf("/*               3.删除联系人                */\n");
printf("/*               4.查看全部联系人            */\n");
printf("/*               5.修改联系人                */\n");
printf("/*               6.退出                      */\n");
printf("/*********************************************/\n");
int num;
int in;
char find[100];//目标联系人
char change_name[100];//所要修改的名字
char out[100];//所要找出的名字
printf("请输入你所需要的操作:\n");
scanf("%d",&num);
switch(num)
{
case 1: 
       printf("请输入要录入的用户数量\n");
       scanf("%d",&in);
add_people(head,in);
break;
case 2:
printf("请输入目标联系人\n");
scanf("%s",find);
find_people(head,find);
break;
case 3:

            printf("请输入要删除哪位联系人(输入姓名):\n");
scanf("%s",out);
del_people(head,out);
break;
case 4: 
display_all_people(head);
break;
case 5:
   printf("请输入需要更改的姓名");
   scanf("%s",change_name);
   change_people(head,change_name);
case 6: return;
default: 
menu(head);
break;
}
return 0;

}

int main()

{
Link head = NULL;//定义头指针,防止野指针

    create_link_head(&head);

    menu(&head);

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