用java回答以下问题:设计一个药店的药品销售统计系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。 在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用多种排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本系统中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。
时间: 2024-02-24 20:55:42 浏览: 67
首先,我们需要定义一个药品类,包括药品编号、药名、药品单价、销出数量、销售额等属性。然后,我们需要定义一个顺序表类,用于存储药品信息记录,并实现按照药品编号、单价、销售量或销售额做出排名的方法。具体实现如下:
```
public class Drug {
private String drugId; // 药品编号
private String drugName; // 药名
private double price; // 药品单价
private int salesVolume; // 销出数量
private double salesAmount; // 销售额
// 构造方法
public Drug(String drugId, String drugName, double price, int salesVolume, double salesAmount) {
this.drugId = drugId;
this.drugName = drugName;
this.price = price;
this.salesVolume = salesVolume;
this.salesAmount = salesAmount;
}
// getter和setter方法
public String getDrugId() {
return drugId;
}
public void setDrugId(String drugId) {
this.drugId = drugId;
}
public String getDrugName() {
return drugName;
}
public void setDrugName(String drugName) {
this.drugName = drugName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getSalesVolume() {
return salesVolume;
}
public void setSalesVolume(int salesVolume) {
this.salesVolume = salesVolume;
}
public double getSalesAmount() {
return salesAmount;
}
public void setSalesAmount(double salesAmount) {
this.salesAmount = salesAmount;
}
}
public class SequenceList {
private Drug[] drugs; // 用数组来存储药品信息
private int size; // 数组的长度
// 构造方法
public SequenceList(int maxSize) {
drugs = new Drug[maxSize];
size = 0;
}
// 在数组的末尾添加一个药品
public void add(Drug drug) {
if (size == drugs.length) {
throw new IndexOutOfBoundsException("数组已满,不能再添加元素!");
}
drugs[size++] = drug;
}
// 按照药品编号排序
public void sortByDrugId() {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (drugs[j].getDrugId().compareTo(drugs[j + 1].getDrugId()) > 0) {
Drug temp = drugs[j];
drugs[j] = drugs[j + 1];
drugs[j + 1] = temp;
}
}
}
}
// 按照单价排序
public void sortByPrice() {
// 冒泡排序
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (drugs[j].getPrice() > drugs[j + 1].getPrice()) {
Drug temp = drugs[j];
drugs[j] = drugs[j + 1];
drugs[j + 1] = temp;
}
}
}
}
// 按照销售量排序
public void sortBySalesVolume() {
// 快速排序
quickSort(drugs, 0, size - 1, "salesVolume");
}
// 按照销售额排序
public void sortBySalesAmount() {
// 堆排序
for (int i = size / 2 - 1; i >= 0; i--) {
adjustHeap(drugs, i, size);
}
for (int i = size - 1; i >= 1; i--) {
Drug temp = drugs[0];
drugs[0] = drugs[i];
drugs[i] = temp;
adjustHeap(drugs, 0, i);
}
}
// 快速排序
private void quickSort(Drug[] drugs, int low, int high, String field) {
if (low < high) {
int pivotPos = partition(drugs, low, high, field);
quickSort(drugs, low, pivotPos - 1, field);
quickSort(drugs, pivotPos + 1, high, field);
}
}
private int partition(Drug[] drugs, int low, int high, String field) {
Drug pivot = drugs[low];
while (low < high) {
while (low < high && compare(drugs[high], pivot, field) >= 0) {
high--;
}
drugs[low] = drugs[high];
while (low < high && compare(drugs[low], pivot, field) <= 0) {
low++;
}
drugs[high] = drugs[low];
}
drugs[low] = pivot;
return low;
}
private int compare(Drug a, Drug b, String field) {
switch (field) {
case "salesVolume":
return a.getSalesVolume() - b.getSalesVolume();
case "salesAmount":
return (int) (a.getSalesAmount() - b.getSalesAmount());
default:
return 0;
}
}
// 堆排序
private void adjustHeap(Drug[] drugs, int i, int size) {
Drug temp = drugs[i];
for (int j = 2 * i + 1; j < size; j = 2 * j + 1) {
if (j + 1 < size && drugs[j].getSalesAmount() < drugs[j + 1].getSalesAmount()) {
j++;
}
if (drugs[j].getSalesAmount() > temp.getSalesAmount()) {
drugs[i] = drugs[j];
i = j;
} else {
break;
}
}
drugs[i] = temp;
}
}
```
以上是一个简单的药品销售统计系统的实现,其中包括药品类和顺序表类。对于不同的排序需求,我们采用了不同的排序方法,如冒泡排序、快速排序和堆排序。需要注意的是,这里只是一个简单的实现,实际情况可能更加复杂,需要根据具体需求进行调整和完善。
阅读全文