//产品按金额排序,如果金额相等按编号排序,并得到总和
//1.定义1个结构体数组
//2.从键盘获取结构体数据,函数形参是指向结构体的指针,和产品个数,实参结构体数组和产品个数
//3.交换数据函数 char类型交换;
int类型交换
//4.排序 条件判断调用交换函数
//5.总金额 强制转换类型atoi();long型
atol();
//6.输出,函数形参是指向结构体的指针,和产品个数,实参结构体数组和产品个数
//7.输入名字查找所有同名产品
//学习了char int 结构体 等 数据类型的相关操作
#include stdio.h //括号自己加吧,只能这样写了
#include stdlib.h
#include string.h
#define N 5 //定义10个产品
//#define MIN(a,b) ((a)>(b)?(b):(a))
typedef struct{
int num; //产品编号
char name[20]; //产品名称
char money[10]; //产品金额
}*Pg,Gd;
void write_data(Pg goods, int n)
{
int i = 0;
printf("请输入%d个产品信息的编号、名称、金额:\n",n);
for (i = 0; i < n; i++)
{
printf("请输入第%d个产品信息的编号、名称、金额:\n",i);
scanf_s("%d %s %s",
&goods[i].num,&goods[i].name,20,&goods[i].money,10);//scanf_s必须字符长度
}
}
void data_out(Pg goods, int n)
{
int i = 0;
printf("%d个产品信息的编号、名称、金额分别是\n",n);
for (i = 0; i < n; i++)
printf("[ %d %s %s ]\n", goods[i].num, goods[i].name,
goods[i].money);
}
void swap(Pg goods_1, Pg goods_2)
{
Gd t;
t.num = goods_1->num; //t.num=(*goods_1).num
strcpy_s(t.name, goods_1->name);
strcpy_s(t.money, goods_1->money);
goods_1->num = goods_2->num;
strcpy_s(goods_1->name, goods_2->name);
strcpy_s(goods_1->money, goods_2->money);
goods_2->num = t.num;
strcpy_s(goods_2->name, t.name);
strcpy_s(goods_2->money, t.money);
}
void sortBy_Money(Pg goods,int n)
{
int i = 0, j = 0;
for (i = 0; i < N - 1; i++)
{
for (j = 0; j < N - i; j++)
if (strcmp(goods[j].money, goods[j + 1].money)>0)//char
类型比较大小判断
swap(&goods[j], &goods[j + 1]);
if (strcmp(goods[j].money , goods[j + 1].money)==0)
{
if (goods[j].num>goods[j + 1].num) //int类型比较大小判断
swap(&goods[j], &goods[j + 1]);
}
}
}
int sum_Money(Pg goods,int n)
{
int sum = 0;
int i = 0;
for (i = 0; i < n; i++)
sum = sum + atoi(goods[i].money);
//强制类型转换,字符串->整数;atol()长整形 long sum
return sum;
}
void find_Name(Pg goods, int n)
{
int i = 0;
int flog = 0;
char name[20] = "NULL";
printf("请输入你要查找的产品名:\n");
scanf_s("%s", &name, sizeof(name)*1);
for (i = 0; i < n; i++)
{
if (strcmp(name, goods[i].name) == 0)
{
flog = 1; //可以找同名的
printf("%d %s %s\n", goods[i].num, goods[i].name,
goods[i].money);
}
}
if (flog==0)
printf("你要找的产品名不存在\n");
}
int main(void)
{
Gd goods[N];
int sum = 0;
//char c[20];
//char b[20];
//printf("请输入姓名:\n");
write_data(goods,N);
data_out(goods, N);
sortBy_Money(goods, N);
sum=sum_Money(goods, N);
printf("******按金额大小排序后为******\n");
data_out(goods, N);
printf("总金额是:%d\n", sum);
find_Name(goods, N);
//scanf_s("%s",&b,20);//scanf_s参数必须跟字符串长度
//strcpy_s(c,b);
//printf("名字是:%s\n", c);
system("pause");
return 0;
}