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语言利用结构体实现一个通讯录
- C语言通讯录(利用链表实现)
- C语言创建一个数组,利用函数调用实现数组的初始化,逆置和清零
- C语言学习历程(十五)结构体数组实现通讯录
- C语言中利用#define和#undef定义初始化数组,实现不同的初始化效果
- C语言实现通讯录(静态数组)
- C语言数组实现栈的基本操作,并利用O(1)求出栈中最小元素
- 利用C#中的参数数组实现C语言中的printf函数
- 如何利用C语言实现数组复制的功能
- C语言利用结构体实现一个通讯录
- C语言利用结构体数组实现学生成绩管理系统
- 利用可变数组实现简单通讯录操作
- C语言完美实现动态数组代码分享
- C语言实现数组的奇偶排序
- javascript中利用数组实现的循环队列代码
- c语言:利用指针变量,用函数实现将3个整数按从大到小的顺序输出
- 用c语言实现一个通讯录; 通讯录可以存储1000个人的信息,信息包括姓名、性别、年龄、电话、住址 提供方法: 1.添加联系人信息 2.删除指定联系人信息 3.查找指定联系人信息 4.修改指定联系&
- 基于sqlite3的利用数据库实现简单通讯录
- C语言实现对数组中的数据进行冒泡排序(从小到大)
- c语言实现通讯录