C语言——简易的静态通讯录实现

静态通讯录的实现:增(add)删(del)查(search)改(modify)、显示(show)、清空(empty)、排序(sort)、退出(exit)。
1>创建一个结构体S1,结构体内容包括了一些基本信息,(姓名、性别、年龄、电话、住址)
2>创建一个结构体S2,内容包含了利用S1创建的结构体数组和整形变量sz。
注:这样做的目的是为了简洁直观,因为sz变量的存在是为了记录通讯录的相关操作,可以直观的看出来记录的数量,如果改用全局变量sz,看起来太过零散,代码可读性太差。)
3>分别对各个函数进行定义。

代码如下。

text.c

#include"contact1.h"

void test()
{
	int input = 0;
	Contact con;
	InitCon(&con);//初始化结构体数组
	do
	{
		menu();
		printf("请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			add(&con);
			break; 
		case 2:
			del(&con);
			break;
		case 3:
			search(&con);
			break;
		case 4:
			modify(&con);
			break;
		case 5:
			show(&con);
			break;
		case 6:
			empty(&con);
			break;
		case 7:
			sort(&con);
			break;
		case 8:
			input = 0;
			break;
		default:
			break;
		}
	} while (input);
}
int main()
{
	test();
	system("pause");
	return 0;
}
contact.c

#include"contact1.h"
void InitCon(pCon p)
{
	assert(p);
	memset(p->data, 0, sizeof(p->data));
	p->sz = 0;
}
void menu()
{
	printf("\n******************************\n");
	printf("****1.add         2.del   ****\n");
	printf("****3.search      4.modify****\n");
	printf("****5.show        6.empty ****\n");
	printf("****7.sort        8.exit  ****\n");
	printf("******************************\n");
}
void add(pCon p)
{
	if (p->sz == MAX)
		printf("通讯录已满");
	else
	{
		printf("请您输入姓名>");
		scanf("%s", p->data[p->sz].name);
		printf("请您输入年龄>");
		scanf("%d", &p->data[p->sz].age);
		printf("请您输入性别>");
		scanf("%s", p->data[p->sz].sex);
		printf("请您输入点话>");
		scanf("%s", p->data[p->sz].tel);
		printf("请您输入地址>");
		scanf("%s", p->data[p->sz].addr);
		p->sz++;
	}
}
void del(pCon p)
{
	char s[20];
	int i;
	if (p->sz == 0)
		printf("通讯录为空");
	else
	{
		printf("请输入要删除联系人的姓名>");
		scanf("%s", s);
		for (i = 0; i < p->sz; i++)
		{
			if (strcmp(s, p->data[i].name) == 0)//如果找到了,就把所有的往前挪动一个。
			{
				for (; i < p->sz-1; i++)
				{
					p->data[i] = p->data[i + 1];
				}
				p->sz--;//sz减一,假装已经把最后一个删除了!
			}
		}
		if (i == p->sz)
			printf("没找到该联系人!");
	}
}
void search(pCon p)
{
	char s[20];
	int i;
	printf("请输入要查找联系人的姓名>");
	scanf("%s", s);
	for (i = 0; i < p->sz; i++)
	{
		if (strcmp(s, p->data[i].name) == 0)//找到了
		{
			printf("%8s\t%3d\t%5s\t%13s\t%20s\t\n", p->data[i].name, p->data[i].age, p->data[i].sex,
				p->data[i].tel, p->data[i].addr);
			break;
		}
	}
	if (i == p->sz)
		printf("没找到该联系人!");
}
void modify(pCon p)
{
	char s[20];
	int i;
	printf("请输入要更改联系人的姓名>");
	scanf("%s", s);
	for (i = 0; i < p->sz; i++)
	{
		if (strcmp(s, p->data[i].name) == 0)//找到了
		{
			printf("请您输入更改后的姓名>");
			scanf("%s", p->data[i].name);
			printf("请您输入更改后的年龄>");
			scanf("%d", &p->data[i].age);
			printf("请您输入更改后的性别>");
			scanf("%s", p->data[i].sex);
			printf("请您输入更改后的点话>");
			scanf("%s", p->data[i].tel);
			printf("请您输入更改后的地址>");
			scanf("%s", p->data[i].addr);
			break;
		}
	}
	if (i == p->sz)
		printf("没找到该联系人!");

}
void show(pCon p)
{
	int i;
	printf("%8s\t%3s\t%5s\t%13s\t%20s\n","name", "age", "sex", "tel", "addr");
	for (i = 0; i < p->sz; i++)
	{
		printf("%8s\t%3d\t%5s\t%13s\t%20s\t\n", p->data[i].name, p->data[i].age, p->data[i].sex,
			p->data[i].tel, p->data[i].addr);
	}
}
void empty(pCon p)
{
	p->sz = 0;
}
int name_sort(const void*c1,const void*c2)
{
	return strcmp((((Peoinfor*)c1)->name), (((Peoinfor*)c2)->name));
}
int age_sort(const void*c1, const void*c2)
{
	return(((Peoinfor*)c1)->age) - (((Peoinfor*)c2)->age);
}
void sort(pCon p)
{
	int input = 0;
	printf("请选择排序方式>\n");
	printf("_____1.姓名排序_____\n_____2.年龄排序_____\n");
	do
	{
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			qsort(p->data, p->sz, sizeof(p->data[0]), name_sort);
			input = 0;
			break;
		case 2:
			qsort(p->data, p->sz, sizeof(p->data[0]),age_sort);
			input = 0;
			break;
		default:
			break;
		}
	} while (input);
}

contact.h

#ifndef CONTACT_H
#define CONTACT_H
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define NAME 20
#define SEX 5
#define TEL 15
#define ADDR 20
#define MAX 100
typedef struct Peoinfor
{
	char name[NAME];
	int age;
	char sex[SEX];
	char tel[TEL];
	char addr[ADDR];
}Peoinfor;
typedef struct Contact
{
	Peoinfor data[MAX];
	int sz;
}Contact, *pCon;
void InitCon(pCon con);
void menu();
void add(pCon con);
void del(pCon con);
void search(pCon con);
void modify(pCon con);
void show(pCon con);
void empty(pCon con);
void sort(pCon con);

#endif

下面列出部分测试图,其他功能大家可以自行测试。
1.添加联系人

2.删除联系人

3.打印联系人列表后退出

感觉很多地方还是有不熟悉,花费了好几个小时才码出这个静态通讯录,对结构体的理解和应用还是不深,以后还得多加练习,加油~



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值