C语言超市信息管理系统,按照销售额排序的时候输出全是烫?

图片说明

#include
#include
#include
#include
#include

#define FILENAME "goodsfile" //定义商品信息文件名

/*-------定义商品信息结构体--------*/
typedef struct good_tag
{
int good_id; //商品编号
char name[50]; //商品名称
float good_inprice; //商品进价
float good_outprice; //商品售价
int good_innumber; //商品进货量
int good_outnumber; //商品销售量
float good_grossprofit; //商品毛利
int good_reserve; //商品库存
struct good_tag *next; //定义商品结构体指针
}GOODS;

GOODS *G_head; //定义一个商品信息的结构体指针

/*------------函数声明-----------*/
int menu(); //定义主菜单函数
int menu_check();//定义查看菜单函数
GOODS *alloc_a_goods_node(); //为load分配一个GOODS结构体大小的堆空间
GOODS *Add_Goods_Reserve(GOODS *G_head,GOODS *pload); //添加商品入库函数
int free_goods_node(GOODS *G_head); //释放商品链表堆空间
int Show_Goods_of_Reserve(GOODS *G_head); //显示所有商品信息
GOODS *Find_a_goods(GOODS *G_head, int num);//查找商品
GOODS *Delete_a_node(GOODS *G_head); //删除商品
GOODS *modify_a_goods(GOODS *G_head); //修改库存商品
void Show_Goods_of_Reserve_bysales(GOODS *G_head,int n); //显示商品按销售额排序
void Show_Goods_of_Reserve_bygrossprofit(GOODS *G_head);//显示商品按毛利排序

void Write_Goods_list_to_file(GOODS *G_head); //将导入的库存商品信息保存至文件中
GOODS *Read_file_Goods_to_list(GOODS *G_head); //将文件中商品的信息导出到链表
int count();

/*--------------主菜单-------------*/
void menu_of_fun()
{
int num;
GOODS *load = NULL;
GOODS *pload = NULL;
printf("----------------------------------/n");
printf("---欢迎进入超市商品信息管理系统---/n");
printf("----------------------------------/n");
switch (menu())
{
case 1:
Show_Goods_of_Reserve(G_head); //查看所有商品
break;
case 2:
printf("请输入要查找的商品的编号:\n"); //查找单个商品
scanf("%d", &num);
load = Find_a_goods(G_head,num);
if (load==NULL)
printf("没有找到商品!\n");
else
{
printf("编号 名称 进价 售价 进货量 销售量 毛利 库存\n");
printf("%d %10s %7.2f %7.2f %9d %9d %11.2f %7d\n", load->good_id, load->name, load->good_inprice,
load->good_outprice, load->good_innumber, load->good_outnumber, load->good_grossprofit, load->good_reserve);
}
break;
case 3:
pload = alloc_a_goods_node();
G_head = Add_Goods_Reserve(G_head,pload); //添加商品
break;
case 4:
G_head = Delete_a_node(G_head); //删除商品
break;
case 5:
G_head = modify_a_goods(G_head); //修改商品
break;
case 6:
Write_Goods_list_to_file(G_head);
free_goods_node(G_head); //在系统退出时释放库存商品链表堆空间
exit(0); //退出系统
}
}

int menu() //定义主菜单函数
{
int choice;
printf("-------------------------------\n");
printf(" 1:查看库存商品 \n");
printf(" 2:查找商品 \n");
printf(" 3:添加库存商品 \n");
printf(" 4:删除库存商品 \n");
printf(" 5:修改库存商品 \n");
printf(" 6:退出系统 \n");
printf("-------------------------------\n");
printf("请输入你的选择:\n");
while (1) //选择步骤
{
scanf("%d", &choice);
if (choice >= 1 && choice <= 6)
break;
else
printf("请重新输入!\n");
}
return choice;
}

int menu_check() //定义排序菜单函数
{
int choice;
printf("-------------------------------\n");
printf(" 1:按商品原顺序排序 \n");
printf(" 2:按销售额高到低排序 \n");
printf(" 3:按毛利高到低排序 \n");
printf("-------------------------------\n");
printf("请输入你的选择:\n");
while (1) //选择步骤
{
scanf("%d", &choice);
if (choice >= 1 && choice <= 3)
break;
else
printf("请重新输入!\n");
}
return choice;
}
/*--------------主函数-------------*/
int main()
{
G_head=Read_file_Goods_to_list(G_head);
while (1)
{
menu_of_fun();
}
system("pause"); //使程序在此处暂停
}

/*-------商品库存增删查改函数------*/
/*-----------商品库存增加----------*/
GOODS *alloc_a_goods_node()
{
GOODS *load = (GOODS *)malloc(sizeof(GOODS)); //为load分配一个GOODS结构体大小的堆空间
printf("请输入商品信息:\n");
printf("编号 名称 进价 售价 进货量 销售量 毛利 库存\n");
scanf("%d %s %f %f %d %d %f %d", &(load->good_id), load->name, &(load->good_inprice),
&(load->good_outprice), &(load->good_innumber), &(load->good_outnumber), &(load->good_grossprofit), &(load->good_reserve));
return load;
}

GOODS *Add_Goods_Reserve(GOODS *G_head,GOODS *pload) //头插法
{
GOODS *buff = G_head;
if (G_head == NULL)
{
G_head = pload;
pload->next = NULL;
}
else
{
pload->next = G_head;
G_head = pload;
}
return G_head;
}

/*----------释放堆空间--------*/
int free_goods_node(GOODS *G_head)
{
GOODS *pload = G_head;
GOODS *buff = NULL;
if (G_head == NULL)
return 0;
while (pload ->next != NULL)
{
buff = pload->next;
free(pload);
pload = buff;
}
free(pload);
return 1;
}

/*---------显示库存中所有商品信息----------*/
void Show_A_Goods(GOODS *pload)
{
printf("%d %10s %7.2f %7.2f %9d %9d %11.2f %7d\n", pload->good_id, pload->name, pload->good_inprice,
pload->good_outprice, pload->good_innumber, pload->good_outnumber, pload->good_grossprofit, pload->good_reserve);
}

void Show_Goods_of_Reserve_bysales(GOODS *G_head,int n) //显示商品按销售额排序
{
int i,j;
GOODS temp, good_tag[200], *pload;
for(i=0;i {
for(j=0;j {
if((good_tag[j].good_outnumber*good_tag[j].good_outprice)>(good_tag[j+1].good_outnumber*good_tag[j+1].good_outprice))
{
temp = good_tag[j+1];
good_tag[j+1] = good_tag[j];
good_tag[j] = temp;
}
}
}
printf("\n");
printf("依据商品销售额排序:\n\n");
pload = good_tag;
printf("%d %10s %7.2f %7.2f %9d %9d %11.2f %7d\n", pload->good_id, pload->name, pload->good_inprice,
pload->good_outprice, pload->good_innumber, pload->good_outnumber, pload->good_grossprofit, pload->good_reserve);
}

int Show_Goods_of_Reserve(GOODS *G_head)
{
GOODS *buff = G_head;
if (G_head == NULL) //链表为空直接退出函数
{
printf("库存中没有商品!\n");
return 0;
}
else
{
switch(menu_check())
{
case 1:
printf("编号 名称 进价 售价 进货量 销售量 毛利 库存\n");
while (buff != NULL)
{
Show_A_Goods(buff);
buff = buff->next;
}
break;
case 2:
Show_Goods_of_Reserve_bysales(G_head,count());
break;
case 3:
//Show_Goods_of_Reserve_bygrossprofit(G_head);
break;
}
}
return 0;
}

/*----------查找商品---------*/
GOODS *Find_a_goods(GOODS *G_head,int num)
{
GOODS *buff = G_head;
if (G_head == NULL)
{
return NULL;
}
else
{
while (buff != NULL)
{
if (buff->good_id == num)
{
return buff;
}
else
{
buff = buff->next;
}
}
return NULL;
}
}

/*-------删除库存中商品---------*/
GOODS *Delete_a_node(GOODS *G_head)
{
GOODS *buff = G_head;
GOODS *prebuff = G_head;
int num = 0;
printf("请输入要删除的商品编号:\n");
scanf("%d", &num);
while (buff != NULL)
{
if (buff->good_id != num)
{
prebuff = buff ;
buff = buff->next;
}
else
{
if (G_head->good_id == num)
{
G_head = G_head->next;
}
else
{
prebuff->next = buff->next;
}
free(buff);
break;
}
}
return G_head;
}

/*-------------修改库存商品--------------*/
GOODS *modify_a_goods(GOODS *G_head)
{
int num = 0;
GOODS *buff = G_head;
printf("请输入要修改的商品的编号:\n");
scanf("%d", &num);
while (buff != NULL)
{
if (buff->good_id == num)
{
printf("请重新输入这个商品的信息:\n");
scanf("%d %s %f %f %d %d %f %d", &buff->good_id, buff->name, &buff->good_inprice,
&buff->good_outprice, &buff->good_innumber, &buff->good_outnumber, &buff->good_grossprofit, &buff->good_reserve);
break;
}
else
{
buff = buff->next;
}
}
return G_head;
}

/*----------文件操作---将导入的库存商品信息保存至文件中----------------*/
void Write_Goods_list_to_file(GOODS *G_head)
{
GOODS *pload = G_head;
FILE *fp = fopen(FILENAME,"wb+");
assert(fp != NULL&&pload != NULL);
while (pload != NULL)
{
fwrite(pload, sizeof(GOODS), 1, fp);
pload = pload->next;
}
fclose(fp);
}

/*---------文件操作---将文件中商品的信息导入链表--------------------*/
GOODS *Read_file_Goods_to_list(GOODS *G_head)
{
GOODS *pload = malloc(sizeof(GOODS));
FILE *fp = fopen(FILENAME, "rb+");
if (fp == NULL) //如果文件中为空直接返回空
return NULL;
assert(fp != NULL&&pload != NULL);//保护
while (fread(pload, sizeof(GOODS), 1, fp)==1)//fread函数读成功后返回size个数
{
G_head = Add_Goods_Reserve(G_head, pload);//将读出的数据依次插入链表
pload = malloc(sizeof(GOODS));
}
free(pload);//释放最后多分配的空间
fclose(fp);//关闭文件
return G_head;
}

int count()
{
int i=0;
GOODS *nood=G_head;
while(nood)
{
i++;
nood=nood->next;
}
return i;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
C语言字符串的排序问题如何解决?
0
绝对值排序,采用C语言实现,对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开
1
LC977. 有序数组的平方 C语言
1
leetcode 977. 有序数组的平方 C语言
1
求助C语言的猜数字游戏
3
c语言 给国家的名称按字典顺序排序
1
寻求c语言制作的智能停车系统
2
编写一个程序c++,对输入的n(n<100)本书进行排序并输出?
0
用C语言编写一个书籍信息管理程序
0
字符串的排序输出编号的问题,怎么采用C语言程序的代码编写过程的思想方法?
0
按照绝对值从大到小排序后输出,这个排序的算法用 C 语言的程序的设计的思想方式怎么实现的?
0
按照字母排序输出困难度的问题,如何使用C语言程序的代码的编写的思想去完成这个问题的
0
使用C语言的编写的代码的实践的问题,如何分割得到的整数,依从小到大的顺序排序输出
0
按照价格对商品排序,每一行输出4个,怎么用C语言的程序代码编写的过程实现的呢?
0
按学号递增排序;当 C=2时,按姓名的非递减字典序排序,运用的是C语言怎么做,谢谢
1
绝对值从大到小的排序问题,怎么使用 C语言的程序编写的代码的方式有效实现的呢?具体的代码
2
c语言设备管理系统设计
0
C语言程序编写,简单的工资管理系统
0
每个单词的首字母的大写组合称为该词组的缩写,用C语言的代码输出这些缩写编写的程序代码的实现的方式