#ifndef _UTILI_H_
#define _UTILI_H_
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdbool.h>
#endif /* _UTILI_H_ */
#ifndef _CONTACT_H_
#define _CONTACT_H_
#include"utili.h"
enum { QUIT, ADD, DEL, FIND, MODIFY, SHOW, CLEAR, SORT };
#define MAX_NAME_SIZE 10
#define MAX_SEX_SIZE 3
#define MAX_TEL_SIZE 12
#define MAX_ADDR_SIZE 128
#define MAX_CONTACT_SIZE 8
//定义通讯录人员信息
typedef struct PersonInfo
{
char name[MAX_NAME_SIZE];
char sex[MAX_SEX_SIZE];
int age;
char tel[MAX_TEL_SIZE];
char address[MAX_ADDR_SIZE];
}PersonInfo;
//定义通讯录结构
typedef struct Contact
{
PersonInfo cont[MAX_CONTACT_SIZE];
size_t capacity;
size_t size;
}Contact;
bool IsFullContact(Contact *pcont);
void InitContact(Contact *pcont);
void AddContact(Contact *pcont);
void ShowContact(Contact *pcont);
int FindContact(Contact *pcont);
void DelContact(Contact *pcont);
void ModifyContact(Contact *pcont);
void SortContact(Contact *pcont);
void ClearContact(Contact *pcont);
#endif /* _UTILI_H_ */
#include"contact.h"
void InitContact(Contact *pcont)
{
assert(pcont != NULL);
memset(pcont->cont, 0, sizeof(PersonInfo)* MAX_CONTACT_SIZE);
pcont->capacity = MAX_CONTACT_SIZE;
pcont->size = 0;
}
bool IsFullContact(Contact *pcont)
{
assert(pcont != NULL);
return pcont->size >= pcont->capacity;
}
void AddContact(Contact *pcont)
{
assert(pcont != NULL);
if (IsFullContact(pcont))
{
printf("通讯录空间已满,不能新增信息.....\n");
return;
}
printf("姓名:>");
scanf("%s", pcont->cont[pcont->size].name);
printf("性别:>");
scanf("%s", pcont->cont[pcont->size].sex);
printf("年龄:>");
scanf("%d", &pcont->cont[pcont->size].age);
printf("电话:>");
scanf("%s", pcont->cont[pcont->size].tel);
printf("住址:>");
scanf("%s", pcont->cont[pcont->size].address);
pcont->size++;
printf("增加完成.......\n");
}
void ShowContact(Contact *pcont)
{
assert(pcont != NULL);
printf("%-10s%-5s%-6s%-13s%s\n", "姓名", "性别", "年龄", "电话", "住址");
for (int i = 0; i<pcont->size; ++i)
{
printf("%-10s%-5s%-6d%-13s%s\n", pcont->cont[i].name,
pcont->cont[i].sex,
pcont->cont[i].age,
pcont->cont[i].tel,
pcont->cont[i].address);
}
}
int FindContact(Contact *pcont)
{
assert(pcont != NULL);
printf("请输入要查找的姓名:>");
char name[MAX_NAME_SIZE] = { 0 };
scanf("%s", name);
printf("%-10s%-5s%-6s%-13s%s\n", "姓名", "性别", "年龄", "电话", "住址");
for (int i = 0; i<pcont->size; ++i)
{
if (strcmp(name, pcont->cont[i].name) == 0)
{
printf("%-10s%-5s%-6d%-13s%s\n", pcont->cont[i].name,
pcont->cont[i].sex,
pcont->cont[i].age,
pcont->cont[i].tel,
pcont->cont[i].address);
return i;
}
}
return -1;
}
void DelContact(Contact *pcont)
{
assert(pcont != NULL);
printf("请输入要删除的名字:>");
char name[MAX_NAME_SIZE] = { 0 };
scanf("%s", name);
int i;
for (i = 0; i<pcont->size; ++i)
{
if (strcmp(name, pcont->cont[i].name) == 0)
break;
}
if (i >= pcont->size)
{
printf("要删除的信息不存在.....\n");
return;
}
for (int k = i; k<pcont->size - 1; ++k)
pcont->cont[k] = pcont->cont[k + 1];
pcont->size--;
printf("删除完成.......\n");
}
void ModifyContact(Contact *pcont)
{
assert(pcont != NULL);
printf("请输入要修改的名字:>");
char name[MAX_NAME_SIZE] = { 0 };
scanf("%s", name);
int i;
for (i = 0; i<pcont->size; ++i)
{
if (strcmp(name, pcont->cont[i].name) == 0)
break;
}
if (i >= pcont->size)
{
printf("要修改的信息不存在.....\n");
return;
}
printf("你想修改什么信息(1-姓名 2-性别 3-年龄 4-电话 5-住址)\n");
int select;
scanf("%d", &select);
if (select == 1)
{
printf("请输入要修改姓名:>");
scanf("%s", pcont->cont[i].name);
}
else if (select == 2)
{
printf("请输入要修改性别:>");
scanf("%s", pcont->cont[i].sex);
}
else if (select == 3)
{
printf("请输入要修改住址:>");
scanf("%d", &pcont->cont[i].age);
}
else if (select == 4)
{
printf("请输入要修改电话:>");
scanf("%s", pcont->cont[i].tel);
}
else if (select == 5)
{
printf("请输入要修改性别:>");
scanf("%s", pcont->cont[i].address);
}
printf("修改完成.......\n");
}
void SortContact(Contact *pcont)
{
assert(pcont != NULL);
for (int i = 0; i<pcont->size - 1; ++i)
{
for (int j = 0; j<pcont->size - 1 - i; ++j)
{
if (strcmp(pcont->cont[j].name, pcont->cont[j + 1].name) > 0)
{
PersonInfo tmp = pcont->cont[j];
pcont->cont[j] = pcont->cont[j + 1];
pcont->cont[j + 1] = tmp;
}
}
}
printf("排序完成.......\n");
}
void ClearContact(Contact *pcont)
{
assert(pcont != NULL);
pcont->size = 0;
printf("清除完成.......\n");
}
#include"contact.h"
void Menu()
{
printf("****************通 讯 录****************\n");
printf("* [1] Add [2] Del *\n");
printf("* [3] Find [4] Modify *\n");
printf("* [5] Show [6] Clear *\n");
printf("* [7] Sort [8] Quit *\n");
printf("****************************************\n");
}
void main()
{
Contact cont;
InitContact(&cont);
int select = 1;
while (select)
{
Menu();
printf("请选择:>");
scanf("%d", &select);
if (select == QUIT)
break;
switch (select)
{
case ADD:
AddContact(&cont);
break;
case DEL:
DelContact(&cont);
break;
case FIND:
FindContact(&cont);
break;
case MODIFY:
ModifyContact(&cont);
break;
case SHOW:
ShowContact(&cont);
break;
case CLEAR:
ClearContact(&cont);
break;
case SORT:
SortContact(&cont); //qsort
break;
}
}
}
1.包含标准库头文件和其他文件的预处理指令
各种公用的宏定义;
各种公用的类型定义;
函数原型的声明;
变量的外部说明。
2.头文件的作用:是程序个部分之间保证信息一致性的桥梁,辅助性文件
#ifndef _CONTACT_H_
#define _CONTACT_H_
#include"utili.h"
enum { QUIT, ADD, DEL, FIND, MODIFY, SHOW, CLEAR, SORT };
#define MAX_NAME_SIZE 10
#define MAX_SEX_SIZE 3
#define MAX_TEL_SIZE 12
#define MAX_ADDR_SIZE 128
#define MAX_CONTACT_SIZE 8
//定义通讯录人员信息
typedef struct PersonInfo
{
char name[MAX_NAME_SIZE];
char sex[MAX_SEX_SIZE];
int age;
char tel[MAX_TEL_SIZE];
char address[MAX_ADDR_SIZE];
}PersonInfo;
//定义通讯录结构
typedef struct Contact
{
PersonInfo cont[MAX_CONTACT_SIZE];
size_t capacity;
size_t size;
}Contact;
bool IsFullContact(Contact *pcont);
void InitContact(Contact *pcont);
void AddContact(Contact *pcont);
void ShowContact(Contact *pcont);
int FindContact(Contact *pcont);
void DelContact(Contact *pcont);
void ModifyContact(Contact *pcont);
void SortContact(Contact *pcont);
void ClearContact(Contact *pcont);
#endif /* _UTILI_H_ */