功能
- 添加联系人信息
- 删除指定联系人信息
- 查找指定联系人信息
- 修改指定联系人信息
- 显示所有联系人信息
- 清空所有联系人
- 以名字排序所有联系人
- 保存联系人到文件
- 加载联系人
实现
#ifndef __contact_h__
#define __contact_h__
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define MAX_NUM 1000
#define MAX_NAME 24
#define MAX_SEX 10
#define MAX_TEL 20
#define MAX_ADDRESS 20
//个人信息
typedef struct People{
char name[MAX_NAME];
char sex[MAX_SEX];
char age;
char tel[MAX_TEL];
char address[MAX_ADDRESS];
} Peo;
//保存多个个人信息
typedef struct Contact{
Peo con[MAX_NUM];
int count;
} Con;
//选项
enum Choice{
EXIT,
ADD,
DEL,
SEARCH,
MOD,
SHOW,
EMPTY,
NAMESORT,
SAVE,
LOAD
};
//函数声明
void initContact(Con* pcon);//初始化
void add(Con* pcon);//添加
void del(Con* pcon);//删除
void search(Con* pcon);//查找
void mod(Con* pcon);//修改
void show(Con* pcon);//展示
void empty(Con* pcon);//清空
void namesort(Con* pcon);//按名字排序
void save(Con* pcon);//保存到文件中
void load(Con* pcon);//从文件中载入
#endif __contact_h__
#include "Contact.h"
//初始化
void initContact(Con* pcon){
pcon->count = 0;
memset(pcon->con, 0, MAX_NUM * sizeof(Peo));
printf("初始化成功!\n");
}
//添加联系人
void add(Con* pcon){
if (pcon->count == MAX_NUM){
printf("通讯录已满!\n");
return;
}
printf("请输入姓名 :");
scanf("%s", pcon->con[pcon->count].name);
printf("请输入性别 :");
scanf("%s", pcon->con[pcon->count].sex);
printf("请输入年龄 :");
scanf("%d", &(pcon->con[pcon->count].age));
printf("请输入电话 :");
scanf("%s", pcon->con[pcon->count].tel);
printf("请输入地址 :");
scanf("%s", pcon->con[pcon->count].address);
pcon->count++;
printf("添加成功!\n");
}
//删除
void del(Con* pcon){
if (pcon->count == 0){
printf("通讯录已空!\n");
return;
}
char name[MAX_NAME] = { 0 };
printf("请输入要删除联系人的姓名 :");
scanf("%s", name);
int i = 0;
for (i = 0; i < pcon->count; i++){
if (strcmp(name, pcon->con[i].name) == 0){
int j = 0;
for (j = i; j < pcon->count - 1; j++){//把联系人依次往前挪
pcon->con[j] = pcon->con[j + 1];
}
pcon->count--;
printf("找到联系人,并删除成功!\n");
return;
}
}
if (i == pcon->count){
printf("未找到该联系人,请重新输入!\n");
}
}
//查找
void search(Con* pcon){
if (pcon->count == 0){
printf("通讯录已空!\n");
return;
}
char name[MAX_NAME] = { 0 };
printf("请输入要查找联系人的姓名 :");
scanf("%s", name);
int i = 0;
for (i = 0; i < pcon->count; i++){
if (strcmp(name, pcon->con[i].name) == 0){
printf("找到联系人!\n");
printf(" %d ", i + 1);
printf("%-5s %-3s %-3d %-15s %-15s\n", pcon->con[i].name, pcon->con[i].sex
, pcon->con[i].age, pcon->con[i].tel, pcon->con[i].address);
break;
}
}
if (i == pcon->count){
printf("未找到该联系人,请重新输入!\n");
}
}
//修改
void mod(Con* pcon){
if (pcon->count == 0){
printf("通讯录已空!\n");
return;
}
char name[MAX_NAME] = { 0 };
printf("请输入要修改联系人的姓名 :");
scanf("%s", name);
int i = 0;
for (i = 0; i < pcon->count; i++){
if (strcmp(name, pcon->con[i].name) == 0){
printf("找到联系人!\n");
printf("请输入姓名 :");
scanf("%s", pcon->con[i].name);
printf("请输入性别 :");
scanf("%s", pcon->con[i].sex);
printf("请输入年龄 :");
scanf("%d", &(pcon->con[i].age));
printf("请输入电话 :");
scanf("%s", pcon->con[i].tel);
printf("请输入地址 :");
scanf("%s", pcon->con[i].address);
printf("修改成功!\n");
break;
}
}
if (i == pcon->count){
printf("未找到该联系人,请重新输入!\n");
}
}
//展示
void show(Con* pcon){
if (pcon->count == 0){
printf("通讯录已空!\n");
return;
}
int i = 0;
printf(" %-5s %-3s %-3s %-15s %-15s\n", "姓名", "性别", "年龄", "电话", "住址");
for (i = 0; i < pcon->count; i++){
printf(" %d ", i + 1);
printf("%-5s %-3s %-3d %-15s %-15s\n", pcon->con[i].name, pcon->con[i].sex
, pcon->con[i].age, pcon->con[i].tel, pcon->con[i].address);
}
}
//清空
void empty(Con* pcon){
if (pcon->count == 0){
printf("通讯录已空!\n");
return;
}
memset(pcon, 0, sizeof(Con)* pcon->count);
pcon->count = 0;
printf("清空成功");
}
//按名字排序
void namesort(Con* pcon){
if (pcon->count == 0){
printf("通讯录已空!\n");
return;
}
int i = 0;
int j = 0;
for (i = 0; i < pcon->count - 1; i++){
for (j = 0; j < pcon->count - i - 1; j++){
if (strcmp(pcon->con[i].name, pcon->con[i + 1].name) > 0){
Peo tmp = pcon->con[i];
pcon->con[i] = pcon->con[i + 1];
pcon->con[i + 1] = tmp;
}
}
}
printf("排序成功!\n");
show(pcon);
}
//保存到文件里
void save(Con* pcon){
if (pcon->count == 0){
printf("通讯录已空!\n");
return;
}
FILE* fp = fopen("contact.text", "w");
assert(fp);
//fprintf(fp," %-5s %-3s %-3s %-15s %-15s\n", "姓名", "性别", "年龄", "电话", "住址");
int i = 0;
for (i = 0; i < pcon->count; i++){
//fprintf(fp," %d ", i + 1);
fprintf(fp, "%-5s %-3s %-3d %-15s %-15s\n", pcon->con[i].name, pcon->con[i].sex
, pcon->con[i].age, pcon->con[i].tel, pcon->con[i].address);
}
printf("写入成功!\n");
fclose(fp);
fp = NULL;
}
//从文件里读入
void load(Con* pcon){
FILE* fp = fopen("contact.text", "r");
if (fp == NULL){
printf("没有文件\n");
}
int i = 0;
//fgetc() != EOF 或 fgets() != NULL检测是否到达文件末尾
//feof() 判断是否到达文件末尾
for (i = pcon->count; !feof(fp)); i++){
//格式化输入,中间的数字代表一次输入几个字符
fscanf(fp, "%5s %3s %3d %15s %15s", pcon->con[i].name, pcon->con[i].sex
, &(pcon->con[i].age), pcon->con[i].tel, pcon->con[i].address);
pcon->count++;
}
pcon->count--;
printf("读入成功!\n");
show(pcon);
fclose(fp);
fp = NULL;
}
#include "Contact.h"
void menu(){
printf("********************************************************\n");
printf("*****1. add 2. del 3. search 4. mod******************\n");
printf("*****5. show 6. empty 7. nameSort 8. save 9 .load*******\n");
printf("********************************************************\n");
}
int main () {
menu();
Con con;
initContact(&con);//初始化
assert(&con != NULL);
while (1){
int choice = 0;
printf("请输入操作: ");
scanf("%d", &choice);
switch (choice){
case ADD:
add(&con);
break;
case DEL:
del(&con);
break;
case SEARCH:
search(&con);
break;
case MOD:
mod(&con);
break;
case SHOW:
show(&con);
break;
case EMPTY:
empty(&con);
break;
case NAMESORT:
namesort(&con);
break;
case SAVE:
save(&con);
break;
case LOAD:
load(&con);
break;
case EXIT:
printf("退出成功!\n");
break;
default:
break;
}
}
return 0;
}