这是一个简单的通讯录(实现方案是初级版,并且只能在程序运行期间存在(没有写入文件))(以后还会写一个用动态内存分配+实现文件存储的版本)
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#pragma warning(disable:4996)
struct address
{
char name[20];
char sex[10];
int age;
char phonen[15];
char site[40];
}people[1000];
int main()
{
int i = 0;//用于计数
char m[20] = { 0 };
int option = 0;
printf("### 这是一个通 讯 录^-^ ###\n");
while (1)
{
printf("###-----------------------------###\n");
printf("### 1.>查找指定联系人 ###\n");
printf("###-----------------------------###\n");
printf("### 2.>修改指定联系人 ###\n");
printf("###-----------------------------###\n");
printf("### 3.>删除指定联系人 ###\n");
printf("###-----------------------------###\n");
printf("### 4.>添加指定联系人 ###\n");
printf("###-----------------------------###\n");
printf("### 5.>显示所有联系人 ###\n");
printf("###-----------------------------###\n");
printf("### 6.>删除所有联系人 ###\n");
printf("###-----------------------------###\n");
printf("### 7.>排序所有联系人 ###\n");
printf("###-----------------------------###\n");
printf("### 8.>退出通讯录 ###\n");
printf("###-----------------------------###\n");
printf("\n请选择要进行的操作:>");
scanf("%d", &option);
fflush(stdin);
switch (option)
{
case 1:
printf("\n\n\t输入要查找的姓名:>");
gets(m);//因为gets函数可以接收空格而scanf函数不可以
/*
**这里使用了一个简单的遍历的算法,也可以封
**装一个函数,用更高效的查找算法实现
*/
for (; i < 1000; i++)
{
if (strcmp(people[i].name, m) == 0)
{
printf("\n\t姓名:%s\n\t性别:%s\n\t年龄:%d\n\t电话:%s\n\t住址:%s\n", people[i].name,\
people[i].sex, people[i].age, people[i].phonen, people[i].site);
break;
}
}
if (1000==i)
printf("\t没有找到该联系人!\n");
break;
case 2:
/*
**这里实现的是一个基本方案,目前一次只能修改一项内容,并且要重新开始
**才可以修改另一项或者多项内容。以后会再次改进这里的功能!
*/
printf("\n\n\t请输入要修改的联系人姓名:>");
gets(m);
for (i=0;i < 1000;i++)
{
if (strcmp(people[i].name, m) == 0)
{
int n = 0;
printf("请选择要修改的信息:\n\t1.name\n\t2.sex\n\t3.age\n\t4.phone number\n\t5.site\n\t");
scanf("%d", &n);
fflush(stdin);
switch (n)
{
case 1:
printf("请输入修改后的内容:");
char arr[20];
gets(arr);
strcpy(people[i].name, arr);
printf("修改成功!\n");
break;
case 2:
printf("\n\t请输入修改后的内容:");
gets(arr);
strcpy(people[i].sex, arr);
printf("修改成功!\n");
break;
case 3:
printf("\n\t请输入修改后的内容:");
scanf("%d", &people[i].age);
fflush(stdin);
printf("修改成功!\n");
break;
case 4:
printf("\n\t请输入修改后的内容:");
gets(arr);
strcpy(people[i].phonen, arr);
printf("修改成功!\n");
break;
case 5:
printf("\n\t请输入修改后的内容:");
gets(arr);
strcpy(people[i].site, arr);
printf("修改成功!\n");
break;
}
break;
}
}
if (1000==i)
printf("\t该联系人不存在!\n");
break;
case 3:
printf("\n\n\t请输入要删除的联系人姓名:>");
gets(m);
for (i=0; i < 1000; i++)
{
if (strcmp(people[i].name, m) == 0)
{
strcpy(people[i].name, "\0");
strcpy(people[i].sex, "\0");
people[i].age = 0;
strcpy(people[i].site, "\0");
strcpy(people[i].phonen, "\0");
printf("删除成功!\n");
break;
}
}
if (1000 == i)
printf("\t该联系人不存在!\n");
break;
case 4:
for (i=0;i < 1000; i++)
{
char num[20] = { 0 };
if (strcmp(people[i].name,num)==0)
{
printf("\n\n\t请输入要添加联系人的姓名:>");
char arr[20] = { 0 };
gets(arr);
strcpy(people[i].name, arr);
printf("\t请输入要添加联系人的性别:>");
gets(arr);
strcpy(people[i].sex, arr);
printf("\t请输入要添加联系人的年龄:>");
scanf("%d", &people[i].age);
fflush(stdin);
printf("\t请输入要添加联系人的电话号码:>");
gets(arr);
strcpy(people[i].phonen, arr);
printf("\t请输入要添加联系人的住址:>");
gets(arr);
strcpy(people[i].site, arr);
printf("\t添加成功!\n");
break;
}
}
if (1000 == i)
printf("添加失败,通讯录已满!\n");
break;
case 5:
for (i = 0;i < 1000; i++)
{
if (strcmp(people[i].name, m) != 0)
{
printf("\n\t姓名:%s\n\t性别:%s\n\t年龄:%d\n\t电话:%s\n\t住址:%s\n", people[i].name, \
people[i].sex, people[i].age, people[i].phonen, people[i].site);
}
}
break;
case 6:
for (i = 0; i < 1000; i++)
{
if (strcmp(people[i].name, m) != 0)
{
strcpy(people[i].name, "\0");
strcpy(people[i].sex, "\0");
people[i].age = 0;
strcpy(people[i].site, "\0");
strcpy(people[i].phonen, "\0");
}
}
if (1000 == i)
printf("删除成功!\n");
break;
case 7:
//这块用qsort()给非空姓名数组排序即可
break;
case 8:
return 0;
break;
default:
printf("输入错误!重新选择!");
break;
}
}
system("pause");
return 0;
}