Contact.h
#pragma once
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define MAX 1000
enum Con {
EXIT=0,
ADD,
DEL,
FIND,
SHOW,
MODIFY,
CLEAR,
SORT,
DELCON
};
typedef struct PeopleInfo {
int No;
char name[20];
char sex[5];
int age;
char tele[11];
char addr[30];
}pInfo;
typedef struct Ctct {
int num;
pInfo arr[MAX];
}Ctct;
void InitCtct(Ctct* con);
void addPeople(Ctct* con);
void delPeople(Ctct* con);
void modifyPeople(pInfo* p);
void showPeople(const Ctct* con);
void delCon(Ctct* con);
void sortPeopleByName(Ctct* con);
pInfo* findPeopleById(Ctct* con, int No);
pInfo* findPeopleByName(Ctct* con, char name[]);
Contact.c
初始化通讯录
void InitCtct(Ctct* con) {
assert(con);
con->num = 0;
memset(con->arr, 0, sizeof(con->arr));
}
添加联系人
void addPeople(Ctct* con) {
assert(con);
if (con->num >= MAX) {
printf("通讯录已满\n");
return;
}
con->arr[con->num].No = (con->num)+1;
printf("请输入姓名:");
scanf("%s", con->arr[con->num].name);
printf("请输入性别:");
scanf("%s", con->arr[con->num].sex);
printf("请输入年龄:");
scanf("%d", &con->arr[con->num].age);
printf("请输入电话:");
scanf("%s", con->arr[con->num].tele);
printf("请输入地址:");
scanf("%s", con->arr[con->num].addr);
if(con->arr[con->num].name&& con->arr[con->num].sex && con->arr[con->num].age && con->arr[con->num].tele && con->arr[con->num].addr)
printf("添加成功!\n");
else
printf("添加失败!\n");
++(con->num);
}
展示联系人
void showPeople(const Ctct* con) {
assert(con);
printf("%-5s %-20s %-5s %-3s %-11s %-30s\n", "编号", "姓名", "性别", "年龄", "电话", "地址");
for (int i = 0; i < con->num; i++) {
printf("%-5d %-20s %-5s %-3d %-11s %-30s\n",
con->arr[i].No,
con->arr[i].name,
con->arr[i].sex,
con->arr[i].age,
con->arr[i].tele,
con->arr[i].addr);
}
}
删除整个通讯录
void delCon(Ctct* con) {
assert(con);
free(con);
con = NULL;
printf("清理成功\n");
}
删除指定联系人
void delPeople(Ctct* con, char name[]) {
for (int i = 0; i < con->num; i++) {
if (strcmp(con->arr[i].name, name) == 0) {
for (int j = i; j < con->num; j++) {
con->arr[j] = con->arr[j + 1];
}
}
}
con->num--;
}
查找指定联系人(两种)
pInfo* findPeopleById(Ctct* con,int No) {
assert(con);
assert(No > 0);
if (No > (con->num)) {
printf("不在查找范围\n");
return NULL;
}
for (int i = 0; i < con->num; i++) {
if (con->arr[i].No == No) {
printf("%-5s %-20s %-5s %-3s %-11s %-30s\n", "编号", "姓名", "性别", "年龄", "电话", "地址");
printf("%-5d %-20s %-5s %-3d %-11s %-30s\n",
con->arr[i].No,
con->arr[i].name,
con->arr[i].sex,
con->arr[i].age,
con->arr[i].tele,
con->arr[i].addr);
return &(con->arr[i]);
}
}
printf("未找到\n");
return NULL;
}
pInfo* findPeopleByName(Ctct* con, char name[]) {
assert(con);
assert(name);
for (int i = 0; i < con->num; i++) {
if (strcmp(con->arr[i].name,name)==0) {
printf("%-5s %-20s %-5s %-3s %-11s %-30s\n", "编号", "姓名", "性别", "年龄", "电话", "地址");
printf("%-5d %-20s %-5s %-3d %-11s %-30s\n",
con->arr[i].No,
con->arr[i].name,
con->arr[i].sex,
con->arr[i].age,
con->arr[i].tele,
con->arr[i].addr);
return &(con->arr[i]);
}
}
printf("未找到\n");
return NULL;
}
修改联系人
void modifyPeople(pInfo* p) {
printf("请输入姓名:");
scanf("%s", p->name);
printf("请输入性别:");
scanf("%s", p->sex);
printf("请输入年龄:");
scanf("%d", &p->age);
printf("请输入电话:");
scanf("%s", p->tele);
printf("请输入地址:");
scanf("%s", p->addr);
}
按名字排序
void sortPeopleByName(Ctct* con) {
for (int i = 0; i < con->num-1; i++) {
for (int j = 0; j < con->num - 1 - i; j++) {
if (strcmp(con->arr[j].name,con->arr[j + 1].name) > 0) {
pInfo tmp = con->arr[j];
con->arr[j] = con->arr[j + 1];
con->arr[j + 1] = tmp;
}
}
}
}
Test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
int menu() {
int input;
printf("**********************************\n");
printf("**********************************\n");
printf("***** MENU *****\n");
printf("***** 1. ADD 2. DEL *****\n");
printf("***** 3. FIND 4. SHOW *****\n");
printf("***** 5. MODIFY 6.CLEAR *****\n");
printf("***** 7. SORT_BY_NAME *****\n");
printf("***** 8. DEL_CONTACT *****\n");
printf("***** 0. EXIT *****\n");
printf("**********************************\n");
printf("**********************************\n");
printf("请输入数字:");
scanf("%d", &input);
return input;
}
int main() {
int in=1;
Ctct* con=(Ctct*)malloc(sizeof(Ctct));
InitCtct(con);
while (in)
{
in=menu();
switch (in)
{
case EXIT:
printf("***** 退出 *****\n");
exit(-1);
case ADD:
addPeople(con);
break;
case DEL:
printf("请输入需要删除的姓名:");
char find[30] = { 0 };
scanf("%s", find);
delPeople(con,find);
break;
case FIND:
printf("按编号查找(输入1)或按名查找(输入2)");
int input;
scanf("%d", &input);
if (input == 1) {
printf("请输入需要查找的编号(从1开始):");
int find=0;
scanf("%d", &find);
findPeopleById(con, find);
}
else if (input == 2) {
printf("请输入需要查找的姓名:");
char find[30] = { 0 };
scanf("%s", find);
findPeopleByName(con, find);
}
else {
printf("无效输入\n");
}
break;
case SHOW:
showPeople(con);
break;
case MODIFY:
printf("输入需要修改的联系人的编号(输入1)或名字(输入2)");
int input1;
scanf("%d", &input1);
if (input1 == 1) {
printf("输入需要修改的联系人的编号(从1开始):");
int find = 0;
scanf("%d", &find);
pInfo* p=findPeopleById(con, find);
if (p&&p->name != NULL) modifyPeople(p);
else printf("修改失败\n");
}
else if (input1 == 2) {
printf("输入需要修改的联系人的姓名:");
char find[30] = { 0 };
scanf("%s", find);
pInfo* p=findPeopleByName(con, find);
if (p&&p->name != NULL) modifyPeople(p);
else printf("修改失败\n");
}
else {
printf("无效输入\n");
}
break;
case CLEAR:
InitCtct(con);
break;
case SORT:
sortPeopleByName(con);
showPeople(con);
break;
case DELCON:
delCon(con);
default:
printf("您输入的数字不对,请重新输入!\n");
break;
}
}
return 0;
}