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

来源:互联网 发布:php编程培训班 编辑:程序博客网 时间:2024/04/27 16:27
/************************************************************版权所有  (C)2015. ChengAng**文件名称:   zupu.cpp*文件标识:   无*内容摘要:   该项目的所有函数的实现*其他说明:   无*当前版本:   V1.0*作   者:    程昂*完成日期:   20151223**修改记录1:*修改日期:   20151223*版本号:     V1.0*修改人:     Cheng Ang*修改内容:********************************************************************/#include"zupu.h"/************************************************************功能描述:  主函数,负责项目的调度*输入参数:   无*输出参数:   无*返回值:     无*其他说明:   无*************************************************************/int main()     //主函数{    creat();    huanying();Save();    return 0;}/************************************************************功能描述:新建或者打开已经存在的文件,从中读取内容*输入参数:   无*输出参数:   无*返回值:     无*其他说明:   无*************************************************************/void creat()     //创建或读取文件{    int j;    long k;    fp=fopen("数据文件.txt","r t");    if(fp!=NULL)    {        for(i=0; i<=maxlen; i++ )        {            j=fgetc(fp);            if(j==EOF)                return;            k=i;            fseek(fp,k*sizeof(struct persons),0);            fread(&persons[i],sizeof(struct persons),1,fp);            s=(linklist)malloc(sizeof(listnode));            s->num=persons[i].num;            strcpy(s->name,persons[i].name);            strcpy(s->e_addr,persons[i].e_addr);            strcpy(s->tel_no,persons[i].tel_no);            s->sim_no=persons[i].sim_no;            strcpy(s->arch,persons[i].arch);            s->cishu=persons[i].cishu;            if(head==NULL)   //若为空,则建立新节点            {                head=s;                r=head;                head->next=NULL;            }            else         //否则,插入节点            {                r->next=s;                r=s;                r->next=NULL;            }        }        fclose(fp);    }    else                            //存入文件    {        fp=fopen("数据文件.txt","w");        i=1;    }}/************************************************************功能描述:   开始界面,提供选择操作的界面*输入参数:   选择键*输出参数:   无*返回值:     无*其他说明:   通过选择进入各种功能*************************************************************/void huanying()     //选择界面{    system("cls");   //清屏    do    {        xiaotu();        cout<<"                欢迎使用通讯录管理系统~~~~~~~"<<endl;        cout<<endl;        cout<<"+---------------------------------------------------------+"<<endl;        cout<<"+ 1.显示分组信息请按1           4.编辑信息请按4           +"<<endl;        cout<<"+ 2.删除信息请按2               5.拨号请按5               +"<<endl;        cout<<"+ 3.添加信息请按3               6.保存并退出请按6         +"<<endl;        cout<<"+ 7.查找信息请按7               8.输出全部信息请按8       +"<<endl;        cout<<"+---------------------------------------------------------+"<<endl;        cout<<endl;        cout<<"请输入您的的选择-----"<<endl;        cin>>ch;        switch(ch)           //选择操作        {        case '1':            system("cls");            Show();            break;        case '2':            system("cls");            Delete();            break;        case '3':            system("cls");            Input();            break;        case '4':            system("cls");            Alter();            break;        case '5':            system("cls");            Dial();            break;        case '6':            system("cls");            Save();            fclose(fp);            xiaotu();            exit(0);            break;        case '7':            system("cls");            find();            break;        case '8':            system("cls");            shuchu();            break;        default:            printf("\n\t*********************************\n");            printf("\n\t 请输入 1-8!!! \n");            printf("\n\t**********************************");            break;        }    }    while(1);}/************************************************************功能描述:   添加一个人的信息;插入到链表*输入参数:   联系人信息*输出参数:   无*返回值:     无*其他说明:   会有判断该人是否存在的功能;              若存在则有返回重新输入或者回到主界面的功能.*************************************************************/void Input()      //添加信息{    int choic;    s=(linklist)malloc(sizeof(listnode));    //建立头节点    cout<<"----------------------------------------------"<<endl;    printf("\n\n\t            请输入该用户的信息:\n");    cout<<"请输入姓名:        ";    cin>>s->name;    cout<<"请输入电话:        ";    cin>>s->tel_no;    cout<<"请设置快捷键(0-9): ";    cin>>s->sim_no;    cout<<"请输入地址:        ";    cin>>s->e_addr;    cout<<"请输分组名         ";    cin>>s->arch;    s->cishu=0;    cout<<"----------------------------------------------"<<endl;    if(head==NULL)        printf("\n\n");    else    {        p8=head;        while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)            p8=p8->next;        if(p8!=NULL)        {            cout<<"+----------------------------------------------+"<<endl;            cout<<"+------------您添加的用户已存在!---------------+"<<endl;            cout<<endl;            cout<<"+       重新输入请按1,返回菜单请按 3          +"<<endl;            cout<<endl;            cout<<"+----------------------------------------------+"<<endl;            cin>>choic;            if(choic==1)                Input();            if(choic==3)                huanying();            free(s);        }    }    if(head==NULL)    {        head=s;        head->next=NULL;    }    else    {        r->next=s;        r=s;        r->next=NULL;        //尾插法    }}/************************************************************功能描述:   查找一个联系人信息的功能*输入参数:   联系人姓名*输出参数:   该联系人信息*返回值:     无*其他说明:   无*************************************************************/void find()           //查找功能{    int choic;    system("cls");    printf("\n\n\t             请输入姓名:");    cin>>name1;    p10=head;    while(p10!=NULL&&strcmp(name1,p10->name)!=0)           //判断是否存在        p10=p10->next;    if(p10==NULL)    {        printf("\n\n\t             您选择的用户不存在!");        printf("\n\n\t2   请重新输入,请选择是重新输入(1)还是返回主菜单(2)");        cin>>choic;        if(choic==1)        {            find();        }        if(choic==2)        {            system("cls");            huanying();        }    }    else    {        cout<<"----------------------------------------------"<<endl;        cout<<"+   名  字:  "<<p10->name<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+   电  话:  "<<p10->tel_no<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+   快捷键:  "<<p10->sim_no<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+   分  组:  "<<p10->arch<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+  拨打次数: "<<p10->cishu<<endl;        cout<<"----------------------------------------------"<<endl;cout<<"**********************************************"<<endl;        cout<<endl;        cout<<"返回界面请按1"<<endl;        cout<<endl;        cout<<"----------------------------------------------"<<endl;        cin>>choic;        if(choic==1){system("cls");            huanying();}     }}/************************************************************功能描述:  编辑一个联系人的信息*输入参数:   联系人信息*输出参数:   无*返回值:     无*其他说明:   这里运用了input()的功能,同样有input()的判断功能*************************************************************/void Alter()         //编辑信息{    int choic;    cout<<"+----------------------------------------------+"<<endl;    cout<<endl;    printf("\n\n\t           请输入姓名:");    cin>>name1;    cout<<endl;    cout<<"+----------------------------------------------+"<<endl;    p3=head;    while(p3!=NULL&&strcmp(name1,p3->name)!=0)        p3=p3->next;    if(p3==NULL)    {        cout<<"+----------------------------------------------+"<<endl;        cout<<"+------------您选择的用户不存在!---------------+"<<endl;        cout<<endl;        cout<<"+       重新输入请按1,返回菜单请按 3          +"<<endl;        cout<<endl;        cout<<"+----------------------------------------------+"<<endl;        cin>>choic;        if(choic==1)            Alter();        if(choic==3)            huanying();    }    else    {        cout<<endl;        printf("\n\n\t           请输入该用户的新信息!");        cout<<"----------------------------------------------"<<endl;        printf("\n\n\t            请输入该用户的信息:\n");        cout<<"请输入姓名:";        cin>>s->name;        cout<<"请输入电话:";        cin>>s->tel_no;        cout<<"请设置快捷键(0-9):";        cin>>s->sim_no;        cout<<"请输入地址:";        cin>>s->e_addr;        cout<<"请输分组名";        cin>>s->arch;        s->cishu=0;        cout<<"----------------------------------------------"<<endl;        while(p9!=NULL&&strcmp(name1,p9->name)!=0&&strcmp(tel_no1,p9->tel_no)!=0)            p9=p9->next;        if(p9==NULL)        {            strcpy(p3->name,name1);            strcpy(p3->tel_no,tel_no1);            strcpy(p3->e_addr,e_addr1);            p3->sim_no=sim_no1;            strcpy(p3->arch,arch1);        }        else        {            cout<<"+----------------------------------------------+"<<endl;            cout<<"+------------您添加的用户已存在!---------------+"<<endl;            cout<<endl;            cout<<"+               返回菜单请按 1                 +"<<endl;            cout<<endl;            cout<<"+----------------------------------------------+"<<endl;            cin>>choic;            if(choic==1)            {                system("cls");                huanying();            }        }    }}/************************************************************功能描述:  进行对分组的选择功能*输入参数:  分组名字*输出参数:  无*返回值:    分组名字*其他说明:  无*************************************************************/void Show()      //选择想要查看的分组{    p2=head;    int choic;    char ch1[10];    if(p2==NULL)    //若为空    {        cout<<"----------------------------------------------"<<endl;        cout<<"                暂时没有分组                  "<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"                按1返回主菜单                 "<<endl;        cout<<"----------------------------------------------"<<endl;        cin>>choic;        if(choic==1)            huanying();    }    else    {        printf("                 你想要查看哪个分组?              \n");        while(p2!=NULL)                                       //通过不断指向下一个节点读取分组信息        {            cout<<"------------分组:    "<<p2->arch<<endl;            p2=p2->next;            continue;        }        cout<<"               请输入分组名字选择     "<<endl;        cout<<"                                      "<<endl;        cin>>ch1;        ShowA(ch1);    }}/************************************************************功能描述:输出一个分组的全部联系人的信息*输入参数:   选择键*输出参数:   无*返回值:     无*其他说明:   无*************************************************************/void ShowA(char aa[10])    //打印分组联系人信息{    int choic;    p11=head;    if(p11==NULL)    {        cout<<"----------------------------------------------"<<endl;        cout<<endl;        cout<<"该分组暂时没人,返回界面请按1,继续选择请按3"<<endl;        cout<<endl;        cout<<"----------------------------------------------"<<endl;        cin>>choic;        if(choic==1)            huanying();        if (choic==3)            Show();    }    else        while(p11!=NULL)        {            if((strcmp(p11->arch,aa))==0)            {                cout<<"----------------------------------------------"<<endl;                cout<<"+   名  字:  "<<p11->name<<endl;                cout<<"----------------------------------------------"<<endl;                cout<<"+   电  话:  "<<p11->tel_no<<endl;                cout<<"----------------------------------------------"<<endl;                cout<<"+   快捷键:  "<<p11->sim_no<<endl;                cout<<"----------------------------------------------"<<endl;                cout<<"+   分  组:  "<<p11->arch<<endl;                cout<<"----------------------------------------------"<<endl;                cout<<"+  拨打次数: "<<p11->cishu<<endl;                cout<<"----------------------------------------------"<<endl;cout<<"**********************************************"<<endl;            }            p11=p11->next;            continue;        }    cout<<endl;    cout<<"返回界面请按1,继续选择请按3"<<endl;    cout<<endl;    cout<<"----------------------------------------------"<<endl;    cin>>choic;    if(choic==1)    {        system("cls");        huanying();    }    if (choic==3)    {        system("cls");        Show();    }}/************************************************************功能描述:  删除一个联系人的信息*输入参数:  联系人姓名*输出参数:   无*返回值:     无*其他说明:   先进行查找是否有该联系人*************************************************************/void Delete()        //删除通讯人信息{    printf("\n\n\t          请输入要删除用户的姓名:");    cin>>name1;    p4=head;    if(strcmp(p4->name,name1)==0)    {        p4=p4->next;        head=p4;    }    else    {        while(strcmp(p4->next->name,name1)!=0)            p4=p4->next;        p5=p4->next;        p4->next=p5->next;        free(p5);    }}/************************************************************功能描述:   拨号动画的功能;该联系人拨号次数+1*输入参数:   选择键1、2;(1)输入姓名、(2)输入快捷键*输出参数:   联系人电话,拨号次数*返回值:     拨号次数*其他说明:   动画过程用了时间函数*************************************************************/void Dial()       //拨号功能{    int c,choic;    int a;    char b;cout<<"+----------------------------------------------+"<<endl;    cout<<"+     拨叫用户请按(1)    使用单键拨号请按(2)   +"<<endl;  //两种拨号方式    cout<<"+----------------------------------------------+"<<endl;     cin>>a;    p0=head;    if(a==1)    {        cout<<"                    请输入拨叫用户的姓名:";        cin>>name1;        while(strcmp(name1,p0->name)!=0&&p0!=NULL)            p0=p0->next;        if(p0==NULL)        {cout<<"+----------------------------------------------+"<<endl;            cout<<"                 您选择的用户不存在!";cout<<"+----------------------------------------------+"<<endl;            cout<<"+       重新输入请按(1)    返回主菜单(2)        +"<<endl;cout<<"+----------------------------------------------+"<<endl;            cin>>choic;            if(choic==1)            {system("cls");                Dial();            }            if(choic==2)            {system("cls");                huanying();            }        }        else        {            cout<<endl;            cout<<"                                               "<<endl;            cout<<"        loding------                           "<<endl;            for(int j=0; j<20; j++)        //运用时间函数,实现拨号界面            {                Sleep(100);                cout<<"■";            }            cout<<"                                               "<<endl;            cout<<"                                               "<<endl;            Sleep(500);            cout<<endl;            cout<<p0->tel_no<<endl;            p0->cishu=p0->cishu+1;            cout<<"+----------------------------------------------+"<<endl;            cout<<"拨打次数:    "<<p0->cishu<<endl;            cout<<"+----------------------------------------------+"<<endl;            cout<<endl;        }    }    else    {        cout<<"请输入单键号码:";        cin>>b;        while(p0!=NULL&&b!=p0->sim_no)                   //遍历链表比较查询            p0=p0->next;        if(p0==NULL)        {            cout<<"您输入的单键号码不存在!";cout<<"+----------------------------------------------+"<<endl;            cout<<"+      重新输入请按(1)    返回主菜单(2)        +"<<endl;cout<<"+----------------------------------------------+"<<endl;            cin>>choic;            if(choic==1)            {                find();            }            if(choic==2)            {                system("cls");                huanying();            }        }        else        {            cout<<endl;            cout<<"                                               "<<endl;            cout<<"        loding------                                        "<<endl;            for(int j=0; j<20; j++)            {                Sleep(100);                cout<<"■";            }            cout<<"                                               "<<endl;            cout<<"                                               "<<endl;            Sleep(500);            cout<<p0->name<<endl;            cout<<p0->tel_no;            p0->cishu=p0->cishu+1;            cout<<"+----------------------------------------------+"<<endl;            cout<<"拨打次数:    "<<p0->cishu<<endl;            cout<<"+----------------------------------------------+"<<endl;            cout<<endl;        }    }}/************************************************************功能描述:   输出全部联系人的信息*输入参数:   无*输出参数:   信息*返回值:     无*其他说明:   无*************************************************************/void shuchu()         //输出全部信息{    int choic;    p10=head;    while(p10!=NULL)    {        cout<<"----------------------------------------------"<<endl;        cout<<"+   名  字:  "<<p10->name<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+   电  话:  "<<p10->tel_no<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+   快捷键:  "<<p10->sim_no<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+   分  组:  "<<p10->arch<<endl;        cout<<"----------------------------------------------"<<endl;        cout<<"+  拨打次数: "<<p10->cishu<<endl;        cout<<"----------------------------------------------"<<endl;        p10=p10->next;                              //遍历输出信息        continue;    }    cout<<endl;    cout<<"返回界面请按1,继续选择请按3"<<endl;    cout<<endl;    cout<<"----------------------------------------------"<<endl;    cin>>choic;    if(choic==1)        huanying();    if (choic==3)        Show();}/************************************************************功能描述:输出兔子图案*输入参数:   无*输出参数:   无*返回值:     无*其他说明:   无*************************************************************/void xiaotu()          //兔子图案{    cout<<endl;    cout<<"                       ┏━┓ ┏━┓"<<endl;    cout<<"                       ★│┃  ┃│┃"<<endl;    cout<<"                       ┃│┗灬┛│┃"<<endl;    cout<<"                       ┃     ┃"<<endl;    cout<<"                       ┃ ^   ^  ┃"<<endl;    cout<<"                          ﹌ ˇ ﹌   "<<endl;    cout<<"                       ┗○━━━○┛"<<endl;}/************************************************************功能描述:  将操作完成后的信息存储到文件*输入参数:  无*输出参数:   无*返回值:     无*其他说明:   方便下次运行时的调用*************************************************************/void Save()            //存入文件{    int j;    fp=fopen("数据文件.txt","w");    for(p2=head,j=0; p2!=NULL; j++ ,p2=p2->next)    {        strcpy(persons[j].name,p2->name);        strcpy(persons[j].tel_no,p2->tel_no);        persons[j].sim_no=p2->sim_no;        strcpy(persons[j].e_addr,p2->e_addr);        strcpy(persons[j].arch,p2->arch);        persons[j].cishu=p2->cishu;        fwrite(&persons[j],sizeof(struct persons),1,fp);    }}
<pre name="code" class="cpp">/************************************************************版权所有  (C)2015. ChengAng**文件名称:   zupu.cpp*文件标识:   无*内容摘要:   该文件用于对结构体以及各函数的定义*其他说明:   无*当前版本:   V1.0*作   者:    程昂*完成日期:   20151223**修改记录1:*修改日期:   20151223*版本号:     V1.0*修改人:     Cheng Ang*修改内容:********************************************************************/#include <iostream>#include<stdlib.h>#include<windows.h>#include<stdio.h>using namespace std;#define maxlen 100  //最多100个信息void find();     //查找功能void huanying(); //选择界面void creat();    //创建或打开文件void ShowA(char aa[10]);    //显示分组信息void Show();     //选择分组void Delete();   //删除功能void find();     //查找功能void Save();     //存入文件void Input();     //添加信息void xiaotu();    //兔子图案void shuchu();    //输出全部信息void Alter();     //编辑信息void Dial();      //拨号功能//存放通讯表的结构体数组peisons[maxlen]的定义struct persons{    int num;    char name[20];    //姓名    char e_addr[20];  //地址    char tel_no[15];  //电话    char sim_no;      //快捷键    char arch[10];    //分组int cishu;        //拨打次数} persons[maxlen];//存放通讯表的链表的节点类型 listnode 的定义typedef struct lnode{    int num;    char name[20];    //姓名    char e_addr[20];  //地址    char tel_no[15];  //电话    char sim_no;      //快捷键    char arch[10];    //分组int cishu;        //拨打次数    struct lnode *next;  //储存指向下一个人的指针} listnode, *linklist;linklist head=NULL,r=NULL;   //初始化链表listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9,*p10,*p11,*p12;  //定义指针//结构体外信息int i;char name1[10],ch;char tel_no1[15];char arch1[10];char sim_no1;char e_addr1[20];int  cishu_1=0;FILE *fp;  //定义文件指针


<img src="http://img.blog.csdn.net/20151225230006811?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="http://img.blog.csdn.net/20151225230053193?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-family: Arial, Helvetica, sans-serif;" alt="" />
<img src="http://img.blog.csdn.net/20151225230141170?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="http://img.blog.csdn.net/20151225230153784?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="http://img.blog.csdn.net/20151225230203081?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
                                             
0 0
原创粉丝点击