Langage C pour réaliser le système de carnet d'adresses
Dans ce chapitre, je vais partager avec vous les exigences de conception du système de carnet d'adresses simples
我们设计的程序为手机通讯录系统,这是使用C语言写成。
本程序具有和一般的通讯录一样的功能,有最基本的数据添加、修改、查看、删除等功能。
conception des fonctionnalités
-
Conception générale
-
conception détaillée
1. 查找联系人 通过总菜单选择查找联系人,输入需要查找的联系人姓名(或者该联系人姓,或者该联系人名)。 若存在该联系人,则输出该联系人的信息,若通讯录中不存在此联系人,则输出查无此人,并且可以继续从总菜单选择所需要的功能。 2. 添加联系人 通过总菜单选择添加联系人,然后根据提示,依次输入要添加联系人的信息,中间用空格隔开。 3. 删除联系人 通过总菜单选择删除联系人,然后输入联系人的姓名,如通讯录中存在此联系人则输出删除成功,若不存在此联系人,则输出删除失败。 4. 修改联系人 通过总菜单选择修改联系人,然后输入联系人的信息,中间用空格隔开。
-
Code source
- Créez le fichier d'en-tête ContactBook.h
#include<assert.h>
#include<stdlib.h>
#include<string.h>
#define NAME_MAX 30
#define TEL_MAX 20
#define ADDR_MAX 100
#define CONTACT_BOOK_MAX 100
typedef struct Contact
{
char name[NAME_MAX];
char tel[TEL_MAX];
char address[ADDR_MAX];
int age;
}Contact;
typedef struct ContactBook
{
Contact array[CONTACT_BOOK_MAX];
int size;
}ContactBook;
void ContactBookInit(ContactBook* pcb);
void ContactBookAdd(ContactBook* pcb, Contact* pc);
void ContactBookDel(ContactBook* pcb, char* name);
void ContactUpdate(ContactBook* pcb,Contact* pc);
Contact* ContactBookSearch(ContactBook* pcb, char* name);
void ContactBookPrint(ContactBook* pcb);
- ContactBook.c
#include"ContactBook.h"
#include<stdio.h>
void ContactBookInit(ContactBook* pcb)
{
assert(pcb);
pcb->size = 0;
memset(pcb->array, 0, sizeof(Contact)*CONTACT_BOOK_MAX);
}
void ContactBookAdd(ContactBook*pcb, Contact* pc)
{
assert(pcb);
assert(pc);
if (pcb->size == CONTACT_BOOK_MAX)
{
printf("通讯录已满\n");
return;
}
memcpy(&pcb->array[pcb->size], pc, sizeof(Contact));
pcb->size++;
}
void ContactBookPrint(ContactBook* pcb)
{
for (int i = 0; i < pcb->size; ++i)
{
printf("name:%s\n", pcb->array[i].name);
printf("addr:%s\n", pcb->array[i].address);
printf("tel:%s\n", pcb->array[i].tel);
printf("age:%d\n", pcb->array[i].age);
printf("\n");
}
}
void ContactBookDel(ContactBook* pcb, char* name)
{
assert(pcb);
assert(name);
int i = 0;
for (; i < pcb->size; ++i)
{
if (strcmp(pcb->array[i].name, name) == 0)
{
//删除
memmove(pcb->array + i, pcb->array + i + 1, (pcb->size - i - 1)*sizeof(Contact));
break;
}
}
if (i == pcb->size)
{
printf("删除失败,查无此人\n");
}
else
{
pcb->size--;
printf("删除成功\n");
}
}
void ContactUpdate(ContactBook* pcb, Contact* pc)
{
assert(pcb);
assert(pc);
int i = 0;
for (; i < pcb->size; ++i)
{
if (strcmp(pcb->array[i].name, pc->name) == 0)
{
memcpy(pcb->array + i, pc,sizeof(Contact));
break;
}
}
if (i == pcb->size)
{
printf("修改失败,查无此人\n");
}
else
{
printf("修改成功\n");
}
}
Contact* ContactBookSearch(ContactBook* pcb, char* name)
{
for (int i = 0; i < pcb->size; ++i)
{
if (strstr(pcb->array[i].name, name) != NULL)
{
return &pcb->array[i];
}
}
printf("查无此人\n");
return NULL;
}
- Test.c
#include"ContactBook.h"
#include<stdio.h>
void ContactBookTest()
{
ContactBook cb;
ContactBookInit(&cb);
Contact ct1 = {
"张飞", "18392977286", "绵竹", 40 };
ContactBookAdd(&cb, &ct1);
Contact ct2 = {
"关羽", "15129187320", "荆竹", 45 };
ContactBookAdd(&cb, &ct2);
ContactBookPrint(&cb);
}
void Menu()
{
ContactBook cb;
ContactBookInit(&cb);
Contact ct1 = {
"张飞", "18392977286", "绵竹", 40 };
ContactBookAdd(&cb, &ct1);
Contact ct2 = {
"关羽", "15129187320", "荆竹", 45 };
ContactBookAdd(&cb, &ct2);
int option = 0;
do
{
printf("**********************************\n");
printf("******* 1.添加联系人 ***********\n");
printf("******* 2.删除联系人 ***********\n");
printf("******* 3.修改联系人 ***********\n");
printf("******* 4.查找联系人 ***********\n");
printf("******* 5.展示联系人 ***********\n");
printf("******* 0.退出 ***********\n");
printf("**********************************\n");
scanf("%d", &option);
if (option == 1)
{
printf("请依次输入联系人的姓名、地址、联系方式、年龄:\n");
Contact ct;
scanf("%s", ct.name);
scanf("%s", ct.address);
scanf("%s", ct.tel);
scanf("%d", &ct.age);
ContactBookAdd(&cb, &ct);
printf("添加成功\n");
}
else if (option == 2)
{
printf("请输入要删除联系人的姓名\n");
char name[NAME_MAX];
scanf("%s", name);
ContactBookDel(&cb, name);
}
else if (option == 3)
{
printf("请依次输入联系人的姓名、地址、联系方式、年龄:\n");
Contact ct;
scanf("%s", ct.name);
scanf("%s", ct.address);
scanf("%s", ct.tel);
scanf("%d", &ct.age);
ContactUpdate(&cb, &ct);
}
else if (option == 4)
{
printf("请输入要查找联系人的姓名\n");
char name[NAME_MAX];
scanf("%s", name);
Contact* pc = ContactBookSearch(&cb, name);
if (pc)
{
printf("查找成功\n");
printf("name:%s\n", pc->name);
printf("addr:%s\n", pc->address);
printf("tel:%s\n", pc->tel);
printf("age:%d\n", pc->age);
printf("\n");
}
}
else if (option == 5)
{
ContactBookPrint(&cb);
}
else if (option != 0)
{
printf("无此选项,请重新输入\n");
}
} while (option != 0);
}
int main()
{
Menu();
return 0;
}