我觉得你说的很简单,我也没有时间写,就发一个很类似的给你吧,差不多,你自己去做,和这个很像
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct cust
{
int num;
char name[30];
char party[50];
char tel[12];
char mob_tel[11];
struct cust *next;
}node;
node *create(); /*创建带头结点单链表*/
void print(node *h); /*输出单链表h各个结点的信息*/
node *del(node *h,int i); /*删除表h中编号为i的结点*/
node *Insert(node *h); /*插入*/
void Find(node *h); /*查询并显示*/
void main()
{
node *h;
int choice,n;
while(1)
{
printf(" *********************************************\n");
printf(" |
|\n");
printf(" |
通讯录管理系统
|\n");
printf(" |
--elon制作
|\n");
printf(" |
1. 通讯录的建立
|\n");
printf(" |
2. 通讯录的输出
|\n");
printf(" |
3. 通讯录的插入
|\n");
printf(" |
4. 通讯录的查询
|\n");
printf(" |
5. 通讯录的删除
|\n");
printf(" |
0. 退出系统
|\n");
printf(" *********************************************\n");
printf("请选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:h=create();
break;
case 2:print(h);
break;
case 3:h=Insert(h);
break;
case 4:Find(h);
break;
case 5:printf("请输入编号(整数):");
scanf("%d",&n);
h=del(h,n);
break;
case 0: exit(0);
}
}
}
node *create() /*创建带头结点单链表*/
{
node *head,*s,*t;
head=(node *)malloc(sizeof(node));/*头结点*/
t=head;t->next=NULL; /*t为临时结点*/
s=(node *)malloc(sizeof(node)); /*生成新结点*/
printf("请输入用户信息:\n ");
printf(" 编号(整数,为0时退出 : ");
scanf("%d", &(s->num));
while(s->num > 0 )
{
s->next=NULL;
printf(" 姓名 : ");
scanf("%s", s->name);
printf(" 宿舍电话 : ");
scanf("%s", s->tel);
printf(" 手机 : ");
scanf("%s", s->mob_tel);
printf(" 所属班级 : ");
scanf("%s", s->party);
t->next=s; t=s; /*尾插法,t始终指向表尾*/
s=(node *)malloc(sizeof(node)); /*生成新结点*/
printf("\n\n请输入用户信息:\n ");
printf(" 编号(整数,为0时退出 : ");
scanf("%d", &(s->num));
}
return head;
}
void print(node *h) /*输出单链表h各个结点的信息*/
{
node *p=h->next;
printf("\n=========== 号码记录如下:=======\n ");
printf("编号-姓名-宿舍电话-手机-所属班级\n");
while(p!=NULL)
{
printf(" \n %3d,%8s,%8s,%8s,%8s\n ",p->num,p->name,p->tel,p->mob_tel,p->party);
p=p->next;
}
}
node *del(node *h,int i)
{
node *p=h,*s;
while(p->next!=NULL)
{
if(p->next->num==i)
{
s=p->next;
p->next=s->next; free(s);
}
else
p=p->next;
}
return h;
}
node *Insert(node *head) /*插入*/
{
node *p,*s; /*p、s为临时结点*/
p=head;
s=(node *)malloc(sizeof(node)); /*生成新结点*/
printf("请输入信息: ");
printf(" \n 编号(输入0退出): ");
scanf("%d", &(s->num) );
while( s->num > 0 )
{
s->next=NULL;
printf(" 姓名 : ");
scanf("%s", s->name);
printf(" 宿舍电话 : ");
scanf("%s", s->tel);
printf("手机 : ");
scanf("%s", s->mob_tel);
printf(" 所属班级 : ");
scanf("%s", s->party);
while(p->next!=NULL)
{
p=p->next;
}
if(p->next==NULL)
{
p->next=s;
p=s;
s=(node *)malloc(sizeof(node)); /*生成新结点,放在最后*/
}
}
return head;
}
void Find(node *h) /*查询并显示*/
{
int i; node *q; char a[20];
printf("_______________________________________\n");
printf("| |\n");
printf("| 电话号码查询:
|\n");
printf("| 1. 按姓名查询
|\n");
printf("| 2. 按电话号码查询 |\n");
printf("| 0. 返回主菜单
|\n");
printf("|_____________________________________|\n");
printf("请选择:\n");
scanf("%d",&i);
switch(i)
{
case 1: printf("请输入名字:");
scanf("%s",a);
q=h->next;
while(q!=NULL)
{
if(strcmp(a,q->name)==0)
{
printf("\n编号 : %d ",q->num);
printf("\n姓名 : %s ",q->name);
printf("\n宿舍电话 : %s ",q->tel);
printf("\n手机 : %s ",q->mob_tel);
printf("\n所属班级 : %s \n",q->party);
}
q=q->next;
}
break;
case 2: printf("请输入电话号码:");
scanf("%s",a);
q=h->next;
while(q!=NULL)
{
if((strcmp(a,q->tel))==0||(strcmp(a,q->mob_tel)==0))
{
printf("\n编号 : %d ",q->num);
printf("\n姓名 : %s ",q->name);
printf("\n宿舍电话 : %s ",q->tel);
printf("\n手机 : %s ",q->mob_tel);
printf("\n所属班级: %s \n",q->party);
}
q=q->next;
}
break;
case 0: break;
default: printf("您要查询的记录不存在!\n");
}
}