变量的存储可分为静态和动态俩种方式,
静态存储:指在程序运行期间分配固定的存储空间,即在定义时就分定存储单元,并一直保持不变,直至程序结束。(全局变量)
动态存储:在程序执行过程中才分配存储单元, 使用完毕就立即释放。(形参)
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; }
