[C程序]手机通讯录

有时间再做详细教程,先放上三个文件的整体代码

视频演示:[C程序]通讯录_哔哩哔哩_bilibili

contact.h 

#pragma once
#define MAX_NUMS 10
#define NAME_LENGTH 7
#define TELE_LENGTH 12

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>

enum Option
{
	EXIT,
	ADD,
	DEL,
	SEEK,
	MODIFY,
	PRINT,
	SORT,
	EMPTY
};

typedef struct PeopleInfo
{
	char name[NAME_LENGTH];
	char sex[10];
	int age;
	char tele[TELE_LENGTH];
}PeopleInfo;

typedef struct Contact
{
	PeopleInfo data[MAX_NUMS];
	int PeopNums;
}Contact;


//菜单
void menu();

//初始化Contact结构体变量con
void InitContact(Contact* ptr_con);

//添加联系人信息
void AddOne(Contact* ptr_con);

//打印所有联系人信息
void PrintAll(const Contact* ptr_con);

//删除联系人信息
void DelOne(Contact* ptr_con);

//查找具体人下标
int Seek(Contact* ptr_con);

//打印具体人信息
void PrintOne( Contact* ptr_con);

//修改联系人信息
void ModifyOne(Contact* ptr_con);

//按年龄排序
void AgeSort(Contact* ptr_con);

contact.c 

#include"contact.h"

//菜单
void menu()
{
	printf("1、增加联系人信息  2、删除联系人信息\n");
	printf("3、查询联系人信息  4、修改联系人信息\n");
	printf("5、打印所有人信息  6、按年龄排序信息\n");
	printf("7、清空联系人信息  0、退出通讯录\n");
}

//初始化通讯录
void InitContact(Contact* ptr_con)
{
	assert(ptr_con);
	memset(ptr_con->data, 0, sizeof(ptr_con->data));
	ptr_con->PeopNums = 0;
}

//增加联系人信息
void AddOne(Contact* ptr_con)
{
	assert(ptr_con);
	if (ptr_con->PeopNums == MAX_NUMS)
	{
		printf("通讯录已满\n");
		return;
	}
	else
	{
		printf("姓名:");
		scanf("%s", (ptr_con->data[ptr_con->PeopNums]).name);
		printf("性别:");
		scanf("%s", (ptr_con->data[ptr_con->PeopNums]).sex);
		printf("年龄:");
		scanf("%d", &(ptr_con->data[ptr_con->PeopNums]).age);
		printf("电话:");
		scanf("%s", (ptr_con->data[ptr_con->PeopNums]).tele);
		ptr_con->PeopNums++;
	}
}

//打印所有联系人信息
void PrintAll(const Contact* ptr_con)
{
	printf("%-10s  %-10s  %-3s  %-s\n", "姓名", "性别", "年龄", "电话");
	for (int i=0; i < ptr_con->PeopNums; i++)
	{
		printf("%-10s  %-10s  %-3d  %-s\n", ptr_con->data[i].name
			, ptr_con->data[i].sex
			, ptr_con->data[i].age
			, ptr_con->data[i].tele);
	}
}

//删除具体联系人信息
void DelOne(Contact* ptr_con)
{
	printf("请输入删除的联系人姓名:");
	int ret = Seek(ptr_con);
	if (ret != -1)
	{
		memmove(ptr_con->data + ret, ptr_con->data + ret + 1, (MAX_NUMS - ret - 1) * sizeof(ptr_con->data[0]));
		ptr_con->PeopNums--;
		printf("删除成功\n");
	}
	else
	{
		printf("通讯录不存在此人\n");
	}
}

//查找具体联系人的下标
int Seek(Contact* ptr_con)//找到返回下标,没找到返回-1.
{
	char name[NAME_LENGTH] = { 0 };
	scanf("%s", name);
	for (int i = 0; i < ptr_con->PeopNums; i++)
	{
		if (strcmp(ptr_con->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

//(查找)打印具体联系人
void PrintOne( Contact* ptr_con)
{
	printf("请输入联系人姓名:");
	int i=Seek(ptr_con);
	if (i != -1)
	{
		printf("%-10s  %-10s  %-3s  %-s\n", "姓名", "性别", "年龄", "电话");
		printf("%-10s  %-10s  %-3d  %-s\n", ptr_con->data[i].name
			, ptr_con->data[i].sex
			, ptr_con->data[i].age
			, ptr_con->data[i].tele);
	}
	else
	{
		printf("查无此人\n");
	}
}

void ModifyOne(Contact* ptr_con)
{
	printf("请输入改修的联系人姓名:");
	int i=Seek(ptr_con);
	if (i != -1)
	{
		printf("请修改其具体内容\n");
		printf("姓名:");
		scanf("%s", (ptr_con->data[i]).name);
		printf("性别:");
		scanf("%s", (ptr_con->data[i]).sex);
		printf("年龄:");
		scanf("%d", &(ptr_con->data[i]).age);
		printf("电话:");
		scanf("%s", (ptr_con->data[i]).tele);
		system("cls");
		printf("修改完成\n");
	}
	else
	{
		printf("未找到修改的联系人\n");
	}
}

//排序
void AgeSort(Contact* ptr_con)
{
	for (int i = 0; i < ptr_con->PeopNums - 1; i++)
	{
		int flag = 1;
		for (int j = i; j < ptr_con->PeopNums-i-1; j++)
		{
			PeopleInfo tmp = { 0 };
			if (ptr_con->data[j].age > ptr_con->data[j + 1].age)
			{
				tmp = ptr_con->data[j];
				ptr_con->data[j] = ptr_con->data[j + 1];
				ptr_con->data[j + 1] = tmp;
				flag = 0;
			}
		}
		if (flag == 1)
		{
			break;
		}
	}
	printf("排序完成\n");
}

test.h

#include"contact.h"

int main()
{
	int input = 0;
	Contact con;
	InitContact(&con);
	do
	{
		menu();
		printf("请输入选项:");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			system("cls");
			AddOne(&con);
			system("cls");
			break;
		case DEL:
			system("cls");
			DelOne(&con);
			system("pause");
			system("cls");
			break;
		case SEEK:
			system("cls");
			PrintOne(&con);
			system("pause");
			system("cls");
			break;
		case MODIFY:
			system("cls");
			ModifyOne(&con);
			system("pause");
			system("cls");
			break;
		case PRINT:
			system("cls");
			PrintAll(&con);
			system("pause");
			system("cls");
			break;
		case SORT:
			system("cls");
			AgeSort(&con);
			system("pause");
			system("cls");
			break;
		case EMPTY:
			system("cls");
			InitContact(&con);
			printf("初始化完成\n");
			system("pause");
			system("cls");
			break;
		case 0:
			system("cls");
			printf("退出通讯录\n");
			break;
		default:
			system("cls");
			printf("请输入正确的选项!\n");
			break;
		}
	} while (input);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值