目录
本篇文章是C语言的通讯录源码。
1.test.c
#include "contacts.h"
void table() {
printf("************************\n");
printf("***** 1.ADD 2.del *****\n");
printf("***** 3.sear 4.modi*****\n");
printf("***** 5.show 6.cls *****\n");
printf("***** 7.sort 0.quit*****\n");
printf("************************\n");
}
int main() {
int input = 0;
do {
table();
scanf("%d", &input);
switch (input) {
case 1: {
int ret = contacts_add(&cont);
if (-1 == ret) {
printf("增加失败,用户已满\n");
}
break;
}
case 2: {
int de = contacts_dele(&cont);
if (-1 == de) {
printf("通讯录为空,不能删除\n");
}
else if(0 == de) {
printf("需要删除的人名不存在,请您核实后重新输入\n");
}
else {
printf("删除成功\n");
}
break;
}
case 3: {
search_by_name(&cont);
break;
}
case 4:
modify_contacts(&cont);
break;
case 5:
show_add(&cont);
break;
case 6:
clear(&cont);
break;
case 7:
sort_by_age(&cont);
break;
case 0:
printf("已退出\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while(input);
return 0;
}
2.contacts.h
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define NameMax 20
#define SexMax 20
#define TeleMax 20
#define AdressMax 20
#define MAX 1000
#include <string.h>
typedef struct inf {
char name[NameMax];
char sex[SexMax];
int age;
char tele[TeleMax];
char address[AdressMax];
}inf;
struct contacts {
inf cts[1000];
int sz;
}cont;
int contacts_add(struct contacts* cont);
int contacts_dele(struct contacts* cont);
void show_add(struct contacts* cont);
void search_by_name(struct contacts* cont);
void modify_contacts(struct contacts* cont);
void clear(struct contacts* cont);
void sort_by_age(struct contacts* cont);
3.contacts.c
#include "contacts.h"
int contacts_add(struct contacts* cont) {
if (MAX == cont->sz) {
return -1;
}
else {
printf("请输入新成员姓名:\n");
scanf("%s",cont->cts[cont->sz].name);
printf("请输入新成员性别:\n");
scanf("%s", cont->cts[cont->sz].sex);
printf("请输入新成员年龄:\n");
scanf("%d", &(cont->cts[cont->sz].age));
printf("请输入新成员电话:\n");
scanf("%s", cont->cts[cont->sz].tele);
printf("请输入新成员地址:\n");
scanf("%s", cont->cts[cont->sz].address);
cont->sz++;
return cont->sz;
}
}
int contacts_dele(struct contacts* cont) {
char name1[NameMax] = { 0 };
if (cont->sz == 0) {
return -1;
}
else {
printf("请输入需要删除人的姓名:\n");
scanf("%s",name1);
int i = 0;
int n = 0;
for (i = 0;i < cont->sz;i++) {
if (strcmp(cont->cts[i].name,name1) == 0) {
n = i;
}
}
for (i = n;i < cont->sz - 1;i++) {
strcpy(cont->cts[i].name, cont->cts[i + 1].name);
strcpy(cont->cts[i].sex, cont->cts[i + 1].sex);
cont->cts[i].age = cont->cts[i + 1].age;
strcpy(cont->cts[i].tele, cont->cts[i + 1].tele);
strcpy(cont->cts[i].address, cont->cts[i + 1].address);
}
cont->sz--;
}
return 1;
}
void show_add(struct contacts* cont) {
if (cont->sz == 0) {
printf("通讯录为空\n");
return;
}
int i = 0;
printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "性别", "年龄", "电话", "地址");
for (i = 0;i < cont->sz;i++) {
printf("%-20s %-20s %-20d %-20s %-20s\n", cont->cts[i].name,
cont->cts[i].sex,
cont->cts[i].age,
cont->cts[i].tele,
cont->cts[i].address);
}
}
void search_by_name(struct contacts* cont) {
char name2[NameMax] = { 0 };
printf("请输入需要查找人的姓名:\n");
scanf("%s",name2);
int i = 0;
for (i = 0;i < cont->sz;i++) {
if (strcmp(cont->cts[i].name, name2) == 0) {
printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "性别", "年龄", "电话", "地址");
printf("%-20s %-20s %-20d %-20s %-20s\n", cont->cts[i].name,
cont->cts[i].sex,
cont->cts[i].age,
cont->cts[i].tele,
cont->cts[i].address);
}
}
if (i == cont->sz) {
printf("抱歉,查无此人。\n");
}
}
void modify_contacts(struct contacts* cont) {
char name3[NameMax] = { 0 };
printf("请输入您要修改者的姓名:\n");
scanf("%s",name3);
int i = 0;
int pos = 0;
for (i = 0;i < cont->sz;i++) {
if (strcmp(cont->cts[i].name, name3) == 0) {
pos = i;
break;
}
}
if (pos == 0) {
printf("查无此人。\n");
return;
}
printf("请问您要将他/她的姓名修改为:\n");
scanf("%s", cont->cts[pos].name);
printf("请问您要将他/她的性别修改为:\n");
scanf("%s", cont->cts[pos].sex);
printf("请问您要将他/她的年龄修改为:\n");
scanf("%d", &(cont->cts[pos].age));
printf("请问您要将他/她的电话修改为:\n");
scanf("%s", cont->cts[pos].tele);
printf("请问您要将他/她的地址修改为:\n");
scanf("%s", cont->cts[pos].address);
printf("修改成功\n");
}
void clear(struct contacts* cont) {
int i = 0;
for (i = 0;i < cont->sz;i++) {
strcpy(cont->cts[i].name, "0");
strcpy(cont->cts[i].sex, "0");
cont->cts[i].age = 0;
strcpy(cont->cts[i].tele, "0");
strcpy(cont->cts[i].address, "0");
}
cont->sz = 0;
printf("已清空\n");
return;
}
void sort_by_age(struct contacts* cont) {
int count = 0;
int i = 0;
for (i = 0;i < cont->sz;i++) {
int j = 0;
for (j = 0;j < cont->sz - 1 - i;j++) {
if (cont->cts[j].age > cont->cts[j + 1].age) {
int tem_age = 0;
tem_age = cont->cts[j].age;
cont->cts[j].age = cont->cts[j + 1].age;
cont->cts[j + 1].age = tem_age;
char arr[20] = { 0 };
strcpy(arr, cont->cts[j].name);
strcpy(cont->cts[j].name, cont->cts[j + 1].name);
strcpy(cont->cts[j + 1].name, arr);
strcpy(arr, cont->cts[j].sex);
strcpy(cont->cts[j].sex, cont->cts[j + 1].sex);
strcpy(cont->cts[j + 1].sex, arr);
strcpy(arr, cont->cts[j].tele);
strcpy(cont->cts[j].tele, cont->cts[j + 1].tele);
strcpy(cont->cts[j + 1].tele, arr);
strcpy(arr, cont->cts[j].address);
strcpy(cont->cts[j].address, cont->cts[j + 1].address);
strcpy(cont->cts[j + 1].address, arr);\\建议函数封装重复的操作。
}
}
}
printf("排序完成\n");
return;
}
4.总结
easy.