您的位置:首页 > 编程语言 > C语言/C++

C语言通讯录(利用数组实现)

2017-08-04 10:55 435 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int i = 0;                                              //定义全局变量i

/*定义结构体变量,包含的编号、姓名、性别、电话、qq号、住址、备注等信息*/
struct contact
{
char name[20];
char ismale[20];
char tel[20];
char qq[20];
char address[20];
char remark[20];
};

struct contact p[100];                                  //声明结构体p

void clear()
{
system("clear");                                    //清屏
}

void interface()                                        //界面函数,输出主界面
{
printf("            *********************************************************************************       \n");
printf("            *                                       *               \n");
printf("        *                                               *       \n");
printf("        |                                               |       \n");
printf("        |                      通  讯  录                      |       \n");
printf("        |                                               |       \n");
printf("        |                   ~~~~~~~~                    |       \n");
printf("        |                     1、添加好友;                       |       \n");
printf("        |                     2、查看列表;                       |       \n");
printf("        |                     3、删除好友;                       |       \n");
printf("        |                     4、查找好友;                       |       \n");
printf("        |                     5、修改信息;                       |       \n");
printf("        |                     6、退出程序;                       |       \n");
printf("        |                   ~~~~~~~~                    |       \n");
printf("        |                                               |       \n");
printf("        |功能:1.ADD、2.LIST、3.DELETE、4.SEEK、5.REVISE、6.EXIT                    |       \n");
printf("        |请在下面输入1、2、3、4、5、6选择你的操作。                           |       \n");
printf("        |                                               |       \n");
printf("        *                                               *       \n");
printf("            *                                       *               \n");
printf("            *********************************************************************************       \n");
}

void add()                                              //定义添加联系人函数
{
char c = 0;

do
{
clear();

printf("请输入联系人姓名:");                    //录入联系人信息
scanf("%s",p[i].name);

printf("请输入联系人性别:");
scanf("%s",p[i].ismale);

printf("请输入联系人电话号码:");
scanf("%s",p[i].tel);

printf("请输入联系人QQ号:");
scanf("%s",p[i].qq);

printf("请输入联系人家庭地址:");
scanf("%s",p[i].address);

printf("备注:");
scanf("%s",p[i].remark);

i++;                                            //录完后让i++

printf("是否继续添加? (y/n) :");
__fpurge(stdin);                                //清除缓冲区
c = getchar();

}while( c == 'y' );                                 //do while语句,当c不等于y时退出循环
}

void printfcon(int j)                                   //定义打印单个联系人信息函数
{
printf("编号:%d\n",j);
printf("姓名:%s\n",p[j].name);
printf("性别:%s\n",p[j].ismale);
printf("电话:%s\n",p[j].tel);
printf("QQ号:%s\n",p[j].qq);
printf("地址:%s\n",p[j].address);
printf("备注:%s\n",p[j].remark);
printf("\n");
}

void list()                                             //定义联系人列表函数,输出所有联系人信息
{
clear();

int j = 0;

for( j = 0; j < i; j++ )
{
printfcon( j );
}
}

int findnum( char *s, int *accumlate )                  //定义找到联系人编号函数,找到编号存入数组accumlate
{
int m = 0;
int j = 0;

for( m = 0; m < i; m++ )
{
if( strcmp( s, p[m].name ) == 0 )
{
accumlate[j++] = m;                         //比较字符串s和结构体中的name,如果返回值为0,代表相等,把编号存入数组
}
}

return j;                                           //返回数组中有几个值,即能找到几个联系人
}

void seek()                                             //定义查找函数,通过姓名查找
{
char c = 0;
do
{
clear();

int j = 0;
int temp = 0;
int accum = 0;
int a[20] = {0};
char name[20] = {0};

printf("请输入你想查找的联系人的姓名:");
scanf("%s",name);

accum = findnum( name, a );                         //调用findnum函数,并把找到几个联系人赋给accum

if( accum == 0 )
{
printf("此联系人不存在!\n");
}

else if( accum == 1 )                               //如果找到一个联系人,输出这个联系人的信息
{
temp = a[0];
printfcon( temp );
}

else if( accum > 1 )                                //找到不止一个联系人,输出全部联系人信息
{
printf("有%d个联系人!\n",accum);
for( j = 0; j < accum; j++ )
{
temp = a[j];
printfcon( temp );
}
}
printf("是否继续查找? (y/n) :");
__fpurge(stdin);
c = getchar();

}while( c == 'y' );
}

void coverdata( int j )                                 //定义覆盖信息函数
{
int m = 0;

printf("是否删除该联系人?(y/n)");
__fpurge(stdin);

if( getchar() == 'y' )
{
for( m = j + 1; m < i; m++ )
{
strcpy( p[m].name, p[m + 1].name );
strcpy( p[m].ismale, p[m + 1].ismale );
strcpy( p[m].tel, p[m + 1].tel );
strcpy( p[m].qq, p[m + 1].qq );
strcpy( p[m].address, p[m + 1].address );
strcpy( p[m].remark, p[m + 1].remark );
}
i--;                                            //将后一个的信息传给前一个
}
}

void delete()                                           //定义删除联系人函数
{
char c = 0;
do
{
clear();

int j = 0;
int temp = 0;
int accum = 0;
int a[20] = {0};
char name[20] = {0};

printf("请输入你想删除的联系人的姓名:");
scanf("%s",name);

accum = findnum( name, a );                     //调用findnum函数,并把找到几个联系人赋给accum

if( accum == 0 )
{
printf("此联系人不存在!\n");
}

else if( accum == 1 )
{
temp = a[0];
coverdata(temp);
}

else if( accum > 1 )
{
printf("有%d个联系人!\n",accum);         //如果找到不止一个联系人,输出这些联系人信息,让操作者选择要删除的联系人编号
for( j = 0; j < accum; j++ )
{
temp = a[j];
printfcon(temp);
}

printf("请输入要删的人的编号:");
scanf("%d",&temp);
coverdata(temp);
}

printf("是否继续删除? (y/n) :");
__fpurge(stdin);
c = getchar();

}while( c == 'y' );
}

void modify( int j )                                    //定义修改函数
{
clear();
printfcon(j);

int temp = 0;

printf("\n");
printf("1--姓名\n");
printf("2--性别\n");
printf("3--电话\n");
printf("4--qq号\n");
printf("5--住址\n");
printf("6--备注\n");
printf("请输入你要修改的项:");
scanf("%d",&temp);
printf("\n");

switch(temp)                                        //用switch语句选择要修改的信息
{
case 1:{
printf("请输入你要改成的姓名:");
scanf("%s",p[j].name);
break;
}

case 2:{
printf("请输入你要改成的性别:");
scanf("%s",p[j].ismale);
break;
}

case 3:{
printf("请输入你要改成的电话:");
scanf("%s",p[j].tel);
break;
}

case 4:{
printf("请输入你要改成的qq号:");
scanf("%s",p[j].qq);
break;
}

case 5:{
printf("请输入你要改成的住址:");
scanf("%s",p[j].address);
break;
}

case 6:{
printf("请输入你要改成的备注:");
scanf("%s",p[j].remark);
break;
}

default:printf("输入错误!\n");
}
}

void revise()                                           //定义修改信息函数
{
char c = 0;
do
{
clear();

int j = 0;
int temp = 0;
int accum = 0;
int a[20] = {0};
char name[20] = {0};

printf("请输入你想修改的联系人的姓名:");
scanf("%s",name);

accum = findnum( name, a );

if( accum == 0 )
{
printf("此联系人不存在!\n");
}

else if( accum == 1 )
{
temp = a[0];
modify(temp);
}

else if( accum > 1 )
{
printf("有%d个联系人!\n",accum);
for( j = 0; j < accum; j++ )
{
temp = a[j];
printfcon(temp);                            //有不止一个联系人时输出所有联系人信息,让操作者选择要修改的联系人编号
}
printf("请输入你要修改的人的编号:");
scanf("%d",&temp);
modify(temp);
}
printf("是否继续修改? (y/n) :");
__fpurge(stdin);
c = getchar();

}while( c == 'y' );
}

int main()
{
for( ; ; )
{
int temp = 0;
clear();
interface();                                    //调用interface函数,输出主界面
__fpurge(stdin);
scanf("%d",&temp);

switch(temp)                                    //switch语句选择功能
{
case 1:{
add();
break;
}

case 2:{
list();
printf("按enter返回主界面!\n");
__fpurge(stdin);
getchar();                       //暂停界面,有输入才退出本次选择语句
break;

a63c
}

case 3:{
delete();
break;
}

case 4:{
seek();
printf("按enter返回主界面!\n");
__fpurge(stdin);
getchar();
break;
}

case 5:{
revise();
break;
}

case 6:exit(0);

default:{
printf("输入错误!");
printf("按enter返回主界面!\n");
__fpurge(stdin);
getchar();
break;
}
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 通讯录