m0_74038245 2023-06-28 14:31 采纳率: 40%
浏览 82
已结题

用c语言写代码,并解释清楚每一步的意思

学生通讯录管理系统
问题描述
纸质的通讯录已经不能满足大家的要求,容易丢失、查找困难等问题是难克服的缺点。学“生通讯录管理系统”是为了帮助、同学或者其他一些需要使用系统的人员进行管理和分析的一种应用程序。
2.需求分析
(1)输入数据建立通讯录。
(2)查询通讯录中满足要求的信息。
(3)插入新的通讯录信息。
(4)删除不需要的通讯录信息。
(5)查看所有的通讯录信息。
使用数组实现线性表结构,每个通讯录条目作为数组元素

  • 写回答

6条回答 默认 最新

  • Minuw 2023-06-28 14:36
    关注

    img

    #include <stdio.h>
    #include <string.h>
     
    #define N 108
     
    typedef struct telephone
    {
        char name[25];
        char num[25];
        char tel[25];
    } TEL;
     
    void DisplayMenu(); //显示主菜单
    void save(TEL a[], int n);
    void CreateList(TEL a[], int n);      //1.创建通讯录
    void DisplayList(TEL a[], int n);     //2.显示通讯录
    void InquireListName(TEL a[], int n); //3.按姓名查询通讯录
    void InquireListNum(TEL a[], int n);  //4.按学号查询通讯录
    void ChangeListName(TEL a[], int n);  //5.按姓名修改通讯录
    void ChangeListNum(TEL a[], int n);   //6.按学号修改通讯录
    int DelListName(TEL a[], int n);      //7.按姓名删除通讯录
    int DelListNum(TEL a[], int n);       //8.按学号删除通讯录
    void UpSortListName(TEL a[], int n);  //9.姓名升序排序通讯录
    void DownSortListNum(TEL a[], int n); //10.学号逆序排序通讯录
    int AddList(TEL a[], int n);          //11.添加学生信息
     
    int main()
    {
        struct telephone a[N];
        int i, n;
        FILE *fp;
     
        if ((fp = fopen("stu.dat", "r")) != NULL) //如果文件stu.dat已存在
        { // 则把数据从文件加载到数组a(读入记录个数n和n个姓名、学号、电话号码)
            fscanf(fp, "%d", &n);
            for (i = 0; i < n; i++)
                fscanf(fp, "%s%s%s", a[i].name, a[i].num, a[i].tel);
        }
        else
        {
            printf("第一次使用该系统,请输入n和n个姓名、学号、电话号码:\n");
            scanf("%d", &n);
            for (i = 0; i < n; i++)
                scanf("%s%s%s", a[i].name, a[i].num, a[i].tel);
            save(a, n);
        }
     
        DisplayMenu(); //显示主菜单
        while (1)
        {
            char select;
            char name[25];
            scanf(" %c", &select);
     
            if (select < 'a' || select > 'l')
            {
                printf("输入错误!\n");
                continue;
            }
            //if( select=='l' )
            //    break;
     
            switch (select)
            {
            case 'a':
                DisplayMenu(); //显示主菜单
                break;
            case 'b':
                DisplayList(a, n); //2.显示通讯录
                break;
            case 'c':
                InquireListName(a, n); //3.按姓名查询通讯录
                break;
            case 'd':
                InquireListNum(a, n); //4.按学号查询通讯录
                break;
            case 'e':
                ChangeListName(a, n); //5.按姓名修改通讯录
                break;
            case 'f':
                ChangeListNum(a, n); //6.按学号修改通讯录
                break;
            case 'g':
                if (DelListName(a, n)) //7.按姓名删除通讯录
                    n--;
                break;
            case 'h':
                if (DelListNum(a, n)) //8.按学号删除通讯录
                    n--;
                break;
            case 'i':
                UpSortListName(a, n); //9.姓名升序排序通讯录
                break;
            case 'j':
                DownSortListNum(a, n); //10.学号逆序排序通讯录
                break;
            case 'k':
                if (AddList(a, n)) //11.添加学生信息
                    n++;
                save(a, n);
                break;
            case 'l':
                exit(0); //12.退出系统
                break;
            }
        }
        return 0;
    }
     
    void save(TEL a[], int n)
    {
        int i;
        FILE *fp;
        fp = fopen("stu.dat", "w");
        fprintf(fp, "%d\n", n);
        for (i = 0; i < n; i++)
            fprintf(fp, "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
    }
     
    void DisplayMenu() //1.显示主菜单
    {
        printf("                      学生通讯录管理系统\n\n");
        printf("*************************系统功能菜单**************************\n");
        printf(" -------------------------------------------------------------\n");
        printf("   a.显示主菜单                       b.显示通讯录\n");
        printf("************************************************************\n");
        printf("   c.按姓名查询通讯录                 d.按学号查询通讯录\n");
        printf("************************************************************\n");
        printf("   e.按姓名修改通讯录                 f.按学号修改通讯录\n");
        printf("************************************************************\n");
        printf("   g.按姓名删除通讯录                 h.按学号删除通讯录\n");
        printf("************************************************************\n");
        printf("   i.姓名升序排序通讯录               j.学号逆序排序通讯录\n");
        printf("************************************************************\n");
        printf("   k.添加学生信息                     l.退出系统\n");
        printf(" -------------------------------------------------------------\n");
        printf("***************************************************************\n\n");
        printf("请选择您需要的操作:\n");
    }
     
    void DisplayList(TEL a[], int n) //2.显示通讯录
    {
        int i;
        printf("显示通讯录:\n");
        for (i = 0; i < n; i++)
            printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
        printf("\n");
    }
     
    void InquireListName(TEL a[], int n) //3.按姓名查询通讯录
    {
        int i, flag;
        char SearchName[25];
        printf("按姓名查询通讯录:\n");
        scanf("%s", SearchName);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchName, a[i].name) == 0)
            {
                printf("%s\t", a[i].name);
                printf("%s\t", a[i].num);
                printf("%s\n", a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            printf("未查询到该姓名信息!\n");
        }
        printf("\n");
    }
     
    void InquireListNum(TEL a[], int n) //4.按学号查询通讯录
    {
        int i, flag;
        char SearchID[25];
        printf("按学号查询通讯录:\n");
        scanf("%s", SearchID);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchID, a[i].num) == 0)
            {
                printf("%s\t", a[i].name);
                printf("%s\t", a[i].num);
                printf("%s\n", a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            printf("未查询到该学号信息!\n");
        }
        printf("\n");
    }
     
    void ChangeListName(TEL a[], int n) //5.按姓名修改通讯录
    {
        int i, flag;
        char SearchName[25];
        printf("按姓名修改通讯录:\n");
        scanf("%s", SearchName);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchName, a[i].name) == 0)
            {
                strcpy(a[i].name, SearchName);
                printf("请输入要修改的学号:");
                scanf("%s", a[i].num);
                printf("请输入要修改的电话号码:");
                scanf("%s", a[i].tel);
                //strcpy(p[i].name,ChangeName);
                //strcpy(p[i].name,ChangeTel);
                save(a, n);
                printf("信息修改完毕!\n");
                printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
            printf("未找到该姓名信息!");
        printf("\n");
    }
     
    void ChangeListNum(TEL a[], int n) //6.按学号修改通讯录
    {
        int i, flag;
        char SearchNum[25];
        printf("按学号修改通讯录:\n");
        scanf("%s", SearchNum);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(SearchNum, a[i].num) == 0)
            {
                strcpy(a[i].num, SearchNum);
                printf("请输入要修改的名字:");
                scanf("%s", a[i].name);
                printf("请输入要修改的电话号码:");
                scanf("%s", a[i].tel);
                //strcpy(p[i].name,ChangeName);
                //strcpy(p[i].name,ChangeTel);
                save(a, n);
                printf("信息修改完毕!\n");
                printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
                flag = 1;
                break;
            }
        }
        if (flag == 0)
            printf("未找到该学号信息!");
        printf("\n");
    }
     
    int DelListName(TEL a[], int n) //7.按姓名删除通讯录
    {
        int i, j;
        char SearchName[25];
        printf("按姓名删除通讯录:\n");
        scanf("%s", SearchName);
        for (i = 0; i < n; i++)
        {
            if (strcmp(a[i].name, SearchName) == 0)
                break;
        }
        if (i >= n)
        {
            printf("未查询到该姓名信息!按姓名删除通讯录失败!\n");
            return 0;
        }
        else
        {
            for (j = i; j < n - 1; j++)
                a[j] = a[j + 1];
            save(a, n);
            printf("按姓名删除通讯录成功!\n");
            return 1;
        }
    }
     
    int DelListNum(TEL a[], int n) //8.按学号删除通讯录
    {
        int i, j, flag;
        char SearchNum[25];
        printf("按学号删除通讯录:\n");
        scanf("%s", SearchNum);
        for (i = 0; i < n; i++)
        {
            if (strcmp(a[i].num, SearchNum) == 0)
                break;
        }
        if (i >= n)
        {
            printf("未查询到该学号信息!按学号删除通讯录失败!\n");
            return 0;
        }
        else
        {
            for (j = i; j < n - 1; j++)
                a[j] = a[j + 1];
            printf("按学号删除通讯录成功!\n");
            save(a, n);
            return 1;
        }
        printf("\n");
    }
     
    void UpSortListName(TEL a[], int n) //9.姓名升序排序通讯录
    {
        int i, j;
        TEL temp;
        for (i = 0; i < n; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if (strcmp(a[i].name, a[j].name) > 0)
                {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        printf("姓名升序排序通讯录:\n");
        for (i = 0; i < n; i++)
            printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
        printf("\n");
    }
     
    void DownSortListNum(TEL a[], int n) //10.学号逆序排序通讯录
    {
        int i, j;
        TEL temp;
        for (i = 0; i < n; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if (strcmp(a[i].num, a[j].num) > 0)
                {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        printf("学号逆序排序通讯录:\n");
        for (i = n - 1; i >= 0; i--)
            printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
        printf("\n");
    }
     
    int AddList(TEL a[], int n) //11.添加学生信息
    {
        int i, flag;
        char AddNum[25];
        printf("添加通讯录:\n");
        printf("请输入要添加的学号:");
        scanf("%s", AddNum);
        for (i = 0, flag = 0; i < n; i++)
        {
            if (strcmp(AddNum, a[i].num) == 0)
            {
                flag = 1;
                printf("学号重复!\n");
                return 0;
            }
        }
        if (flag == 0)
        {
            //n++;
            printf("学号不重复!请添加信息:\n");
            printf("请输入要添加的名字:");
            scanf("%s", a[n].name);
            strcpy(a[n].num, AddNum);
            printf("请输入要添加的电话号码:");
            scanf("%s", a[n].tel);
            //save(a,n);
            printf("添加信息成功!\n");
            return 1;
            //printf("%d",n);
        }
        printf("\n");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月28日