c语言超市购物计价系统

   实验要求:  完成超市购物计价系统的商品添加、计价消除、消费总价等功能,并且能够实现商品的存量查看 与购物清单的生成。本实验作为C语言阶段性学习的练习非常有意义,大家可以参考我的代码


   主要思路:首先创建链表,实现商品的数据和购物清单的内容存储,将各个功能模块化(函数)最后case语句分别控制功能。解析基本都在代码,我就不赘述了。

    实验效果:c语言超市购物计价系统_第1张图片

ps:商品111是之前的数据

    实验小结:本实验是一个简单化版的超市购物计价系统,最终效果还是需要qt库来实现窗口化操作界面,等我后面学会了再继续更新



#include 
#include 
#include 

// 商品结构体
typedef struct {
    char name[100];
    float price;
    int quantity;
} Product;

// 购物清单链表节点
typedef struct Node {
    Product product;
    struct Node* next;
} Node;

Node* head = NULL; // 头节点指针

// 添加商品到购物清单
void addProduct() {
    Node* newNode = (Node*)malloc(sizeof(Node));
    printf("请输入商品名称:");
    scanf("%s", newNode->product.name);
    printf("请输入商品价格:");
    scanf("%f", &newNode->product.price);
    printf("请输入商品数量:");
    scanf("%d", &newNode->product.quantity);
    newNode->next = NULL;

    if (head == NULL) {
        head = newNode;
    } else {
        Node* current = head;//确定头节点
        while (current->next != NULL) {
            current = current->next;//节点传递  head 1   1->2  1->2->3    .........
        }
        current->next = newNode;//创建链表
    }

    printf("商品已添加到购物清单。\n");
}

// 计算购物清单总价
float calculateTotalPrice() {
    float totalPrice = 0;
    Node* current = head;
    while (current != NULL) {
        totalPrice += current->product.price * current->product.quantity;//得到总价
        current = current->next;
    }//循环读取链表每一个位置
    return totalPrice;
}

// 显示购物清单
void showShoppingList() {
    Node* current = head;
    while (current != NULL) {
        printf("商品名称:%s,价格:%.2f,数量:%d\n", current->product.name, current->product.price,
               current->product.quantity);
        current = current->next;
    }//显示链表里面的数据
}

// 保存购物清单到文件
void saveShoppingListToFile() {
	//指向 FILE 结构体的指针,用于管理文件流
    FILE* file = fopen("shopping_list.txt", "w");//用来打开文件流的,它返回一个指向 FILE 结构体的指针
    //"w" 是打开文件的模式,其中 "w" 表示以写入模式打开文件。如果文件不存在,则创建一个新文件;如果文件已存在,则将其内容清空。
    if (file == NULL) {
        printf("无法打开文件。\n");
        return;
    }

    Node* current = head;
    while (current != NULL) {
        fprintf(file, "%s %.2f %d\n", current->product.name, current->product.price, current->product.quantity);
       //用于将格式化的数据写入文件
        current = current->next;
    }

    fclose(file);//用于关闭购物清单文件流 file,以确保文件被正确地写入磁盘并释放相关资源
    printf("购物清单已保存到文件。\n");
}

// 从文件加载购物清单
void loadShoppingListFromFile() {
    FILE* file = fopen("shopping_list.txt", "r");//“r ”读模式
    if (file == NULL) {
        printf("无法打开文件。\n");
        return;
    }

    char name[100];
    float price;
    int quantity;

    while (fscanf(file, "%s %f %d", name, &price, &quantity) != EOF) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        strcpy(newNode->product.name, name);
        newNode->product.price = price;
        newNode->product.quantity = quantity;
        newNode->next = NULL;

        if (head == NULL) {
            head = newNode;
        } else {
            Node* current = head;
            while (current->next != NULL) {
                current = current->next;
            }
            current->next = newNode;
        }
    }

    fclose(file);
    printf("购物清单已从文件加载。\n");
}

// 释放购物清单内存
void freeShoppingList() {
    Node* current = head;
    while (current != NULL) {
        Node* next = current->next;
        free(current);//清除当前节点
        current = next;//当前节点向下移动
    }
    head = NULL;
}

int main() {
    int choice;

    loadShoppingListFromFile();

    while (1) {
        printf("\n超市购物计价系统\n");
        printf("1. 添加商品到购物清单\n");
        printf("2. 计算购物清单总价\n");
        printf("3. 显示购物清单\n");
        printf("4. 保存购物清单到文件\n");
        printf("5. 退出系统\n");
        printf("请选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addProduct();
                break;
            case 2: {
                float totalPrice = calculateTotalPrice();
                printf("购物清单总价为:%.2f\n", totalPrice);
                break;
            }
            case 3:
                showShoppingList();
                break;
            case 4:
                saveShoppingListToFile();
                break;
            case 5:
                freeShoppingList();
                exit(0);
            default:
                printf("无效的选项。\n");
        }
    }

    return 0;
}

你可能感兴趣的:(c语言)