单链表通讯录 —— 通讯录1.0

用结构体指针数编写通讯录。

实现了以下功能:

(1)显示界面显示(2)添加联系人信息(3)显示联系人信息,以名字排序,输出有颜色的字体

(4)删除联系人(5)修改联系人信息

主要代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define n 100

int person=0;

struct student
{
	char name[n];
	char sex[n];
	int tel;
	int age;
};
typedef struct student STU;

void menu()     //显示通讯录界面,方便进行功能选择
{
	system("color f4");// 控制背景色和字体颜色   红色字体,亮白色背景
	printf("***********************************************\n");
	printf("\t\t 欢迎进入通讯录\n");
	printf("\t 1、添加联系人    2、显示联系人\n");
	printf("\t 3、删除联系人    4、查找联系人\n");
	printf("\t 5、修改联系人    6、退出\n");
	printf("************************************************\n");
 }

void addinf(STU *p[])   //选择添加联系人,可以自己选择添加几人
{
	int i=0,j=1;

	system("color 62");
	printf("姓名:性别:年龄:电话:\n");
	while(j == 1)
	{
		p[person]=(STU *)malloc(sizeof(STU));

		scanf("%s%s%d%d",p[person]->name,p[person]->sex,&p[person]->age,&p[person]->tel);  //输入联系人信息

		printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel); //显示联系人信息

		person++;  //成功就加1
		
		printf("是否继续添加: 是1 否0 \n");
		scanf("%d",&j);
	}

}
 
void show(STU *p[])   //显示函数,以名字排序,结果显示字体颜色       
 {
	int i,j,k;
	STU *q[3];
	q[0]=(STU *)malloc(sizeof(STU));

	system("color d4");
	printf("选择名字排序的方式:1 字母小到大 0 字母大到小 \n");
	scanf("%d",&k);

	if(0 == k)
	{
		for(i = 0; i < person; i++)     // 以姓名排序  字母小到大
			for(j = 0; j < person - 1-i; j++)
			{
				if(strcmp(p[j]->name,p[j+1]->name) > 0)
				{
					q[0] = p[j];
					p[j] = p[j+1];
					p[j+1] = q[0];
				}
			}
	}
	else
		if(1 ==k)
		{
			for(i = 0; i < person; i++)     // 以姓名排序  字母大到小
			for(j = 0; j < person - 1-i; j++)
			{
				if(strcmp(p[j]->name,p[j+1]->name) < 0)
				{
					q[0] = p[j];
					p[j] = p[j+1];
					p[j+1] = q[0];
				}
			}
		}

//	system("color 04"); // 控制输出 背景和字体 颜色  背景为黑色,字体为红色
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//行显示字体为红色
	for(i = 0; i < person; i++)
		printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);

	Sleep(2000);

}

void del(STU *p[])
{
	int i,j;
	STU *a[1];
	a[0] = (STU *)malloc(sizeof(STU));

	system("color b4");
	printf("选择要删除的姓名:\n");
	scanf("%s",a[0]->name);

	if(person == 0)
		printf("没有联系人,请先建立联系人\n");

	else
		if(person == 1)
		{
		//	printf("-----------\n");
			if(strcmp(a[0]->name,p[person-1]->name) == 0)
			{
				free(p[person-1]);
				person--;
				printf("删除完成\n");
			}
			else
				printf("没有此联系人\n");
		}
		else 
			if(person > 1)
			{
				for(i = 0; i < person;i++)
				{
					if(strcmp(a[0]->name,p[i]->name) == 0)
					{
						free(p[i]);
						for(j = i; j < person - 1; j++)
						{
							p[i] = p[i+1];
						}
						person--;
						printf("删除完成\n");
					}
				}
				if(i == person)
					printf("没有此联系人\n");
			}
}

void mod(STU *p[])
{
	
	int flag,i,j;
	STU *a[1];
	a[0]=(STU *)malloc(sizeof(STU));

	system("color 84");
	printf("请输入修改联系人的姓名:\n");
	scanf("%s",a[0]->name);

	printf("\n");
	if(person == 0)
	{
		printf("没有此联系人,请建立联系人\n");
		i = -1;
	}
	else
		if(person == 1)
		{
			if(strcmp(a[0]->name,p[person-1]->name) == 0)
				i = 0;
			else
				i = -1;
		}
		else
			if(person > 1)
			{
				for(j = 0; j < person; j++)
				{
					if(strcmp(a[0]->name,p[j]->name) == 0)
						i = j;
				}
				if(i == person)
					i = -1;
			}

	if(i == -1)
		printf("没有此联系人\n");
	if(i != -1)
	{
		while(1)
		{
			printf("***************************************\n");
			printf("\t选择修改的信息:\n");
			printf("\t 0.不修改\t\n");
			printf("\t 1.改姓名\t\n");
			printf("\t 2.改性别\t\n");
			printf("\t 3.改年龄\t\n");
			printf("\t 4.改电话\t\n");
			printf("\t 5.信息多改\t\n");
			printf("***************************************\n");
			scanf("%d",&flag);
			printf("修改联系人原信息如下:\n");
			printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);

			if(0 == flag)
				break;
			if(1 == flag)
				scanf("%s",p[i]->name);
			if(2 == flag)
				scanf("%s",p[i]->sex);
			if(3 == flag)
				scanf("%d",p[i]->age);
			if(4 == flag)
				scanf("%d",p[i]->tel);
			if(5 == flag)
				scanf("%s%s%d%d",p[i]->name,p[i]->sex,&p[i]->age,&p[i]->tel);

			printf("联系人修改后信息如下:\n");
			printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);
		}
	}
}

void find(STU *p[])
{
	int i;
	STU *a[1];
	a[0]=(STU *)malloc(sizeof(STU));

	system("color 74");
	printf("请输入修改联系人的姓名:\n");
	scanf("%s",a[0]->name);

	printf("\n");
	if(person == 0)
	{
		printf("没有此联系人,请建立联系人\n");
	}
	else
		if(person == 1)
		{
			if(strcmp(a[0]->name,p[person-1]->name) == 0)
				printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",
				        p[person-1]->name,p[person-1]->sex,p[person-1]->age,p[person-1]->tel);
			else
				printf("没有此联系人,请建立联系人\n");
		}
		else
			if(person > 1)
			{
				for(i = 0; i < person; i++)
				{
					if(strcmp(a[0]->name,p[i]->name) == 0)
						printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);
				}
				if(i == person)
					printf("没有此联系人,请建立联系人\n");
			}

}

int main()
{
	STU *str[n]={0};
	int choice;

	system("color 24");
	while(1)
	{
		Sleep(2000);
		system("cls");

		menu();

		Sleep(2000);     //  延时一段时间
		system("cls");   //  清空界面

		printf("请输入命令:\n");
		scanf("%d",&choice);

		switch(choice)
		{
			case 1 :
				addinf(str);
				break;
			case 2 :
				show(str);
				break;
			case 3 :
				del(str);
				break;
			case 4 :
				mod(str);
				break;
			case 5 :
				find(str);
				break;
			case 6 :
				exit(0);
                break;
		}
		if(choice == 0)
			break;
	}
	
	return 0;
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值