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

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

} 


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

已标记关键词 清除标记
相关推荐
数据结构 课程设计 void main() { list *head=NULL;//头指针初始化 FILE *fp;//定义文件指针 int m;//功能代号吗 do{ printf("\n #############################请选择################################\n"); printf(" # 1、信息输入 "); printf(" 2、显示信息 #\n"); printf(" # 3、查找姓名 "); printf(" 4、删除信息 #\n"); printf(" # 5、修改信息 "); printf(" 6、打开通讯录 #\n"); printf(" # 7、添加信息 "); printf(" 8、 保存 #\n"); printf(" # 9、清屏 "); printf(" 0、退出 #"); printf("\n ###################################################################\n"); printf(" 提示:信息输入和添加信息时最好存入字符,否则,在打开存储文件时,可能会出现乱码!\n"); printf("==输入要执行的功能代号:_"); scanf("%d",&m); switch(m) { case 1:enter(head);break; case 2:display(head); break; case 3:search(head); break; case 4:delete_name(head);break; case 5:change(head);break; case 6:load(head);break; case 7:insert(head);break; case 8:save(head,fp);printf("==保存成功==\n");break; case 9:system("cls");break; } } while(m!=0); } 2、信息输入: void enter(list *&head) { list *p0,*p1,*p2;//定义指针 int m;//作为判断是否继续新建的条件 FILE *fp; p0=(list *)malloc(LEN); //开辟一个新单元 p0->next=NULL;//结点指针域为空 head=p0;//第一个结点,即为头结点 printf("请输入信息建立通讯录:\n"); getchar(); scanfdata(p0);//输入数据 p2=p0; printf("是否继续按1输入,按0结束_"); scanf("%d",&m); while(m) { getchar(); p1=(list *)malloc(LEN); //开辟一个新单元 p1->next=NULL; p2->next=p1; scanfdata(p1);//输入数据 p2=p1; head->n = head->n+1;//表长 printf("是否继续按1输入,按0结束_"); scanf("%d",&m); } if(m==0) { save(head,fp);//把信息存到相应文件 } } 3、显示信息 void display(list *head) { list *p; //定义移动指针 int i; char *menu[]={"姓名","城市","电话", "QQ"}; p=head; printf("--------------------------------------------------------------------\n"); for(i=0;i<4;i++) printf("%-20s",menu[i]); printf("\n"); if (head!=NULL) while(p) { printf("%-20s",p->name); printf("%-20s",p->city); printf("%-20s",p->phone); printf("%-20s",p->qq); printf("\n"); p=p->next; } else printf("不好意思,列表为空\n"); printf("--------------------------------------------------------------------\n"); } 4、查找信息: void search(list *head ) { list *p1,*p2;//定义临时指针变量 char check_name[20]; //定义存储查找人的姓名 printf("请输入要查找的姓名\n"); scanf("%s",check_name); //输入要查找的人的姓名 if(head==NULL) { printf("\n不好意思,列表为空\n"); } p1=head; while(p1!=NULL&&strcmp(check_name,p1->name)!=0) //p1指向的不是所要找的结点,后面还有 { p2=p1; p1=p1->next; } //p1后移一个结点 if(p1!=NULL&&strcmp(check_name,p1->name)==0) //找到了用strcmp比较两个字符串 { printf(" 姓名: %s ",p1->name); printf(" 城市: %s ",p1->city); printf(" 电话: %s ",p1->phone); printf(" QQ : %s ",p1->qq); printf("\n"); }//输出结点数据 else printf("\n没有%s的通讯信息\n",check_name);//否则提示没有此人的通讯信息
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页