# 结构体-记账系统V1.0

• 写回答

#### 2条回答默认 最新

• 关注

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

代码：

``````#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");
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;
}

``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论 编辑记录

• 系统已结题 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）（可以追加酬金）