exercise23

自定义类型

静态通讯录

#ifndef__CONTACT_H__   
#define__CONTACT_H__
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 15
#define ADDER_MAX 30
#include<stdio.h>
#include<assert.h>
#include<string.h>
#pragma warning(disable:4996)

typedef struct PeoInfo
{
	char name[NAME_MAX];
	long int age;
	char  sex[SEX_MAX];
	char tele[TELE_MAX];
	char addr[ADDER_MAX];
}PeoInfo;
typedef struct Contact
{
	struct PeoInfo data[MAX];
	int sz;
}Contact, *pContact;
enum MyEnum
{
	Exit,
	Add,
	Del,
	Search,
	Modify,
	Show,
	Sort,
	Clear
};
void InitContact(pContact pcon);
void AddContact(pContact pcon);
int SearchContact(pContact pcon);
void ShowContact(pContact pcon);
void DelContact(pContact pcon);
void ModifyContact(pContact pcon);
void SortContact(pContact pcon);
void ClearContact(pContact pcon);
#endif

contact.c
#include"contact.h"

void InitContact(pContact pcon)
{
	pcon->sz = 0;
	memset(pcon->data, 0, MAX*sizeof(struct PeoInfo));
}

void AddContact(pContact pcon)
{
	assert(pcon->data);
	if (pcon->data == MAX)
	{
		printf("通讯录已满\n");
	}
	else
	{
		printf("请输入名字: ");
		scanf("%s", pcon->data[pcon->sz].name);
		printf("请输入性别: ");
		scanf("%s", pcon->data[pcon->sz].sex);
		printf("请输入年龄: ");
		scanf("%d", &pcon->data[pcon->sz].age);
		printf("请输入电话: ");
		scanf("%s", pcon->data[pcon->sz].tele);
		printf("请输入地址: ");
		scanf("%s", pcon->data[pcon->sz].addr);
		pcon->sz++;
	}
	printf("录入成功\n");
}

{
	int i = 0;
	for (i = 0; i < pcon->sz; i++)
	{
		if (strcmp(pcon->data[i].name, name) == 0)
		{
			return i;//返回下标
		}
	}
	return -1;//找不到两个相同的,
}

int SearchContact(pContact pcon)
{
	char name[NAME_MAX];
	printf("请输入要查询的姓名: ");
	scanf("%s", name);
	int pos = 0;
	pos = FindEntry(pcon, name);
	if (pos == -1)
	{
		printf("查无此人\n");
		return;
	}
	else
	{
		printf("姓名:%10s\t性别:%5s\t年龄:%5d\t电话:%10s\t住址:%15s\n", pcon->data[pos].name,pcon->data[pos].sex,
			pcon->data[pos].age,
			pcon->data[pos].tele,
			pcon->data[pos].addr);
	}
}

void ShowContact(pContact pcon)
{
	printf("联系人信息:\n");
	int i = 0;
	printf("%10s\t%5s\t%5s\t%10s\t%15s\n", "姓名", "性别", "年龄", "电话", "地址");
	for (i = 0; i < pcon->sz; i++)
	{
		printf("%10s\t%5s\t%5d\t%10s\t%15s\n", pcon->data[i].name,
			pcon->data[i].sex,
			pcon->data[i].age,
			pcon->data[i].tele,
			pcon->data[i].addr);
	}
}


void DelContact(pContact pcon)
{
	char name[NAME_MAX];
	printf("请输入要删除的除联系人\n");
	scanf("%s", name);
	int pos = 0;
	pos = FindEntry(pcon, name);
	if (pos == -1)
	{
		printf("要删除的联系人不存在");
		return;
	}
	else
	{
		int j = 0;
		for (j = pos; j < pcon->sz; j++)
		{
			pcon->data[j] = pcon->data[j + 1];//后面一个覆盖前面一个,即删除
		}
		pcon->sz--;
		printf("删除成功\n");
	}
}


void ModifyContact(pContact pcon)
{
	char name[NAME_MAX];
	printf("请输入要修改的联系人\n");
	scanf("%s", name);
	int pos = 0;
	pos = FindEntry(pcon, name);
	if (pos != -1)
	{
		printf("请输入修改后的姓名: ");
		scanf("%s", pcon->data[pcon->sz].name);
		printf("请输入修改后的性别: ");
		scanf("%s", pcon->data[pcon->sz].sex);
		printf("请输入修改后的年龄: ");
		scanf("%d", &pcon->data[pcon->sz].age);
		printf("请输入修改后的电话: ");
		scanf("%s", pcon->data[pcon->sz].tele);
		printf("请输入修改后的地址: ");
		scanf("%s", pcon->data[pcon->sz].addr);
		printf("修改完毕\n");
	}
	else
	{
		printf("要修改的联系人不存在!\n");
	}
}
void SortContact(pContact pcon)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < pcon->sz - 1; i++)
	{
		for (j = 1; j < pcon->sz - i - 1; j++)
		{
			if (strcmp(pcon->data[i].name, pcon->data[i + 1].name)<0)
			{
				struct PeoInfo tem;
				tem = pcon->data[j];
				pcon->data[j] = pcon->data[j + 1];
				pcon->data[j + 1] = tem;
			}
		}
	}
	printf("%10s\t%5s\t%5s\t%10s\t%15s\n", "姓名", "性别", "年龄", "电话", "地址");
	for (i = 0; i < pcon->sz; i++)
	{
		printf("%10s\t%5s\t%5d\t%10s\t%15s\n", pcon->data[i].name,
			pcon->data[i].sex,
			pcon->data[i].age,
			pcon->data[i].tele,
			pcon->data[i].addr);
	}

	printf("排序完成\n");
}
void ClearContact(pContact pcon)
{
	pcon->sz = 0;
}

test.c

#include"contact.h"
void menu()
{
 printf("*********************************\n");
 printf("***  1. Add           2. Del  ***\n");
 printf("***  3.Search         4.Modify***\n");
 printf("***  5. Show          6.Sort  ***\n");
 printf("***  7.Clear          0.Exit  ***\n");
 printf("*********************************\n");
 printf("                                 \n");
}
void test()
{
 Contact my_con;
 InitContact(&my_con);
 int input = 0;
 do
 {
  menu();
  printf("请选择>: ");
  scanf("%d", &input);
  switch (input)
  {
  case Exit:
   break;
  case Add:
   AddContact(&my_con);
   break;
  case Del:
   DelContact(&my_con);
   break;
  case Search:
   SearchContact(&my_con);
   break;
  case Modify:
   ModifyContact(&my_con);
   break;
  case Show:
   ShowContact(&my_con);
   break;
  case Sort:
   SortContact(&my_con);
   break;
  case Clear:
   ClearContact(&my_con);
   break;
  default:
   printf("输入错误,请重新输入\n");
   break;
  }
 } while (input);
}

int main()
{
 test();
 system("pause");
 return 0;
}

猜你喜欢

转载自blog.csdn.net/zn_wuxunian/article/details/80555321