数据结构课程设计——药店的药品销售统计系统(排序应用)

药店的药品销售统计系统(排序应用)

问题描述

设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号,单价,销售量或销售额做出排名。

实现提示

在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。

需求分析

  • 对药品单价的排序采用——冒泡排序
  • 对药品销售量排序采用——快速排序
  • 对药品销售额的排序用——堆排序
  • 对药品编号的排序采用——基数排序

品信息的元素类型定义

typedef struct node //药品信息的元素类型定义
{
char num[30]; //药品的编号
char name[50]; //药品名称
float price; //药品单价
int amount; //销售量
float sales; //销售额
}Elemtype; //定义结构体类型(名称)

存储药品信息的顺序表的定义
typedef struct //存储药品信息的顺序表的定义
{
Elemtype data[Maxsize]; //定义Elemtype类型的结构体数组,存储Maxsize种药的信息 (存放顺序表的元素)
int length; //药品种类数 (顺序表的实际长度)
}Sqlist; //顺序表类型 (名称)

算法设计

首先需要定义一个顺序表类型指针L,并为这个指针L的指向动态分配内存空间。接着从文件里读取数据并存储到指针L所指向的内存空间。然后再把这些刚刚读取到的原始数据进行排序处理并显示出来。

因为要用到文件操作,所以需要将文件和程序放到一起
原创文件如需转载请联系QQ:1903759212
文件内容(药品数据)
原创文件如需转载请联系QQ:1903759212

源代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Maxsize 100
typedef struct node            //药品信息的元素类型定义 
{
   
	char num[30];        //药品的编号
	char name[50];        //药品名称 
	float price;          //药品单价
	int amount;           //销售量
	float sales;           //销售额 
}Elemtype;                   //定义结构体类型(名称) 

typedef struct               //存储药品信息的顺序表的定义 
{
   
	Elemtype data[Maxsize];       //定义Elemtype类型的结构体数组,存储Maxsize种药的信息 (存放顺序表的元素) 
	int length;                   //药品种类数 (顺序表的实际长度) 
}Sqlist;                         //顺序表类型 (名称) 



/* 读取文件数据  */
void Read(Sqlist *L)              
{
   
	FILE *fp;
	int i = 0;
	if((fp = fopen("medicine.txt","r")) == NULL)
	{
   
		printf("Sorry! open file error!\n");
		exit(0);
	}
	else
	printf("文件读取成功\n");
	while(fscanf(fp, "%s %s %f %d %f", &L->data[i].num, &L->data[i].name, &L->data[i].price, &L->data[i].amount, &L->data[i].sales) != EOF)
	{
   
		++i;
	}
	 
	L->length = i; 
	fclose(fp);
}



/* 打印数据  */
void print(Sqlist *L)             
{
   
	int i;
	printf("----------------------------------------------------------------------------------\n");
	printf("药品种类数:%d\n",L->length);
	printf("药品编号\t  药名\t\t    药品单价\t\t销售量\t\t销售额\n");
	for(i = 0; i < L->length
  • 43
    点赞
  • 261
    收藏
    觉得还不错? 一键收藏
  • 34
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值