用java编写一个程序,从数据文件中读出药品编号、药名、药品单价、销售量、销售额信息记录并存储在顺序表中,其中药品编号共4位,采用字母和数字混合编号,前一位为大写字母,后三位为数字,在本系统中,对药品单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法,对药品编号进行排序时,可采用多种排序法。
时间: 2024-03-03 08:51:59 浏览: 69
好的,我可以给你一些思路,你可以根据这些思路来编写你的程序。
1. 定义一个药品类,包含药品编号、药名、药品单价、销售量、销售额等属性。
2. 定义一个顺序表类,用于存储药品信息。
3. 从数据文件中读取药品信息,将其存储在顺序表中。
4. 对药品单价进行冒泡排序,对销售量进行快速排序,对销售额进行堆排序。
5. 对药品编号进行排序时,可以采用多种排序算法,如快速排序、归并排序、希尔排序等。
6. 最后将排序后的药品信息输出到文件中。
以下是一些Java代码示例,供你参考:
定义药品类:
```java
public class Medicine {
private String id; // 药品编号
private String name; // 药名
private double price; // 药品单价
private int salesVolume; // 销售量
private double salesAmount; // 销售额
public Medicine(String id, String name, double price, int salesVolume) {
this.id = id;
this.name = name;
this.price = price;
this.salesVolume = salesVolume;
this.salesAmount = price * salesVolume;
}
// getter、setter方法省略
}
```
定义顺序表类:
```java
public class SeqList {
private Medicine[] data; // 存储药品信息的数组
private int size; // 当前存储的药品数量
public SeqList(int maxSize) {
data = new Medicine[maxSize];
size = 0;
}
public void add(Medicine medicine) {
data[size++] = medicine;
}
// getter方法省略
public void bubbleSort() {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (data[j].getPrice() > data[j + 1].getPrice()) {
Medicine temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
}
public void quickSort(int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
Medicine pivot = data[left];
while (i < j) {
while (i < j && data[j].getSalesVolume() > pivot.getSalesVolume()) {
j--;
}
if (i < j) {
data[i++] = data[j];
}
while (i < j && data[i].getSalesVolume() < pivot.getSalesVolume()) {
i++;
}
if (i < j) {
data[j--] = data[i];
}
}
data[i] = pivot;
quickSort(left, i - 1);
quickSort(i + 1, right);
}
public void heapSort() {
for (int i = size / 2 - 1; i >= 0; i--) {
adjustHeap(i, size);
}
for (int i = size - 1; i >= 1; i--) {
Medicine temp = data[0];
data[0] = data[i];
data[i] = temp;
adjustHeap(0, i);
}
}
private void adjustHeap(int i, int length) {
Medicine temp = data[i];
for (int j = i * 2 + 1; j < length; j = j * 2 + 1) {
if (j + 1 < length && data[j].getSalesAmount() < data[j + 1].getSalesAmount()) {
j++;
}
if (data[j].getSalesAmount() > temp.getSalesAmount()) {
data[i] = data[j];
i = j;
} else {
break;
}
}
data[i] = temp;
}
}
```
读取数据文件并将药品信息存储在顺序表中:
```java
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
SeqList list = new SeqList(100); // 假设最多存储100个药品信息
String line;
while ((line = reader.readLine()) != null) {
String[] fields = line.split(",");
String id = fields[0];
String name = fields[1];
double price = Double.parseDouble(fields[2]);
int salesVolume = Integer.parseInt(fields[3]);
Medicine medicine = new Medicine(id, name, price, salesVolume);
list.add(medicine);
}
reader.close();
}
```
对药品单价进行冒泡排序:
```java
list.bubbleSort();
```
对销售量进行快速排序:
```java
list.quickSort(0, list.getSize() - 1);
```
对销售额进行堆排序:
```java
list.heapSort();
```
对药品编号进行排序:
```java
// 快速排序
quickSortByID(list, 0, list.getSize() - 1);
// 归并排序
mergeSortByID(list, 0, list.getSize() - 1);
// 希尔排序
shellSortByID(list);
```
其中快速排序、归并排序和希尔排序的实现可以参考其他资料。
阅读全文