通讯录--课程设计



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Person
{
    char name[50]; /*姓名*/
    char classes[15];/*班级*/
    int score; /*学号*/
    char sex[5]; /*性别*/
    int age; /*年龄*/
    char num[15]; /*号码*/
    char adds[20]; /*住址*/
} Info[50000],*q;


FILE* fin;


//登录函数,无输入输出,显示程序名称,作者,版本等信息
void logon()
{
    printf("\n\n\n\t\t\t 通讯录管理系统\n\n");
    printf("\t\t\t 版本号:1.0\n\n");
    printf("\n\n\n\n\n\t\t\t 2018年4月20日\n\n");
    printf("\t\t\t 计153-2 张峰\n");
    system("pause");
}
//功能选择目录,输入字符C,选择相应操作
int menu_select()
{
    char c;
    do
    {
        system("cls");
        printf("\t\t *****通讯录***** \n");
        printf("\t\t┌───────┐\n");
        printf("\t\t│ 1. 添加记录 │\n");
        printf("\t\t│ 2. 删除记录 │\n");
        printf("\t\t│ 3. 查询记录 │\n");
        printf("\t\t│ 0. 退出程序 │\n");
        printf("\t\t└───────┘\n");
        printf("\t\t请您选择(0-3):");
        c=getchar();
    }
    while(c<'0'||c>'4');
    return(c-'0');
}
//添加纪录,输入联系人信息,输出添加完成
void Input()
{
 if((fin=fopen("document.txt","a+"))==NULL)
    {
        printf("打开失败\n");
        exit(-1);
    }
 int cnt=0;
     q=&Info[cnt];
        printf("\t班级:");
        scanf("\t%s",q->classes);
        printf("\t姓名:");
        scanf("\t%s",q->name);
        printf("\t学号:");
        scanf("\t%d",&q->score);
        printf("\t性别:");
        scanf("\t%s",q->sex);
        printf("\t年龄:");
        scanf("\t%d",&q->age);
        printf("\t电话号码:");
        scanf("\t%s",q->num);
        printf("\t住址:");
        scanf("\t%s",q->adds);
      int i=0;
          fprintf(fin,"%s %s %d %s %d %s %s\n",Info[i].classes,
        Info[i].name,Info[i].score,Info[i].sex,
     Info[i].age,Info[i].num,Info[i].adds);


        printf("\t添加完成。\n");


        fclose(fin);


        system("pause");
}


//删除记录,输入要删除的人的姓名,输出已删除该联系人
void Delete()
{
    if((fin=fopen("document.txt","r"))==NULL)
    {
        printf("打开失败\n");
        exit(-1);
    }
    char  name[10];                                     //先查找 删除
    int cnt=0;
    while(fscanf(fin,"%s %s %d %s %d %s %s",Info[cnt].classes,
        Info[cnt].name,&Info[cnt].score,Info[cnt].sex,
     &Info[cnt].age,Info[cnt].num,Info[cnt].adds)!=EOF)cnt++;
    if (cnt == 0)
    {
        printf("通讯录空\n");
        return;
    }
fclose(fin);
if((fin=fopen("document.txt","w"))==NULL)
    {
        printf("打开失败\n");
        exit(-1);
    }
    printf("请输入想删除记录中的名字: \n");
    scanf("%s",name);
    int i=0,j;
    while ((strcmp(Info[i].name,name)!=0 )&& i<cnt)i++;




    if (strcmp(name,Info[i].name)==0)                    //删除信息
    {
       for(j=0;j<cnt;j++)
        if(i==j)continue;
       else fprintf(fin,"%s %s %d %s %d %s %s\n",Info[j].classes,
        Info[j].name,Info[j].score,Info[j].sex,
     Info[j].age,Info[j].num,Info[j].adds);
    }
    else
    {
        printf("不存在该好友!\n");
        return;
    }
    printf("信息已删除!\n");
fclose(fin);
}
//查询记录,输入要查询联系人的姓名,或姓氏首字母,输出该联系人信息
void Query()
{
    if((fin=fopen("document.txt","r"))==NULL)
    {
        printf("打开失败\n");
        exit(-1);
    }


    int m = 0;
    printf("\t\n请选择查询方式:\n");
    printf("\t┌──────┐\n");
    printf("\t│1------姓名 │\n");
    printf("\t│2------姓氏 │\n");
    printf("\t│3------返回 │\n");
    printf("\t└──────┘\n");
    printf("请选择:");
    scanf("%d",&m);
    while(m!=1&&m!=2)
    {
        printf("输入错误,请重新选择:");
        scanf("%d",&m);
    }
    if(m == 1)
    {
        char name[50];
        int cnt=0;
    while(fscanf(fin,"%s %s %d %s %d %s %s",Info[cnt].classes,
        Info[cnt].name,&Info[cnt].score,Info[cnt].sex,
     &Info[cnt].age,Info[cnt].num,Info[cnt].adds)!=EOF)cnt++;
        if(cnt==0) // 如果是一个空链表;
        {
            printf("通讯录空!\n");
            return;
        }
        printf("\t请输入想查询的姓名:");
        scanf("%s",name);
        int i=0;
        for(i=0;i<cnt;i++) //循环遍历链表中的节点,找出此时最小的节点
        {


            if(strcmp(Info[i].name,name)==0) //比较输入的姓名
            {
                printf("班级\t姓名\t学号\t性别\t年龄\t号码\t住址\n");
                printf("%s\t%s\t%d\t%s\t%d\t%s\t%s\n",Info[i].classes,Info[i].name,Info[i].score,Info[i].sex,Info[i].age,Info[i].num,Info[i].adds);
            break;
            }
        }
        if(i==cnt)  printf("\t不存在此联系人\n");
    }
    if(m==2)
    {
        char name[50];
        int cnt=0;
    while(fscanf(fin,"%s %s %d %s %d %s %s",Info[cnt].classes,
        Info[cnt].name,&Info[cnt].score,Info[cnt].sex,
     &Info[cnt].age,Info[cnt].num,Info[cnt].adds)!=EOF)cnt++;
        if(cnt==0) // 如果是一个空链表;
        {
            printf("通讯录空!\n");
            return;
        }
        printf("\t请输入想查询的姓名:");
        scanf("%s",name);
        int i=0;
        for(i=0;i<cnt;i++) //循环遍历链表中的节点,找出此时最小的节点
        {


            if(Info[i].name[0]==name[0]) //比较输入的姓名
            {
                printf("班级\t姓名\t学号\t性别\t年龄\t号码\t住址\n");
                printf("%s\t%s\t%d\t%s\t%d\t%s\t%s\n",Info[i].classes,Info[i].name,Info[i].score,Info[i].sex,Info[i].age,Info[i].num,Info[i].adds);
            break;
            }
        }
         if(i==cnt)  printf("\t不存在此联系人\n");
    }
    fclose(fin);
}




int main()
{


    logon();
    for(;;)
    {
        switch(menu_select())
        {
        case 1:
            printf("\n\t添加记录到通讯录\n");
            Input();
            break;
        case 2:
            printf("\n\t从通讯录中删除记录\n");
            Delete();
            printf("\t");
            system("pause");
            break;
        case 3:
            printf("\n\t在通讯录中查找记录\n");
            Query();
            printf("\t");
            system("pause");
            break;
        case 0:
            printf("\n\t\t谢谢使用,再见!\n");
            printf("\n\t\t");
            system("pause");
            exit(0);
        }
    }
    return 0;

}







猜你喜欢

转载自blog.csdn.net/weixin_40662115/article/details/80065896