写在前面:
C语言通讯录可以用来存储1000个人的信息,
每个人的信息包括姓名、年龄、性别、电话、住址,
实现基本的增、删、查、改、排序、打印、清空基本功能。
思路分析:
首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息。所以头文件里应该包括一个结构体,这个结构体里应包含姓名,性别,年龄,电话,住址。同时还可以定义一个结构体,这个结构体里包含通讯录,同时通讯录里人员的计数变量,将通讯录的地址传到别的地方便可以实现对它遍历或者其他操作。
第二个模块便是我们的测试函数,测试函数便可以实现我们的菜单打印,同时由我们接收不同的值便可以实现不同的操作,就是相应的方法的实现,这里很明显可以通过一个switch语句来控制功能选择,用do-while语句来控制重复选择的循环部分。
第三个模块便是我们的方法实现的函数,将模块2里定义的类型为通讯录的地址传到各个方法里,这样便可以实现对通讯录的操作。
代码实现:
contect.h头文件
#pragma once;
#include
#include
#include
#define NAME_MAX 20
#define TEL_MAX 12
#define SEX_MAX 4
#define MAX 1000
using namespace std;
enum{ Exit, Add, Del, Search, Modify, Empty, Sort, Show};
struct Stu
{
char Name[NAME_MAX];
int Age;
char Tel[TEL_MAX];
char Sex[SEX_MAX];
char Address[50];
};
typedef struct Stu Stu;
typedef struct Contact
{
Stu Con[MAX]; //容量
int sz; //计数
}Contact, *pContact;
//函数声明
void InitContact(pContact pCon); //初始化
void AddContact(pContact pCon); //新建
void ShowContact(pContact pCon); //打印
void DelContact(pContact pCon); //删除
void SearchContact(pContact pCon); //查找
void ModifyContact(pContact pCon); //修改
void EmptyContact(pContact pCon); //清空
void SortContact(pContact pCon); //排序
contect.cpp 函数实现
#define _CRT_SECURE_NO_WARNINGS 1
#include"contect.h"
void InitContact(pContact pCon)
{
pCon->sz = 0;
memset(pCon->Con, 0, MAX * sizeof(Stu));
}
void AddContact(pContact pCon)
{
cout<
cin >> pCon->Con[pCon->sz].Name;
cout << "请输入联系人年龄:";
cin >> pCon->Con[pCon->sz].Age;
cout << "请输入联系人电话:";
cin >> pCon->Con[pCon->sz].Tel;
cout << "请输入联系人性别:";
cin >> pCon->Con[pCon->sz].Sex;
cout << "请输入联系人地址:";
cin >> pCon->Con[pCon->sz].Address;
cout << "═════联系人 " << pCon->Con[pCon->sz].Name << " 的信息保存成功════" << endl << endl;
pCon->sz++;
}
void ShowContact(pContact pCon)
{
cout << endl;
cout << "╔═════════════════════════════════════════════════════════════╗" << endl;
printf("%3s\t%6s\t%2s%16s%8s%20s\n","║序号","姓名","年龄","电话","性别","地址║");
for (int i = 0; i < pCon->sz; i++)
{
printf("%3d\t%6s\t%2d%16s%8s%20s\n",
i + 1,
pCon->Con[i].Name,
pCon->Con[i].Age,
pCon->Con[i].Tel,
pCon->Con[i].Sex,
pCon->Con[i].Address);
}
cout << "╚═════════════════════════════════════════════════════════════╝" << endl;
cout << "温馨提示:输出完成!!!" << endl << endl;
}
int FindInContact(pContact pCon, char *ch)
{
for (int i = 0; i < pCon->sz; i++)
{
if (strcmp(pCon->Con[i].Name,ch) == 0)
{
return i;
}
}
return -1;
}
void DelContact(pContact pCon)
{
char ch[20];
ShowContact(pCon);
cout << "请输入上面通讯录中要删除联系人的姓名:";
scanf("%s", &ch);
int NUM = FindInContact(pCon, ch);
if (NULL == -1)
{
printf("通讯录中没有该联系人!!!");
}
if (NUM <= pCon->sz && NUM != -1)
{
for (int j = NUM; j <= pCon->sz-1; j++)
{
pCon->sz--;
pCon->Con[j] = pCon->Con[j + 1];
printf("删除成功!!!\n");
}
}
}
void SearchContact(pContact pCon)
{
char ch[20];
printf("请输出你要查找联系人的姓名:");
scanf("%s", &ch);
int NUM = FindInContact(pCon, ch);
if (NUM != -1)
{
cout << "╔═════════════════════════════════════════════════════════════╗" << endl;
printf("%3s\t%6s\t%2s%16s%8s%20s\n", "║序号", "姓名", "年龄", "电话", "性别", "地址║");
printf("%3d\t%6s\t%2d%16s%8s%20s\n",
NUM + 1,
pCon->Con[NUM].Name,
pCon->Con[NUM].Age,
pCon->Con[NUM].Tel,
pCon->Con[NUM].Sex,
pCon->Con[NUM].Address);
cout << "╚═════════════════════════════════════════════════════════════╝" << endl;
}
else
printf("你要找的联系人不存在\n");
}
void ModifyContact(pContact pCon)
{
char ch[NAME_MAX];
printf("请输入要修改的联系人的姓名:");
scanf("%s", &ch);
int NUM = FindInContact(pCon, ch);
if (NUM != -1)
{
cout << "╔═════════════════════════════════════════════════════════════╗" << endl;
printf("%3s\t%6s\t%2s%16s%8s%20s\n", "║序号", "姓名", "年龄", "电话", "性别", "地址║");
printf("%3d\t%6s\t%2d%16s%8s%20s\n",
NUM,
pCon->Con[NUM].Name,
pCon->Con[NUM].Age,
pCon->Con[NUM].Tel,
pCon->Con[NUM].Sex,
pCon->Con[NUM].Address);
cout << "╚═════════════════════════════════════════════════════════════╝" << endl;
printf("请把姓名修改成:");
scanf("%s", pCon->Con[NUM].Name);
printf("请把年龄修改成:");
scanf("%d", &pCon->Con[NUM].Age);
printf("请把电话修改成:");
scanf("%s", pCon->Con[NUM].Tel);
printf("请把性别修改成:");
scanf("%s", pCon->Con[NUM].Sex);
printf("请把地址修改成:");
scanf("%s", pCon->Con[NUM].Address);
}
}
void EmptyContact(pContact pCon)
{
pCon->sz = 0;
printf("清空成功!!!\n\n");
}
void SortContact(pContact pCon)
{
for (int i = 0; i < pCon->sz; i++)
{
for (int j = 0; j < pCon->sz-i-1; j++)
{
if (strcmp(pCon->Con[j].Name, pCon->Con[j + 1].Name)>0)
{
Stu temp;
temp = pCon->Con[j];
pCon->Con[j] = pCon->Con[j + 1];
pCon->Con[j + 1] = temp;
}
}
}
}
test.cpp写实代码
#include"contect.h"
void menu()
{
cout << "╔═══════════════════════════════════════════════════╗" << endl;
cout << "║═══════════════════ 通讯录 ══════════════════════║" << endl;
cout << "║═══ ═══║" << endl;
cout << "║═══ 1.新建 2.删除 ═══║" << endl;
cout << "║═══ 3.查找 4.修改 ═══║" << endl;
cout << "║═══ 5.清空 6.排序 ═══║" << endl;
cout << "║═══ 7.打印 0.退出 ═══║" << endl;
cout << "║═══ ═══║" << endl;
cout << "╚═══════════════════════════════════════════════════╝" << endl;
}
void test()
{
system("color c"); //改变背景
Contact my_con;
InitContact(&my_con);
int input = 0;
do
{
menu();
cout << "请选择:";
cin >> input;
switch (input)
{
case Exit:
break;
case Add:
AddContact(&my_con);
break;
case Del:
DelContact(&my_con);
break;
case Search:
SearchContact(&my_con);
break;
case Modify:
ModifyContact(&my_con);
break;
case Empty:
EmptyContact(&my_con);
break;
case Sort:
SortContact(&my_con);
break;
case Show:
ShowContact(&my_con);
break;
default:
cout << "选择错误:->!!!" << endl;
break;
}
} while (input);
}
int main()
{
test();
return 0;
}