C++ Bakery Sales Management System: Efficiently Track Sales & Inventory
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:
- Sale Record Registration: Easily record sales transactions, capturing essential details like item ID, sale date, price, discount, and quantity.
- Query Today's Sales: Quickly retrieve a detailed report of all sales transactions for the current day.
- Sales Statistics: Gain valuable insights into sales performance by generating comprehensive statistics, broken down by item ID and sale date.
- 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:
Itemstruct: Stores information about each bakery item, including its ID, name, production date, expiration date, and current stock.SaleRecordstruct: 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
- Create Text Files: Create two text files in the same directory as your program: 'items.txt' and 'sales.txt'.
- 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 - Run the Program: Compile and run the C++ program.
- 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.
原文地址: https://www.cveoy.top/t/topic/o6zL 著作权归作者所有。请勿转载和采集!