用JAVA设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。 设计要求: 在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。 药品信息的元素类型定义: Class node { char num[4]; /*药品编号*/ char name[10]; /*药品名称*/ float price; /*药品单价*/ int count; /*销售数量*/ float sale; /*本药品销售额*/ }DataType;
时间: 2024-03-12 18:44:47 浏览: 79
好的,这是一个非常具体的设计要求,我可以给你提供一个初步的设计思路。
首先,需要读取数据文件,建立一个顺序表存储各药品的信息。顺序表可以用数组来实现,每个元素是一个 node 类型的对象,包含药品编号、药名、药品单价、销售量和销售额等信息。由于药品编号是混合了字母和数字的,可以采用字符串来存储。
其次,需要实现按照药品编号、单价、销售量或销售额进行排序的功能。对于药品编号的排序,可以采用基数排序法;对于单价的排序,可以采用冒泡排序法;对于销售量的排序,可以采用快速排序法;对于销售额的排序,可以采用堆排序法。对于这些排序算法,你可以在 Java 中实现,或者直接调用 Java 提供的排序函数。
最后,需要将排序后的结果输出,可以采用控制台输出或者将结果写入到文件中。
以下是一个简单的 Java 代码示例,仅供参考:
```java
import java.io.*;
import java.util.*;
class node {
String num; //药品编号
String name; //药品名称
float price; //药品单价
int count; //销售数量
float sale; //本药品销售额
}
public class MedicineCompany {
public static void main(String[] args) throws IOException {
// 读取数据文件
BufferedReader br = new BufferedReader(new FileReader("data.txt"));
// 建立顺序表存储药品信息
ArrayList<node> list = new ArrayList<>();
String line;
while ((line = br.readLine()) != null) {
String[] fields = line.split(",");
node item = new node();
item.num = fields[0];
item.name = fields[1];
item.price = Float.parseFloat(fields[2]);
item.count = Integer.parseInt(fields[3]);
item.sale = Float.parseFloat(fields[4]);
list.add(item);
}
// 按照药品编号排序
Collections.sort(list, new Comparator<node>() {
public int compare(node a, node b) {
return a.num.compareTo(b.num);
}
});
// 按照单价排序
bubbleSort(list, "price");
// 按照销售量排序
quickSort(list, "count", 0, list.size()-1);
// 按照销售额排序
heapSort(list, "sale");
// 输出结果
for (node item : list) {
System.out.println(item.num + "," + item.name + "," + item.price + "," + item.count + "," + item.sale);
}
}
// 冒泡排序
public static void bubbleSort(ArrayList<node> list, String field) {
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 0; j < list.size() - 1 - i; j++) {
if (field.equals("price")) {
if (list.get(j).price > list.get(j+1).price) {
node temp = list.get(j);
list.set(j, list.get(j+1));
list.set(j+1, temp);
}
}
}
}
}
// 快速排序
public static void quickSort(ArrayList<node> list, String field, int left, int right) {
if (left >= right) return;
int i = left, j = right;
node pivot = list.get(left);
while (i < j) {
while (i < j && getField(list.get(j), field) <= getField(pivot, field)) j--;
while (i < j && getField(list.get(i), field) >= getField(pivot, field)) i++;
if (i < j) {
node temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
list.set(left, list.get(i));
list.set(i, pivot);
quickSort(list, field, left, i - 1);
quickSort(list, field, i + 1, right);
}
// 堆排序
public static void heapSort(ArrayList<node> list, String field) {
PriorityQueue<node> pq = new PriorityQueue<>(new Comparator<node>() {
public int compare(node a, node b) {
return Float.compare(getField(b, field), getField(a, field));
}
});
for (node item : list) {
pq.offer(item);
}
int i = 0;
while (!pq.isEmpty()) {
list.set(i++, pq.poll());
}
}
// 获取指定字段的值
public static float getField(node item, String field) {
if (field.equals("price")) return item.price;
if (field.equals("count")) return item.count;
if (field.equals("sale")) return item.sale;
return 0;
}
}
```
阅读全文