今天写一个简单的C语言小项目,简易的通讯录:
编译环境:win10 VS2013
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
通讯录包含的功能:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
实现原理:利用C语言结构体的功能实现
下面是代码实现:
//Link.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "Link.h"
void menu()
{
printf("**************************************\n");
printf("********* 1.添加指定联系人 ******\n");
printf("********* 2.显示所有联系人 *******\n");
printf("********* 3.查找指定联系人 *******\n");
printf("********* 4.删除指定联系人 *******\n");
printf("********* 5.修改指定联系人 *******\n");
printf("********* 6.以名字排序联系人 *******\n");
printf("********* 7.清除所有联系人 *******\n");
printf("********* 0.退出 ******\n");
printf("**************************************\n");
}
int main()
{
LinkMan lm;
Init_LinkMan(&lm);
menu();
int i = 0;
printf("请输入你想要查询的内容:");
scanf("%d", &i);
do
{
switch (i)
{
case 0:
printf("谢谢使用!\n");
break;
case 1:
AddLinkManInfo(&lm);
break;
case 2:
ShowAllLinkManInfo(&lm);
break;
case 3:
FindLinkManInfo(&lm);
break;
case 4:
DeleteLinkManInfo(&lm);
break;
case 5:
ModLinkManInfo(&lm);
break;
case 6:
SortLinkManInfo(&lm);
break;
case 7:
ClearLinkManInfo(&lm);
break;
default:
break;
}
}while(i);
system("pause");
return 0;
}
//LinkMan.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "Link.h"
#include <string.h>
void menu1()
{
printf("**************************************\n");
printf("********* 1.添加指定联系人 ******\n");
printf("********* 2.显示所有联系人 *******\n");
printf("********* 3.查找指定联系人 *******\n");
printf("********* 4.删除指定联系人 *******\n");
printf("********* 5.修改指定联系人 *******\n");
printf("********* 6.以名字排序联系人 *******\n");
printf("********* 7.清除所有联系人 *******\n");
printf("********* 0.退出 *******\n");
printf("**************************************\n");
}
//初始化联系人,将空间置0
void Init_LinkMan(LinkMan* lm)
{
int count = sizeof(lm->_Contact); //先求出联系人的大小
lm->_count = 0;
memset(lm->_Contact, 0, count);
}
//将每一个联系人单独保存,便于查找
int Find(LinkMan* lm, char* pName)
{
int i = 0;
for (; i < (lm->_count); ++i)
{
if (0 == strcmp(lm->_Contact[i]._name, pName))
{
return i;
}
}
return -1;
}
//添加联系人
void AddLinkManInfo(LinkMan* lm)
{
if (lm->_count > 1000)
printf("人数已达上限!");
else
{
printf("请输入你要添加联系人的姓名:");
scanf("%s", lm->_Contact[lm->_count]._name);
printf("请输入你要添加联系人的性别:");
scanf("%s", lm->_Contact[lm->_count]._gender);
printf("请输入你要添加联系人的年龄:");
scanf("%d", &lm->_Contact[lm->_count]._age);
printf("请输入你要添加联系人的电话:");
scanf("%d", lm->_Contact[lm->_count]._tel);
printf("请输入你要添加联系人的地址:");
scanf("%s", lm->_Contact[lm->_count]._addr);
printf("添加联系人成功!\n");
lm->_count++;
}
}
//显示所有联系人
void ShowAllLinkManInfo(LinkMan* lm)
{
int num = lm->_count;
printf("输出所有人的信息:");
printf("%10s%7s%6s%8s%10s\n", "姓名", "性别", "年龄", "电话", "地址");
for (; num > 0; --num)
{
printf("%10s", lm->_Contact[num]._name);
printf("%10s", lm->_Contact[num]._gender);
printf("%10d", lm->_Contact[num]._age);
printf("%10d", lm->_Contact[num]._tel);
printf("%10s", lm->_Contact[num]._addr);
}
}
//查找指定联系人
void FindLinkManInfo(LinkMan* lm)
{
char name[20] = { 0 };
int result = 0;
printf("请输入你要查找的联系人姓名:");
scanf("%s", name);
result = Find(lm, name);
if ( result)
{
printf("姓名:%s\n", lm->_Contact[result]._name);
printf("性别:%s\n", lm->_Contact[result]._gender);
printf("年龄:%d\n", lm->_Contact[result]._age);
printf("电话:%d\n", lm->_Contact[result]._tel);
printf("地址:%s\n", lm->_Contact[result]._addr);
}
else
{
printf("您查找的联系人不存在\n");
}
}
//删除指定联系人
void DeleteLinkManInfo(LinkMan* lm)
{
char name[20] = { 0 };
int result = 0;
int r = 0; //用来确认是否删除联系人
printf("请输入想要删除联系人的姓名:");
scanf("%s", name);
result = Find(lm, name);
if (result)
{
printf("确定删除该联系人?\n");
printf("是请按1,否请按0\n");
scanf("%d", r);
if (1 == r)
{
int i = 0;
for (; i < (lm->_count); ++i)
{
lm->_Contact[i] = lm->_Contact[i + 1];
}
lm->_count--;
printf("删除成功。\n");
}
else
{
printf("删除失败。\n");
}
}
else
printf("您要删除的联系人不存在\n");
}
//修改指定联系人
void ModLinkManInfo(LinkMan* lm)
{
char name[20] = { 0 };
int result = 0;
printf("请输入你要修改的联系人姓名:");
scanf("%s", name);
result = Find(lm, name);
if (result)
{
{
printf("姓名:%s\n", lm->_Contact[result]._name);
printf("性别:%s\n", lm->_Contact[result]._gender);
printf("年龄:%d\n", lm->_Contact[result]._age);
printf("电话:%d\n", lm->_Contact[result]._tel);
printf("地址:%s\n", lm->_Contact[result]._addr);
}
int i = 0;
do
{
menu1();
printf("请输入你要修改的选项:");
scanf("%d", &i);
switch (i)
{
case 1:
printf("请把姓名修改为:");
scanf("%s", lm->_Contact[result]._name);
break;
case 2:
printf("请把性别修改为:");
scanf("%s", lm->_Contact[result]._gender);
break;
case 3:
printf("请把年龄修改为:");
scanf("%d", &lm->_Contact[result]._age);
break;
case 4:
printf("请把电话修改为:");
scanf("%d", lm->_Contact[result]._tel);
break;
case 5:
printf("请把地址修改为:");
scanf("%s", lm->_Contact[result]._addr);
break;
default:
break;
}
} while (i);
}
else
{
printf("您要修改的联系人不存在\n");
}
}
//按名字排序联系人
void SortLinkManInfo(LinkMan* lm)
{
int i = 0;
int j = 0;
for (; i < (lm->_count) - 1; ++i)
{
for (; j < (lm->_count) - i; ++j)
{
if (strcmp(lm->_Contact[j]._name, lm->_Contact[j + 1]._name) > 0)
{
LinkManInfo temp;
temp = lm->_Contact[j];
lm->_Contact[j] = lm->_Contact[j + 1];
lm->_Contact[j + 1] = temp;
}
}
}
}
//清空所有联系人
void ClearLinkManInfo(LinkMan* lm)
{
lm->_count = 0;
}
//Link.h
#ifndef __LINKMAN_H__
#define __LINKMAN_H__
#include <stdio.h>
#include <stdlib.h>
//建立结构体存放联系人基本信息
typedef struct LinkManInfo
{
char _name[20];
char _gender[5];
int _age;
int _tel[12];
char _addr[40];
}LinkManInfo;
//用一个结构体来存放1000个联系人
typedef struct LinkMan
{
LinkManInfo _Contact[1000];
int _count; //通信录中保存联系人的个数
}LinkMan;
//通讯录实现方法
void Init_LinkMan(LinkMan* lm); //初始化通讯录
void AddLinkManInfo(LinkMan* lm); //添加指定联系人
void ShowAllLinkManInfo(LinkMan* lm); //显示所有联系人
void FindLinkManInfo(LinkMan* lm); //查找指定联系人
void DeleteLinkManInfo(LinkMan* lm); //删除指定联系人
void SortLinkManInfo(LinkMan* lm); //按名字排序联系人
void ModLinkManInfo(LinkMan* lm); //修改指定联系人
void ClearLinkManInfo(LinkMan* lm); //清空所有联系人
#endif
写完这个通讯录我还有一点小问题,就是在我录取完联系人信息之后我还想让它在返回去调用其他函数,我应该怎么做?求大佬们指点一下。