#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct node
{
char name[15];
long num;
struct node *next;
};
typedef struct node Node;
typedef struct node * Link;
void create(Link *head)
{
*head = NULL;
*head = (Link)malloc(sizeof(Node));
if(head == 0)
{
printf("system error\n");
exit(0);
}
}
void insert(Link head,Link new_node)
{
if(head->next == NULL)
head->next = new_node;
else
{
new_node->next = head->next;
head->next = new_node;
}
}
/******插入******/
void input(Link *head)
{
int i = 1;
Link new_node = NULL;
printf("请输入联系人信息,按'#'键退出 。◕ ‿ ◕。\n");
while(i)
{
new_node = (Link)malloc(sizeof(Node));
printf("输入第%d位姓名: ",i);
scanf("%s",&new_node->name);
if(strcmp(new_node->name,"#") == 0)
break;
printf("输入第%d位☏ 号码: ",i);
scanf("%ld",&new_node->num);
insert(*head, new_node);
i++;
}
}
/******显示******/
void display(Link head)
{
Link p;
struct tm *ptr;
time_t now;
now =time(NULL);
ptr=localtime(&now);
p= head;
printf(" %4d年%02d月%02d日 ",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday);
printf("%d:%d\n",ptr->tm_hour,ptr->tm_min);
printf("┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳\n");
while(p->next != NULL)
{
printf("╠ 姓名: %-7s ⇪ ☏ 号码:%ld ╣\n",p->next->name,p->next->num);
p = p->next;
}
printf("┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻\n");
}
/******查找******/
void search(Link head)
{
char str[15];
long s = 0;
int n = 0, flag = 0, flag1 = 0;
Link p = head;
printf("请输入要查找的信息:");
scanf("%s",str);
if(p->next == NULL)
printf("这是个空通讯录!\n");
if(str[0] <= '9' && str[0] >= '0')
{
while(str[n] != '\0')
{
s = s * 10 + str[n] - '0';
n++;
}
}
n = 1;
while(p->next != NULL)
{
if(strcmp(p->next->name,str) == 0 || p->next->num == s)
{
flag = 1;
flag1 = 1;
}
if(flag)
{
printf("查询结果%d 姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
flag = 0;
s = 0;
n++;
}
p = p->next;
}
if(!flag1)
printf("未查询到相关信息,请确认输入内容是否有误!\n");
}
/******删除******/
void delete(Link head)
{
char str[15], confirm[5];
long s = 0;
int n = 0, flag = 0, flag1 = 0;
Link p = head;
Link p1 = NULL;
printf("请输入要删除的信息: ");
scanf("%s",str);
if(p->next == NULL)
printf("这是个空通讯录!\n");
if(str[0] <= '9' && str[0] >= '0')
{
while(str[n] != '\0')
{
s = s * 10 + str[n] - '0';
n++;
}
}
n = 1;
while(p->next != NULL)
{
if(strcmp(p->next->name,str) == 0 || p->next->num == s)
{
flag = 1;
flag1 = 1;
}
if(flag)
{
printf("查询结果%d 姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
flag = 0;
s = 0;
n++;
printf("是否确认删除( yes or no )?\n");
scanf("%s",confirm);
if(strcmp(confirm,"yes") == 0 || strcmp(confirm,"y") == 0)
{
if(p->next->next == NULL)
{
p1 = p->next;
p->next == NULL;
free(p1);
p1 = NULL;
}
else
{
p1 = p->next;
p->next == p->next->next;
free(p1);
p1 = NULL;
}
printf("删除成功!\n");
}
else
printf("该联系人未删除。\n");
}
p = p->next;
}
if(!flag1)
printf("未查询到相关信息,请确认输入内容是否有误!\n");
}
/******修改******/
void revise(Link head)
{
char str[15];
char re[15];
long s = 0;
int n = 0, flag = 0, flag1 = 0;
Link p = head;
printf("请输入要修改的信息:");
scanf("%s",str);
if(p->next == NULL)
printf("这是个空通讯录!\n");
if(str[0] <= '9' && str[0] >= '0')
{
while(str[n] != '\0')
{
s = s * 10 + str[n] - '0';
n++;
}
}
n = 1;
while(p->next != NULL)
{
if(strcmp(p->next->name,str) == 0 || p->next->num == s)
{
flag = 1;
flag1 = 1;
}
if(flag)
{
printf("查询结果%d 姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
flag = 0;
s = 0;
n++;
printf("输入修改结果(按'*'键跳过修改)\n");
printf("姓名: ");
scanf("%s",re);
if(strcmp(re,"*") == 0)
printf("未作出修改.n");
else
{
strcpy(p->next->name,re);
printf("☏ 号码: ");
scanf("%ld",&(p->next->num));
printf("修改成功!\n");
}
}
p = p->next;
}
if(!flag1)
printf("未查询到相关信息,请确认输入内容是否有误\n");
}
/******清空******/
void empty(Link head)
{
Link p = head;
Link p1 = NULL;
char str[5];
printf("是否确认清空( yes or no )?\n");
scanf("%s",str);
if(strcmp(str,"yes") == 0 || strcmp(str,"y") == 0)
{
while(p->next != NULL)
{
if (p->next->next = NULL)
{
p1 = p->next;
p->next = NULL;
free(p1);
p1 = NULL;
}
else
{
p1 = p->next;
p->next = p->next->next;
free(p1);
p1 = NULL;
}
}
printf("清空通讯录成功!\n");
}
else
printf("通讯录未清空!\n");
}
/******排序******/
void arrange(Link head)
{
Link p1 = head;
Link p2 = NULL;
char swap[15];
while(p1->next != NULL)
{
p2 = p1->next;
while(p2->next != NULL)
{
if (p1->next->num > p2->next->num)
{
p1->next->num = p1->next->num + p2->next->num;
p2->next->num = p1->next->num - p2->next->num;
p1->next->num = p1->next->num - p2->next->num;
strcpy(swap,p1->next->name);
strcpy(p1->next->name,p2->next->name);
strcpy(p2->next->name,swap);
}
p2 = p2->next;
}
p1 = p1->next;
}
printf("排序成功!\n");
}
int main()
{
int n;
Link head = NULL;
create(&head);
while(1)
{
printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ┓\n");
printf("║ 功能1: 输入 ┃ 功能2:显示┃\n");
printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
printf("║ 功能3: 查询 ┃ 功能4:删除┃\n");
printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
printf("║ 功能5: 修改 ┃ 功能6:排序┃\n");
printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
printf("║ 功能7: 清空 ┃ 功能8:退出┃\n");
printf("╚ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛\n");
printf("选择功能: ");
scanf("%d",&n);
switch(n)
{
case 1: input(&head);break;
case 2: display(head);break;
case 3: search(head);break;
case 4: delete(head);break;
case 5: revise(head);break;
case 6: arrange(head);break;
case 7: empty(head);break;
case 8: return 0;
default: printf("输入有误,请重新输入!\n");break;
}
}
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct node
{
char name[15];
long num;
struct node *next;
};
typedef struct node Node;
typedef struct node * Link;
void create(Link *head)
{
*head = NULL;
*head = (Link)malloc(sizeof(Node));
if(head == 0)
{
printf("system error\n");
exit(0);
}
}
void insert(Link head,Link new_node)
{
if(head->next == NULL)
head->next = new_node;
else
{
new_node->next = head->next;
head->next = new_node;
}
}
/******插入******/
void input(Link *head)
{
int i = 1;
Link new_node = NULL;
printf("请输入联系人信息,按'#'键退出 。◕ ‿ ◕。\n");
while(i)
{
new_node = (Link)malloc(sizeof(Node));
printf("输入第%d位姓名: ",i);
scanf("%s",&new_node->name);
if(strcmp(new_node->name,"#") == 0)
break;
printf("输入第%d位☏ 号码: ",i);
scanf("%ld",&new_node->num);
insert(*head, new_node);
i++;
}
}
/******显示******/
void display(Link head)
{
Link p;
struct tm *ptr;
time_t now;
now =time(NULL);
ptr=localtime(&now);
p= head;
printf(" %4d年%02d月%02d日 ",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday);
printf("%d:%d\n",ptr->tm_hour,ptr->tm_min);
printf("┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳\n");
while(p->next != NULL)
{
printf("╠ 姓名: %-7s ⇪ ☏ 号码:%ld ╣\n",p->next->name,p->next->num);
p = p->next;
}
printf("┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻\n");
}
/******查找******/
void search(Link head)
{
char str[15];
long s = 0;
int n = 0, flag = 0, flag1 = 0;
Link p = head;
printf("请输入要查找的信息:");
scanf("%s",str);
if(p->next == NULL)
printf("这是个空通讯录!\n");
if(str[0] <= '9' && str[0] >= '0')
{
while(str[n] != '\0')
{
s = s * 10 + str[n] - '0';
n++;
}
}
n = 1;
while(p->next != NULL)
{
if(strcmp(p->next->name,str) == 0 || p->next->num == s)
{
flag = 1;
flag1 = 1;
}
if(flag)
{
printf("查询结果%d 姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
flag = 0;
s = 0;
n++;
}
p = p->next;
}
if(!flag1)
printf("未查询到相关信息,请确认输入内容是否有误!\n");
}
/******删除******/
void delete(Link head)
{
char str[15], confirm[5];
long s = 0;
int n = 0, flag = 0, flag1 = 0;
Link p = head;
Link p1 = NULL;
printf("请输入要删除的信息: ");
scanf("%s",str);
if(p->next == NULL)
printf("这是个空通讯录!\n");
if(str[0] <= '9' && str[0] >= '0')
{
while(str[n] != '\0')
{
s = s * 10 + str[n] - '0';
n++;
}
}
n = 1;
while(p->next != NULL)
{
if(strcmp(p->next->name,str) == 0 || p->next->num == s)
{
flag = 1;
flag1 = 1;
}
if(flag)
{
printf("查询结果%d 姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
flag = 0;
s = 0;
n++;
printf("是否确认删除( yes or no )?\n");
scanf("%s",confirm);
if(strcmp(confirm,"yes") == 0 || strcmp(confirm,"y") == 0)
{
if(p->next->next == NULL)
{
p1 = p->next;
p->next == NULL;
free(p1);
p1 = NULL;
}
else
{
p1 = p->next;
p->next == p->next->next;
free(p1);
p1 = NULL;
}
printf("删除成功!\n");
}
else
printf("该联系人未删除。\n");
}
p = p->next;
}
if(!flag1)
printf("未查询到相关信息,请确认输入内容是否有误!\n");
}
/******修改******/
void revise(Link head)
{
char str[15];
char re[15];
long s = 0;
int n = 0, flag = 0, flag1 = 0;
Link p = head;
printf("请输入要修改的信息:");
scanf("%s",str);
if(p->next == NULL)
printf("这是个空通讯录!\n");
if(str[0] <= '9' && str[0] >= '0')
{
while(str[n] != '\0')
{
s = s * 10 + str[n] - '0';
n++;
}
}
n = 1;
while(p->next != NULL)
{
if(strcmp(p->next->name,str) == 0 || p->next->num == s)
{
flag = 1;
flag1 = 1;
}
if(flag)
{
printf("查询结果%d 姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
flag = 0;
s = 0;
n++;
printf("输入修改结果(按'*'键跳过修改)\n");
printf("姓名: ");
scanf("%s",re);
if(strcmp(re,"*") == 0)
printf("未作出修改.n");
else
{
strcpy(p->next->name,re);
printf("☏ 号码: ");
scanf("%ld",&(p->next->num));
printf("修改成功!\n");
}
}
p = p->next;
}
if(!flag1)
printf("未查询到相关信息,请确认输入内容是否有误\n");
}
/******清空******/
void empty(Link head)
{
Link p = head;
Link p1 = NULL;
char str[5];
printf("是否确认清空( yes or no )?\n");
scanf("%s",str);
if(strcmp(str,"yes") == 0 || strcmp(str,"y") == 0)
{
while(p->next != NULL)
{
if (p->next->next = NULL)
{
p1 = p->next;
p->next = NULL;
free(p1);
p1 = NULL;
}
else
{
p1 = p->next;
p->next = p->next->next;
free(p1);
p1 = NULL;
}
}
printf("清空通讯录成功!\n");
}
else
printf("通讯录未清空!\n");
}
/******排序******/
void arrange(Link head)
{
Link p1 = head;
Link p2 = NULL;
char swap[15];
while(p1->next != NULL)
{
p2 = p1->next;
while(p2->next != NULL)
{
if (p1->next->num > p2->next->num)
{
p1->next->num = p1->next->num + p2->next->num;
p2->next->num = p1->next->num - p2->next->num;
p1->next->num = p1->next->num - p2->next->num;
strcpy(swap,p1->next->name);
strcpy(p1->next->name,p2->next->name);
strcpy(p2->next->name,swap);
}
p2 = p2->next;
}
p1 = p1->next;
}
printf("排序成功!\n");
}
int main()
{
int n;
Link head = NULL;
create(&head);
while(1)
{
printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ┓\n");
printf("║ 功能1: 输入 ┃ 功能2:显示┃\n");
printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
printf("║ 功能3: 查询 ┃ 功能4:删除┃\n");
printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
printf("║ 功能5: 修改 ┃ 功能6:排序┃\n");
printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
printf("║ 功能7: 清空 ┃ 功能8:退出┃\n");
printf("╚ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛\n");
printf("选择功能: ");
scanf("%d",&n);
switch(n)
{
case 1: input(&head);break;
case 2: display(head);break;
case 3: search(head);break;
case 4: delete(head);break;
case 5: revise(head);break;
case 6: arrange(head);break;
case 7: empty(head);break;
case 8: return 0;
default: printf("输入有误,请重新输入!\n");break;
}
}
return 0;
}