通讯录基本功能
本次实现的通讯录主要包含以下功能:
1. 增加新联系人
2. 通过姓名删除联系人
3. 通过姓名查找联系人
4.修改某个人的某项信息
5. 显示通讯录所有人的信息
6. 根据姓名对联系人进行排序
main函数
main函数通过do-while循环让用户选择功能入口。
#include <stdio.h>
#include "contact.h"
#include<windows.h>
void menu()
{
printf("***************************\n");
printf("*** 1.add 2.del ***\n");
printf("*** 3.search 4.modify ***\n");
printf("*** 5. show 6.sort ***\n");
printf("*** 0. exit ***\n");
printf("***************************\n");
}
int main()
{
contact my_con;
InitContact(&my_con);
int input;
do{
menu();
printf("请输入数字选择");
scanf("%d", &input);
switch (input)
{
case EXIT:
exit(0);
break;
case ADD:
Add(&my_con);
break;
case DEL:
Del(&my_con);
break;
case SEARCH:
Search(&my_con);
break;
case MODIFY:
Modify(&my_con);
break;
case SHOW:
Show(&my_con);
break;
case SORT:
Sort(&my_con);
break;
}
} while (input);
return 0;
}
头文件声明
本文件中主要包含了各项参数的定义,和需要用到的各项函数的声明。
#ifndef __CONTACT_H__
#define __CONTACT_H__
enum OPTION
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
SHOW,
SORT
};
#define NAME_MAX 20
#define MAX 1000
typedef struct PeoInfo
{
char name[NAME_MAX];
int age;
char sex[10];
char num[20];
}PeoInfo;
typedef struct date
{
PeoInfo date[MAX];
int count;
}contact,*pContact;
void Add(pContact pc);
void Del(pContact pc);
void Show(pContact pc);
void Search(pContact pc);
void Sort(pContact pc);
void InitContact(pContact pc);
void Modify(pContact pc);
int FindEntry(char name[], pContact pc);
#endif //__CONTACT_H__
各项功能的具体实现
本文件中包含了需要实现各个函数的详细操作。
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
#include<stdio.h>
#include<string.h>
void InitContact(pContact pc)
{
pc->count = 0;
memset(pc->date, 0, sizeof(pc->date));
}
void Add(pContact pc)
{
if (pc->count == MAX)
{
printf("通讯录已满");
return;
}
printf("请输入名字:>\n");
scanf("%s", pc->date[pc->count].name);
printf("请输入年龄:>\n");
scanf("%d", &(pc->date[pc->count].age));
printf("请输入性别:>\n");
scanf("%s", pc->date[pc->count].sex);
printf("请输入号码:>\n");
scanf("%s", &(pc->date[pc->count].num));
pc->count++;
}
void Show(pContact pc)
{
int i = 0;
if (pc->count == 0)
{
printf("通讯录为空");
return;
}
printf("%5s %5s %5s %14s\n", "姓名","年龄","性别","电话号码");
for (i = 0; i < pc->count;i++)
{
printf("%5s %5d %5s %14s\n", pc->date[i].name, pc->date[i].age, pc->date[i].sex, pc->date[i].num);
}
printf("\n");
}
void Del(pContact pc)//后面的数据往前挪
{
if (pc->count == 0)
{
printf("通讯录为空\n");
return;
}
char name[NAME_MAX];
int pos = 0;
printf("请输入要删除人的名字:>\n");
scanf("%s", name);
pos = FindEntry(name,pc);
if (pos == -1)
{
printf("要删除的人不存在\n");
return;
}
for (int i = pos; i < pc->count - 1; i++)
{
pc->date[i] = pc->date[i + 1];
}
pc->count--;
printf("删除成功\n");
}
int FindEntry(char name[NAME_MAX], pContact pc)
{
int i = 0;
for (i = 0; i < pc->count; i++)
{
if (strcmp(pc->date[i].name ,name)==0)
{
return i;
}
}
return -1;
}
void Search(pContact pc)
{
printf("请输入要查找的姓名:>");
char name[NAME_MAX];
scanf("%s", name);
int pos = FindEntry(name, pc);
if (pos == -1)
{
printf("要查找的人不存在\n");
return;
}
printf("%5s %5d %5s %14s\n", pc->date[pos].name, pc->date[pos].age, pc->date[pos].sex, pc->date[pos].num);
}
void Modify(pContact pc)
{
enum type
{
NOTING,
NAME,
AGE,
SEX,
NUM
}type;
printf("请输入要修改的姓名:>\n");
char name2[NAME_MAX];
scanf("%s", name2);
int pos = (int)FindEntry(name2, pc);
if (pos == -1)
{
printf("要修改的人不存在\n");
return;
}
printf("请通过数字选择要修改的内容\n");
printf("1:修改姓名 2::修改年龄 3:修改性别 4修改号码\n");
int i = 0;
scanf("%d", &i);
switch (i)
{
case NAME:
printf("请输入要修改的姓名:>\n");
char name[NAME_MAX];
scanf("%s", name);
strcpy(pc->date[pos].name, name);
printf("修改成功\n");
return;
case AGE:
printf("请输入要修改的年龄:>\n");
int age = 0;
scanf("%d", &age);
pc->date[pos].age = age;
printf("修改成功\n");
return;
case SEX:
printf("请输入要修改的性别:>\n");
char sex[10];
scanf("%s", sex);
strcpy(pc->date[pos].sex, sex);
printf("修改成功\n");
return;
case NUM:
printf("请输入要修改的号码:>\n");
char num[20];
scanf("%s", num);
strcpy(pc->date[pos].num, num);
printf("修改成功\n");
return;
}
}
void Sort(pContact pc)
{
int i = 0; int j = 0;
for (i = 0; i < pc->count - 1; i++)
{
for (j = 0; j < pc->count - i - 1; j++)
{
if (strcmp(pc->date[j].name, pc->date[j+1].name)>0)
{
PeoInfo peo = pc->date[j];
pc->date[j],pc->date[j+1];
pc->date[j + 1] =peo;
}
}
}
printf("排序成功\n");
}
程序运行结果演示