变量的存储可分为静态和动态俩种方式,
静态存储:指在程序运行期间分配固定的存储空间,即在定义时就分定存储单元,并一直保持不变,直至程序结束。(全局变量)
动态存储:在程序执行过程中才分配存储单元, 使用完毕就立即释放。(形参)
contact.h
#ifndef __CONTACT_H__
#define __CONTACT_H__
#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 25
#define MAX 1000
#define DEFAULT_SZ 3
#define DEFAULT_INC 2
typedef struct PerInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char tele[TELE_MAX];
char addr[ADDR_MAX];
}PerInfo;
//typedef struct Contact
//{
// PerInfo data[MAX];
// int size;
// int capacity;
//}Contact,*pcon;
typedef struct Contact
{
PerInfo *data;
int size;
int capacity;
}Contact, *pcon;
void InitContact(pcon pcon);
void CheckContact(pcon pcon);
void DestroyContact(pcon pcon);
void AddContact(pcon pcon);//增
void DisplayContact(pcon pcon);
void DelContact(pcon pcon);//删
int Find(pcon pcon,char *name);
void SearchContact(pcon pcon);//查
void ModifyContact(pcon pcon);//改
void Sort(pcon pcon);
void Clear(pcon pcon);
#endif __CONTACT_H__
函数实现
contact.c
#include"contact.h"
#pragma warning(disable:4996)
void InitContact(pcon pcon)
{
pcon->size = 0;
pcon->capacity = DEFAULT_INC;
pcon->data = (PerInfo*)malloc(pcon->capacity*sizeof(PerInfo));
if (pcon->data == NULL)
{
memset(pcon->data, 0, pcon->capacity*sizeof(PerInfo));
exit(EXIT_FAILURE);
}
}
void CheckContact(pcon pcon)
{
PerInfo* tmp=0;
if (pcon->size == pcon->capacity)
{
realloc(pcon->data, pcon->capacity + DEFAULT_INC);
if (tmp == NULL)
{
;
}
else
{
pcon->data = tmp;
}
pcon->capacity += DEFAULT_INC;
}
}
void DestroyContact(pcon pcon)
{
if (pcon->data != NULL)
{
free(pcon->data);
pcon->data = NULL;
}
}
void AddContact(pcon pcon)
{
if (pcon->size >= MAX)
{
printf("the contact is full\n");
return;
}
printf("please enter name\n");
scanf("%s", pcon->data[pcon->size].name);
printf("please enter age\n");
scanf("%d",&( pcon->data[pcon->size].age));
printf("please enter sex\n");
scanf("%s", pcon->data[pcon->size].sex);
printf("please enter tele\n");
scanf("%s", pcon->data[pcon->size].tele);
printf("please enter addr\n");
scanf("%s", pcon->data[pcon->size].addr);
pcon->size++;
printf("success\n");
}
void DisplayContact(pcon pcon)
{
int i = 0;
for (i = 0; i < pcon->size; i++)
{
printf("name:%s\n", pcon->data[i].name);
printf("age:%d\n", pcon->data[i].age);
printf("sex:%s\n", pcon->data[i].sex);
printf("tele:%s\n", pcon->data[i].tele);
printf("addr:%s\n", pcon->data[i].addr);
}
}
int Find(pcon pcon, char *name)
{
int i = 0;
for (i = 0; i < pcon->size; i++)
{
if (strcmp(pcon->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void DelContact(pcon pcon)
{
if (pcon->size == 0)
{
printf("the contact is empty");
return;
}
char name[NAME_MAX];
int j = 0;
printf("请输入要删除的名字\n");
scanf("%s", name);
int pos = Find(pcon, name);
if (pos == -1)
{
printf("找不到要删除的名字\n");
return;
}
for (j = pos; j < pcon->size; j++)
{
pcon->data[j] = pcon->data[j + 1];
}
pcon->size--;
printf("删除成功\n");
}
void SearchContact(pcon pcon)
{
char name[NAME_MAX] = {0};
int pos = 0;
printf("请输入要查找的姓名\n");
scanf("%s", &name);
pos = Find(pcon, name);
if (pos == -1)
{
printf("找不到要查找的姓名\n");
return;
}
else
{
printf("name:%s\n", pcon->data[pos].name);
printf("age:%d\n", pcon->data[pos].age);
printf("sex:%s\n", pcon->data[pos].sex);
printf("tele:%s\n", pcon->data[pos].tele);
printf("addr:%s\n", pcon->data[pos].addr);
}
}
void ModifyContact(pcon pcon)
{
char name[NAME_MAX] = { 0 };
int pos = 0;
printf("请输入要修改的姓名\n");
scanf("%s", &name);
pos = Find(pcon, name);
if (pos == -1)
{
printf("找不到要修改的姓名\n");
return;
}
else
{
printf("please enter name\n");
scanf("%s", pcon->data[pos].name);
printf("please enter age\n");
scanf("%d", &(pcon->data[pos].age));
printf("please enter sex\n");
scanf("%s", pcon->data[pos].sex);
printf("please enter tele\n");
scanf("%s", pcon->data[pos].tele);
printf("please enter addr\n");
scanf("%s", pcon->data[pos].addr);
}
}
void Sort(pcon pcon)
{
int i = 0;
int j = 0;
for (i = 0; i < pcon->size - 1; i++)
{
for (j = 0; j < pcon->size - 1 - i; j++)
{
if (strcmp(pcon->data[j].name, pcon->data[j + 1].name)>0)
{
PerInfo tmp = { 0 };
tmp = pcon->data[j];
pcon->data[j] = pcon->data[j + 1];
pcon->data[j + 1] = tmp;
}
}
}
}
void Clear(pcon pcon)
{
pcon->size = 0;
}
测试部分
text.c
#pragma warning(disable:4996)
#include"contact.h"
void menu()
{
printf("***************************\n");
printf(" 1.Add 2.Del \n");
printf(" 3.Modify 4.Search\n");
printf(" 5.Display 6.Sort \n");
printf(" 7.Clear 0.Exit \n");
}
int main()
{
Contact con;
int input = 0;
InitContact(&con);
do
{
menu();
printf("请选择>:\n");
scanf("%d", &input);
switch (input)
{
case 1:
AddContact(&con);
break;
case 2:
DelContact(&con);
break;
case 3:
ModifyContact(&con);
break;
case 4:
SearchContact(&con);
break;
case 5:
DisplayContact(&con);
break;
case 6:
Sort(&con);
break;
case 7:
Clear(&con);
break;
case 0:
break;
default:
break;
}
} while (input);
return 0;
}