#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student//学生类
{
char num[40];
char name[40];
char qq[40];
char mobilephone[40];
struct student * next;
};
typedef struct student Node;
typedef struct student * Link;
void ui()//界面
{
printf("*******************************\n");
printf("************Welcome************\n");
printf("*******************************\n");
printf("1 输入信息\n");
printf("2 显示信息\n");
printf("3 查找信息\n");
printf("4 删除信息\n");
printf("5 修改信息\n");
printf("6 退出\n")
}
void create_node(Link * new_node)//输入学生信息
{
system("clear");
*new_node = (Link)malloc(sizeof(Node));
if (*new_node == NULL)//错误处理
{
printf("malloc error\n");
exit(-1);//正常退出0,非正常退出-1
}
}
void create_link(Link * head)//创建链表
{
create_node(head);
(*head)->next = NULL;
}
void insert_node_head(Link head,Link new_node)
{
printf("请输入学号:\n");
scanf("%s",new_node->num);
if(strlen(new_node->num) !=9)
{
printf("学号长度不符!\n");
free(new_node);
return;
}
printf("请输入姓名:\n");
scanf("%s",new_node->name);
printf("请输入qq号:\n");
scanf("%s",new_node->qq);
printf("请输入手机号:\n");
scanf("%s",new_node->mobilephone);
if(strlen(new_node->mobilephone) !=11)
{
printf("手机长度不符!\n");
free(new_node);
return;
}
Link p,q;
p = q = head->next;
if(p == NULL)
{
head->next = new_node;
new_node->next = NULL;
}
else
{
while(p != NULL && strcmp((head->next)->name,new_node->name) < 0)
{
q = p;
p = p->next;
}
if(NULL == p)
{
q->next =new_node;
new_node->next = NULL;
}
else if(p ==q)
{
new_node->next = head->next;
head->next = new_node;
}
else
{
new_node->next=p;
q->next=new_node;
}
}
printf("运行成功\n");
}
void display(Link head)//输出
{
Link p;
p = head->next;
system("clear");
if(head == NULL)
{
printf("link is not exist\n");
return;
}
if(NULL == p)
{
printf("Link is empty\n");
return;
}
while(p != NULL)
{
printf("学号是%s ",p->num);
printf("姓名是%s ",p->name);
printf("qq号是%s ",p->qq); p
rintf("手机号是%s \n",p->mobilephone);
p = p->next;
}
printf("输出成功\n");
}
void search(Link head)
{
system("clear");
char i[40];
printf("请输入要查找学生的姓名:\n");
scanf("%s",i);
Link p;
p = head->next;
if(head->next == NULL)
{
printf("无学生信息!\n");
}
else
{
while(p != NULL && strcmp(p->name,i))
{
p = p->next;
}
if(NULL == p)
{
printf("不存在要查找的学生信息!\n");
}
else
{
printf("学号是%s ",p->num);
printf("姓名是%s ",p->name);
printf("qq号是%s ",p->qq);
printf("手机号是%s \n",p->mobilephone);
}
}
}
void delete(Link head)
{
system("clear");
char i[40];
printf("请输入要删除学生的姓名:\n");
scanf("%s",i);
Link p,q;
p = q = head->next;
if(p == NULL)
{
printf("无学生信息\n");
}
else
{
while(p != NULL && strcmp(p->name,i))
{
q = p;
p = p->next;
}
if(NULL == p)
{
printf("不存在要删除的学生信息\n");
}
else if(p == q)
{
head->next = p->next;
free(p);
printf("删除成功!\n");
}
else
{
q->next=p->next;
free(p);
printf("删除成功!\n");
}
}
}
void change(Link head)
{
system("clear");
char i[40];
char m[40];
char n[40];
printf("请输入要修改学生的姓名:\n");
scanf("%s",i);
Link p;
p = head->next;
if(head->next == NULL)
{
printf("无学生信息!\n");
}
else
{
while(p != NULL && strcmp(p->name,i))
{
p = p->next;
}
if(NULL == p)
{
printf("不存在要修改的学生信息!\n");
}
else
{
printf("请输入修改后的学号\n");
scanf("%s",m);
if(strlen(m) !=9)
{
printf("学号长度不符!\n");
return;
}
strcpy(p->num,m);
printf("请输入修改后的qq号\n");
scanf("%s",p->qq);
printf("请输入修改后的手机号\n");
scanf("%s",n);
if(strlen(n) !=11)
{
printf("手机长度不符!\n");
return;
}
strcpy(p->mobilephone,n);
printf("修改成功\n");
}
}
}
int main()
{
int i;
Link head;
Link new_node;
create_link(&head);
while(1)
{
ui();
printf("请输入你要进行操作的序号:\n");
scanf("%d",&i);
switch(i)
{
case 1:create_node(&new_node);
insert_node_head(head,new_node);
break;
case 2:display(head);
break;
case 3:search(head);
break;
case 4:delete(head);
break;
case 5:change(head);
break;
case 6:exit(0);
default:exit(-1);
}
}
return 0;
}
用c语言链表实现具有增删改查功能的通讯录
最新推荐文章于 2019-06-27 10:07:16 发布