C語言實作通訊錄系統
本章我將和大家分享一個簡單的通訊錄系統
設計要求
我們設計的程式為手機通訊錄系統,這是使用C語言寫成,
本程式具有和一般的通訊錄一樣的功能,有最基本的資料添加、修改、查看、洗掉等功能,
功能設計
-
總體設計

-
詳細設計
1. 查找聯系人 通過總選單選擇查找聯系人,輸入需要查找的聯系人姓名(或者該聯系人姓,或者該聯系人名), 若存在該聯系人,則輸出該聯系人的資訊,若通訊錄中不存在此聯系人,則輸出查無此人,并且可以繼續從總選單選擇所需要的功能, 2. 添加聯系人 通過總選單選擇添加聯系人,然后根據提示,依次輸入要添加聯系人的資訊,中間用空格隔開, 3. 洗掉聯系人 通過總選單選擇洗掉聯系人,然后輸入聯系人的姓名,如通訊錄中存在此聯系人則輸出洗掉成功,若不存在此聯系人,則輸出洗掉失敗, 4. 修改聯系人 通過總選單選擇修改聯系人,然后輸入聯系人的資訊,中間用空格隔開, -
源代碼
- 建立頭檔案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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252052.html
標籤:其他
