contact.h
#ifndef _CONTACT_H__
#define _CONTACT_H__
# include<stdio.h>
# include <stdlib.h>
#define MAX 1000
#define MAX_NAME 10
#define MAX_SEX 5
#define MAX_TELE 20
#define MAX_ADDR 30
typedef struct PeoInfo//个人信息结构体
{
char name[MAX_NAME];
int age;
char sex[MAX_SEX];
char tele[MAX_TELE];
char addr[MAX_ADDR];
}PeoInfo;
typedef struct Contact//通讯录信息结构体
{
PeoInfo contact[MAX];//可添加的信息量
int sz;//用于记录添加的信息量
}Contact, *pContact;
void InitContact(pContact pcon);
void AddContact (pContact pcon);
void ShowContact(const pContact pcon);
void DelContact(pContact pcon);
#endif //_CONTACT_H__
contact.c
#define _CRT_SECURE_NO_WARNINGS 1
# include "contact.h"
void InitContact(pContact pcon)
{
pcon->sz = 0;
memset(pcon->contact, 0, sizeof(pcon->contact));
}
void AddContact(pContact pcon)
{
if (pcon->sz == MAX)
{
printf("通讯录已满!");
return;//不返回什么值吗?为何还要返回?
}
printf("请输入名字:>");
scanf("%s", pcon->contact[pcon->sz].name);
printf("请输入年龄:>");
scanf("%d", &(pcon->contact[pcon->sz].age)); //注意加&
printf("请输入性别:>");
scanf("%s", pcon->contact[pcon->sz].sex);
printf("请输入电话:>");
scanf("%s", pcon->contact[pcon->sz].tele);
printf("请输入地址:>");
scanf("%s", pcon->contact[pcon->sz].addr);
pcon->sz++;
printf("添加成功!\n");//有一个反馈信息会更好
}
void ShowContact(const pContact pcon)
{
int i = 0;
printf("%12s\t%4s\t%5s\t%12s\t%12s\n", "name", "age", "sex", "tele", "addr");
for (i = 0; i < pcon->sz; i++)
{
printf("%12s\t%4d\t%5s\t%12s\t%12s\n",
pcon->contact[i].name,
pcon->contact[i].age,
pcon->contact[i].sex,
pcon->contact[i].tele,
pcon->contact[i].addr);
}
}
static int FindEntry(pContact pcon, char name[])
{
int i = 0;
for (i = 0; i < pcon->sz; i++)
{
if (strcmp(name, pcon->contact[i].name) == 0)
{
return i;
}
}
return -1;
}
void DelContact(pContact pcon)
{
int pos = 0;
char name[MAX_NAME] = { 0 };
if (pcon->sz == 0)
{
printf("通讯录已空\n");
return;
}
printf("请输入您想要删除的记录\n");
scanf("%s", &name);
pos = FindEntry(pcon, name);
if (pos == -1)
{
printf("您想要删除的记录不存在!\n");
}
else
{
memmove(pcon->contact + pos,
pcon->contact + pos + 1,
(pcon->sz - pos - 1)*sizeof(PeoInfo));
pcon->sz--;
printf("删除成功!\n");
}
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
# include "contact.h"
enum Op
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
SHOW,
EMPTY,
SORT
};
void menu()
{
printf("*******************************************\n");
printf("******* 1、add 2、 del *********\n");
printf("******* 3、search 4、 modify *********\n");
printf("******* 5、show 6、 empty *********\n");
printf("******* 7、stop 0、 sort *********\n");
printf("*******************************************\n");
}
test()
{
int input = 0;
Contact my_con;//将添加的信息和信息量封装后创建的一个变量
InitContact(&my_con);//想传结构体就传其地址
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case ADD:
AddContact(&my_con);
break;
case DEL:
DelContact(&my_con);
break;
case SEARCH:
break;
case MODIFY:
break;
case SHOW:
ShowContact(&my_con);
break;
case EMPTY:
break;
case SORT:
break;
case EXIT:
break;
default:
printf("选择错误,请重新输入!");
break;
}
} while (input);
}
int main()
{
test();
system("pause");
return 0;
}