#include
#include
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");
}
不知为什么禁止重复输入%-s
PrintOptions();
while(flag)
{
printf("\tPlease enter your choice:");
scanf("%d",&option);
switch(option)
{
case 1:
printf("请输入用户人数:");
scanf("%d",&n);
users=ScanValues(n);
break;
case 2:
SortByName(n,users);
PrintValues(n,users);
break;
case 3:
printf("Please input the user name:");
scanf("%s",s);
int index=FindUserByName(s,n,users);
PrintValue(index,users);
break;
case 4:
CalcAndPrintAverageNumber(n,users);
break;
case 5:
PrintSpecificValues(n,users);
break;
case 6:
SortByID(n,users);
PrintValues(n,index);
break;
case 0:
flag=0;
printf("退出系统\n");
break;
default:
printf("请输入正确的选项\n");
break;
}
}
for(int i=0;i[i].name);
free(users);
return 0;
}
测试用例1:显示菜单项1.Input record2.Sort and list records in reverse order by user name3.Search records by user name4.Calculate and list per capita income and expenses5.List records which have more expenses than per capita expenses6.List all records0.Exit Please enter your choice:测试用例2:输入:选择菜单项1请输入用户人数:10001 zero 6000 150010023 Aef 10000 300020011 eric001 20000 1000020012 ffff 15000 030004 abc 8000 14000测试用例3:输入:选择菜单项2输出:ID UserName Income Expenses110001 zero 6000 150020012 ffff 15000 020011 eric001 20000 1000030004 abc 8000 1400010023 Aef 10000 3000测试用例4:输入:选择菜单项3输出:Please input the user name:输入:eric001输出:ID UserName Income Expenses20011 eric001 20000 10000测试用例5:输入:选择菜单项3输出:Please input the user name:输入:eric输出:Not Found测试用例6:输入:选择菜单项4输出:Per capita income: 11800Per capita expenses: 5700测试用例7:输入:选择菜单项5输出:ID UserName Income Expenses030004 abc 8000 1400020011 eric001 20000 10000
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N_NAME 10
typedef struct {
int id; // 用户id
char *name; // 用户名
int income; // 收入
int expenses; // 支出
} User;
// 菜单
void PrintOptions()
{
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");
}
// 录入信息
User *ScanValues(int n)
{
User *users = (User *)malloc(sizeof(User) * n);
for(int i=0; i<n; i++)
{
users[i].name = (char *)malloc(sizeof(char) * N_NAME);
}
for(int i=0; i<n; i++)
{
User *user = users + i;
scanf("%d %s %d %d", &(user->id), user->name, &(user->income), &(user->expenses));
}
return users;
}
// 按用户名字典序逆序排列
void SortByName(int n, User *users)
{
User *user = (User *)malloc(sizeof(User));
user->name = (char *)malloc(sizeof(char) * N_NAME);
for(int i=0; i<n; i++)
{
for(int j=0; j<n-i-1; j++)
{
if(strcmp(users[j].name, users[j + 1].name) < 0) // 字典序逆序
{
user->id = users[j].id;
strcpy(user->name, users[j].name);
user->income = users[j].income;
user->expenses = users[j].expenses;
users[j].id = users[j + 1].id;
strcpy(users[j].name, users[j + 1].name);
users[j].income = users[j + 1].income;
users[j].expenses = users[j + 1].expenses;
users[j + 1].id = user->id;
strcpy(users[j + 1].name, user->name);
users[j + 1].income = user->income;
users[j + 1].expenses = user->expenses;
}
}
}
free(user->name);
free(user);
}
// 打印输出所有记账信息
void PrintValues(int n, User *users)
{
printf("%-10s%-15s%-10s%-10s\n", "ID", "UserName", "Income", "Expenses");
for(int i=0; i<n; i++)
{
User *user = users + i;
printf("%-10d%-15s%-10d%-10d\n", user->id, user->name, user->income, user->expenses);
}
}
// 打印输出指定的记账信息
void PrintValue(int index, User *users)
{
if(index == -1)
{
printf("Not Found\n");
return;
}
User *user = users + index;
printf("%-10s%-15s%-10s%-10s\n", "ID", "UserName", "Income", "Expenses");
printf("%-10d%-15s%-10d%-10d\n", user->id, user->name, user->income, user->expenses);
}
// 按用户名查找记账信息列表索引
int FindUserByName(char *name, int n, User *users)
{
int index = -1;
for(int i=0; i<n; i++)
{
if(strcmp(users[i].name, name) == 0)
{
index = i;
break;
}
}
return index;
}
// 计算所有用户的平均收入
double CalcAverageIncome(int n, User *users)
{
int sum = 0;
for(int i=0; i<n; i++)
sum += users[i].income;
return (double)sum/n;
}
// 计算所有用户的平均支出
double CalcAverageExpenses(int n, User *users)
{
int sum = 0;
for(int i=0; i<n; i++)
sum += users[i].expenses;
return (double)sum/n;
}
// 计算并输出所有用户的平均收入和平均支出
void CalcAndPrintAverageNumber(int n, User *users)
{
double averageIncome = CalcAverageIncome(n, users);
double averageExpenses = CalcAverageExpenses(n, users);
printf("Average Income : %.2f\n", averageIncome);
printf("Average Expenses : %.2f\n", averageExpenses);
}
// 打印输出所有支出大于平均支出的记账信息
void PrintSpecificValues(int n, User *users)
{
double averageExpenses = CalcAverageExpenses(n, users);
printf("%-10s%-15s%-10s%-10s\n", "ID", "UserName", "Income", "Expenses");
for(int i=0; i<n; i++)
{
User *user = users + i;
if(user->expenses > averageExpenses)
printf("%-10d%-15s%-10d%-10d\n", user->id, user->name, user->income, user->expenses);
}
}
int main()
{
int option, n, index, flag=1;
char s[N_NAME];
User *users = NULL;
while(flag)
{
PrintOptions();
printf("\tPlease enter your choice:");
scanf("%d",&option);
switch(option)
{
case 1:
printf("请输入用户人数:");
scanf("%d",&n);
users = ScanValues(n);
break;
case 2:
SortByName(n, users);
PrintValues(n, users);
break;
case 3:
printf("Please input the user name:");
scanf("%s", s);
index = FindUserByName(s, n, users);
PrintValue(index, users);
break;
case 4:
CalcAndPrintAverageNumber(n, users);
break;
case 5:
PrintSpecificValues(n,users);
break;
case 6:
PrintValues(n, users);
break;
case 0:
flag=0;
printf("退出系统\n");
break;
default:
printf("请输入正确的选项\n");
break;
}
}
for(int i=0;i<n;i++)
free(users[i].name);
free(users);
return 0;
}
Oracle官方,亲测无问题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N_NAME 10
typedef struct {
int id; // 用户id
char *name; // 用户名
int income; // 收入
int expenses; // 支出
} User;
// 菜单
void PrintOptions()
{
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");
}
// 录入信息
User *ScanValues(int n)
{
User *users = (User *)malloc(sizeof(User) * n);
for(int i=0; i<n; i++)
{
users[i].name = (char *)malloc(sizeof(char) * N_NAME);
}
for(int i=0; i<n; i++)
{
User *user = users + i;
scanf("%d %s %d %d", &(user->id), user->name, &(user->income), &(user->expenses));
}
return users;
}
// 按用户名字典序逆序排列
void SortByName(int n, User *users)
{
User *user = (User *)malloc(sizeof(User));
user->name = (char *)malloc(sizeof(char) * N_NAME);
for(int i=0; i<n; i++)
{
for(int j=0; j<n-i-1; j++)
{
if(strcmp(users[j].name, users[j + 1].name) < 0) // 字典序逆序
{
user->id = users[j].id;
strcpy(user->name, users[j].name);
user->income = users[j].income;
user->expenses = users[j].expenses;
users[j].id = users[j + 1].id;
strcpy(users[j].name, users[j + 1].name);
users[j].income = users[j + 1].income;
users[j].expenses = users[j + 1].expenses;
users[j + 1].id = user->id;
strcpy(users[j + 1].name, user->name);
users[j + 1].income = user->income;
users[j + 1].expenses = user->expenses;
}
}
}
free(user->name);
free(user);
}
// 打印输出所有记账信息
void PrintValues(int n, User *users)
{
printf("%-10s%-15s%-10s%-10s\n", "ID", "UserName", "Income", "Expenses");
for(int i=0; i<n; i++)
{
User *user = users + i;
printf("%-10d%-15s%-10d%-10d\n", user->id, user->name, user->income, user->expenses);
}
}
// 打印输出指定的记账信息
void PrintValue(int index, User *users)
{
if(index == -1)
{
printf("Not Found\n");
return;
}
User *user = users + index;
printf("%-10s%-15s%-10s%-10s\n", "ID", "UserName", "Income", "Expenses");
printf("%-10d%-15s%-10d%-10d\n", user->id, user->name, user->income, user->expenses);
}
// 按用户名查找记账信息列表索引
int FindUserByName(char *name, int n, User *users)
{
int index = -1;
for(int i=0; i<n; i++)
{
if(strcmp(users[i].name, name) == 0)
{
index = i;
break;
}
}
return index;
}
// 计算所有用户的平均收入
double CalcAverageIncome(int n, User *users)
{
int sum = 0;
for(int i=0; i<n; i++)
sum += users[i].income;
return (double)sum/n;
}
// 计算所有用户的平均支出
double CalcAverageExpenses(int n, User *users)
{
int sum = 0;
for(int i=0; i<n; i++)
sum += users[i].expenses;
return (double)sum/n;
}
// 计算并输出所有用户的平均收入和平均支出
void CalcAndPrintAverageNumber(int n, User *users)
{
double averageIncome = CalcAverageIncome(n, users);
double averageExpenses = CalcAverageExpenses(n, users);
printf("Average Income : %.2f\n", averageIncome);
printf("Average Expenses : %.2f\n", averageExpenses);
}
// 打印输出所有支出大于平均支出的记账信息
void PrintSpecificValues(int n, User *users)
{
double averageExpenses = CalcAverageExpenses(n, users);
printf("%-10s%-15s%-10s%-10s\n", "ID", "UserName", "Income", "Expenses");
for(int i=0; i<n; i++)
{
User *user = users + i;
if(user->expenses > averageExpenses)
printf("%-10d%-15s%-10d%-10d\n", user->id, user->name, user->income, user->expenses);
}
}
int main()
{
int option, n, index, flag=1;
char s[N_NAME];
User *users = NULL;
while(flag)
{
PrintOptions();
printf("\tPlease enter your choice:");
scanf("%d",&option);
switch(option)
{
case 1:
printf("请输入用户人数:");
scanf("%d",&n);
users = ScanValues(n);
break;
case 2:
SortByName(n, users);
PrintValues(n, users);
break;
case 3:
printf("Please input the user name:");
scanf("%s", s);
index = FindUserByName(s, n, users);
PrintValue(index, users);
break;
case 4:
CalcAndPrintAverageNumber(n, users);
break;
case 5:
PrintSpecificValues(n,users);
break;
case 6:
PrintValues(n, users);
break;
case 0:
flag=0;
printf("退出系统\n");
break;
default:
printf("请输入正确的选项\n");
break;
}
}
for(int i=0;i<n;i++)
free(users[i].name);
free(users);
return 0;
}
这是一个同类型的代码参考,期望对你完善功能程序有所帮助:https://blog.csdn.net/m0_62677705/article/details/121276181
楼上这代码写的666
博主参考下面链接
https://blog.csdn.net/m0_62677705/article/details/121276181