一、系统简要介绍
采用C++语言设计实现一个适合超市使用的进出货商品管理系统,实现商品的进货、销售、商品分类、营收管理、订单管理、管理员等功能。
二、系统分层数据流图
三、系统结构图
四、数据库设计
根据商品管理系统的概念设计,采用关系模型设计。系统共有3个实体对象表,并使用存储过程、函数和触发器等内容对数据库进行操作。分别是users表、goods表、indent表。
根据用户的属性,users表共包含四个字段,其字段名、属性、类型和约束如下表。用户对象中,用户编号id为主键isAdmin字段表示改用户是否是管理员,只能取两个值,1表示是管理员,0表示普通顾客。
字段名 | 属性 | 类型 | 约束 |
---|---|---|---|
Id | 用户编号 | int | Primary key |
username | 用户名 | Varchar(30) | not null |
password | 密码 | Varchar(30) | not null |
isAdmin | 是否管理员 | int | Check(isAdmin in(0,1)) |
根据商品的属性,goods商品信息表包含9个字段,其字段名、属性、类型和约束如下表。商品编号id作为主键。
字段名 | 属性 | 类型 | 约束 |
---|---|---|---|
id | 商品编号 | Int | Primary key |
name | 商品名称 | varchar(255) | not null |
brand | 生产厂商 | varchar(255) | not null |
purprice | 进价 | double(10) | not null |
saleprice | 售价 | double(10) | not null |
type | 商品类型 | varchar(255) | not null |
num | 商品库存 | int | not null |
salesnum | 商品销量 | int | not null |
date | 入库时间 | varchar(255) | not null |
根据订单的属性,indent订单信息表共包含7个字段,其字段名、属性、类型和约束如下表。其中订单编号id作为主键,商品编号和商品名称只能取goods表中已有的数据。username只能取users表中的数据。
字段名 | 属性 | 类型 | 约束 |
---|---|---|---|
id | 订单编号 | varchar(20) | Primary key |
username | 下单人姓名 | varchar(255) | not null |
goodid | 商品编号 | int | not null |
goodname | 商品名称 | varchar(255) | not null |
price | 商品售价 | double(10) | not null |
num | 购买数量 | int | not null |
sum_price | 订单总价 | double(20) | not null |
五、关键代码展示
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<Windows.h>
#include<WinSock.h>
#include<mysql.h>
#include<string.h>
#include<conio.h>
#include<ctime>
#include<stdio.h>
#include<iomanip>
#include "menu.h"
using namespace std;
#pragma comment(lib,"libmysql.lib")
#pragma comment(lib,"wsock32.lib")
MYSQL* mysql = new MYSQL; //mysql连接
MYSQL_FIELD* fd; //字段列数组
char field[32][32]; //存字段名二维数组
MYSQL_RES* res; //这个结构代表返回行的一个查询结果集
MYSQL_ROW column; //一个行数据的类型安全(type-safe)的表示,表示数据行的列
char query[150]; //查询语句
//定义用户的用户名和密码
string username = "";
string password = "";
// 定义是否是管理员的标志,默认不是
bool isAdmin = false;
//定义商品类型
enum GoodsType//商品类别
{
Food = 1, //食品
Cosmetic, //化妆品
Commodity, //日用品
Drink, //饮料
Stationery //文具
};
//商品基本类型
struct Goods//商品基本信息
{
int code;//商品编号
string name;//商品名称
string brand;//生产厂家
double pur_price;//商品售价
double price;//商品售价
int num;//商品库存
int salenum;//销量
string type;//商品类别
string date;//入库时间
};
//商品订单基本类型
struct OrderGoods//商品基本信息
{
string code;//订单编号
string username; //下单人
string goodname; //商品名称
int goodid;//商品编号
int num; //该商品的购买数量
double price;//售价
double sum_mony;//单品总价
int salesum;//商品销量,更新销量时要用到
string date;//入库时间
double sum_price;//订单总价
};
//连接数据库的函数
bool ConnectDatabase();
//顾客的主菜单,主要是展示商品,购买商品等功能
void CustomerMenu();
//仓库管理员的主菜单
void AdministratorMenu();
//选择登录角色
void ChooseLoginCharacter(string &,bool &);
//顾客登录页面
string CustormerLogin(void);
//顾客选择操作的主函数
void CustormerOperation();
//顾客浏览商品函数
void BrowseGoods();
//顾客购买商品函数
void BuyGoods();
//管理员的登录页面
string AdministratorLogin(void);
//管理员选择操作的主函数
void AdministratorOperation();
//管理员添加商品的函数
void AddGoodsInfo();
//管理员修改商品信息的函数
void EditGoodsInfo();
//管理员删除商品的函数
void DeleteGoodsInfo();
//管理员查询商品的主函数
void SelectGoodsMain();
//管理员选择订单操作方式函数
void SelectOrderOperation();
//管理员查询订单函数
void SelectOrder();
//管理员删除订单函数
void DeleteOrder();
//选择查询方式的函数
void SelectMethod();
//查询商品通过id
void SelectGoodsById();
//查询商品通过商品名称
void SelectGoodsByName();
//查询商品通过生产厂商
void SelectGoodsByBrand();
//查询商品通过商品类型
void SelectGoodsByType();
//查询商品通过价格排序
void SelectGoodsByPriceSort();
//查询商品通过销量排序
void SelectGoodsBySaleSort();
//营收统计菜单
void RevenueMenu();
//选择营收统计方式
void SelectRevenue();
//单个商品营收统计
void RevenueById();
//所有商品营收统计
void RevenueAll();
//管理员订单管理函数
void OrderManagementMenu();
//修改用户的密码函数
void ChangePassword();
部分函数:
六、获取代码
该项目已开源至GitHub,欢迎star。