遵義公司網(wǎng)站制作哪家好百度推廣登錄首頁網(wǎng)址
從一個(gè)簡(jiǎn)單的超市收銀系統(tǒng),我們來練習(xí)一個(gè)系統(tǒng)如何設(shè)計(jì),然后如何實(shí)現(xiàn)的思路。
在Ubuntu環(huán)境下使用C語言編寫一個(gè)簡(jiǎn)單的超市收銀系統(tǒng)。以下是一個(gè)基本的示例,涵蓋了商品管理、購物車、交易處理等功能。
代碼
#include <stdio.h>
#include <stdlib.h>// 商品結(jié)構(gòu)體
struct Product {int id;char name[50];float price;
};// 購物車項(xiàng)結(jié)構(gòu)體
struct ShoppingCartItem {struct Product product;int quantity;
};// 交易結(jié)構(gòu)體
struct Transaction {struct ShoppingCartItem *items;int itemCount;
};// 商品管理結(jié)構(gòu)體
struct Inventory {struct Product *products;int productCount;
};// 初始化商品管理系統(tǒng)
struct Inventory initializeInventory() {struct Inventory inventory;inventory.products = NULL;inventory.productCount = 0;return inventory;
}// 添加商品到庫存
void addProduct(struct Inventory *inventory, struct Product product) {inventory->products = realloc(inventory->products, (inventory->productCount + 1) * sizeof(struct Product));inventory->products[inventory->productCount++] = product;
}// 顯示庫存信息
void displayInventory(struct Inventory inventory) {printf("Inventory:\n");for (int i = 0; i < inventory.productCount; ++i) {printf("%d. %s - $%.2f\n", inventory.products[i].id, inventory.products[i].name, inventory.products[i].price);}
}// 獲取商品信息
struct Product getProductInfo(struct Inventory inventory, int productId) {for (int i = 0; i < inventory.productCount; ++i) {if (inventory.products[i].id == productId) {return inventory.products[i];}}struct Product notFound;notFound.id = -1;return notFound;
}// 初始化交易
struct Transaction initializeTransaction() {struct Transaction transaction;transaction.items = NULL;transaction.itemCount = 0;return transaction;
}// 添加商品到購物車
void addToCart(struct Transaction *transaction, struct Product product, int quantity) {transaction->items = realloc(transaction->items, (transaction->itemCount + 1) * sizeof(struct ShoppingCartItem));transaction->items[transaction->itemCount].product = product;transaction->items[transaction->itemCount].quantity = quantity;++transaction->itemCount;printf("Added %d %s(s) to the cart.\n", quantity, product.name);
}// 顯示購物車
void displayCart(struct Transaction transaction) {float total = 0.0;printf("Shopping Cart:\n");for (int i = 0; i < transaction.itemCount; ++i) {struct ShoppingCartItem item = transaction.items[i];printf("%s - Quantity: %d\n", item.product.name, item.quantity);total += item.product.price * item.quantity;}printf("Total Price: $%.2f\n", total);
}// 完成交易
void completeTransaction(struct Transaction transaction) {printf("Transaction completed. Thank you!\n");free(transaction.items);
}int main() {struct Inventory inventory = initializeInventory();// 添加一些商品addProduct(&inventory, (struct Product){1, "Milk", 2.5});addProduct(&inventory, (struct Product){2, "Bread", 1.0});addProduct(&inventory, (struct Product){3, "Eggs", 3.0});struct Transaction transaction = initializeTransaction();// 超市收銀系統(tǒng)while (1) {displayInventory(inventory);int productId;printf("Enter product ID to add to cart (or 0 to finish): ");scanf("%d", &productId);if (productId == 0) {break;}struct Product product = getProductInfo(inventory, productId);if (product.id != -1) {int quantity;printf("Enter quantity: ");scanf("%d", &quantity);addToCart(&transaction, product, quantity);} else {printf("Product not found.\n");}}displayCart(transaction);completeTransaction(transaction);// 釋放資源free(inventory.products);return 0;
}
編譯:
gcc supermarket.c -o supermarket
./supermarket
程序設(shè)計(jì)的詳細(xì)過程:
步驟 1: 定義數(shù)據(jù)模型
在程序設(shè)計(jì)的起始階段,定義了程序需要用到的數(shù)據(jù)模型,包括商品、購物車項(xiàng)和交易。使用結(jié)構(gòu)體表示這些概念,其中包括商品(Product
)、購物車項(xiàng)(ShoppingCartItem
)和交易(Transaction
)。
struct Product {int id;char name[50];float price;
};struct ShoppingCartItem {struct Product product;int quantity;
};struct Transaction {struct ShoppingCartItem *items;int itemCount;
};
步驟 2: 商品管理
設(shè)計(jì)商品管理系統(tǒng),包括添加商品到庫存和獲取商品信息的功能。使用結(jié)構(gòu)體 Inventory
來保存商品信息,并定義相應(yīng)的函數(shù)。
struct Inventory {struct Product *products;int productCount;
};// 添加商品到庫存
void addProduct(struct Inventory *inventory, struct Product product) {// 通過realloc動(dòng)態(tài)分配內(nèi)存以保存商品inventory->products = realloc(inventory->products, (inventory->productCount + 1) * sizeof(struct Product));inventory->products[inventory->productCount++] = product;
}// 獲取商品信息
struct Product getProductInfo(struct Inventory inventory, int productId) {for (int i = 0; i < inventory.productCount; ++i) {if (inventory.products[i].id == productId) {return inventory.products[i];}}struct Product notFound;notFound.id = -1;return notFound;
}
步驟 3: 用戶界面
設(shè)計(jì)用戶界面,實(shí)現(xiàn)基本的用戶交互,允許用戶選擇商品并添加到購物車。使用結(jié)構(gòu)體 CashierUI
和相應(yīng)的函數(shù)。
struct CashierUI {struct Inventory inventory;struct Transaction transaction;
};// 顯示庫存信息
void displayInventory(struct Inventory inventory) {// 輸出商品列表
}// 添加商品到購物車
void addToCart(struct Transaction *transaction, struct Product product, int quantity) {// 將商品添加到購物車
}// 顯示購物車信息
void displayCart(struct Transaction transaction) {// 輸出購物車內(nèi)容
}// 完成交易
void completeTransaction(struct Transaction transaction) {// 輸出總價(jià)和完成交易信息
}
步驟 4: 交易處理
實(shí)現(xiàn)交易處理功能,計(jì)算購物車中商品的總價(jià)并完成交易。
// 初始化交易
struct Transaction initializeTransaction() {struct Transaction transaction;transaction.items = NULL;transaction.itemCount = 0;return transaction;
}// 完成交易
void completeTransaction(struct Transaction transaction) {// 輸出總價(jià)和完成交易信息// 釋放購物車內(nèi)存free(transaction.items);
}
步驟 5: 主程序
在主程序中,創(chuàng)建超市收銀系統(tǒng)實(shí)例,添加一些商品,然后啟動(dòng)收銀系統(tǒng)。
int main() {// 初始化商品管理系統(tǒng)struct Inventory inventory = initializeInventory();// 添加一些商品addProduct(&inventory, (struct Product){1, "Milk", 2.5});addProduct(&inventory, (struct Product){2, "Bread", 1.0});addProduct(&inventory, (struct Product){3, "Eggs", 3.0});// 初始化交易struct Transaction transaction = initializeTransaction();// 超市收銀系統(tǒng)while (1) {// 顯示庫存信息displayInventory(inventory);int productId;printf("Enter product ID to add to cart (or 0 to finish): ");scanf("%d", &productId);if (productId == 0) {break;}// 獲取商品信息struct Product product = getProductInfo(inventory, productId);if (product.id != -1) {int quantity;printf("Enter quantity: ");scanf("%d", &quantity);// 添加商品到購物車addToCart(&transaction, product, quantity);} else {printf("Product not found.\n");}}// 顯示購物車displayCart(transaction);// 完成交易completeTransaction(transaction);// 釋放資源free(inventory.products);return 0;
}
這個(gè)設(shè)計(jì)過程包括了程序的整體結(jié)構(gòu)、數(shù)據(jù)模型的定義、功能的實(shí)現(xiàn)以及用戶界面的設(shè)計(jì)。當(dāng)設(shè)計(jì)一個(gè)更大規(guī)模的系統(tǒng)時(shí),可能需要考慮更多的功能,例如支付處理、庫存管理、用戶認(rèn)證等。這個(gè)簡(jiǎn)化的例子提供了一個(gè)基本的框架,可以根據(jù)實(shí)際需求進(jìn)行擴(kuò)展。