通讯录(链表实现)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int max = 100;
//姓名、性别、电话、手机、传真、邮箱、地址
typedef struct phone
{
	char name[20]; //姓名
	char sex[20];  // 性别 
    int tel; //电话
	int  fax;       // 传真
	char qq[100];   // 邮箱 
	char addre[20]; //地址 
}Ipa;//给存放通讯录属性的结构体取个别名

typedef struct List
{
	Ipa data;
	struct List *next;

}list;
list *head ;

// 初始化
void inint()
{
	head = (list*)malloc(sizeof(list));
	head->next = NULL;
	printf("初始化成功");
} 
// 添加用户

void great()
{
	list *p , *t;
	int n;
	printf("请输入用户人数:\n");
	scanf("%d",&n);
	printf("请依次输入:姓名、性别、电话、传真、邮箱、地址\n");
	for(int i = 0 ; i < n ; i++)
	{
		p  = (list*)malloc(sizeof(list));
		scanf("%s %s %d %d %s %s",p->data.name,p->data.sex,&p->data.tel,&p->data.fax,p->data.qq,p->data.addre);
		//printf("%s",p->data.name);
		t = head->next;
		head->next = p;
		p->next = t;
	} 
}

//显示 
int display()
{
	list*p;
	p = head->next;
	if(!p)
	{
		printf("通讯录为空\n");
		return 0;
	}
	else
	{
		printf("元素如下:\n");
		while(p)
		{
			printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			p = p->next;
		}
	}
	return 0;
}

//查找 
void seek()
{
	char name_tmpt[100];
	printf("请输入你要查询的姓名:\n");
	scanf("%s",name_tmpt);
	list *p;
	p = head->next;
	int flage = 0;// 1表示已经找到元素
	while(p)
	{
		if(strcmp(name_tmpt,p->data.name) == 0)
		{
			printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			flage = 1;
			break;
		}
		p = p->next;
	} 
	if(!flage)
	printf("没有该联系人的信息!\n");
} 

// 删除
void dele()
{
	char name_tmpt[100];
	printf("请输入你要删除的姓名:\n");
	scanf("%s",name_tmpt);
	list *p , *par;
	p = head->next;
	par = head;
	int flage = 0;// 1表示已经找到元素
	while(p)
	{
		if(strcmp(name_tmpt,p->data.name) == 0)
		{
			par->next = p->next;
			free(p);
			//printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			flage = 1;
			printf("操作成功!\n");
			break;
		}
		else
		{
			par = p;//存储p的前一个节点 
			p = p->next; 
		}
	}
	if(!flage)
	printf("没有该联系人的信息!\n");
}

// 更新
void newdata()
{
	char name_tmpt[100];
	printf("请输入你要更新的姓名:\n");
	scanf("%s",name_tmpt);
	list *p;
	p = head->next;
	int flage = 0;// 1表示已经找到元素
	while(p)
	{
		if(strcmp(name_tmpt,p->data.name) == 0)
		{
			//printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			printf("请输入新的信息:\n");
			scanf("%s %s %d %d %s %s",p->data.name,p->data.sex,&p->data.tel,&p->data.fax,p->data.qq,p->data.addre);
			printf("操作成功!\n"); 
			flage = 1;
			break;
		}
		p = p->next;
	} 
	if(!flage)
	printf("没有该联系人的信息!\n");
}

// 菜单 
void menu()
{
	printf("\t\t\t****************************************************\n");
	printf("\t\t\t1.初始化通讯录                          2.建立通讯录\n");
	printf("\t\t\t3.删除联系人                            4.修改联系人\n");
	printf("\t\t\t5.查找联系人                            6.显示通讯录  \n");
	printf("\t\t\t7 退出系统                                     \n");
	printf("\t\t\t****************************************************\n");
}
int main()
{
	menu(); 
	int op = 10;
	while(op!= 8)
	{
		printf("请选择你的操作:\n");
		scanf("%d",&op);
		switch(op)
		{
			case 1 : inint();break;
			case 2 : great();break;
			case 3 : dele();break;
			case 4 : newdata();break;
			case 5 : seek();break;
			case 6 : display();break;
			case 7 : op = 8;break;
		}
	}
	return 0;
} 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将全班同学的通讯信息存入一个单链表。元素中的通讯信息包括每一位同学的:学号、姓名、性别、宿舍、联系电话等。要求能够利用姓名和序号进行有关查找、插入、删除、更新等操作。 (1)以单链表作为存储班级通讯录的存储结构,首先需要定义一个单链表数据结构,其中每个元素是一条同学通讯信息,包括学号、姓名、性别、宿舍、联系电话等字段。 (2)将本班的通讯信息输入文本文件“通讯录.txt”中,需要实现文件读写功能。当程序启动时,需要将文件中的信息读入单链表中,当程序结束时,需要将内存中的通讯录链表中的信息重新写入文件。 (3)需要实现向单链表中追加一条通讯录记录的功能,即单链表的插入功能。通过提示信息,让用户将一条通讯录记录的各个字段信息输入内存,构成一个单链表元素,然后将其作为一个整体插入单链表最后一条记录之后,该功能在读取文件信息,创建单链表是也需要用到。 (4)需要实现查询功能,包括通过姓名查询:给定一个姓名,返回其通讯信息和在表中的位置;通过序号查询:给定一个姓名,返回其通讯信息和在表中的位置。 (5)需要实现在给定位置增加一条记录的功能,该位置可以直接设定,也可以通过查询得到,比如先查到姓名为“XXX”的学生的通讯信息在表中的位置,然后在该记录的后面插入一条新的记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值