弱水3001 2022-11-02 22:19 采纳率: 100%
浏览 118
已结题

结构体-记账系统V1.0

img


备注:系统要求使用结构体存储记账信息。ID由5位数字组成。编程实现系统功能。

  • 写回答

2条回答 默认 最新

  • 关注

    记账系统:根据题目字段定义结构体,用switch语句执行相应的操作即可,运行结果:

    img

    img

    img

    img

    img

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //定义结构体
    typedef struct _stuser
    {
        int id;  //用户ID
        char name[12]; //用户名
        int income; //收入
        int cost; //支出
    }StUser;
    
    
    //输入数据
    void input(StUser a[], int n)
    {
        int i;
        for (i = 0; i < n; i++)
        {
            printf("请输入用户%d的用户ID、用户名、收入和支出:", i + 1);
            scanf("%d %s %d %d", &a[i].id, a[i].name, &a[i].income, &a[i].cost);
        }
    }
    
    //根据用户名字典序逆序排列后输出
    void sort(StUser a[], int n)
    {
        int i, j;
        StUser t;
        for (i = 0; i < n - 1; i++)
        {
            for (j = 0; j < n - 1 - i; j++)
            {
                if (strcmp(a[j].name, a[j + 1].name) < 0)
                {
                    t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
        }
        //输出
        printf("根据用户名字典序逆序排列后:\n");
        for (i = 0; i < n; i++)
            printf("%5d %10s %8d %8d\n", a[i].id, a[i].name, a[i].income, a[i].cost);
    }
    
    //查找
    void search(StUser a[], int n)
    {
        char name[12];
        int i = 0, flag = 0;
        printf("请输入需要查找的用户名:");
        scanf("%s", name);
        for (i = 0; i < n; i++)
        {
            if (strcmp(a[i].name, name) == 0)
            {
                flag = 1;
                printf("%5d %10s %8d %8d\n", a[i].id, a[i].name, a[i].income, a[i].cost);
            }
    
        }
        if (flag == 0)
            printf("查无此人\n");
    }
    //计算人均收入和支出
    double calculate(StUser a[], int n)
    {
        double incoume = 0, cost = 0;
        int i;
        for (i = 0; i < n; i++)
        {
            incoume += a[i].income;
            cost += a[i].cost;
        }
        incoume /= n;
        cost /= n;
        printf("人均收入:%.2f,人均支出:%.2f\n", incoume, cost); //保留两位小数
        return cost; //返回平均支出
    }
    
    //显示所有支出大于平均支出的账户
    void showBig(StUser a[], int n, double cost)
    {
        int i = 0;
        printf("大于平均支出的用户记账信息:\n");
        for (i = 0; i < n; i++)
        {
            if (a[i].cost > cost)
                printf("%5d %10s %8d %8d\n", a[i].id, a[i].name, a[i].income, a[i].cost);
        }
    }
    
    //输出系统中的所有记账信息
    void showAll(StUser a[], int n)
    {
        int i = 0;
        printf("系统中的所有记账信息:\n");
        for (i = 0; i < n; i++)
        {
            printf("%5d %10s %8d %8d\n", a[i].id, a[i].name, a[i].income, a[i].cost);
        }
    }
    
    
    int main()
    {
        int flag = 1;
        StUser a[10];
        int n = 0; //人数
        double avecost = 0;
        int choise;
        while (flag)
        {
            system("cls"); //清屏
            printf("1.Input record\n");
            printf("2.Sort and list records in reverse order by user name\n");
            printf("3.Search records by user name\n");
            printf("4.Calculate and list per capita income and expenses\n");
            printf("5.List records which have more expenses than per capita expenses\n");
            printf("6.List all records\n");
            printf("0.Exit\n");
            printf("Please enter you choise:");
            scanf("%d", &choise);
            switch (choise)
            {
            case 1:
                printf("请输入用户数量:");
                scanf("%d", &n);
                input(a, n);
                break;
            case 2:
                sort(a, n);
                break;
            case 3:
                search(a, n);
                break;
            case 4:
                avecost = calculate(a, n);
                break;
            case 5:
                if (avecost == 0)
                    printf("请先计算平均支出\n");
                else
                    showBig(a,n,avecost);
                break;
            case 6:
                showAll(a, n);
                break;
            case 0:
                flag = 0;
                break;
            }
            if(flag)
                system("pause");
        }
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月12日
  • 已采纳回答 11月4日
  • 创建了问题 11月2日

悬赏问题

  • ¥15 逐月累计,月份不连续,补齐月份
  • ¥15 应用简单的Python代码完成一个学生成绩管理系统
  • ¥15 用matlab求微分方程初值问题
  • ¥15 vscode下编写第三方库opencv与pcl代码时没有代码提示
  • ¥15 能够跑通不报错,如何解决?(标签-matlab)
  • ¥15 MOS在RDS较大,频率高时开关波形异常
  • ¥15 SCENIC分析报错求解答
  • ¥15 ceph初始化mon不成功 下图不报错 这个是什么元
  • ¥15 数学建模数学建模少ai
  • ¥35 这个等效电路图是什么意思?(答疑)(有没有不是chat的,我就是在chat搜不到才来问的,chat还开了VIP)(可以追加酬金)