📜  C结构体、共同体、枚举测试3(1)

📅  最后修改于: 2023-12-03 15:14:26.652000             🧑  作者: Mango

C结构体、共同体、枚举测试3

什么是结构体、共同体和枚举?

在C语言中,结构体(Structure)、共同体(Union)和枚举(Enum)都是用户自定义的数据类型。它们可以作为容器,将多个不同类型的数据组合在一起,便于管理和操作。其中:

  • 结构体是由多个不同类型的数据组成的集合,每个数据可以有自己的名字和类型。结构体被定义后,可以通过结构体变量来访问其中的数据成员。

  • 共同体也是由多个不同类型的数据组成的集合,但所有数据共用一块内存空间。在不同的使用情况下,我们需要指定使用哪个成员。

  • 枚举是一种特殊的数据类型,它将一些常量封装成一个集合, 常用于代表一组相关的取值.

需求

假设我们需要管理一家商店的库存信息,每个商品需要记录它的名称、价格和数量。我们可以使用结构体来定义一个商品信息的类型:

struct Item {
    char name[20];
    float price;
    int quantity;
};

现在我们需要实现以下功能:

  • 添加一个商品信息

  • 显示所有商品信息

  • 删除一个商品信息

  • 修改一个商品信息

为了进行更好的管理,我们可以使用菜单来实现不同操作的选择。

代码

可以使用以下代码实现以上需求:

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

#define MAX_ITEMS 10

struct Item {
    char name[20];
    float price;
    int quantity;
};

struct Item items[MAX_ITEMS];
int num_items = 0;

void print_menu() {
    printf("\n1. Add an item");
    printf("\n2. Delete an item");
    printf("\n3. Modify an item");
    printf("\n4. Show all items");
    printf("\n5. Exit");
}

void add_item() {
    if (num_items >= MAX_ITEMS) {
        printf("\nCannot add more items");
        return;
    }

    struct Item item;
    printf("\nEnter name: ");
    scanf("%s", item.name);

    printf("\nEnter price: ");
    scanf("%f", &item.price);

    printf("\nEnter quantity: ");
    scanf("%d", &item.quantity);

    items[num_items] = item;
    num_items++;
}

void delete_item() {
    if (num_items == 0) {
        printf("\nNo items to delete");
        return;
    }

    char name[20];
    printf("\nEnter name: ");
    scanf("%s", name);

    int i;
    for (i = 0; i < num_items; i++) {
        if (strcmp(items[i].name, name) == 0) {
            int j;
            for (j = i; j < num_items - 1; j++) {
                items[j] = items[j + 1];
            }
            num_items--;
            printf("\nItem deleted successfully");
            return;
        }
    }

    printf("\nItem not found");
}

void modify_item() {
    if (num_items == 0) {
        printf("\nNo items to modify");
        return;
    }

    char name[20];
    printf("\nEnter name: ");
    scanf("%s", name);

    int i;
    for (i = 0; i < num_items; i++) {
        if (strcmp(items[i].name, name) == 0) {
            printf("\nEnter new price: ");
            scanf("%f", &items[i].price);

            printf("\nEnter new quantity: ");
            scanf("%d", &items[i].quantity);

            printf("\nItem modified successfully");
            return;
        }
    }

    printf("\nItem not found");
}

void show_items() {
    if (num_items == 0) {
        printf("\nNo items to show");
        return;
    }

    printf("\nName\tPrice\tQuantity\n");
    int i;
    for (i = 0; i < num_items; i++) {
        printf("%s\t%.2f\t%d\n", items[i].name, items[i].price, items[i].quantity);
    }
}

int main() {
    int choice;
    do {
        print_menu();
        printf("\nEnter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                add_item();
                break;
            case 2:
                delete_item();
                break;
            case 3:
                modify_item();
                break;
            case 4:
                show_items();
                break;
            case 5:
                printf("\nGoodbye!");
                break;
            default:
                printf("\nInvalid choice");
                break;
        }

    } while (choice != 5);

    return 0;
}
总结

结构体、共同体和枚举是C语言中重要的高级数据类型,能够将多个不同类型的数据组合成一个整体。在实际应用中,它们广泛用于管理和操作复杂的数据结构,如链表、树等。熟练掌握这些数据类型,对于C语言程序员来说是必不可少的。