C语言:通讯录管理系统

/*
软件名称:
作者:宋琳浩
版本:1.0
*/

// 序号排序  


#include
#include //调用了system("cls")清屏和exit函数
#include
#include//输入输出头文件  包含getch putch等不回显函数

FILE *fp;//文件指针
int n=0;
struct ADDRESS
{
    char name[20];//姓名
    char number[20];//号码
    char danwei[30];//工作单位
    char address[40];//住址
}t[50];


//创建通讯录
void create()
{
    void menu_select();
    system("color 2e");
    if((fp=fopen("通讯录.txt","r"))==NULL)
    {
        printf("--------------无通讯录----------------\n\n");
        printf("************正在创建,请稍后**********\n\n");
        fp=fopen("通讯录.txt","w");
        printf("------------按任意键继续--------------\n");
        getch();
        system("cls");
        printf("*******************创建成功!***************\n\n");
        printf("--------------通讯录管理系统:---------------\n\n");
        printf("         □              \n");
        printf("    □□□□□□□□□□□     \n");
        printf("       □ □ □        \n");
        printf("      □  □  □       \n");
        printf("    □□   □   □□     \n");
        printf("      □□□□□□        \n");
        printf("           □        \n");
        printf("          □         \n");
        printf("    □□□□□□□□□□□     \n");
        printf("         □          \n");
        printf("          □          \n");
        printf("      □□□□              \n\n");
        printf("--------------按任意键进入主菜单------------\n\n");
        getch();
        system("cls"); 
        menu_select();
    }
    else
    {
        int i;
        for(i=0;i<50;i++)
        {
            if(fscanf(fp,"%s%s%s%s",t[i].name,t[i].number,t[i].danwei,t[i].address)==-1)
            {
                n=i;
                break;
            }
        }   
        fclose(fp);
        printf("--------------通讯录管理系统:---------------\n\n");
        printf("         □              \n");
        printf("    □□□□□□□□□□□     \n");
        printf("       □ □ □        \n");
        printf("      □  □  □       \n");
        printf("    □□   □   □□     \n");
        printf("      □□□□□□        \n");
        printf("           □            \n");
        printf("          □             \n");
        printf("    □□□□□□□□□□□     \n");
        printf("         □          \n");
        printf("          □            \n");
        printf("      □□□□              \n\n");
        printf("--------------按任意键进入主菜单------------\n\n");  
        getch();
        system("cls"); 
        menu_select();
    }
}



//输入记录
void get()
{
    void menu_select();
    printf("***************请输入联系人信息***************\n");
    loop:
    {
        printf("输入姓名:\n");
        scanf("%s",t[n].name);
        if(t[n].name==" ")
            goto loop;
    }
    printf("输入号码:\n");
    scanf("%s",t[n].number);
    printf("输入工作单位:\n");
    scanf("%s",t[n].danwei);
    printf("输入住址:\n");
    scanf("%s",t[n].address);
    n++;
    printf("***************是否继续添加(Y/N):***************\n");
    if(getch()=='Y')
        get();
    system("cls"); 
    menu_select();
}

//显示全部记录
void list()
{
    void menu_select();
    int i;
    if(n!=0)
    {
        printf("---------------全部记录:----------------\n");
        for(i=0;iprintf("***************************************\n");
            printf("序号: %d\n",i);
            printf("姓名: %s\n",t[i].name);
            printf("号码: %s\n",t[i].number);
            printf("工作单位: %s\n",t[i].danwei);
            printf("住址: %s\n",t[i].address);
            printf("***************************************\n");
            printf("---------------------------------------\n\n");
        }
        printf("共%d个联系人\n\n",n);
        printf("**********按任意键返回主菜单...********\n");
        getch();
        system("cls"); 
        menu_select();
    }
    else
        printf("---------------无联系人----------------\n");
        printf("**********按任意键返回主菜单...********\n");
        printf("---------------------------------------\n");
        getch();
        system("cls");   //清屏
        menu_select();
}


//按姓名查找显示记录
void searchbyname()
{
    void menu_select();
    int flag=0;
    int i=0;
    char mingzi[20];
    printf("***************按姓名查找:***************\n");
    printf("***************请输入姓名:***************\n");
    scanf("%s",mingzi);
    for(i=0;iif(strcmp(t[i].name,mingzi)==0)
        {
            printf("***************联系人信息如下:***************\n");
            printf("序号: %d\n",i);
            printf("姓名: %s\n",t[i].name);
            printf("号码: %s\n",t[i].number);
            printf("工作单位: %s\n",t[i].danwei);
            printf("住址: %s\n",t[i].address);
            printf("*********************************************\n");
            flag++;
            getch();
            system("cls"); 
            menu_select();
        }
    }
    if(flag==0)
    {
        printf("***************输入信息有误,没有此联系人:*********\n\n\n");
        printf("***************按任意键返回主菜单...***************\n");
        getch();
        system("cls"); 
        menu_select();
    }
}

//按姓名排序
void sort()//用ASII码排序
{
    void menu_select();
    int i,j,k;
    ADDRESS temp;
    for(i=0;i1;i++)
    {
        k=i;
        for(j=i+1;jif(strcmp(t[k].name,t[j].name)>0)
                k=j;
            if(k!=i)
            {
                temp=t[i];
                t[i]=t[k];
                t[k]=temp;
            }
        }
    }
    printf("***************按姓名排序:***************\n");
    for(i=0;iprintf("---------------------------------------------\n");
        printf("序号: %d\n",i);
        printf("姓名: %s\n",t[i].name);
        printf("号码: %s\n",t[i].number);
        printf("工作单位: %s\n",t[i].danwei);
        printf("住址: %s\n",t[i].address);
        printf("---------------------------------------------\n");
    }
    printf("************按任意键返回主菜单...*********\n");
    getch();
    system("cls"); 
    menu_select();
}

//按序号查找显示记录
void searchbyindex()
{
    void menu_select();
    int i;
    printf("***************按序号查找:***************\n");
    scanf("%d",&i);
    if(iprintf("序号: %d\n",i);
        printf("姓名: %s\n",t[i].name);
        printf("号码: %s\n",t[i].number);
        printf("工作单位: %s\n",t[i].danwei);
        printf("住址: %s\n",t[i].address);
        printf("************按任意键返回主菜单...*********\n");
        getch();
        system("cls"); 
        menu_select();
    }
    else
        printf("***************没有这个纪录:***************\n");
        printf("************按任意键返回主菜单...**********\n");
        getch();
        system("cls"); 
        menu_select();
}

//总查找
void init()
{
    void searchbyname();
    void searchbyindex();
    void menu_select(); 
    char i;
    printf("---------------查找方式:----------------\n");
    printf("***************a.   姓名:***************\n");
    printf("***************b.   序号:***************\n");
    printf("***************c.   返回:***************\n");
    printf("----------------------------------------\n");
    i=getch();
    switch(i)
    {
        case 'a': searchbyname(); break;
        case 'b': searchbyindex();break;
        case 'c':
        {
            system("cls");
            menu_select(); 
            break;
        }
        default:    menu_select();
    }
}

//插入记录(按姓名)
void add()
{
    void menu_select();
    int i,j,k;
    ADDRESS temp;
    loop:
    {
        printf("输入姓名:\n");
        scanf("%s",t[n].name);
        if(t[n].name==" ")
            goto loop;
    }
    printf("输入号码:\n");
    scanf("%s",t[n].number);
    printf("输入工作单位:\n");
    scanf("%s",t[n].danwei);
    printf("输入住址:\n");
    scanf("%s",t[n].address);
    n++;

    for(i=0;i1;i++)
    {
        k=i;
        for(j=i+1;jif(strcmp(t[k].name,t[j].name)>0)
                k=j;
            if(k!=i)
            {
                temp=t[i];
                t[i]=t[k];
                t[k]=temp;
            }
        }
    }

    printf("******************已插入*********************\n\n");
    printf("************按任意键返回主菜单...************\n");
    getch();
    system("cls"); 
    menu_select();
}

//删除全部记录
void delall()
{
    void menu_select();
    printf("-------------确认删除?(Y/N)-------------\n");
    if(getch()=='Y')
    {
        fopen("通讯录.txt","w");//用w模式打开一个已有的文件 文件内容会被删除 以便程序以一个空文件开始操作
        n=0;
        printf("----------------已经删除-----------------\n");
        printf("************按任意键返回主菜单...**********\n");
        getch();
        system("cls");
        menu_select();
    }
    else
        system("cls");
        menu_select();;
}


//删除姓名
void delname()
{
    void menu_select();
    int flag=0;
    int i=0;
    char mingzi[20];
    printf("************请输入要删除的姓名:************\n");
    scanf("%s",mingzi);
    for(i=0;iif(strcmp(t[i].name,mingzi)==0)
        {
            flag++;
            printf("***************删除的信息如下:**************\n");
            printf("序号: %d\n",i);
            printf("姓名: %s\n",t[i].name);
            printf("号码: %s\n",t[i].number);
            printf("工作单位: %s\n",t[i].danwei);
            printf("住址: %s\n",t[i].address);
            printf("***************是否要删除?(Y/N)**************\n");
            printf("*********************************************\n");  
            if(getch()=='Y')
            {
                for(;i1;i++)
                {
                    t[i]=t[i+1];
                }
                n=n-1;
                printf("******************已删除*****************\n");
                getch();
                system("cls"); 
                menu_select();
            }
            if(getch()=='N')
            {
                getch();
                system("cls"); 
                menu_select();
            }
        }
    }
        if(flag==0)
        {
            printf("***************输入信息有误,没有此联系人:*********\n\n\n");
            printf("***************按任意键返回主菜单...***************\n");
            getch();
            system("cls"); 
            menu_select();
        }
}

//删除
void Delete()
{
    void menu_select();
    void delname();
    void delall();
    char i;
    printf("---------------删除方式:----------------\n");
    printf("*************a.按姓名删除:**************\n");
    printf("***************b.全部删除:**************\n");
    printf("***************c.   返回:***************\n");
    i=getch();
    switch(i)
    {
        case 'a': delname();     break;
        case 'b': delall();      break;
        case 'c':
        {
            system("cls");
            menu_select(); 
            break;
        }
        default:    menu_select();
    }
}

//退出
void exit()
{
    int i=0;
    fp=fopen("通讯录.txt","w");
    for(i=0;ifprintf(fp,"%s ",t[i].name);
        fprintf(fp,"%s ",t[i].number);
        fprintf(fp,"%s ",t[i].danwei);
        fprintf(fp,"%s ",t[i].address);
    }
    fclose(fp);
    exit(0);
}

//主菜单函数
void menu_select()
{
    void menu_select(); //主菜单函数
    void init();        //查找记录
    void create();     //创建记录
    void list(); //显示全部记录
    void searchbyname();//按姓名查找显示记录
    void delall();//删除记录 
    void add();//插入记录
    void get();//输入记录
    void searchbyindex();//按序号查找显示记录
    void sort();//按姓名排序 
    void exit();//退出并保存到文件
    char c;
    system("color 9e");
    printf("***************MENU*************** \n");
    printf("0. Enter record /*输入记录*/ \n");
    printf("1. list the file /*显示全部记录*/ \n");
    printf("2. search record on name /*查找记录*/ \n");
    printf("3. display record on order /*按序号查找显示*/ \n");
    printf("4. delete a record /*删除记录*/ \n");
    printf("5. add record /*插入记录*/ \n");
    printf("6. sort by name /*按姓名排序*/ \n");
    printf("7. quit /*退出并保存到文件中*/ \n");
    printf("********************************** \n");
    c=getch();
    switch(c)
    {
        case '0':   get();              break;
        case '1':   list();             break;
        case '2':   init();             break;
        case '3':   searchbyindex();    break;
        case '4':   Delete();           break;
        case '5':   add();              break;
        case '6':   sort();             break;
        case '7':   exit();             break;
        default:    menu_select();
    }
    return;
}


//主函数
void main()
{
    create();
    menu_select(); 
}

你可能感兴趣的:(C语言:通讯录管理系统)