tongxunlu

来源:互联网 发布:去黑头收缩毛孔 知乎 编辑:程序博客网 时间:2024/06/03 13:52
/*
    通讯录管理程序
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 1000
//结构体的定义
struct record
{
    char name[20];
    char phone[20];
    char adress[40];


} contact[N];


int NO=0;             //用于记录联系人的当前个数
FILE *fp;


//函数声明
void mainmenu();         //主菜单
void newrecord();        //新建联系人函数
void browsemenu();    //浏览菜单
void searchmenu();     // 查找菜单
void searchname();     // 按名字查找
void searchphone();    //按电话号码查找
void modifymenu();     // 修改菜单
void deletemenu();      //删除菜单
void deleteall();           //删除所有联系人
void deletesingle();     //删除一个联系人
void deletename();    //删除联系人名字
void deletephone();   //删除联系人电话号码
void paixu();       //按名字从小到大排序
int loadfile();                 //建立文件
void savefile();               //保存文件


int main()
{
    printf("\n\t\t      欢迎使用通讯录管理系统");
    loadfile();
    while (1)
    {
        mainmenu();
    }
}


void mainmenu()
{
    char choice;
    system("cls");
    system("color f4");
    printf("\n\t\t***********************************************************");
    printf("\n                              通讯录管理系统主菜单     \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("\n\t\t***********************************************************");
    printf("\n\t\t你选择了:");
    choice=getchar();
    switch (choice)
    {
    case '1':
        newrecord();
        break;
    case '2':
        browsemenu();
        break;
    case '3':
        searchmenu();;
        break;
    case '4':
        modifymenu();
        break;
    case '5':
        deletemenu();
        break;
    case '6':
        printf("\n\n\t\t\t感谢你的使用!\n");
        exit(0);
    default:
        mainmenu();
    }
}


void newrecord()
{
    int number;
    printf("\n\t\t***********请输入你想添加的联系人的个数");
    scanf("%d",&number);
    printf("\n\t\t***************请依次输入%d个联系人信息 ****************\n",number);
    while(number--)
    {


        printf("\n\t\t输入姓名:");
        scanf("%s",contact[NO].name);
        printf("\n\t\t输入电话号码:");
        scanf("%s",contact[NO].phone);
        printf("\n\t\t输入家庭住址:");
        scanf("%s",contact[NO].adress);


        printf("\n\t\t***********************************************************");
        NO++;
        savefile();
    }
    return;
}


void browsemenu()
{
    int i;
    system("cls");
    system("color f4");
    paixu();
    if(NO!=0)
    {
        printf("\n\t\t*************** 以下为通讯录所有信息************\n");
        for (i=0; i<NO; i++)
        {
            printf("\n\t\t---------------------------------------------");
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress);


            printf("\n\t\t---------------------------------------------");


        }
        printf("\n\t\t*****************************************************");
    }
    else
        printf("\n\t\t+_+通讯录中无任何纪录");
    printf("\n\t\t按任意键返回主菜单:");
    getch();
    return;
}


void searchmenu()
{
    char choice;
    system("cls");
    system("color f8");
    printf("\n\t\t********************************************************");
    printf("\n\t\t            -----------------------------");
    printf("\n\t\t            |           查找菜单        |");
    printf("\n\t\t            |         1-按姓名查找      |");
    printf("\n\t\t            |         2-按电话查找      |");
    printf("\n\t\t            |         3-返回主菜单      |");
    printf("\n\t\t            |---------------------------|");
    printf("\n\t\t********************************************************");
    printf("\n\t\t你选择了:");
    choice=getche();
    switch (choice)
    {
    case '1':
        searchname();
        break;
    case '2':
        searchphone();
        break;
    case '3':
        mainmenu();
        break;
    }
}


void searchname()
{
    int flag=0;
    int i;
    int a=0;
    char name[20];
    printf("\n\t\t***************** 按姓名查找 *******************");
    printf("\n\t\t请输入姓名:");
    scanf("%s",name);
    for(i=a; i<NO; i++)
    {
        if (strcmp(contact[i].name,name)==0)
        {
            printf("\n\t\t************ 以下是您查找的联系人信息 **********");
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress);


            printf("\n\t\t************************************************");
            printf("\n\t\t按任意键返回主菜单:");
            flag==1;
            getch();
            return;


        }
    }
    if(flag==0)
    {
        printf("\n\t\t没有该姓名的联系人纪录");
        printf("\n\t\t按任意键返回主菜单");
        getch();
        return;
    }
}


void searchphone()
{
    int flag=0;
    int i;
    int a=0;
    char phone[20];
    printf("\n\t\t****************** 按电话查找 ******************");
    printf("\n\t\t请输入电话:");
    scanf("%s",phone);
    for(i=0; i<NO; i++)
    {
        if (strcmp(contact[i].phone,phone)==0)
        {
            printf("\n\t\t************* 以下是您查找的联系人信息 *********");
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress);


            printf("\n\t\t************************************************");
            printf("\n\t\t按任意键返回主菜单:");
            flag++;
            getch();
            return;
        }
    }
    if (flag==0)
    {
        printf("\n\t\t没有该联系人信息");
        printf("\n\t\t按任意键返回主菜单");
        getch();
        return;
    }
}


void modifymenu()
{
    int flag=0; //判断是否找到联系人的标志
    int i,k;
    int a=0;
    int t=0;
    char choice;
    char name[20];
    struct record modify;                   //新建一个联系人结构体
    system("cls");
    printf("\n\t\t请输入您要修改的姓名:");
    scanf("%s",name);
    for(i=a; i<NO; i++)
    {
        if (strcmp(contact[i].name,name)==0)
        {
            k=i;
            flag=1;
            modify=contact[i];              //保存当前要修改的联系人的信息
            printf("\n\t\t********** 以下是您将修改的联系人信息 **********");
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress);


            printf("\n\t\t是否继续?y/n");
            if(getchar()=='n')
                modifymenu();
            else
            {
                printf("\n\t\t选择您要修改的选项:");
                printf("\n\t\t\t(1).姓  名");
                printf("\n\t\t\t(2).联系电话");
                printf("\n\t\t\t(3).家庭住址");


                printf("\n\t\t\t(4).返   回");
                printf("\n\t\t你选择了: ");
                choice=getchar();
                switch(choice)
                {
                case '1':
                    printf("姓名:");
                    scanf("%s",contact[i].name);
                    break;
                case '2':
                    printf("联系电话:");
                    scanf("%s",contact[i].phone);
                    break;
                case '3':
                    printf("家庭住址:");
                    scanf("%s",contact[i].adress);
                    break;


                case '4':
                    mainmenu();
                    break;
                default:
                    modifymenu();
                }
                printf("\n\t\t您的修改结果为:");
                printf("\n\t\t姓    名: %s",contact[i].name);
                printf("\n\t\t联系电话: %s",contact[i].phone);
                printf("\n\t\t家庭住址: %s",contact[i].adress);


                printf("\n\t\t确认修改?y/n");
                if(getch()=='n')
                {
                    contact[i]=modify;                  //重新将原来的联系人信息拷贝到当前节点
                    printf("\n\t\t修改未保存!");
                }
                else printf("\n\t\t 修改成功!");
                savefile();                 //保存联系人信息
                flag=0;
                printf("\n\t\t是否继续修改?(y/n)");
                if (getch()=='y')
                    modifymenu();
            }
        }
    }
    if (flag==0)
    {
        printf("\n\t\t+_+没有该联系人的纪录");
        printf("\n\t\t是否继续修改?(y/n)");
        if (getch()=='y')
            modifymenu();
    }
    return;
}


void deletemenu()
{
    char choice;
    if(NO==0)
    {
        printf("\n\t\t对不起,文件中无任何纪录");
        printf("\n\t\t按任意键返回主菜单");
        getch();
        return;
    }
    system("cls");
    printf("\n\t\t******************* 删除菜单 *******************");
    printf("\n\t\t****************** 1-删除所有 ******************");
    printf("\n\t\t****************** 2-删除单个 ******************");
    printf("\n\t\t***************** 3-返回主菜单 *****************");
    printf("\n\t\t************************************************");
    printf("\n\t\t你选择了:");
    choice=getchar();
    switch(choice)
    {
    case '1':
        deleteall();
        break;
    case '2':
        deletesingle();
        break;
    case '3':
        mainmenu();
        break;
    default:
        deletemenu();
    }
}


void deleteall()
{
    printf("\n\t\t确认删除?(y/n)");
    if (getch()=='y')
    {
        if ((fp=fopen("C:\\contact.txt","a+"))==0)
        {
            printf("\n\t\t+_+不能打开文件,删除失败");
            mainmenu();


        }
        NO=0;
        savefile();
        printf("\n\t\t所有联系人纪录已删除,按任意键返回主菜单");
        getch();
        fclose(fp);
        return;
    }
    else
        return;
}


void deletesingle()
{
    char choice;
    printf("\n\t\t\t1-按姓名删除");
    printf("\n\t\t\t2-按号码删除");
    printf("\n\t\t\t3-返回删除菜单");
    printf("\n\t\t请选择:");
    choice=getch();
    switch (choice)
    {
    case '1':
        deletename();
        break;
    case '2':
        deletephone();
        break;
    case '3':
        deletemenu();
        break;
    }
}


void deletename()
{
    int i,j;
    int mark;         //用于判断是否找到联系人的标志
    char name[20];
    printf("\n\t\t请输入要删除联系人姓名:");
    scanf("%s",name);
    if(NO==0)
    {
        printf("\n\t\t对不起,文件中无任何纪录");
        printf("\n\t\t按任意键返回主菜单");
        getch();
        return;
    }
    for (i=0; i<NO; i++)
    {
        if (strcmp(contact[i].name,name)==0)
        {
            printf("\n\t\t以下是您要删除的联系人纪录:");
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress);


            printf("\n\t\t是否删除?(y/n)");
            if (getch()=='y')
            {
                for (j=i; j<NO-1; j++)
                    contact[j]=contact[j+1];  //用后一个联系人的信息将前一个联系人的信息覆盖
                NO--;
                mark++;
                printf("\n\t\t^_^删除成功");
                savefile();
                printf("\n\t\t是否继续删除?(y/n)");
                if (getch()=='y')
                    deletename();
                return;
            }
            else
                return;
        }
        continue;
    }
    if (mark==0)
    {
        printf("\n\t\t没有该联系人的纪录");
        printf("\n\t\t是否继续删除?(y/n)");
        if (getch()=='y')
            deletename();
        return;
    }
}


void deletephone()
{
    int i,j;
    int mark=0;                  //用于判断是否找到联系人的标志
    char phone[20];
    printf("\n\t\t请输入要删除联系电话:");
    scanf("%s",phone);
    if(NO==0)
    {
        printf("\n\t\t+_+对不起,文件中无任何纪录");
        printf("\n\t\t按任意键返回主菜单");
        getch();
        return;
    }
    for (i=0; i<NO; i++)
    {
        if (strcmp(contact[i].phone,phone)==0)
        {
            printf("\n\t\t以下是您要删除的联系人纪录:");
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress);


            printf("\n\t\t是否删除?(y/n)");
            if (getch()=='y')
            {
                for (j=i; j<NO-1; j++)
                    contact[j]=contact[j+1];
                NO--;
                mark++;
                printf("\n\t\t^_^删除成功");
                savefile();
                printf("\n\t\t是否继续删除?(y/n)");
                if (getch()=='y')
                    deletephone();
                return;
            }
            else
                return;
        }
        continue;
    }
    if (mark==0)
    {
        printf("\n\t\t+_+没有该联系人的纪录");
        printf("\n\t\t是否继续删除?(y/n)");
        if (getch()=='y')
            deletephone();
        return;
    }
}


int loadfile()
{


    FILE *fp;


    if ((fp=fopen("C:\\contact.txt","a+"))==0)
    {
        printf("\n\t\t\t\t建立失败");
        exit(0);
    }
    else
    {
        printf("\n\n\t\t\t   电话簿建立成功!");


    }




    while(!feof(fp) && fread(&contact[NO],sizeof(struct record),1,fp))
    {
        NO++;
    }


    printf("\n\t\t\t   按任意键进入主菜单");
    getch();
    return 0;
}


void paixu()
{
    int i,j;
    struct record temp;     //交换变量
    for(i=0;i<NO-1;i++)
        for(j=0;j<NO-i-1;j++)
        {
            if(strcmp(contact[j].name,contact[j+1].name)>0)
            {
                temp=contact[j];
                contact[j]=contact[j+1];
                contact[j+1]=temp;
            }
        }


}
void savefile()
{
    int i;
    if ((fp=fopen("C:\\contact.txt","w"))==0)
    {
        printf("\n\t\t+_+文件打开失败!\n");
    }
    for (i=0; i<NO; i++)
    {
        if (fwrite(&contact[i],sizeof(struct record),1,fp)!=1)
        {
            printf("\n\t\t   写入文件错误!\n");
        }
    }
    printf("\n\t\t   已成功保存至文件!\n");
    fclose(fp);
}



0 0