C語言–通訊錄的實現(xiàn)
通訊錄的功能
- 人的信息:姓名+年齡+性別+住址+電話
- 通訊錄中可以存放100個人的信息
- 增加聯(lián)系人
- 刪除指定聯(lián)系人
- 查找指定聯(lián)系人
- 修改指定聯(lián)系人
- 顯示所有聯(lián)系人的信息
一、模塊劃分
test.c----測試通訊錄
contact.c----通訊錄的實現(xiàn)
contact.h----函數(shù)的聲明
二、具體代碼
1.測試模塊
代碼如下(示例):文章來源:http://www.zghlxwxcb.cn/news/detail-608027.html
#define _CRT_SECURE_NO_WARNINGS 1
//用于函數(shù)的測試
#include "contact.h"//自己創(chuàng)建的頭文件使用""去引用
void menu()
{
printf("********************************************\n");
printf("****** 1.Add 2.Del ****************\n");
printf("****** 3.Ser 4.Mod ****************\n");
printf("****** 5.Show 0.Exit ****************\n");
printf("********************************************\n");
}
int main()
{
int input = 0;
//創(chuàng)建通訊錄
Contact con;//創(chuàng)建結(jié)構(gòu)體對象
//初始化通訊錄
InitContact(&con);
do
{
menu();
printf("請選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
AddContact(&con);//結(jié)構(gòu)體傳參
break;
case 2:
DelContact(&con);
break;
case 3:
SearchContact(&con);
break;
case 4:
ModifyContact(&con);
break;
case 5:
ShowContact(&con);
break;
case 0:
printf("退出通訊錄");
break;
default:
printf("選擇錯誤");
break;
}
} while (input);
return 0;
}
2.通訊錄主函數(shù)實現(xiàn)模塊
代碼如下(示例):文章來源地址http://www.zghlxwxcb.cn/news/detail-608027.html
#define _CRT_SECURE_NO_WARNINGS 1
//放置函數(shù)的實現(xiàn)
#include "contact.h"//自己創(chuàng)建的頭文件使用""去引用
//初始化結(jié)構(gòu)體的函數(shù)
void InitContact(Contact* pc)
{
assert(pc);//防止出現(xiàn)空指針
pc->sz = 0;
//使用memset將data數(shù)組初始化為0
memset(pc->data, 0, sizeof(pc->data));//memset(初始化地址,初始化為多少,初始化多少個字節(jié))
}
//增加聯(lián)系人的函數(shù)-----Add
void AddContact(Contact* pc)
{
assert(pc);//防止出現(xiàn)空指針
if (pc->sz == 100)
{
printf("通訊錄已滿,無法添加\n");
return;
}
//判斷通訊錄是否存滿之后,開始增加個人信息
printf("請輸入名字:>");
scanf("%s", pc->data[pc->sz].name);//數(shù)組名。不需要取地址
//pc代表的是Contact結(jié)構(gòu)體的指針,data和sz是Contact結(jié)構(gòu)體的元素
//pc->data[pc->sz]指的是將sz定義為data數(shù)組的下標,
//當存儲一個人的信息之后,sz++就可以移動數(shù)組的位置繼續(xù)存儲新的信息
//.name是結(jié)構(gòu)體尋找自己元素的方法
printf("請輸入年齡:>");
scanf("%d", &(pc->data[pc->sz].age));//變量,需要取地址,scanf本身就需要&才能使用
printf("請輸入性別:>");
scanf("%s", pc->data[pc->sz].sex);//數(shù)組名本身就是首元素的地址。不需要取地址
printf("請輸入住址:>");
scanf("%s", pc->data[pc->sz].addr);
printf("請輸入電話:>");
scanf("%s", pc->data[pc->sz].tele);
pc->sz++;
}
//顯示通訊錄的函數(shù)-----Show
void ShowContact(const Contact* pc)//函數(shù)聲明和定義要保持一致
{
assert(pc);//防止出現(xiàn)空指針
int i = 0;
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年齡", "性別", "地址", "電話");
for (i = 0; i < pc->sz; i++)
{
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", //左對齊版本,一個漢字占用2個字節(jié)
pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].addr,
pc->data[i].tele);
}
}
//查找人名位置的函數(shù)
int FindByName(const 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;
}
//刪除通訊錄的信息-----Del
void DelContact(Contact* pc)
{
assert(pc);//防止出現(xiàn)空指針
char name[NAME_MAX] = { 0 };
if (pc->sz == 0)
{
printf("通訊錄為空,無法刪除\n");
return;
}
//尋找刪除對象
printf("請輸入要刪除的人的名字:>");
scanf("%s", name);
int ret = FindByName(pc, name);
if (-1 == ret)
{
printf("要刪除的人不存在");
return;
}
//刪除
int i = 0;
for (i = ret; i < pc->sz - 1; i++)//sz-1為了防止越界訪問
{
pc->data[i] = pc->data[i + 1];//將后面的覆蓋到前面,達到刪除的目的
}
pc->sz--;
printf("刪除成功\n");
}
//尋找指定聯(lián)系人---Ser
void SearchContact(const Contact* pc)
{
char name[NAME_MAX] = { 0 };
printf("請輸入要刪除的人的名字:>");
scanf("%s", name);
int ret = FindByName(pc, name);
if (-1 == ret)
{
printf("要查找的人不存在\n");
return;
}
//打印信息
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年齡", "性別", "地址", "電話");
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", //左對齊版本,一個漢字占用2個字節(jié)
pc->data[ret].name,
pc->data[ret].age,
pc->data[ret].sex,
pc->data[ret].addr,
pc->data[ret].tele);
}
//修改通訊錄信息
void ModifyContact(Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
printf("請輸入要修改的人的名字:>");
scanf("%s", name);
int ret = FindByName(pc, name);
if (-1 == ret)
{
printf("要修改的人不存在\n");
return;
}
printf("請輸入名字:>");
scanf("%s", pc->data[ret].name);
printf("請輸入年齡:>");
scanf("%d", &(pc->data[ret].age));
printf("請輸入性別:>");
scanf("%s", pc->data[ret].sex);//數(shù)組名。不需要取地址
printf("請輸入住址:>");
scanf("%s", pc->data[ret].addr);
printf("請輸入電話:>");
scanf("%s", pc->data[ret].tele);
}
3.函數(shù)頭文件模塊
#pragma once
#include<stdio.h>
#include<string.h>//memset的頭文件,統(tǒng)一放在自己定義的頭文件里
#include<assert.h>//assert的頭文件
//頭文件用于是放置函數(shù)的聲明
//人的信息
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
typedef struct PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}PeoInfo;
typedef struct Contact
{
PeoInfo data[MAX];//存放個人信息的
int sz;//用于記錄當前放了幾個人的信息
}Contact;
//初始化通訊錄
void InitContact(Contact* pc);
//增加聯(lián)系人
void AddContact(Contact* pc);
//顯示通訊錄中的信息
void ShowContact(const Contact* pc);//為了放置被修改
//刪除通訊錄的信息
void DelContact(Contact* pc);
//查找通訊錄的信息
void SearchContact(const Contact* pc);
//修改通訊錄的信息
void ModifyContact(Contact* pc);
到了這里,關(guān)于C語言--通訊錄的實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!