2201_75909286 2022-12-17 09:46 采纳率: 20%
浏览 161
已结题

c语言个人通讯录管理程序

img


谁能帮我设计一下啊,明天上午就要用,用结构体数组跟文件设计,快来帮助我啊

  • 写回答

4条回答 默认 最新

  • qfl_sdu 2022-12-17 10:14
    关注

    根据你的要求写的。

    img

    img

    img

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct _student
    {
        char id[10]; //学号
        char name[20];//姓名
        char sex[4];//性别  男、女
        char major[20];//专业
        int cla; //班级
        int romeid;//宿舍号
        char addr[20];//籍贯
        char phone[12];//手机号
        char qq[10]; //qq
        char vx[18]; //vx
    }Student;
    
    const char* filename = "student.txt"; //数据文件
    
    //8.从文件读取结构体数据
    int initFromFile(Student stu[])
    {
        FILE* fp = 0;
        int n = 0;
        fp = fopen(filename, "r");
        if (fp == 0)
        {
            printf("文件读取失败\n");
            return 0;
        }
        while (!feof(fp))
        {
            if (fscanf(fp, "%s %s %s %s %d %d %s %s %s %s", stu[n].id,stu[n].name,stu[n].sex,stu[n].major,&stu[n].cla,&stu[n].romeid,stu[n].addr,stu[n].phone,stu[n].qq,stu[n].vx)==10)
                n++;
        }
        fclose(fp);
        return n;
    }
    
    //7.写入文件
    void write2file(Student stu[], int n)
    {
        int i = 0;
        FILE* fp = fopen(filename, "w");
        for (i = 0; i < n; i++)
            fprintf(fp, "%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx);
        fclose(fp);
        printf("数据写入文件完成!\n");
    }
    
    //1.添加联系人
    int add(Student stu[], int n)
    {
        int op = 1;
        while (op)
        {
            printf("请输入学号:"); scanf("%s", stu[n].id);
            printf("请输入姓名:"); scanf("%s", stu[n].name);
            printf("请输入性别:"); scanf("%s", stu[n].sex);
            printf("请输入专业:"); scanf("%s", stu[n].major);
            printf("请输入班级:"); scanf("%d", &stu[n].cla);
            printf("请输入宿舍号:"); scanf("%d", &stu[n].romeid);
            printf("请输入籍贯:"); scanf("%s", stu[n].addr);
            printf("请输入手机号:"); scanf("%s", stu[n].phone);
            printf("请输入QQ号:"); scanf("%s", stu[n].qq);
            printf("请输入微信号:"); scanf("%s", stu[n].vx);
            n++;
            printf("是否继续添加:(1.是 0.否)  ");
            scanf("%d", &op);
        }
        return n;
    }
    
    //2.查询
    void search(Student stu[], int n)
    {
        char tmp[20];
        int i;
        int flag = 0;
        printf("请输入姓名或者学号或者手机号或者微信号或者qq号:"); //根据其中的任何一个查询
        scanf("%s", tmp);
        for (i = 0; i < n; i++)
        {
            if (strcmp(stu[i].id, tmp) == 0 || strcmp(stu[i].name, tmp) == 0 || strcmp(stu[i].phone, tmp) == 0 || strcmp(stu[i].qq, tmp) == 0 || strcmp(stu[i].vx, tmp) == 0)
            {
                flag = 1;
                printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx);
            }
        }
        if (flag == 0)
            printf("查无此人\n");
        return ;
    }
    
    //3.删除联系人
    int del(Student stu[], int n)
    {
        char tmp[20];
        int i, j;
        int flag = 0;
        int op;
        printf("请输入学号或者手机号或者微信号或者qq号:"); //要求学号、手机号、微信号和QQ必须唯一
        scanf("%s", tmp);
        for (i = 0; i < n; i++)
        {
            if (strcmp(stu[i].id, tmp) == 0 || strcmp(stu[i].phone, tmp) == 0 || strcmp(stu[i].qq, tmp) == 0 || strcmp(stu[i].vx, tmp) == 0)
            {
                flag = 1;
                printf("查询到的人员信息为:\n");
                printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx);
                printf("是否确认删除:(1.是  0.否)  ");
                scanf("%d", &op);
                if (op == 1)
                {
                    for (j = i; j < n - 1; j++)
                        stu[j] = stu[j + 1];
                    n -= 1;
                    return n;
                }
                
            }
        }
        if (flag == 0)
            printf("查无此人\n");
        return n;
    }
    
    
    //4.修改联系人信息
    void mod(Student stu[], int n)
    {
        char tmp[20];
        int i, j;
        int flag = 0;
        int op;
        printf("请输入学号或者手机号或者微信号或者qq号:"); //要求学号、手机号、微信号和QQ必须唯一
        scanf("%s", tmp);
        for (i = 0; i < n; i++)
        {
            if (strcmp(stu[i].id, tmp) == 0 || strcmp(stu[i].phone, tmp) == 0 || strcmp(stu[i].qq, tmp) == 0 || strcmp(stu[i].vx, tmp) == 0)
            {
                flag = 1;
                printf("查询到的人员信息为:\n");
                printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx);
                printf("是否确认修改:(1.是  0.否)  ");
                scanf("%d", &op);
                if (op == 1)
                {
                    printf("请输入学号:"); scanf("%s", stu[i].id);
                    printf("请输入姓名:"); scanf("%s", stu[i].name);
                    printf("请输入性别:"); scanf("%s", stu[i].sex);
                    printf("请输入专业:"); scanf("%s", stu[i].major);
                    printf("请输入班级:"); scanf("%d", &stu[i].cla);
                    printf("请输入宿舍号:"); scanf("%d", &stu[i].romeid);
                    printf("请输入籍贯:"); scanf("%s", stu[i].addr);
                    printf("请输入手机号:"); scanf("%s", stu[i].phone);
                    printf("请输入QQ号:"); scanf("%s", stu[i].qq);
                    printf("请输入微信号:"); scanf("%s", stu[i].vx);
                    printf("修改成功\n");
                    return ;
                }
    
            }
        }
        if (flag == 0)
            printf("查无此人\n");
    }
    
    //5.输出列表
    void show(Student stu[], int n)
    {
        int i = 0;
        printf("联系人信息列表:\n");
        for(;i<n;i++)
            printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx);
    
    }
    
    //6.按学号排序
    void sortById(Student stu[], int n)
    {
        int i, j;
        Student t;
        for (i = 0; i < n - 1; i++)
        {
            for (j = 0; j < n - 1 - i; j++)
            {
                if (strcmp(stu[j].id, stu[j + 1].id) > 0) //根据学号从小到大排序
                {
                    t = stu[j];
                    stu[j] = stu[j+1];
                    stu[j + 1] = t;
                }
            }
        }
        printf("排序完成,排序后:\n");
        show(stu, n);
    }
    
    int main()
    {
        int op = 1;
        Student stu[100];
        int n = 0;
        n = initFromFile(stu); //初始化,将外存数据文件读入程序
        while (op != 7)
        {
            system("cls"); //清屏
            printf("------------------------------------------\n");
            printf("        个人通讯录管理系统                \n");
            printf("------------------------------------------\n");
            printf("   1.添加联系人\n");
            printf("   2.查询联系人\n");
            printf("   3.删除联系人\n");
            printf("   4.修改联系人信息\n");
            printf("   5.输出联系人列表\n");
            printf("   6.按学号排序\n");
            printf("   7.退出程序(将数据写入文件)\n");
            //printf("   8.初始化\n"); //程序启动后自动执行
            printf("------------------------------------------\n");
            printf("请选择:");
            scanf("%d", &op);
            switch (op)
            {
            case 1:n = add(stu, n); break;
            case 2:search(stu, n); break;
            case 3:n = del(stu, n); break;
            case 4:mod(stu, n); break;
            case 5:show(stu, n); break;
            case 6:sortById(stu, n); break;
            case 7:write2file(stu, n); break;
            }
            system("pause");
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月25日
  • 已采纳回答 12月17日
  • 创建了问题 12月17日

悬赏问题

  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题