用结构体指针数编写通讯录。
实现了以下功能:
(1)显示界面显示(2)添加联系人信息(3)显示联系人信息,以名字排序,输出有颜色的字体
(4)删除联系人(5)修改联系人信息
主要代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define n 100
int person=0;
struct student
{
char name[n];
char sex[n];
int tel;
int age;
};
typedef struct student STU;
void menu() //显示通讯录界面,方便进行功能选择
{
system("color f4");// 控制背景色和字体颜色 红色字体,亮白色背景
printf("***********************************************\n");
printf("\t\t 欢迎进入通讯录\n");
printf("\t 1、添加联系人 2、显示联系人\n");
printf("\t 3、删除联系人 4、查找联系人\n");
printf("\t 5、修改联系人 6、退出\n");
printf("************************************************\n");
}
void addinf(STU *p[]) //选择添加联系人,可以自己选择添加几人
{
int i=0,j=1;
system("color 62");
printf("姓名:性别:年龄:电话:\n");
while(j == 1)
{
p[person]=(STU *)malloc(sizeof(STU));
scanf("%s%s%d%d",p[person]->name,p[person]->sex,&p[person]->age,&p[person]->tel); //输入联系人信息
printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel); //显示联系人信息
person++; //成功就加1
printf("是否继续添加: 是1 否0 \n");
scanf("%d",&j);
}
}
void show(STU *p[]) //显示函数,以名字排序,结果显示字体颜色
{
int i,j,k;
STU *q[3];
q[0]=(STU *)malloc(sizeof(STU));
system("color d4");
printf("选择名字排序的方式:1 字母小到大 0 字母大到小 \n");
scanf("%d",&k);
if(0 == k)
{
for(i = 0; i < person; i++) // 以姓名排序 字母小到大
for(j = 0; j < person - 1-i; j++)
{
if(strcmp(p[j]->name,p[j+1]->name) > 0)
{
q[0] = p[j];
p[j] = p[j+1];
p[j+1] = q[0];
}
}
}
else
if(1 ==k)
{
for(i = 0; i < person; i++) // 以姓名排序 字母大到小
for(j = 0; j < person - 1-i; j++)
{
if(strcmp(p[j]->name,p[j+1]->name) < 0)
{
q[0] = p[j];
p[j] = p[j+1];
p[j+1] = q[0];
}
}
}
// system("color 04"); // 控制输出 背景和字体 颜色 背景为黑色,字体为红色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//行显示字体为红色
for(i = 0; i < person; i++)
printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);
Sleep(2000);
}
void del(STU *p[])
{
int i,j;
STU *a[1];
a[0] = (STU *)malloc(sizeof(STU));
system("color b4");
printf("选择要删除的姓名:\n");
scanf("%s",a[0]->name);
if(person == 0)
printf("没有联系人,请先建立联系人\n");
else
if(person == 1)
{
// printf("-----------\n");
if(strcmp(a[0]->name,p[person-1]->name) == 0)
{
free(p[person-1]);
person--;
printf("删除完成\n");
}
else
printf("没有此联系人\n");
}
else
if(person > 1)
{
for(i = 0; i < person;i++)
{
if(strcmp(a[0]->name,p[i]->name) == 0)
{
free(p[i]);
for(j = i; j < person - 1; j++)
{
p[i] = p[i+1];
}
person--;
printf("删除完成\n");
}
}
if(i == person)
printf("没有此联系人\n");
}
}
void mod(STU *p[])
{
int flag,i,j;
STU *a[1];
a[0]=(STU *)malloc(sizeof(STU));
system("color 84");
printf("请输入修改联系人的姓名:\n");
scanf("%s",a[0]->name);
printf("\n");
if(person == 0)
{
printf("没有此联系人,请建立联系人\n");
i = -1;
}
else
if(person == 1)
{
if(strcmp(a[0]->name,p[person-1]->name) == 0)
i = 0;
else
i = -1;
}
else
if(person > 1)
{
for(j = 0; j < person; j++)
{
if(strcmp(a[0]->name,p[j]->name) == 0)
i = j;
}
if(i == person)
i = -1;
}
if(i == -1)
printf("没有此联系人\n");
if(i != -1)
{
while(1)
{
printf("***************************************\n");
printf("\t选择修改的信息:\n");
printf("\t 0.不修改\t\n");
printf("\t 1.改姓名\t\n");
printf("\t 2.改性别\t\n");
printf("\t 3.改年龄\t\n");
printf("\t 4.改电话\t\n");
printf("\t 5.信息多改\t\n");
printf("***************************************\n");
scanf("%d",&flag);
printf("修改联系人原信息如下:\n");
printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);
if(0 == flag)
break;
if(1 == flag)
scanf("%s",p[i]->name);
if(2 == flag)
scanf("%s",p[i]->sex);
if(3 == flag)
scanf("%d",p[i]->age);
if(4 == flag)
scanf("%d",p[i]->tel);
if(5 == flag)
scanf("%s%s%d%d",p[i]->name,p[i]->sex,&p[i]->age,&p[i]->tel);
printf("联系人修改后信息如下:\n");
printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);
}
}
}
void find(STU *p[])
{
int i;
STU *a[1];
a[0]=(STU *)malloc(sizeof(STU));
system("color 74");
printf("请输入修改联系人的姓名:\n");
scanf("%s",a[0]->name);
printf("\n");
if(person == 0)
{
printf("没有此联系人,请建立联系人\n");
}
else
if(person == 1)
{
if(strcmp(a[0]->name,p[person-1]->name) == 0)
printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",
p[person-1]->name,p[person-1]->sex,p[person-1]->age,p[person-1]->tel);
else
printf("没有此联系人,请建立联系人\n");
}
else
if(person > 1)
{
for(i = 0; i < person; i++)
{
if(strcmp(a[0]->name,p[i]->name) == 0)
printf("姓名:%s\t性别:%s\t年龄:%d\t电话:%d\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->tel);
}
if(i == person)
printf("没有此联系人,请建立联系人\n");
}
}
int main()
{
STU *str[n]={0};
int choice;
system("color 24");
while(1)
{
Sleep(2000);
system("cls");
menu();
Sleep(2000); // 延时一段时间
system("cls"); // 清空界面
printf("请输入命令:\n");
scanf("%d",&choice);
switch(choice)
{
case 1 :
addinf(str);
break;
case 2 :
show(str);
break;
case 3 :
del(str);
break;
case 4 :
mod(str);
break;
case 5 :
find(str);
break;
case 6 :
exit(0);
break;
}
if(choice == 0)
break;
}
return 0;
}