今天主要用链表实现了通讯录;
但蓝色字体即注释掉的部分(链表之间的赋值)还未实现。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define size 10
typedef struct information STU;
int person = 0;
struct information
{
char name[20];
int year;
struct information *next;
};
void welcome()
{
system("clear");
printf("\n\n\n\n\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
sleep(1);
}
void menu()
{
system("clear");
printf("\n\n\n\n\033[1m\033[42;35m*****************Welcome******************\033[0m\n");
printf("\033[1m\033[45;33m1、添加信息\033[0m \033[5m\033[47;34m2、查找信息\033[0m\n");
printf("\033[7m\033[1m\033[42;31m3、删除信息\033[0m \033[1m\033[46;35m4、修改信息\033[0m\n");
printf("\033[4m\033[1m\033[41;34m5、查看信息\033[0m \033[5m\033[43;35m6、退出\033[0m\n");
printf("\033[1m\033[5m\033[44;35m""***************请输入你想使用功能的序号****************""\033[0m\n");
}
STU *add()
{
system("clear");
STU *p1, *p2, *head;
printf("请输入联系人的年龄和名字或者输入bye放弃添加联系人:\n");
p1 = p2 = (STU *)malloc(sizeof(STU));
scanf("%s", p1->name);
head = NULL;
if(!strcmp(p1->name,"bye"))
{
return head;
}
scanf("%d", &p1->year);
while(strcmp(p1->name,"bye"))
{
person += 1;
if(person == 1)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (STU *)malloc(sizeof(STU));
scanf("%s", p1->name);
if(!strcmp(p1->name,"bye"))
{
p2->next = NULL;
return head;
}
scanf("%d", &p1->year);
}
}
int seek(STU *head)
{
int n;
char temp[20];
STU *p;
system("clear");
if(head == NULL)
{
printf("列表中没有联系人\n");
sleep(3);
return -1;
}
up: printf("请输入一个想要查找的姓名:\n");
scanf("%s", &temp);
getchar();
if(head != NULL)
{
p = head;
do
{
if(!strcmp(p->name, temp))
{
printf("%s %d\n", p->name, p->year);
getchar();
break;
}
else
{
p = p->next;
}
}while(p != NULL);
}
if(p == NULL)
{
printf("没有此人\n");
printf("您还想继续查找吗?请输入想(1)或者不想(0)\n");
scanf("%d",&n);
if(n == 1)
{
goto up;
}
}
}
/*
int delete(STU *head)
{
system("clear");
STU temp;
STU *p;
char t[20];
if(head == NULL)
{
printf("列表中无联系人\n");
}
int x, flag = 0;
rp: printf("选择你想删除的联系人并输入他(她)(它)的名字\n");
scanf("%s", &t);
if(head != NULL)
{
p = head;
do
{
if(!strcmp(t,p->name))
{
free(a[i]);
for(j = i; j < person - 1; j++)
{
a[j] = a[j+1];
}
printf("删除成功!\n");
flag = 1;
sleep(2);
break;
}
}while(p != NULL);
}
if(p == NULL)
{
printf("您输入的人我们暂时查找不到阿\n");
printf("您还想再继续查找其他联系人吗?\n如果想,输入1;不想,输入0\n");
scanf("%d", &x);
if(x == 1)
{
goto rp;
}
}
}
*/
int alter(STU *head)
{
system("clear");
char temp[20];
STU *p;
int n;
if(head == NULL)
{
printf("列表中没有联系人\n");
sleep(2);
return -1;
}
jp: printf("请输入你要修改的信息的人名:\n");
scanf("%s", &temp);
if(head != NULL)
{
p = head;
do
{
if(!strcmp(temp,p->name))
{
printf("此人信息如下:\n");
printf("%s %d\n", p->name, p->year);
printf("请修改名字与年龄:\n");
scanf("%s%d", p->name, &p->year);
printf("恭喜修改成功!\n");
sleep(2);
break;
}
else
{
p = p->next;
}
}while(p != NULL);
}
if(p == NULL)
{
printf("您输入的是谁呢,我不认识诶~O~\n您还想修改其他联系人的信息吗?\n如果想输入1,不想输入0\n");
scanf("%d", &n);
if(n == 1)
{
goto jp;
}
}
}
int checker(STU *head)
{
system("clear");
STU *p1, *p2;
char temp[20];
int t;
getchar();
if(head == NULL)
{
printf("列表中无联系人\n");
sleep(2);
return -1;
}
if(head != NULL)
{
/* p1 = head;
p2 = p1->next;
do
{
do
{
if(strcmp(p1->name, p2->name) > 0)
{
strcpy(temp,p1->name);
t = p1->year;
strcpy(p1->name,p2->name);
p1->year = p2->year;
strcpy(p2->name,temp);
p2->year = t;
}
}while(p2 != NULL);
p1 = p1->next;
p2 = p1->next;
}while(p1 != NULL);
*/ do
{
printf("%s %d\n", head->name, head->year);
head = head->next;
}while(head != NULL);
}
printf("按任意键可结束查看\n");
getchar();
}
int main()
{
struct information *head = NULL;
int num;
welcome();
while(1)
{
menu();
lop:printf("请输入你想要执行的功能序号:\n");
scanf("%d",&num);
switch(num)
{
case 1:
head = add();
break;
case 2:
seek(head);
break;
case 3:
/* delete(head);*/
break;
case 4:
alter(head);
break;
case 5:
checker(head);
break;
case 6:
exit(0);
break;
default:
goto lop;
}
}
return 0;
}