当前位置:网站首页>[C language] address book - dynamic and static implementation
[C language] address book - dynamic and static implementation
2022-07-05 03:39:00 【Sincere George】
Catalog
One . Static address book implementation
1. Division logic of environment
Two . Dynamic implementation of address book
Preface :
I believe everyone knows about the address book
Its functions include simple : Add or delete check change
In this issue, we will realize a C Language implementation of the address book
Continue what I talked about last time -- Dynamic memory allocation
Then I will realize it in the two ways given by the title
One . Static address book implementation
1. Division logic of environment
Because the process is a little long , Easy to understand , So a total of three files will be used
There are two source files test.c、contact.c , There is also a header file contact.h To achieve
test.c Is the subject , It is the test logic of the address book
contact.c It is the implementation logic of the address book
contact.h Is the declaration of the address book function
2. Functions to be realized
Each function of the address book is relatively independent
Therefore, different functions can be used to realize the functions of each part
contact.c The functions included are as follows :
1. Initialization of structure
2. Add a Contact
3. Show your contacts
4. Delete Contact
5. Find contacts
6. Modify contact
The specific code is as follows :
3.contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
// The address book can be used to store 1000 Personal information , Everyone's information includes : full name 、 Gender 、 Age 、 Telephone 、 address
typedef struct Introduction
{
char name[20];
char sex[10];
int age;
char tele[20];
char addr[30];
} Introduction;
typedef struct contact
{
Introduction data[1000];
int sz;
}contact;
// Initialization of structure
void Initcontact(contact* pc);
// Add a Contact
void Add(contact* pc);
// Show your contacts
void show(contact* pc);
// Delete Contact
void Dele(contact* pc);
// Find contacts
void Find(contact* pc);
// Modify contact
void Exchange(contact* pc);4.contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void Initcontact(contact* pc)// Initialization of structure
{
pc->sz = 0;
memset(pc->data, 0, sizeof(pc->data));
}
void Add(contact* pc)// Add a Contact
{
// Judge whether it is not full
if (pc->sz == 1000)
{
printf(" The address book is full \n");
return;
}
printf(" Please enter a name >:");
scanf("%s", pc->data[pc->sz].name);
printf(" Please enter age >:");
scanf("%d", &(pc->data[pc->sz].age));
printf(" Please enter gender :>");
scanf("%s", pc->data[pc->sz].sex);
printf(" Please input the phone number :>");
scanf("%s", pc->data[pc->sz].tele);
printf(" Please enter the address :>");
scanf("%s", pc->data[pc->sz].addr);
pc->sz++;
printf(" Add contact successfully \n");
}
void show(contact* pc)// Show your contacts
{
int i = 0;
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", " name ", " Age ", " Gender ", " Telephone ", " Address ");
for (i = 0; i < pc->sz; i++)
{
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
}
}
int SearchByName(contact* pc, char name[])
{
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void Dele(contact* pc)// Delete Contact
{
int i = 0; char name[10];
printf(" Enter the name of the person you want to delete >:\n");
scanf("%s", name);
if (pc->sz == 0)
{
printf(" Address book is empty , Cannot delete \n");
}
// Determine whether there are contacts
int pos = SearchByName(pc, name);
if (pos == -1)
{
printf(" Contact not found \n");
}
else
{
for (i = pos; i < pc->sz - 1; i++)
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf(" Delete contact successfully \n");
}
}
void Find(contact* pc)// Find contacts
{
char name[10];
printf(" Enter the name of the person you want to find >:\n");
scanf("%s", name);
int pos = SearchByName(pc, name);
if (pos == -1)
{
printf(" There is no person's name in the address book ");
}
else
{
printf(" The person information searched is :>");
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", " name ", " Age ", " Gender ", " Telephone ", " Address ");
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
}
}
void Exchange(contact* pc)// Modify contact
{
char name[10];
printf(" Enter the name of the person to modify >:\n");
scanf("%s", name);
int pos = SearchByName(pc, name);
if (pos == -1)
{
printf(" There is no modifier's name in the address book ");
}
else
{
printf(" Please enter a name >:");
scanf("%s", pc->data[pos].name);
printf(" Please enter age >:");
scanf("%d", &(pc->data[pos].age));
printf(" Please enter gender :>");
scanf("%s", pc->data[pos].sex);
printf(" Please input the phone number :>");
scanf("%s", pc->data[pos].tele);
printf(" Please enter the address :>");
scanf("%s", pc->data[pos].addr);
printf(" Modification successful ");
}
}
5.test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
printf("**********************************************\n");
printf("******* 1.Add 2.Dele *********\n");
printf("******* 3.Find 4.Exchange **********\n");
printf("******* 5.show 0.exit **********\n");
printf("**********************************************\n");
}
int main()
{
int input = 0;
contact con;
Initcontact(&con);
do
{
menu();
printf(" Please enter a number >:");
scanf("%d", &input);
switch (input)
{
case 1:
Add(&con);
break;
case 2:
Dele(&con);
break;
case 3:
Find(&con);
break;
case 4:
Exchange(&con);
break;
case 5:
show(&con);
break;
case 0:
printf(" Exit address book \n");
break;
default:
printf(" Wrong choice \n");
}
} while (input);
return 0;
}6. Realization effect

Two . Dynamic implementation of address book
Compared with static implementation , The difference between the two is not big
The former uses a fixed array to store elements
The latter uses dynamically applied memory to store , The advantage is that you can save memory
The difference lies in
Initialization of address book , Here's a quote from capcity Capacity to compare existing capacity
To determine the amount of memory used , Easy to expand
The second is Add function , Add contacts
Finally, release the released memory
The code is as follows :
1.contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
typedef struct Introduction
{
char name[20];
char sex[10];
int age;
char tele[20];
char addr[30];
}Introduction;
typedef struct contact
{
Introduction* data;
int sz;
int capcity;
}contact;
// Initialization of structure
void Initcontact(contact* pc);
// Add a Contact
void Add(contact* pc);
// Show your contacts
void show(contact* pc);
// Delete Contact
void Dele(contact* pc);
// Find contacts
void Find(contact* pc);
// Modify contact
void Exchange(contact* pc);
// Destroy the address book
void destroy(contact*pc);2.contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
#define TARGET_sz 3 // Initial address book target capacity
void Initcontact(contact* pc)// Initialization of structure
{
assert(pc);// Judge the validity of the pointer
pc->sz = 0;
contact* tmp = 0;
tmp=(contact*)malloc(sizeof(Introduction)*TARGET_sz);
if (tmp!=NULL)
{
pc->data = tmp;
}
else
{
printf(" Expansion failed , Please check the reason \n");
return;
}
pc->capcity = TARGET_sz;
}
void Add(contact* pc)// Add a Contact
{
assert(pc);
if (pc->capcity == pc->sz)
{
Introduction* tmp = 0;
tmp=(Introduction*)realloc(pc->data,sizeof(Introduction)*(pc->capcity+2));
if (tmp != NULL)
{
pc->capcity += 2;
pc->data = tmp;
printf(" Expansion successful \n");
}
else
{
printf(" Expansion failed , Please check the reason \n");
}
}
printf(" Please enter a name >:");
scanf("%s", pc->data[pc->sz].name);
printf(" Please enter age >:");
scanf("%d", &(pc->data[pc->sz].age));
printf(" Please enter gender :>");
scanf("%s", pc->data[pc->sz].sex);
printf(" Please input the phone number :>");
scanf("%s", pc->data[pc->sz].tele);
printf(" Please enter the address :>");
scanf("%s", pc->data[pc->sz].addr);
pc->sz++;
printf(" Add contact successfully \n");
}
void show(contact* pc)// Show your contacts
{
int i = 0;
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", " name ", " Age ", " Gender ", " Telephone ", " Address ");
for (i = 0; i < pc->sz; i++)
{
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
}
}
int SearchByName(contact* pc, char name[])
{
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void Dele(contact* pc)// Delete Contact
{
int i = 0; char name[10];
printf(" Enter the name of the person you want to delete >:\n");
scanf("%s", name);
if (pc->sz == 0)
{
printf(" Address book is empty , Cannot delete \n");
}
// Determine whether there are contacts
int pos = SearchByName(pc, name);
if (pos == -1)
{
printf(" Contact not found \n");
}
else
{
for (i = pos; i < pc->sz - 1; i++)
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf(" Delete contact successfully \n");
}
}
void Find(contact* pc)// Find contacts
{
char name[10];
printf(" Enter the name of the person you want to find >:\n");
scanf("%s", name);
int pos = SearchByName(pc, name);
if (pos == -1)
{
printf(" There is no person's name in the address book ");
}
else
{
printf(" The person information searched is :>");
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", " name ", " Age ", " Gender ", " Telephone ", " Address ");
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
}
}
void Exchange(contact* pc)// Modify contact
{
char name[10];
printf(" Enter the name of the person to modify >:\n");
scanf("%s", name);
int pos = SearchByName(pc, name);
if (pos == -1)
{
printf(" There is no modifier's name in the address book ");
}
else
{
printf(" Please enter a name >:");
scanf("%s", pc->data[pos].name);
printf(" Please enter age >:");
scanf("%d", &(pc->data[pos].age));
printf(" Please enter gender :>");
scanf("%s", pc->data[pos].sex);
printf(" Please input the phone number :>");
scanf("%s", pc->data[pos].tele);
printf(" Please enter the address :>");
scanf("%s", pc->data[pos].addr);
printf(" Modification successful ");
}
}
void destroy(contact* pc)
{
assert(pc);
free(pc->data);
pc->data = NULL;
pc->capcity = 0;
pc->sz = 0;
}
3.test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
printf("**********************************************\n");
printf("******* 1.Add 2.Dele *********\n");
printf("******* 3.Find 4.Exchange **********\n");
printf("******* 5.show 0.exit **********\n");
printf("**********************************************\n");
}
int main()
{
int input = 0;
contact con;
Initcontact(&con);
do
{
menu();
printf(" Please enter a number >:");
scanf("%d", &input);
switch (input)
{
case 1:
Add(&con);
break;
case 2:
Dele(&con);
break;
case 3:
Find(&con);
break;
case 4:
Exchange(&con);
break;
case 5:
show(&con);
break;
case 0:
destroy(&con);
printf(" Exit address book \n");
break;
default:
printf(" Wrong choice \n");
}
} while (input);
return 0;
}Welcome to like collection and attention , If you have any questions, you can ask
边栏推荐
- The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
- Easy processing of ten-year futures and stock market data -- Application of tdengine in Tongxinyuan fund
- [wp][入门]刷弱类型题目
- Simple use of devtools
- Basic authorization command for Curl
- Usage scenarios and solutions of ledger sharing
- speed or tempo in classical music
- Quick start of UI component development of phantom engine [umg/slate]
- Performance of calling delegates vs methods
- [positioning in JS]
猜你喜欢

JWT漏洞复现

Pat class a 1162 postfix expression

Redis6-01nosql database

花了2晚,拿到了吴恩达@斯坦福大学的机器学习课程证书

Ubantu disk expansion (VMware)
![[web source code code code audit method] audit skills and tools](/img/7c/2c26578da084b3cd15d8f252b0e132.png)
[web source code code code audit method] audit skills and tools

Three line by line explanations of the source code of anchor free series network yolox (a total of ten articles, which are guaranteed to be explained line by line. After reading it, you can change the

Some enterprise interview questions of unity interview

How to learn to get the embedding matrix e # yyds dry goods inventory #

IPv6 experiment
随机推荐
Kubernetes -- cluster expansion principle
grandMA2 onPC 3.1.2.5的DMX参数摸索
How to make the listbox scroll automatically when adding a new item- How can I have a ListBox auto-scroll when a new item is added?
Jd.com 2: how to prevent oversold in the deduction process of commodity inventory?
Leetcode42. connect rainwater
Logstash、Fluentd、Fluent Bit、Vector? How to choose the appropriate open source log collector
Learning notes of raspberry pie 4B - IO communication (I2C)
问下,这个ADB mysql支持sqlserver吗?
Easy processing of ten-year futures and stock market data -- Application of tdengine in Tongxinyuan fund
Clean up PHP session files
SQL performance optimization skills
[software reverse analysis tool] disassembly and decompilation tool
Class inheritance in C #
深度学习——LSTM基础
Use of kubesphere configuration set (configmap)
Cette ADB MySQL prend - elle en charge SQL Server?
[learning notes] month end operation -gr/ir reorganization
De debugging (set the main thread as hidden debugging to destroy the debugging Channel & debugger detection)
51 independent key basic experiment
error Couldn‘t find a package.json file in “你的路径“