文章目錄
今天來和大家分享一個簡易通訊錄(c語言實現)
首先要介紹一下通訊錄的基本功能
通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址
功能:
添加聯系人信息刪除指定聯系人信息查找指定聯系人信息修改指定聯系人信息顯示所有聯系人信息 1.文件的創建
首先是文件的創建,我們這里創建了三個文件,一個頭文件,一個測試源文件,一個實現功能的源文件,這樣寫代碼的目的是可以更清晰的了解代碼的結構層次以及功能。我們實現每一個函數的功能時要在頭文件中聲明該函數
菜單循環功能實現
了解了功能后,我們要進行分析具體如何實現,首先需要寫出這個通訊錄菜單的循環選擇功能c語言簡單通訊錄,這里很容易想到,我們就直接上代碼
`void menu()
{
printf("**************************\n");
printf("***********1.add *****\n");
printf("***********2.delete *****\n");
printf("***********3.search *****\n");
printf("***********4.modify *****\n");
printf("***********5.show *****\n");
printf("***********0.exit *****\n");
}`
enum Option
{
exit,
add,
delete,
search,
modify,
show,
};
int main()
{
int input=0;
do
{
menu();
printf("請選擇:\n");
scanf("%d", &input);
switch (input)
{
case exit:
printf("退出通訊錄\n");
break;
case add:
//添加
ADDContact(&con);
break;
case delete:
//刪除
Delete(&con);
break;
case search:
//查找
Search(&con);
break;
case modify:
//修改
Modify(&con);
break;
case show:
//顯示
Show(&con);
break;
default:
printf("選擇錯誤請重新選擇:\n");
break;
}
} while (input);
return 0;
}
寫完這個功能后,我們可以進行測試。
2.創建通訊錄
之后我們要完成聯系人的增刪查找的功能,首先是聯系人的存儲問題,由于一個人有很多信息,是個復雜類型,我們用結構體來解決,那么存儲這么多的人的信息,用一個結構體數組即可。
struct People
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char number[NUMBER_MAX];
char address[ADDRESS_MAX];
};
struct Contact
{
//創建存放1000人數據的結構體數組
struct People data[MAX];
int sz; //用來存放有效信息的數量
};
這個通訊錄結構體中包含了一個結構體數組和記錄此時通訊錄中的人數。這樣我們對這個通訊錄結構體進行操作即可。
初始化通訊錄
創建好這個通訊錄我們就要對它進行初始化,寫一個初始化函數void ( * pc);
void InitContact(struct Contact* pc)
{
pc->sz = 0;
memset(pc->data,0,sizeof(pc->data));
}
這里我們使用了c的庫函數直接初始化通訊錄信息為0,我們要操作這個通訊錄,所以這里我們直接將創建好的通訊錄的地址傳到函數中使用即可。
添加聯系人實現
添加聯系人,同樣是直接對通訊錄進行操作,一樣要傳通訊錄的地址。
void ADDContact(struct Contact* pc)
{
if (pc->sz == MAX) //判斷聯系人是否已滿
{
printf("通訊錄已滿\n");
}
else
{
printf("請輸入名字:\n");
scanf("%s", pc->data[pc->sz].name);
printf("請輸入年齡:\n");
scanf("%d", &pc->data[pc->sz].age);
printf("請輸入性別:\n");
scanf("%s", pc->data[pc->sz].sex);
printf("請輸入電話:\n");
scanf("%s", pc->data[pc->sz].number);
printf("請輸入地址:\n");
scanf("%s", pc->data[pc->sz].address);
printf("添加成功!\n");
pc->sz++; //對sz進行記錄,記錄此時通訊錄中的人數
}
}
顯示聯系人實現
這里我們先來實現這個功能是為了可以驗證我們其他功能有沒有實現。
//顯示聯系人
void Show(struct Contact* pc)
{
printf("s\t%5s\t%8s\ts\t%30s\n", "name","age","sex","number","address"); //各個信息的名稱
for (int i = 0; i < pc->sz; i++)
{
printf("s\t%5d\t%8s\ts\t%30s\n", //信息的打印
pc->data[i].name,
pc->data[i].age, pc->data[i].sex,
pc->data[i].number,
pc->data[i].address);
}
}
查找聯系人
int FIND(struct Contact* pc, char name[])
{
for (int i = 0; i < pc->sz; i++)
{
if (strcmp(pc->data[i].name, name) == 0) //遍歷每個人,如果找到返回這個人在數組中的位置,找不到則返回-1
{
return i;
}
}
return -1;
}
void Search(struct Contact* pc)
{
printf("請輸入要查找聯系人的姓名:\n");
char name[NAME_MAX] = { 0 };
scanf("%s", &name);
int flag = FIND(pc, name);
if (flag != -1)
{
printf("s\t%5s\t%8s\ts\t%30s\n", "name", "age", "sex", "number", "address");
printf("s\t%5d\t%8s\ts\t%30s\n",
pc->data[flag].name,
pc->data[flag].age, pc->data[flag].sex,
pc->data[flag].number,
pc->data[flag].address); //如果找到直接打印這個人的信息
}
else
{
printf("查無此人\n");
}
}
刪除聯系人實現
刪除聯系人我們只需要先找到這個人c語言簡單通訊錄,在將后面的人全都向前移動一個位置將這個要刪除人覆蓋即可。
//刪除
void Delete(struct Contact* pc)
{
if (pc->sz == 0)
{
printf("通訊錄已空,無法刪除聯系人\n");
return;
}
printf("請輸入要刪除聯系人的姓名:\n");
char name[NAME_MAX] = { 0 };
scanf("%s", &name);
//查找
int flag = FIND(pc, name);
if (flag == -1)
{
printf("查無此人\n");
}
else
{
//刪除
for (int j = flag; j < pc->sz - 1; j++)
{
pc->data[j] = pc->data[j + 1];
}
pc->sz--; //注意一定要更新此時聯系人的個數
printf("刪除成功!\n");
}
}
修改功能實現
//修改
void Modify(struct Contact* pc)
{
printf("請輸入要修改聯系人的名字:\n");
char name[NAME_MAX] = { 0 };
scanf("%s", &name);
//查找
int flag = FIND(pc, name);
if (flag == -1)
{
printf("查無此人\n");
}
else
{
printf("請輸入姓名:\n");
scanf("%s", pc->data[flag].name);
printf("請輸入年齡:\n");
scanf("%d", &pc->data[flag].age);
printf("請輸入性別:\n");
scanf("%s", pc->data[flag].sex);
printf("請輸入電話:\n");
scanf("%s", pc->data[flag].number);
printf("請輸入地址:\n");
scanf("%s", pc->data[flag].address);
printf("修改成功!\n");
}
}
結果展示
頭文件
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include
#include
#define NAME_MAX 20
#define SEX_MAX 5
#define NUMBER_MAX 12
#define ADDRESS_MAX 30
#define MAX 1000
struct People
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char number[NUMBER_MAX];
char address[ADDRESS_MAX];
};
struct Contact
{
//創建存放1000人數據的結構體數組
struct People data[MAX];
int sz; //用來存放有效信息的數量
};
//初始化函數聲明
void InitContact(struct Contact* pc);
//添加聯系人函數聲明
void ADDContact(struct Contact* pc);
//顯示通訊錄函數
void Show(struct Contact* pc);
//查找某人
void Search(struct Contact* pc);
//刪除
void Delete(struct Contact* pc);
//修改
void Modify(struct Contact* pc);
功能實現源文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"contach.h"
//初始化函數
void InitContact(struct Contact* pc)
{
pc->sz = 0;
memset(pc->data,0,sizeof(pc->data));
}
//添加聯系人函數聲明
void ADDContact(struct Contact* pc)
{
if (pc->sz == MAX)
{
printf("通訊錄已滿\n");
}
else
{
printf("請輸入名字:\n");
scanf("%s", pc->data[pc->sz].name);
printf("請輸入年齡:\n");
scanf("%d", &pc->data[pc->sz].age);
printf("請輸入性別:\n");
scanf("%s", pc->data[pc->sz].sex);
printf("請輸入電話:\n");
scanf("%s", pc->data[pc->sz].number);
printf("請輸入地址:\n");
scanf("%s", pc->data[pc->sz].address);
printf("添加成功!\n");
pc->sz++;
}
}
//顯示聯系人
void Show(struct Contact* pc)
{
printf("s\t%5s\t%8s\ts\t%30s\n", "name","age","sex","number","address");
for (int i = 0; i < pc->sz; i++)
{
printf("s\t%5d\t%8s\ts\t%30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].number, pc->data[i].address);
}
}
//查找
int FIND(struct Contact* pc, char name[])
{
for (int i = 0; i < pc->sz; i++)
{
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void Search(struct Contact* pc)
{
printf("請輸入要查找聯系人的姓名:\n");
char name[NAME_MAX] = { 0 };
scanf("%s", &name);
int flag = FIND(pc, name);
if (flag != -1)
{
printf("s\t%5s\t%8s\ts\t%30s\n", "name", "age", "sex", "number", "address");
printf("s\t%5d\t%8s\ts\t%30s\n", pc->data[flag].name, pc->data[flag].age, pc->data[flag].sex, pc->data[flag].number, pc->data[flag].address);
}
else
{
printf("查無此人\n");
}
}
//刪除
void Delete(struct Contact* pc)
{
if (pc->sz == 0)
{
printf("通訊錄已空,無法刪除聯系人\n");
return;
}
printf("請輸入要刪除聯系人的姓名:\n");
char name[NAME_MAX] = { 0 };
scanf("%s", &name);
//查找
int flag = FIND(pc, name);
if (flag == -1)
{
printf("查無此人\n");
}
else
{
//刪除
for (int j = flag; j < pc->sz - 1; j++)
{
pc->data[j] = pc->data[j + 1];
}
pc->sz--;
printf("刪除成功!\n");
}
}
//修改
void Modify(struct Contact* pc)
{
printf("請輸入要修改聯系人的名字:\n");
char name[NAME_MAX] = { 0 };
scanf("%s", &name);
//查找
int flag = FIND(pc, name);
if (flag == -1)
{
printf("查無此人\n");
}
else
{
printf("請輸入姓名:\n");
scanf("%s", pc->data[flag].name);
printf("請輸入年齡:\n");
scanf("%d", &pc->data[flag].age);
printf("請輸入性別:\n");
scanf("%s", pc->data[flag].sex);
printf("請輸入電話:\n");
scanf("%s", pc->data[flag].number);
printf("請輸入地址:\n");
scanf("%s", pc->data[flag].address);
printf("修改成功!\n");
}
}
測試源文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"contach.h"
void menu()
{
printf("**************************\n");
printf("***********1.add *****\n");
printf("***********2.delete *****\n");
printf("***********3.search *****\n");
printf("***********4.modify *****\n");
printf("***********5.show *****\n");
printf("***********0.exit *****\n");
}
enum Option
{
exit,
add,
delete,
search,
modify,
show,
};
int main()
{
int input = 0;
//創建一個通訊錄
struct Contact con;
//初始化通訊錄
InitContact(&con);
do
{
menu();
printf("請選擇:\n");
scanf("%d", &input);
switch (input)
{
case exit:
printf("退出通訊錄\n");
break;
case add:
//添加
ADDContact(&con);
break;
case delete:
//刪除
Delete(&con);
break;
case search:
//查找
Search(&con);
break;
case modify:
//修改
Modify(&con);
break;
case show:
//顯示
Show(&con);
break;
default:
printf("選擇錯誤請重新選擇:\n");
break;
}
} while (input);
return 0;
}
初學,如果哪里寫的不對希望大家幫忙指正,我也會更努力向其他人學習,會陸續更新文章。