C++ Bakery Sales Management System: Efficiently Track Sales & Inventory

This C++ program provides a comprehensive bakery sales management system designed to efficiently track sales and inventory. The program offers various features, including:

  1. Sale Record Registration: Easily record sales transactions, capturing essential details like item ID, sale date, price, discount, and quantity.
  2. Query Today's Sales: Quickly retrieve a detailed report of all sales transactions for the current day.
  3. Sales Statistics: Gain valuable insights into sales performance by generating comprehensive statistics, broken down by item ID and sale date.
  4. File Handling: Seamlessly store and retrieve data from text files, ensuring data persistence and easy access.

Program Functionality and Design

The program utilizes C++ data structures and file handling techniques to provide a robust and user-friendly solution.

1. Data Structures:

  • Item struct: Stores information about each bakery item, including its ID, name, production date, expiration date, and current stock.
  • SaleRecord struct: Records detailed information about each sale transaction, including the item ID, sale date, price, discount, and quantity sold.

2. Program Logic:

  • readItemsFromFile(string filename): Reads item information from a specified text file ('items.txt').
  • writeSaleRecordToFile(SaleRecord record, string filename): Appends a new sale record to a designated text file ('sales.txt').
  • queryTodaySales(string filename): Retrieves and displays all sale records for the current day from the 'sales.txt' file.
  • salesStatistics(string filename): Performs statistical analysis on sales records, providing summaries by item ID and sale date.

3. User Interface:

  • A simple menu-driven interface guides the user through the various program features.

Code Example:

#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
#include <ctime>

using namespace std;

// 商品信息结构体
struct Item {
    int id;
    string name;
    string productionDate;
    string expirationDate;
    int stock;
};

// 销售记录结构体
struct SaleRecord {
    int itemId;
    string saleDate;
    double price;
    double discount;
    int quantity;
};

// 读取商品信息
vector<Item> readItemsFromFile(string filename) {
    vector<Item> items;
    ifstream file(filename);
    if (file.is_open()) {
        Item item;
        while (file >> item.id >> item.name >> item.productionDate >> item.expirationDate >> item.stock) {
            items.push_back(item);
        }
        file.close();
    }
    return items;
}

// 写入销售记录
void writeSaleRecordToFile(SaleRecord record, string filename) {
    ofstream file(filename, ios::app);
    if (file.is_open()) {
        file << record.itemId << ' ' << record.saleDate << ' ' << record.price << ' ' << record.discount << ' ' << record.quantity << endl;
        file.close();
    }
}

// 查询当日销售信息
void queryTodaySales(string filename) {
    ifstream file(filename);
    if (file.is_open()) {
        SaleRecord record;
        time_t now = time(0);
        tm *today = localtime(&now);
        int year = today->tm_year + 1900;
        int month = today->tm_mon + 1;
        int day = today->tm_mday;
        string todayDate = to_string(year) + '-' + to_string(month) + '-' + to_string(day);
        cout << "Today's Sales Records:" << endl;
        cout << "----------------------" << endl;
        while (file >> record.itemId >> record.saleDate >> record.price >> record.discount >> record.quantity) {
            if (record.saleDate == todayDate) {
                cout << "Item ID: " << record.itemId << endl;
                cout << "Sale Date: " << record.saleDate << endl;
                cout << "Price: " << fixed << setprecision(2) << record.price << endl;
                cout << "Discount: " << fixed << setprecision(2) << record.discount << endl;
                cout << "Quantity: " << record.quantity << endl;
                cout << "----------------------" << endl;
            }
        }
        file.close();
    }
}

// 销售记录分类统计
void salesStatistics(string filename) {
    ifstream file(filename);
    if (file.is_open()) {
        SaleRecord record;
        vector<int> itemIds;
        vector<string> saleDates;
        while (file >> record.itemId >> record.saleDate >> record.price >> record.discount >> record.quantity) {
            if (find(itemIds.begin(), itemIds.end(), record.itemId) == itemIds.end()) {
                itemIds.push_back(record.itemId);
            }
            if (find(saleDates.begin(), saleDates.end(), record.saleDate) == saleDates.end()) {
                saleDates.push_back(record.saleDate);
            }
        }
        file.close();

        cout << "Sales Statistics by Item ID:" << endl;
        cout << "----------------------------" << endl;
        for (int itemId : itemIds) {
            int totalQuantity = 0;
            double totalRevenue = 0.0;
            for (string saleDate : saleDates) {
                ifstream file(filename);
                if (file.is_open()) {
                    while (file >> record.itemId >> record.saleDate >> record.price >> record.discount >> record.quantity) {
                        if (record.itemId == itemId && record.saleDate == saleDate) {
                            totalQuantity += record.quantity;
                            double discountedPrice = record.price * (1.0 - record.discount);
                            totalRevenue += discountedPrice * record.quantity;
                        }
                    }
                    file.close();
                }
            }
            cout << "Item ID: " << itemId << endl;
            cout << "Total Quantity: " << totalQuantity << endl;
            cout << "Total Revenue: " << fixed << setprecision(2) << totalRevenue << endl;
            cout << "----------------------------" << endl;
        }

        cout << "Sales Statistics by Sale Date:" << endl;
        cout << "----------------------------" << endl;
        for (string saleDate : saleDates) {
            int totalQuantity = 0;
            double totalRevenue = 0.0;
            for (int itemId : itemIds) {
                ifstream file(filename);
                if (file.is_open()) {
                    while (file >> record.itemId >> record.saleDate >> record.price >> record.discount >> record.quantity) {
                        if (record.itemId == itemId && record.saleDate == saleDate) {
                            totalQuantity += record.quantity;
                            double discountedPrice = record.price * (1.0 - record.discount);
                            totalRevenue += discountedPrice * record.quantity;
                        }
                    }
                    file.close();
                }
            }
            cout << "Sale Date: " << saleDate << endl;
            cout << "Total Quantity: " << totalQuantity << endl;
            cout << "Total Revenue: " << fixed << setprecision(2) << totalRevenue << endl;
            cout << "----------------------------" << endl;
        }
    }
}

int main() {
    vector<Item> items = readItemsFromFile("items.txt");

    cout << "Welcome to the Bakery Store Sales Management System!" << endl;

    while (true) {
        cout << "Menu:" << endl;
        cout << "1. Sale Record Registration" << endl;
        cout << "2. Query Today's Sales" << endl;
        cout << "3. Sales Statistics" << endl;
        cout << "4. Exit" << endl;

        int choice;
        cout << "Please enter your choice: ";
        cin >> choice;

        if (choice == 1) {
            cout << "Item ID: ";
            int itemId;
            cin >> itemId;
            cout << "Sale Date (YYYY-MM-DD): ";
            string saleDate;
            cin >> saleDate;
            cout << "Price: ";
            double price;
            cin >> price;
            cout << "Discount: ";
            double discount;
            cin >> discount;
            cout << "Quantity: ";
            int quantity;
            cin >> quantity;

            bool itemExists = false;
            for (Item item : items) {
                if (item.id == itemId) {
                    itemExists = true;
                    break;
                }
            }

            if (itemExists) {
                SaleRecord record;
                record.itemId = itemId;
                record.saleDate = saleDate;
                record.price = price;
                record.discount = discount;
                record.quantity = quantity;

                writeSaleRecordToFile(record, "sales.txt");

                cout << "Sale record registered successfully!" << endl;
            } else {
                cout << "Item not found!" << endl;
            }
        } else if (choice == 2) {
            queryTodaySales("sales.txt");
        } else if (choice == 3) {
            salesStatistics("sales.txt");
        } else if (choice == 4) {
            break;
        } else {
            cout << "Invalid choice. Please try again." << endl;
        }
    }

    cout << "Thank you for using the Bakery Store Sales Management System!" << endl;

    return 0;
}

Running the Program

  1. Create Text Files: Create two text files in the same directory as your program: 'items.txt' and 'sales.txt'.
  2. Populate 'items.txt': Enter item information into 'items.txt' in the following format (one item per line):
    item_id item_name production_date expiration_date stock
    
  3. Run the Program: Compile and run the C++ program.
  4. Use the Menu: Follow the menu prompts to register sales, query today's sales, perform sales statistics, or exit the program.

Note: The program will automatically store and retrieve data from the 'items.txt' and 'sales.txt' files.

This C++ Bakery Sales Management System provides a valuable tool for efficient inventory and sales tracking, enabling bakery owners to make informed decisions and enhance their business operations.

C++ Bakery Sales Management System: Efficiently Track Sales & Inventory

原文地址: https://www.cveoy.top/t/topic/o6zL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录