每位同学独立设计一个药店的药品销售统计系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。在本系统中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。 用JAVA代码实现
时间: 2024-04-05 09:34:02 浏览: 10
以下是一个简单的药品销售统计系统的JAVA代码实现,包括药品类、销售记录类和主程序类:
```java
// 药品类
class Medicine {
private int id; // 编号
private String name; // 名称
private double price; // 单价
public Medicine(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
// 销售记录类
class SalesRecord {
private Medicine medicine;
private int quantity; // 销售量
public SalesRecord(Medicine medicine, int quantity) {
this.medicine = medicine;
this.quantity = quantity;
}
public Medicine getMedicine() {
return medicine;
}
public int getQuantity() {
return quantity;
}
public double getAmount() {
return medicine.getPrice() * quantity; // 销售额
}
}
// 主程序类
public class SalesSystem {
public static void main(String[] args) {
// 初始化药品和销售记录
Medicine[] medicines = {
new Medicine(1, "阿莫西林", 5.0),
new Medicine(2, "感冒灵", 10.0),
new Medicine(3, "板蓝根", 8.0)
};
SalesRecord[] salesRecords = {
new SalesRecord(medicines[0], 100),
new SalesRecord(medicines[1], 50),
new SalesRecord(medicines[2], 80)
};
// 按单价排序(冒泡排序法)
for (int i = 0; i < medicines.length - 1; i++) {
for (int j = 0; j < medicines.length - i - 1; j++) {
if (medicines[j].getPrice() > medicines[j + 1].getPrice()) {
Medicine temp = medicines[j];
medicines[j] = medicines[j + 1];
medicines[j + 1] = temp;
}
}
}
// 按销售量排序(快速排序法)
quickSort(salesRecords, 0, salesRecords.length - 1);
// 按销售额排序(堆排序法)
heapSort(salesRecords);
// 输出排名
System.out.println("按单价排名:");
for (int i = 0; i < medicines.length; i++) {
System.out.println((i + 1) + ". " + medicines[i].getName() + "(单价:" + medicines[i].getPrice() + "元)");
}
System.out.println();
System.out.println("按销售量排名:");
for (int i = salesRecords.length - 1; i >= 0; i--) {
System.out.println((salesRecords.length - i) + ". " + salesRecords[i].getMedicine().getName() + "(销售量:" + salesRecords[i].getQuantity() + ",销售额:" + salesRecords[i].getAmount() + "元)");
}
System.out.println();
System.out.println("按销售额排名:");
for (int i = salesRecords.length - 1; i >= 0; i--) {
System.out.println((salesRecords.length - i) + ". " + salesRecords[i].getMedicine().getName() + "(销售量:" + salesRecords[i].getQuantity() + ",销售额:" + salesRecords[i].getAmount() + "元)");
}
}
// 快速排序
private static void quickSort(SalesRecord[] salesRecords, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
SalesRecord pivot = salesRecords[left];
while (i < j) {
while (i < j && salesRecords[j].getQuantity() <= pivot.getQuantity()) {
j--;
}
salesRecords[i] = salesRecords[j];
while (i < j && salesRecords[i].getQuantity() >= pivot.getQuantity()) {
i++;
}
salesRecords[j] = salesRecords[i];
}
salesRecords[i] = pivot;
quickSort(salesRecords, left, i - 1);
quickSort(salesRecords, i + 1, right);
}
// 堆排序
private static void heapSort(SalesRecord[] salesRecords) {
int n = salesRecords.length;
for (int i = n / 2 - 1; i >= 0; i--) {
heapify(salesRecords, n, i);
}
for (int i = n - 1; i >= 0; i--) {
SalesRecord temp = salesRecords[0];
salesRecords[0] = salesRecords[i];
salesRecords[i] = temp;
heapify(salesRecords, i, 0);
}
}
private static void heapify(SalesRecord[] salesRecords, int n, int i) {
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < n && salesRecords[l].getAmount() > salesRecords[largest].getAmount()) {
largest = l;
}
if (r < n && salesRecords[r].getAmount() > salesRecords[largest].getAmount()) {
largest = r;
}
if (largest != i) {
SalesRecord temp = salesRecords[i];
salesRecords[i] = salesRecords[largest];
salesRecords[largest] = temp;
heapify(salesRecords, n, largest);
}
}
}
```