//多文件实现
//test.h
#ifndef _TEST_H_
#define _TEST_H_
#include <stdio.h>
#include <windows.h>
#include <assert.h>
#include <string.h>
#pragma warning(disable:4996)
#define MAX 100
typedef struct People//人的信息,这里只写了两个,如有需要,可自行添加
{
char name[20];//姓名
char telephone[20];//电话
}People;
typedef struct Contact//通讯录
{
People data[MAX];//通讯录的成员
int sz;//记录信息的个数
}Contact;
void menu();
void InitContact(Contact* con);
void Add(Contact* con);
void Delete(Contact* con);
void Serch(Contact* con);
void Alter(Contact* con);
void Show(Contact* con);
void Clear(Contact* con);
void OrderByName(Contact* con);
#endif _TEST_H_
//test.c
#include "test.h"
void menu()//目录
{
printf("################################\n");
printf("#### 1.ADD 2.DELETE ####\n");
printf("#### 3.SERCH 4.ALTER ####\n");
printf("#### 5.SHOW 6.CLEAR ####\n");
printf("#### 7.ORDER 0.EXIT ####\n");
printf("################################\n");
}
void InitContact(Contact* con)//初始化通讯录
{
assert(con);
con->sz = 0;
memset(con->data, 0, sizeof(con->data));
}
void Add(Contact* con)//添加成员
{
assert(con);//断言,防止指针为空
printf("请输入姓名:>");
scanf("%s", con->data[con->sz].name);
printf("请输入电话:>");
scanf("%s", con->data[con->sz].telephone);
con->sz++;
}
static int FindByName(Contact* con, char str[])//通过名字查找成员
{
int i = 0;
assert(con);
for (; i < con->sz; i++){
if (0 == strcmp(con->data[i].name, str)){
return i;
}
}
return -1;
}
void Delete(Contact* con)//删除成员
{
int i = 0;
char str[20] = { 0 };
int num = 0;
assert(con);
if (0 == con->sz){
printf("通讯录已空!\n");
return;
}
printf("请输入你要删除的人的名字:>");
scanf("%s", str);
num = FindByName(con, str);
if (-1 == num){
printf("你要删除的人不存在!\n");
}
for (i = num; i < con->sz - 1; i++){
con->data[i] = con->data[i + 1];
}
con->sz--;
printf("删除成功!\n");
}
void Serch(Contact* con)//查找成员
{
char str[20] = { 0 };
int num = 0;
assert(con);
printf("请输入你要查找的人的名字:>");
scanf("%s", str);
num = FindByName(con, str);
if (-1 == num){
printf("查无此人!\n");
return;
}
printf("%-3s %s\n", con->data[num].name, con->data[num].telephone);
}
void Alter(Contact* con)//修改成员信息
{
int num = 0;
int input = 0;
char str[20] = { 0 };
assert(con);
printf("请输入要修改的人的姓名:>");
scanf("%s", str);
num = FindByName(con, str);
if (-1 == num){
printf("查无此人!\n");
return;
}
printf("请选择你要修改的内容(1.姓名 2.电话):>");
scanf("%d", &input);
switch (input){
case 1:
printf("请输入修改后的姓名:>");
scanf("%s", con->data[num].name);
printf("修改成功!\n");
break;
case 2:
printf("请输入修改后的电话:>");
scanf("%s", con->data[num].telephone);
printf("修改成功!\n");
break;
default:
printf("输入错误,修改失败!\n");
return;
}
}
void Show(Contact* con)//显示通讯录
{
int i = 0;
assert(con);
if (0 == con->sz){
printf("通讯录为空!\n");
return;
}
printf("姓 名|电 话\n");
for (; i < con->sz; i++){
printf("%-6s %s\n", con->data[i].name, con->data[i].telephone);
}
}
void Clear(Contact* con)//1清空通讯录
{
InitContact(con);
}
void OrderByName(Contact* con)//使通讯录通过名字排序
{
int i, j;
People tmp;
for (i = 0; i < con->sz - 1; i++)
{
for (j = 0; j < con->sz - 1 - i; j++)
{
if (0 < strcmp(con->data[j].name, con->data[j + 1].name))
{
tmp = con->data[j];
con->data[j] = con->data[j + 1];
con->data[j + 1] = tmp;
}
}
}
}
//main.c
#include "test.h"
int main()
{
int input = 0;
Contact con;
InitContact(&con);//初始化通讯录
do{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input){
case 1:
Add(&con);//添加
break;
case 2:
Delete(&con);//删除
break;
case 3:
Serch(&con);//查找
break;
case 4:
Alter(&con);//修改
break;
case 5:
Show(&con);//显示
break;
case 6:
Clear(&con);//清空
break;
case 7:
OrderByName(&con);//按名字排序
break;
case 0:
printf("退出\n");
return 0;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (input);
system("pause");
return 0;
}
通讯录(C语言实现)
最新推荐文章于 2023-10-18 21:07:58 发布