【问题描述】
建立一个手机通讯录系统。手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上。存储在手机卡的联系人的信息只包含用户名和电话号码两项信息。存储在手机上的联系人的信息包括姓名、电话号码,QQ号码、籍贯。根据题目要求实现功能。
通讯录的增删改查
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
struct the_contact {
char name[20]; //姓名
char phone[12]; //电话
char mobilephone[12];//手机
char classify[20];//分类
char e_mail[20]; //电子邮件。
char QQ[12];//QQ
} person[100];
int personnum=0;//当前联系人数量
void welcomepage();//欢迎页
void Warning();//异常情况处理
int Choose();//功能选择
int show(int m);//显示联系人
int search();//查找联系人
int searchby(int m);//按不同方式查找联系人
int newcontacter();//新建联系人
int deleteby(int m);//按不同方式删除
int deleteperson();//删除联系人
int renew();//修改联系人
int renewperson(int m);//按不同方式修改联系人
int main() {
int choice=0; //选择键
while(1) {
welcomepage();//欢迎页每选择一次出现一次
//调用选择函数来获取选择数字
choice=Choose();//功能表选择
switch(choice)
{
case 1:
printf("已保存%d个联系人\n",newcontacter());
break;
case 2:
show(-1);
break;
case 3:
deleteperson();
break;
case 4:
renew();
break;
case 5:printf("已退出");
return 0;
default :
Warning();
break;
}
}
return 0;
}
void welcomepage() {
system("cls");//每次打开欢迎页清屏一次
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("*
*\n");
printf("*
*\n");
printf("************************************************************\n");
}
int Choose( ) {
int choice;
printf("请输入选择:\n");
if(!scanf("%d",&choice))
{//输入格式不正确时异常处理
fflush(stdin);
choice=0;
}
return choice;
}
int newcontacter() {
system("cls");
printf("\t\t\t****************
请添加用户信息 ****************\n");
printf("\t\t\t输入姓名:\n");
scanf("%s",person[personnum].name);
printf("\t\t\t输入电话号码:\n");
scanf("%s",person[personnum].phone);
printf("\t\t\t输入手机号码:\n");
scanf("%s",person[personnum].mobilephone);
printf("\t\t\t输入联系人分类:\n");
scanf("%s",person[personnum].classify);
printf("\t\t\t输入e-mail:\n");
scanf("%s",person[personnum].e_mail);
printf("\t\t\t输入QQ:\n");
scanf("%s",person[personnum].QQ);
personnum++;
printf("\t\t\t是否继续添加?(Y/N):\n");
getchar();
char c=getchar();
if(c=='y'||c=='Y')
newcontacter();
else
return
personnum;
}
int show(int m) {
system("cls");//清屏,进入show界面
if(m==-1) {//当前所有联系人信息
for(int
i=0; i<personnum; i++)
printf("姓名:%s\n手机:%s\n电话:%s\n分类:%s\n邮箱:%s\nQQ:%s\n",person[i].name,person[i].phone,person[i].mobilephone,person[i].classify,person[i].e_mail,person[i].QQ);
search();//显示完之后就开始查找
} else {//需要显示的某个联系人信息
printf("\t\t\t姓名:
%s\n",person[m].name);
printf("\t\t\t电话:
%s\n",person[m].phone);
printf("\t\t\t手机:
%s\n",person[m].mobilephone);
printf("\t\t\t关系分类: %s\n",person[m].classify);
printf("\t\t\te-mail:%s\n",person[m].e_mail);
printf("\t\t\tQQ:%s\n",person[m].QQ);
}
return 0;
}
int search() {//查找方式的选定
while(1) {
printf("查找:1.姓名 2.电话 3.退出\n");
int
choice=Choose();
int
c;
if(choice>=1&&choice<3)
searchby(choice-3);
else
{
if(choice!=3)
Warning();
else
break;
}
}
return 0;
}
int searchby(int m) {//每个方式先查找再用show()显示查找到的联系人信息
int mark=-1;
int i;
if(m==-2) {
printf("\t\t\t*****************
按姓名查找 *******************\n");
char
name[20];
printf("\t\t\t请输入姓名:\n");
scanf("%s",name);
for(i=0;
i<personnum; i++) {
if (strcmp(person[i].name,name)==0) {
mark=i;
break;
}
}
} else if(m==-1) {
printf("\t\t\t******************
按电话查找 ******************\n");
char
phone[13];
printf("\t\t\t请输入电话号码:\n");
scanf("%s",phone);
for(i=0;
i<personnum; i++) {
if (strcmp(person[i].phone,phone)==0) {
mark=i;
break;
}
}
} else {
printf("\t\t\t******************
查找下一个 ******************\n");
char
phone[13];
for(i=m+1;
i<personnum; i++) {
if (strcmp(person[i].phone,phone)==0) {
mark=i;
break;
}
}
}
if(mark!=-1) {//找到就显示联系人信息
printf("\t\t\t*************
以下是您查找的用户信息 ***********\n");
show(mark);
printf("\t\t\t************************************************\n");
printf("\t\t\t是否继续查找相同名字的用户信息:(y/n)\n");
getchar();
char
c=getchar();
if(c=='y'
||c=='Y')
searchby(mark);
else
return mark;
} else {//未找到返回上一层函数
printf("NOT
FOUND!\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return
mark;
}
return 0;
}
int deleteperson() {//按关键字删除联系人
int c;
while(1) {
printf("删除关键字选项:1.姓名 2.电话 3.退出\n");
int
choice=Choose();
int
c;
if(choice>=1&&choice<3)
deleteby(choice);
else
{
if(choice!=3)
Warning();
else
break;
}
}
}
int deleteby (int m) {//先找到,在显示要删除的联系人信息,再确定是否删除
if(personnum==0) {
printf("\t\t\t对不起,文件中无任何纪录\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return
0;
}
int i,j;
int deletemark=-1;
if(m==2) {
char
phone[20];
printf("\t\t\t请输入要删除用户电话号码:\n");
scanf("%s",phone);
for
(i=0; i<personnum; i++) {
if (!strcmp(person[i].phone,phone)) {
deletemark=i;
break;
}
}
} else {
char
name[20];
printf("\t\t\t请输入要删除用户姓名:\n");
scanf("%s",name);
for
(i=0; i<personnum; i++) {
if(!strcmp(person[i].name,name)) {
deletemark=i;
break;
}
}
}
if(deletemark!=-1) {//找到需要删除的联系人
printf("\t\t\t以下是您要删除的用户纪录:\n");
show(deletemark);
printf("\t\t\t是否删除?(y/n)\n");
char
c=getchar();
if
(c=='y'||c=='Y') {
for (j=deletemark; j<personnum; j++)
person[j]=person[j+1];
personnum--;
printf("\t\t\t删除成功\n");
printf("\t\t\t是否继续删除?(y/n)\n");
c=getchar();
if(c=='y'||c=='Y')
deleteperson();
else return 0;
}
else return 0;
} else {//没找到要删除的联系人
printf("此人不在通讯录中\n");
return
0;
};
}
int renew() {//修改联系人相关信息
while(1) {
printf("**********************************修改联系人*********************************\n\n\n");
printf("\t\t\t 1:修改姓名\n");
printf("\t\t\t 2:手机\n");
printf("\t\t\t 3:电话\n");
printf("\t\t\t 4:关系分类\n");
printf("\t\t\t 5:e-mail\n");
printf("\t\t\t 6:QQ\n");
printf("\t\t\t 7:退出修改\n");
int
choice=Choose();
if(choice>0&&choice<7)
renewperson(choice);//修改联系人部分信息
else
{
if(choice!=7)
Warning();
else
return 0;
}
}
}
int renewperson(int m) {
int c=searchby(1);
if(c!=-1) {
printf("此人信息\n");
show(c);
printf("请输入修改信息\n");
if(m==1)
scanf("%s",person[c].name);
else
if(m==2)
scanf("%s",person[c].mobilephone);
else
if(m==3)
scanf("%s",person[c].phone);
else
if(m==4)
scanf("%s",person[c].classify);
else
if(m==5)
scanf("%s",person[c].e_mail);
else
scanf("%s",person[c].QQ);
printf("修改成功\n");
} else printf("查无此人\n");
}
void Warning() {//输入格式错误判断提示
printf("对不起,你输出的选项不对\n");
printf("请重新输入");
getch();
}
运行结果:
【自己运行一下吧!!】