结构体-记账系统V1.0

img


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

记账系统:根据题目字段定义结构体,用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;
}



您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632