提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
该通讯录是没有与数据库联系的,所以内存空间执行结束程序后便得到释放
提示:以下是本篇文章正文内容,下面案例可供参考
一、通讯录的功能
添加 查找 删除 排序 修改 浏览
二、编写程序
1.Contact.h(通讯录头文件)
代码如下(示例):
#pragma once
#include <stdio.h>
#include <string.h>
#define MAX 1000 //定义结构体的总数
#define MAX_Name 20 //定义通讯录名字的长度
#define MAX_Age 3
#define MAX_Sex 5 //定义通讯录的性别长度
#define MAX_Tele 12 //定义通讯录的电话长度
#define MAX_Addr 30 //定义通讯录的地址长度
struct PeoInfo
{
char name[MAX_Name];//定义通讯录名字的长度
char age[MAX_Age]; //定义通讯录的年龄
char sex[MAX_Sex];//定义通讯录的性别长度
char tele[MAX_Tele];//定义通讯录的电话长度
char addr[MAX_Addr];//定义通讯录的地址长度
};
struct Contact
{
struct PeoInfo date[MAX];
int size;
};//定义结构体并声明,结构体的嵌套
enum Operation
{
EXIT,
ADD,
DELETE,
SEEK,
MODIFY,
SHOW,
SORT,
};
void IntoContact(struct Contact* ps);//定义函数并声明,初始化通讯录
void AddContact(struct Contact* ps);//定义函数并声明,添加结构体进入通讯录
void ShowContact(const struct Contact* ps);//定义函数并声明,浏览通讯录
void DelContact(struct Contact* ps);//定义函数并声明,删除通讯录
void SeekCotact(const struct Contact* ps);//定义函数并声明,查找通讯录
void ModCotact( struct Contact* ps);//定义函数并声明,修改通讯录
void SortCotact(struct Contact* ps);//定义函数并声明,排序通讯录
2.test.c(通讯录主程序菜单)
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"//引用contact头文件,便于修改
void menu()
{
printf("********************************************\n");
printf("********************************************\n");
printf("*****1.添加(Add) 2.删除(del)******\n");
printf("*****3.查找(find) 4.修改(modify)***\n");
printf("*****5.显示(show) 6.排序(sort)*****\n");
printf("************* 0.退出(exit) ***************\n");
printf("********************************************\n");
}
int main()
{
int input = 0;//初始化输入值
struct Contact con;//创建结构体Con里面包括了size和结构体数组,嵌套结构体
IntoContact(&con);//初始化结构体
do
{
menu();//提供菜单给用户选择
printf("请输入:>");
scanf("%d", &input);//录入数字
switch (input)//判断并开展进行分支程序
{
case ADD:
AddContact(&con);//添加结构体进入通讯录
break;
case DELETE:
DelContact(&con);//在通讯录内删除结构体
break;
case SEEK:
SeekCotact(&con);//在通讯录内查找结构体
break;
case MODIFY:
ModCotact(&con);//在通讯录内修改结构体
break;
case SHOW:
ShowContact(&con);//展示通讯录
break;
case SORT:
SortCotact(&con);//在通讯录内排序结构体
break;
case EXIT:
printf("退出通讯录\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);//由于dowhile函数的特殊性,而且可以利用0的特殊性从而使函数在一系列程序过后选择是否退出
return 0;
}
3.Contact.c(实现通讯录所有函数的程序)
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
int FindContact(const struct Contact* ps,char name)
{
int i = 0;
for (i = 0; i < ps->size; i++)
{
if (0 == strcmp(ps->date[i].name, name))
{
break;
}
}
return i;
}
void IntoContact(struct Contact* ps) //初始化通讯录
{
memset(ps->date, 0, sizeof(ps->date));//函数初始化
ps->size = 0;//size初始化
}
void AddContact(struct Contact* ps)
{
if (ps->size == MAX)
{
printf("通讯录已满,无法增加\n");
}
else
{
printf("请输入名字:>");
scanf("%s",ps->date[ps->size].name);
printf("请输入年龄:>");
scanf("%s",ps->date[ps->size].age);
printf("请输入性别:>");
scanf("%s", ps->date[ps->size].sex);
printf("请输入电话:>");
scanf("%s", ps->date[ps->size].tele);
printf("请输入地址:>");
scanf("%s", ps->date[ps->size].addr);
ps->size++;
}
}//添加结构体进入通讯录
void ShowContact(const struct Contact* ps)
{
if (ps->size == 0)
{
printf("通讯录为空\n");
}
else
{
int i = 0;
printf("%-20s\t%-4s\t%5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
for (i = 0; i < ps->size; i++)
{
printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n",
ps->date[i].name,
ps->date[i].age,
ps->date[i].sex,
ps->date[i].tele,
ps->date[i].addr);
}
}
}//打印结构体,浏览通讯录
void DelContact(struct Contact* ps)
{
char name[MAX_Name];
printf("请输入删除数据的姓名:>");
scanf("%s", name);
int i = 0;
int a = FindContact(&ps, &name);
if (a == ps->size)
{
printf("要删除的人不存在\n");
}
else
{
int j = 0;
for (j = a; j <ps->size ; j++)
{
ps->date[j] = ps->date[j + 1];
}
ps->size--;
printf("删除成功\n");
}
}
void SeekCotact(const struct Contact* ps)
{
char name[MAX_Name];
printf("请输入查找人的姓名:>");
scanf("%s", name);
int j = FindContact(&ps, &name);
if (j == ps->size)
{
printf("要查找的人不存在\n");
printf("请重新输入\n");
}
else
{
printf("%-20s\t%-4s\t%5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n",
ps->date[j].name,
ps->date[j].age,
ps->date[j].sex,
ps->date[j].tele,
ps->date[j].addr);
}
}
void ModCotact(struct Contact* ps)
{
char name[MAX_Name];
printf("请输入要修改人的姓名:>");
scanf("%s", name);
int j =FindContact(&ps,&name);
if (j == ps->size)
{
printf("要修改的人不存在\n");
printf("请重新输入\n");
}
else
{
printf("开始修改请输入:>>>>>\n");
printf("请输入名字:>");
scanf("%s", ps->date[j].name);
printf("请输入年龄:>");
scanf("%s", ps->date[j].age);
printf("请输入性别:>");
scanf("%s", ps->date[j].sex);
printf("请输入电话:>");
scanf("%s", ps->date[j].tele);
printf("请输入地址:>");
scanf("%s", ps->date[j].addr);
printf("修改成功\n");
}
}
void SortCotact(struct Contact* ps)
{
int i;
int j;
char temp [MAX_Name];
for (i = 0; i < ps->size - 1; i++)
{
for (j = i + 1; j < ps->size; j++)
{
if (strcmp(ps->date[i].name, ps->date[j].name) > 0)
{
strcpy(temp, ps->date[i].name);
strcpy(ps->date[i].name, ps->date[j].name);
strcpy(ps->date[j].name, temp);
}
}
printf("排序完成\n");
}
}
//定义函数并声明,浏览通讯录
总结
程序使用大部分已经添加了注释,该代码无使用数据库,所以是一次性的,仅供大家参考!!!