数据结构课程设计——通讯录管理系统

课程设计 专栏收录该内容
11 篇文章 0 订阅

【问题描述】
建立一个手机通讯录系统。手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上。存储在手机卡的联系人的信息只包含用户名和电话号码两项信息。存储在手机上的联系人的信息包括姓名、电话号码,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(); 

} 


运行结果:
【自己运行一下吧!!】

  • 9
    点赞
  • 1
    评论
  • 68
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值