当前位置:网站首页>[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
边栏推荐
- When sqlacodegen generates a model, how to solve the problem that the password contains special characters?
- Nmap使用手册学习记录
- 有個疑問 flink sql cdc 的話可以設置並行度麼, 並行度大於1會有順序問題吧?
- Monitoring web performance with performance
- Anti debugging (basic principles of debugger Design & NT NP and other anti debugging principles)
- Azkaban installation and deployment
- [wp][入门]刷弱类型题目
- 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?
- Usage scenarios and solutions of ledger sharing
- In MySQL Association query, the foreign key is null. What if the data cannot be found?
猜你喜欢
Azkaban installation and deployment
SQL injection exercise -- sqli Labs
[groovy] groovy environment setup (download groovy | install groovy | configure groovy environment variables)
error Couldn‘t find a package.json file in “你的路径“
深度学习——LSTM基础
Pat grade a 1119 pre- and post order traversals (30 points)
Some enterprise interview questions of unity interview
Azkaban actual combat
Use of kubesphere configuration set (configmap)
v-if VS v-show 2.0
随机推荐
IPv6 experiment
问下,这个ADB mysql支持sqlserver吗?
040. (2.9) relieved
Kbp206-asemi rectifier bridge kbp206
【无标题】
LeetCode146. LRU cache
[deep learning] deep learning reference materials
Flex flexible layout
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
2. Common request methods
[software reverse analysis tool] disassembly and decompilation tool
Utilisation simple de devtools
問下,這個ADB mysql支持sqlserver嗎?
Pat class a 1162 postfix expression
Daily question 2 12
UE4 DMX和grandMA2 onPC 3.1.2.5的操作流程
MySQL winter vacation self-study 2022 11 (10)
英语必备词汇3400
Tencent cloud, realize image upload
Leetcode92. reverse linked list II