药品信息管理系统按生产厂家排序算法

运用字符串排序,将数据呈现出按生产厂家排序的状态。其中药品信息有药品编号,药品名称,生产厂家,定价,生产日期,药品功效等

这个用结构体排序就可以了。

#include <stdio.h>
#include <string.h>

#define MAX_LEN 50      // 最大字符串长度
#define MAX_NUM 10      // 药品信息数量

// 药品信息结构体
typedef struct {
    int id;             // 药品编号
    char name[MAX_LEN]; // 药品名称
    char producer[MAX_LEN]; // 生产厂家
    float price;        // 定价
    char date[MAX_LEN]; // 生产日期
    char effect[MAX_LEN]; // 药品功效
} Drug;

// 交换两个药品信息的函数
void swap(Drug *a, Drug *b) {
    Drug temp = *a;
    *a = *b;
    *b = temp;
}

// 冒泡排序的函数
void bubble_sort(Drug drugs[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            // 如果前一个药品的生产厂家大于后一个,则交换二者位置
            if (strcmp(drugs[j].producer, drugs[j+1].producer) > 0) {
                swap(&drugs[j], &drugs[j+1]);
            }
        }
    }
}

int main() {
    Drug drugs[MAX_NUM];                    // 药品信息数组
    char temp_str[MAX_LEN];                 // 临时字符串数组,用于存储从键盘输入的字符串
    int temp_int = 0;                       // 临时整数,用于存储从键盘输入的整数
    float temp_float = 0.0;                 // 临时浮点数,用于存储从键盘输入的浮点数

    // 从键盘输入药品信息
    printf("请输入%d个药品信息,每个药品的信息依次为:药品编号 药品名称 生产厂家 定价 生产日期 药品功效\n", MAX_NUM);
    for (int i = 0; i < MAX_NUM; i++) {
        scanf("%d %s %s %f %s %s", &temp_int, temp_str, drugs[i].producer, &temp_float, temp_str, drugs[i].effect);
        drugs[i].id = temp_int;
        strcpy(drugs[i].name, temp_str);
        drugs[i].price = temp_float;
    }

    // 按生产厂家排序
    bubble_sort(drugs, MAX_NUM);

    // 输出结果
    printf("\n按生产厂家排序后结果如下:\n");
    for (int i = 0; i < MAX_NUM; i++) {
        printf("%d %s %s %.2f %s %s\n", drugs[i].id, drugs[i].name, drugs[i].producer, drugs[i].price, drugs[i].date, drugs[i].effect);
    }

    return 0;
}