栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

通讯录的实现(自定义数据类型)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通讯录的实现(自定义数据类型)

以三子棋代码展示C语言棋盘代码
  • 1.基本构架
  • 2.头文件(.h)
  • 3.函数文件
    • 1.代码实现
    • 2.拓展分析
  • 3.主函数所在文件(test.c)

1.基本构架

2.头文件(.h)
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#define max 1000
#define max_name 20
#define max_tele 12
#define max_address 30
enum sex
{
	male,
	female
};
struct peoinfo	
{
	char name[max_name];
	char tele[max_tele];
	char sex[7];
	char address[max_address];
	int age;
};
struct contact
{
	struct peoinfo data[max];
	int size;

};
void initcontact(struct contact* ps);
void addcontact(struct contact* ps);
void showcontact(const struct contact* ps);
void delcontact(struct contact* ps);
void searchcontact(const struct contact* ps);
void modifycontact(struct contact* ps);
void sortcontact(struct contact* ps);
enum opinion
{
	exit,
	add,
	del,
	search,
	modify,
	show,
	sort
};	
3.函数文件 1.代码实现
#include"contact.h"
void initcontact(struct contact* ps)
{
	memset(ps->data, 0, sizeof(ps->data));
	ps->size=0;
}
static int find_by_name(char name[max_name],struct contact* ps)
{
	int i = 0;
	for (; i < ps->size; i++)
	{
		if (strcmp(ps->data[i].name, name) == 0)
			return  i;
	}
	return -1;
}
void addcontact(struct contact* ps)
{
	if (ps->size == max)
	{
		printf("contact is fulln");
	}
	else
	{
		printf("please input name,tele,sex,address,age in ordern");
		scanf("%s", &ps->data[ps->size].name);
		scanf("%s", &ps->data[ps->size].tele);
		scanf("%s", &ps->data[ps->size].sex);
		scanf("%s", &ps->data[ps->size].address);
		scanf("%d", &ps->data[ps->size].age);
		ps->size++;
		printf("输入成功n");
	}
}
void showcontact(const struct contact* ps)
{
	if (ps->size == 0)
		printf("通讯录为空n");
	else
	{
			
	}
	{
		int i = 0;
		printf("%-10st%-12st%-6st%-20st%-3stn","name","tele","sex","address","age");
		for (i = 0; i < (ps->size); i++)
		{
			printf("%-10st%-12st%-6st%-20st%-3dtn",ps->data[i].name,
				ps->data[i].tele,
				ps->data[i].sex,
				ps->data[i].address,
				ps->data[i].age);
		}
	}
}
void delcontact(struct contact* ps)
{
	char name[max_name];
	printf("请输入要删除联系人的名字n");
	scanf("%s", name);
	int i, a;
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(ps->data[i].name, name))
			break;
	}
	if (i == ps->size)
		printf("要删除的联系人不存在n");
	else
	{
		for (a = i; a < ps->size - 1; a++)
		{
			ps->data[a] = ps->data[a + 1];
		}
		ps->size--;
		printf("delete successfullyn");
	}
}
void searchcontact(const struct contact* ps)
{
	char name[max_name];
	printf("please input who you want to searchn");
	scanf("%s", name);
	int i=find_by_name(name,ps);
	if (i>=0)
	{
		printf("%-10st%-12st%-6st%-20st%-3stn", "name", "tele", "sex", "address", "age");
		printf("%-10st%-12st%-6st%-20st%-3dtn", ps->data[i].name,
			ps->data[i].tele,
			ps->data[i].sex,
			ps->data[i].address,
			ps->data[i].age);
	}
	else
		printf("who you want to search doesn't existn");
}
void modifycontact(struct contact* ps)
{
	printf("please input who you want to modifyn");
	char name[max_name];
	scanf("%s", name);
	int i=find_by_name(name, ps);
	if (i >= 0)
	{
		printf("please input new name,tele,sex,address,age in ordern");
		scanf("%s", &ps->data[i].name);
		scanf("%s", &ps->data[i].tele);
		scanf("%s", &ps->data[i].sex);
		scanf("%s", &ps->data[i].address);
		scanf("%d", &ps->data[i].age);
		printf("You have modified successfullyn");
	}
	else
		printf("who you want to search doesn't modifyn");
}
enum way
{
	age = 1,
	name,
	tele,
	address,
	sex
};
void sort1(int input1, int input2, struct contact* ps)
{
	switch (input1)
	{
	case age:
		int i, j, min;
		for (i = 0; i < ps->size; i++)
		{
			min = i;
			for (j = i; j < (ps->size); j++)
			{
				if (input2==2)
				{
					if (ps->data[j].age < ps->data[min].age)
						min = j;
				}
				else
				{					
						if (ps->data[j].age >ps->data[min].age)
							min = j;					
				}
			}
			//在struct peoinfo data[max]这个结构体数组中找到age最小元素(即struct peoinfo类型)的下标min
			struct peoinfo tmp = ps->data[i];
			ps->data[i] = ps->data[min];
			ps->data[min] = tmp;
		}
		break;
	case name:
		//按照姓氏首字母先后顺序排序
		int i, j, min;
		for (i = 0; i < ps->size; i++)
		{
			min = i;
			for (j = i; j < (ps->size); j++)
			{
				if (input2 == 2)
				{
					if (strcmp(ps->data[j].name, ps->data[min].name)<0)
						min = j;
				}
				else
				{										
					if (strcmp(ps->data[j].name, ps->data[min].name)>0)
							min = j;					
				}
			}
			//在struct peoinfo data[max]这个结构体数组中找到age最小元素(即struct peoinfo类型)的下标min
			struct peoinfo tmp = ps->data[i];
			ps->data[i] = ps->data[min];
			ps->data[min] = tmp;
		}
		break;
	}
}
void sortcontact(struct contact* ps)
{
	int input1,input2;
	printf("choose the standard to the sequencen");
	printf("1.age    2.namen");
	printf("3.tele   4.addressn");
	printf("5.sex         n");
	scanf("%d", &input1);
	printf("choose the sequencen");
	printf("input 1 from high to low or input 2 from low to highn");
	scanf("%dn", &input2);
	sort1(input1, input2, ps);
}
2.拓展分析

sortcontact函数实现依托于一个标准,这个标准必须从结构体struct peoinfo的元素中找,那么这些元素又可以划分e成两类:1.字符数组 2.整形变量age
那么在实现sortcontact函数的时 候,理应以这5个元素来划分标准供客户选择,但这里只实现了字符数组char name[max_name]和整形int age。

3.主函数所在文件(test.c)
#include"contact.h"
menu()
{
	printf("1.add      2.deln");
	printf("3.search   4.modifyn");
	printf("5.show     6.sortn");
	printf("0.exitn");
}
int main()
{
	int input;
	struct contact con;
	initcontact(&con);
	do{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case add:
			addcontact(&con);
			break;	
		case del:
			delcontact(&con);
			break;
		case search:
			searchcontact(&con);
			break;
		case modify:
			modifycontact(&con);
			break;
		case show:
			showcontact(&con);		
			break;
		case sort:
			sortcontact(&con);
			break;
		case exit:
			break;
		default:
			printf("input an error number,please input againn");
		}
	} while (input);
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589820.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号