超市商品管理系统设计 C++实现

超市商品管理系统设计—C++实现


文章目录

  • 超市商品管理系统设计---C++实现
  • 一、内容要求
    • 大纲图
  • 二、源代码(包含大量注释)
    • 1、main.cpp文件
    • 2、supermarket.h文件
    • 3、supermarket.cpp文件
    • 4、administrator.h文件
    • 5、administrator.cpp文件
    • 6、user.h文件
    • 7、user.cpp文件
    • 8、管理员密码:helloworld
  • 总结(运行截图)


一、内容要求

要求

新增要求:

  1. 将管理员和用户分别开。
  2. 管理员需要密码才能进入系统。
  3. 查询功能:两种查询功能。第一种是按商品类别、商品名称、生产厂家进行查询;第二种是按商品类别、商品名称进行查询。第一种偏向管理员,第二种偏向用户。
  4. 修改功能:可以修改所以的属性。
  5. 排序功能:两种排序功能(都包含升序和降序)。第一种按照价格排序;第二种按照库存量排序。两种排序都要包含升序和降序。
  6. 清空功能:将商品全部清空的要求。
  7. 读取文件数据功能:系统运行时,就需要读取文件商品数据。包含文件不存在、文件为空、文件不为空且有数据。
  8. 存储文件功能:将商品数据存放到文件中。
  9. 展示商品gongn:打印所有商品数据信息。
  10. 在增、删、修、排序、清空功能中,要实现文件数据的时时更新。

大纲图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


二、源代码(包含大量注释)

在这里插入图片描述

7个文件,3个头文件,4个.cpp文件
main.cpp
supermarket.h
supermarket.cpp
administrator.h
administrator.cpp
user.h
user.cpp


1、main.cpp文件

#include <iostream>
#include "supermarket.h"
#include "administrator.h"
#include "user.h"
using namespace std;int main()
{//test01();administrator adm;//管理员supermarket market;//超市系统user us;//用户int input = 0;do{market.supermarketMenu();cout << "请输入对应的序号:";cin >> input;switch (input){case 1:us.operate_user(market);break;case 2://adm.login_administrator()if (adm.login_administrator()){system("cls");adm.operate_administrator(market);}else{input = 0;}break;case 0:cout << "退出超市系统,欢迎下次光临" << endl;break;default:cout << "输入序号不存在,请重新输入" << endl;break;}} while (input);//按任意键后,退出程序cout << endl;system("pause");return 0;
}

2、supermarket.h文件

#pragma once//防止头文件重复包含
#include <iostream>
using namespace std;
#include <string>
#include <fstream>
#define FILENAME "Goods.txt"
#define ARRSIZE 10//商品的抽象基类
class goods
{
public://显示商品信息virtual void showGoodsInfo() = 0;//获取商品类型virtual string goodsType() = 0;int goodsClass;//记录商品类string name;//商品名称int price;//商品价格int inventory;//商品库存量string manufacturer;//商品生产厂家};//食物类
class food : public goods
{
public://构造函数food(string n, int p, int i, string m);//显示商品信息virtual void showGoodsInfo();//获取商品类型virtual string goodsType();
};//化妆品
class cosmetics : public goods
{
public://构造函数cosmetics(string n, int p, int i, string m);//显示商品信息virtual void showGoodsInfo();//获取商品类型virtual string goodsType();
};//日用品
class necessities : public goods
{
public://构造函数necessities(string n, int p, int i, string m);//显示商品信息virtual void showGoodsInfo();//获取商品类型virtual string goodsType();
};//饮料
class drink : public goods
{
public://构造函数drink(string n, int p, int i, string m);//显示商品信息virtual void showGoodsInfo();//获取商品类型virtual string goodsType();
};//超市管理系统
class supermarket
{
public:supermarket();//构造函数void supermarketMenu();//超市管理系统菜单~supermarket();//析构函数//商品类型的数量int goodsTypeNum;//商品数组指针goods** goodsArray;//商品类的菜单void goodsClassMenu();//标志判断文件是否为空bool fileEmpty;//统计文件中的商品类型的数量int getFile_goodsTypeNum();//用文件初始化商品void initGoods();//将商品保存到文件void save();//添加商品void addGoods();//展示商品void showGoods();//查询商品——按商品类别、名称、生产厂家查询int inquireGoods_1();//打印查询1的商品信息void printInquireGoods_1(int index);//查询商品——按商品类别、名称查询int* inquireGoods_2();//打印查询2的商品信息void printInquireGoods_2(int* p);//修改商品void reviseGoods();//下架商品void delGoods();//排序1--按价格排序void sortGoods_1();//排序2--按库存量排序void sortGoods_2();//清空商品void clearGoods();
};

3、supermarket.cpp文件

#include "supermarket.h"//食物类构造函数
food::food(string n, int p, int i, string m)
{this->goodsClass = 1;this->name = n;this->price = p;this->inventory = i;this->manufacturer = m;
}//显示食物类商品信息
void food::showGoodsInfo()
{cout << this->goodsType() << "\t|";cout << this->name << "\t|";cout << this->price << "\t|";cout << this->inventory << "\t|";cout << this->manufacturer << endl;
}//获取商品类型
string food::goodsType()
{return string("食物");
}//化妆品类构造函数
cosmetics::cosmetics(string n, int p, int i, string m)
{this->goodsClass = 2;this->name = n;this->price = p;this->inventory = i;this->manufacturer = m;
}//显示化妆品类商品信息
void cosmetics::showGoodsInfo()
{cout << this->goodsType() << "\t|";cout << this->name << "\t|";cout << this->price << "\t|";cout << this->inventory << "\t|";cout << this->manufacturer << endl;
}//获取商品类型
string cosmetics::goodsType()
{return string("化妆品");
}     //日用品类构造函数
necessities::necessities(string n, int p, int i, string m)
{this->goodsClass = 3;this->name = n;this->price = p;this->inventory = i;this->manufacturer = m;
}//显示日用品类商品信息
void necessities::showGoodsInfo()
{cout << this->goodsType() << "\t|";cout << this->name << "\t|";cout << this->price << "\t|";cout << this->inventory << "\t|";cout << this->manufacturer << endl;
}//获取商品类型
string necessities::goodsType()
{return string("日用品");
}//饮料类构造函数
drink::drink(string n, int p, int i, string m)
{this->goodsClass = 4;this->name = n;this->price = p;this->inventory = i;this->manufacturer = m;
}//显示饮料类商品信息
void drink::showGoodsInfo()
{cout << this->goodsType() << "\t|";cout << this->name << "\t|";cout << this->price << "\t|";cout << this->inventory << "\t|";cout << this->manufacturer << endl;
}//获取商品类型
string drink::goodsType()
{return string("饮料");
}//超市管理构造函数
supermarket::supermarket()
{//读文件方式打开文件ifstream ifs;ifs.open(FILENAME, ios::in);//1、文件不存在if (!ifs.is_open()){cout << "------------------------" << endl;cout << "-----  文件不存在!-----" << endl;cout << "------------------------" << endl;cout << endl;//初始化商品类型的数量this->goodsTypeNum = 0;//初始化商品数组指针this->goodsArray = NULL;//初始化文件是否为空this->fileEmpty = true;ifs.close();//关闭文件return;}//2、文件存在,数据为空char ch;ifs >> ch;//读取一个字符if (ifs.eof())//文件结尾EOF{//文件为空cout << "------------------------" << endl;cout << "----  文件为空文件!----" << endl;cout << "------------------------" << endl;cout << endl;//初始化商品类型的数量this->goodsTypeNum = 0;//初始化商品数组指针this->goodsArray = NULL;//初始化文件是否为空this->fileEmpty = true;ifs.close();//关闭文件return;}//3、文件存在,并且有数据cout << "------------------------" << endl;cout << "--  从文件中导入数据  --" << endl;cout << "------------------------" << endl;cout << endl;int num = this->getFile_goodsTypeNum();cout << "商品类型的数量为:" << num << endl;//商品类型的数量this->goodsTypeNum = num;//初始化文件不为空this->fileEmpty = false;//开辟空间this->goodsArray = new goods * [this->goodsTypeNum];//将文件商品存放数组中this->initGoods();ifs.close();//关闭文件
}//超市管理析造函数
supermarket::~supermarket()
{//释放空间if (NULL != this->goodsArray){//清空堆区数据int i = 0;//遍历删除每个数据for (i = 0; i < this->goodsTypeNum; i++){delete this->goodsArray[i];this->goodsArray[i] = NULL;}//删除指针delete[] this->goodsArray;this->goodsArray = NULL;}
}//超市管理系统菜单
void supermarket::supermarketMenu()
{cout << endl;cout << "***********************************" << endl;cout << "*****    1、用户购买商品      *****" << endl;cout << "*****    2、管理员管理超市    *****" << endl;cout << "*****    0、退出超市系统      *****" << endl;cout << "***********************************" << endl;cout << endl;
}//商品类的菜单
void supermarket::goodsClassMenu()
{cout << "***********************" << endl;cout << "***  1、 食物类     ***" << endl;cout << "***  2、 化妆品类   ***" << endl;cout << "***  3、 日用品类   ***" << endl;cout << "***  4、 饮料类     ***" << endl;cout << "***********************" << endl;
}//统计文件中的商品类型的数量
int supermarket::getFile_goodsTypeNum()
{//读文件方式打开文件ifstream ifs;ifs.open(FILENAME, ios::in);int count = 0; //统计商品数量int Class;//记录商品类string Name;//商品名称int Price;//商品价格int Inven;//商品库存量string Manu;//商品生产厂家while (ifs >> Class && ifs >> Name && ifs >> Price && ifs >> Inven && ifs >> Manu){count++;}ifs.close();//关闭文件return count;
}//用文件初始化商品
void supermarket::initGoods()
{//读文件方式打开文件ifstream ifs;ifs.open(FILENAME, ios::in);int Class;//记录商品类string Name;//商品名称int Price;//商品价格int Inven;//商品库存量string Manu;//商品生产厂家goods* Goods = NULL;int index = 0;while (ifs >> Class && ifs >> Name && ifs >> Price && ifs >> Inven && ifs >> Manu){if (1 == Class)//食物类{Goods = new food(Name, Price, Inven, Manu);}else if (2 == Class)//化妆品类{Goods = new cosmetics(Name, Price, Inven, Manu);}else if (3 == Class)//日用品类{Goods = new necessities(Name, Price, Inven, Manu);}else if (4 == Class)//饮料类{Goods = new drink(Name, Price, Inven, Manu);}//将文件数据存放在数组中this->goodsArray[index] = Goods;index++;}ifs.close();//关闭文件
}//将商品保存到文件
void supermarket::save()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品数据" << endl;this->fileEmpty = true;return;}ofstream ofs;//用写文件打开文件ofs.open(FILENAME, ios::out);int i = 0;for (i = 0; i < this->goodsTypeNum; i++){ofs << this->goodsArray[i]->goodsClass << " ";ofs << this->goodsArray[i]->name << " ";ofs << this->goodsArray[i]->price << " ";ofs << this->goodsArray[i]->inventory << " ";ofs << this->goodsArray[i]->manufacturer << endl;}//关闭文件ofs.close();
}//添加商品
void supermarket::addGoods()
{cout << "添加新商品开始" << endl;int addNum;int i = 0;cout << "请输入要添加的商品的类型数量:";cin >> addNum;if (addNum > 0){//计算添加后的总空间大小int newSize = this->goodsTypeNum + addNum;//开辟新空间goods** newSpace = new goods * [newSize];//将原来的空间数据,拷贝到新空间if (NULL != this->goodsArray){for (i = 0; i < this->goodsTypeNum; i++){newSpace[i] = this->goodsArray[i];}}//添加新商品int input;int Class;//记录商品类string Name;//商品名称int Price;//商品价格int Inven;//商品库存量string Manu;//商品生产厂家goods* newGoods = NULL;//商品的父类指针for (i = 0; i < addNum; i++){cout << endl;cout << "第" << i + 1 << "个新增商品样式" << endl;cout << "新商品的名称:";cin >> Name;cout << "新商品的价格:";cin >> Price;cout << "新商品的库存量:";cin >> Inven;cout << "新商品的生产厂家:";cin >> Manu;//商品类的菜单this->goodsClassMenu();cout << "请选择商品的类型:";cin >> input;switch (input){case 1://开辟食物类的空间newGoods = new food(Name, Price, Inven, Manu);break;case 2://开辟化妆品类的空间newGoods = new cosmetics(Name, Price, Inven, Manu);break;case 3://开辟日用品类的空间newGoods = new necessities(Name, Price, Inven, Manu);break;case 4://开辟饮料类的空间newGoods = new drink(Name, Price, Inven, Manu);break;default:break;}//将创建好的新商品的地址,存放在数组中newSpace[this->goodsTypeNum + i] = newGoods;}//释放原有的空间delete[] this->goodsArray;//更新新的空间指向this->goodsArray = newSpace;//更新新的商品类型数量this->goodsTypeNum = newSize;//更新文件不为空this->fileEmpty = false;cout << "----------添加新商品成功----------" << endl;this->save();//将商品保存到文件}else{cout << "输入数据有误" << endl;}
}//展示商品
void supermarket::showGoods()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,展示商品失败" << endl;return;}cout << "展示商品开始" << endl << endl;int i = 0;int count = 0;cout << "---------------------商品库---------------------" << endl;cout << "类型\t|名称\t|价格\t|库存量\t|生产厂家" << endl;cout << "--------|-------|-------|-------|---------------" << endl;for (i = 0; i < this->goodsTypeNum; i++){count += this->goodsArray[i]->inventory;this->goodsArray[i]->showGoodsInfo();cout << "--------|-------|-------|-------|---------------" << endl;}cout << endl;cout << "商品类型的数量:" << this->goodsTypeNum << endl;cout << "商品的总数:" << count << endl;cout << "----------展示商品完成----------" << endl;
}//查询商品——按商品类别、名称、生产厂家查询
int supermarket::inquireGoods_1()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,查询失败" << endl;return -1;}int i = 0;int Class;//记录商品类string Name;//商品名称string Manu;//商品生产厂家this->goodsClassMenu();//商品类的菜单cout << "请输入要查询商品的类型序号:";cin >> Class;cout << "请输入要查询商品的名称:";cin >> Name;cout << "请输入要查询商品的生产厂家:";cin >> Manu;for (i = 0; i < this->goodsTypeNum; i++){//先判断商品类型是否相同if (this->goodsArray[i]->goodsClass != Class){continue;}//在进行商品名称比较if (!this->goodsArray[i]->name.compare(Name) && !this->goodsArray[i]->manufacturer.compare(Manu)){cout << "----------查询成功----------" << endl;return i;}}cout << "查询失败,该商品不存在" << endl;return -1;
}//打印查询1的商品信息
void supermarket::printInquireGoods_1(int index)
{//查询失败的情况if (-1 == index){return;}cout << "查询结果打印" << endl << endl;cout << "类型\t|名称\t|价格\t|库存量\t|生产厂家" << endl;cout << "--------|-------|-------|-------|---------------" << endl;this->goodsArray[index]->showGoodsInfo();cout << "--------|-------|-------|-------|---------------" << endl;
}//查询商品——按商品类别、名称查询
int* supermarket::inquireGoods_2()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,查询失败" << endl;return NULL;}int i = 0;int arr[ARRSIZE] = { 0 };//存放查询到商品的位置int count = 0;//记录查询的个数int Class;//记录商品类string Name;//商品名称string Manu;//商品生产厂家this->goodsClassMenu();//商品类的菜单cout << "请输入要查询商品的类型序号:";cin >> Class;cout << "请输入要查询商品的名称:";cin >> Name;for (i = 0; i < this->goodsTypeNum; i++){//先判断商品类型是否相同if (this->goodsArray[i]->goodsClass != Class){continue;}//在进行商品名称比较if (!this->goodsArray[i]->name.compare(Name)){arr[count] = i + 1;count++;}}if (0 == count){cout << "查询失败,该商品不存在" << endl;return NULL;}else{cout << "----------查询成功----------" << endl;return arr;}
}//打印查询2的商品信息
void supermarket::printInquireGoods_2(int* p)
{//查询失败的情况if (NULL == p){return;}int count = 0;int i = 0;//记录总数int arr[ARRSIZE] = { 0 };for (i = 0; i < ARRSIZE; i++){//第一次是不需要判断的if (p[i] != 0){arr[i] = p[i];count++;}else{break;}}cout << "查询结果打印" << endl << endl;cout << "序号\t|类型\t|名称\t|价格\t|库存量\t|生产厂家" << endl;cout << "--------|-------|-------|-------|-------|---------------" << endl;for (i = 0; i < count; i++){int j = arr[i] - 1;//记录下标cout << i + 1 << "\t|";this->goodsArray[j]->showGoodsInfo();cout << "--------|-------|-------|-------|-------|---------------" << endl;}
}//修改商品
void supermarket::reviseGoods()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,修改商品失败" << endl;return;}//查询功能1int index = this->inquireGoods_1();if (-1 == index)//是否查找失败{cout << "修改失败" << endl;return;}//打印查询到的结果this->printInquireGoods_1(index);int input = 0;goods* Goods = NULL;//记录原来商品类int Class = this->goodsArray[index]->goodsClass;//记录原来商品名称string Name = this->goodsArray[index]->name;//记录原来商品价格int Price = this->goodsArray[index]->price;//记录原来商品库存量int Inven = this->goodsArray[index]->inventory;//记录原来商品生产厂家string Manu = this->goodsArray[index]->manufacturer;do{cout << endl;cout << "----------修改类型----------" << endl;cout << "--   1、修改商品类        --" << endl;cout << "--   2、修改商品名称      --" << endl;cout << "--   3、修改商品价格      --" << endl;cout << "--   4、修改商品库存量    --" << endl;cout << "--   5、修改商品生产厂家  --" << endl;cout << "--   0、退出修改          --" << endl;cout << "----------------------------" << endl;cout << "请输入要修改的类型:";cin >> input;switch(input){case 1:this->goodsClassMenu();//商品类的菜单cout << "请输入要修改商品类 :";cin >> Class;delete this->goodsArray[index];if (1 == Class)//开辟食物类的空间{Goods = new food(Name, Price, Inven, Manu);}else if (2 == Class)//开辟化妆品类的空间{Goods = new cosmetics(Name, Price, Inven, Manu);}else if (3 == Class)//开辟日用品类的空间{Goods = new necessities(Name, Price, Inven, Manu);}else if (4 == Class)//开辟饮料类的空间{Goods = new drink(Name, Price, Inven, Manu);}//将数据重新放到类中this->goodsArray[index] = Goods;break;case 2:cout << "请输入要修改商品名称 :";cin >> Name;this->goodsArray[index]->name = Name;break;case 3:cout << "请输入要修改商品价格 :";cin >> Price;this->goodsArray[index]->price = Price;break;case 4:cout << "请输入要修改商品库存量 :";cin >> Inven;this->goodsArray[index]->inventory = Inven;break;case 5:cout << "请输入要修改商品生产厂家 :";cin >> Manu;this->goodsArray[index]->manufacturer = Manu;break;case 0:cout << "----------修改成功----------" << endl;this->save();//更新文件数据break;default:cout << "输入序号不存在,请重新输入" << endl;break;}} while (input);
}//下架商品
void supermarket::delGoods()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,下架商品失败" << endl;return;}//查找要删除的数据int index = this->inquireGoods_1();if (-1 == index)//是否查找失败{cout << "删除失败" << endl;return;}//打印查询的数据this->printInquireGoods_1(index);int i = 0;//释放空间delete this->goodsArray[index];//将商品数据前移for (i = index; i < this->goodsTypeNum - 1; i++){this->goodsArray[i] = this->goodsArray[i + 1];}//商品类型的数量更新this->goodsTypeNum--;//更新文件的数据this->save();cout << "----------删除成功----------" << endl;
}//排序1--按价格排序
void supermarket::sortGoods_1()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,排序商品失败" << endl;return;}cout << "*****************************" << endl;cout << "***   1、按价格----升序   ***" << endl;cout << "***   2、按价格----降序   ***" << endl;cout << "*****************************" << endl;cout << "请输入要排序的方式对应的序号:";int input = 0;cin >> input;int i = 0;int j = 0;goods* temp = NULL;bool flag = false;//每趟是否有交换的标志for (i = 0; i < this->goodsTypeNum - 1; i++){flag = false;//为交换时是falsefor (j = this->goodsTypeNum - 1; j > i; j--){if (input == 1)//升序{if (this->goodsArray[j - 1]->price > this->goodsArray[j]->price){temp = this->goodsArray[j];this->goodsArray[j] = this->goodsArray[j - 1];this->goodsArray[j - 1] = temp;flag = true;//交换}}else//降序{if (this->goodsArray[j - 1]->price < this->goodsArray[j]->price){temp = this->goodsArray[j];this->goodsArray[j] = this->goodsArray[j - 1];this->goodsArray[j - 1] = temp;flag = true;//交换}}}if (false == flag)//判断是否有序{this->save();//更新文件数据return;}}this->save();//更新文件数据
}//排序2--按库存量排序
void supermarket::sortGoods_2()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,排序失败" << endl;return;}cout << "*****************************" << endl;cout << "***   1、按价格----升序   ***" << endl;cout << "***   2、按价格----降序   ***" << endl;cout << "*****************************" << endl;cout << "请输入要排序的方式对应的序号:";int input = 0;cin >> input;int i = 0;int j = 0;goods* temp = NULL;bool flag = false;//每趟是否有交换的标志for (i = 0; i < this->goodsTypeNum - 1; i++){flag = false;//为交换时是falsefor (j = this->goodsTypeNum - 1; j > i; j--){if (1 == input)//升序{if (this->goodsArray[j - 1]->inventory > this->goodsArray[j]->inventory){temp = this->goodsArray[j];this->goodsArray[j] = this->goodsArray[j - 1];this->goodsArray[j - 1] = temp;flag = true;//交换}}else//降序{if (this->goodsArray[j - 1]->inventory < this->goodsArray[j]->inventory){temp = this->goodsArray[j];this->goodsArray[j] = this->goodsArray[j - 1];this->goodsArray[j - 1] = temp;flag = true;//交换}}	}if (false == flag)//判断是否有序{this->save();//更新文件数据return;}}this->save();//更新文件数据
}//清空商品
void  supermarket::clearGoods()
{//判断商品数据否是为空if (!this->goodsTypeNum){cout << "无商品,不需要清空" << endl;return;}int input = 0;cout << endl;cout << "-----  确定要清空吗  -----" << endl;cout << "-----  1、确定       -----" << endl;cout << "-----  0、不要       -----" << endl;cout << "--------------------------" << endl;cout << "请输入序号:";cin >> input;cout << endl;if (0 == input){cout << "清空操作取消" << endl;return;}//清空//trunc 如文件存在,将其长度截断为零并清除原有内容//      如果文件存在先删除,再创建ofstream ofs(FILENAME, ios::trunc);//清除文件数据ofs.close();//清空堆区数据int i = 0;//遍历删除每个数据for (i = 0; i < this->goodsTypeNum; i++){delete this->goodsArray[i];this->goodsArray[i] = NULL;}//删除指针delete[] this->goodsArray;this->goodsArray = NULL;this->goodsTypeNum = 0;this->fileEmpty = true;cout << "----------清空成功----------" << endl;
}

4、administrator.h文件

#pragma once
#include <iostream>
#include <string>
#include "supermarket.h"
using namespace std;//管理员
class administrator
{
public://管理员操作菜单void menu_administrator();//管理员登录界面bool login_administrator();//管理员操作超市系统void operate_administrator(supermarket& sup);//管理员添加商品void addGoods_administrator(supermarket& sup);//管理员展示商品void showGoods_administrator(supermarket& sup);//管理员查找商品void inquireGoods_administrator(supermarket& sup);//管理员修改商品void reviseGoods_administrator(supermarket& sup);//管理员删除商品void delGoods_administrator(supermarket& sup);//管理员排序商品void sortGoods_administrator(supermarket& sup);//管理员清空商品void clearGoods_administrator(supermarket& sup);
};

5、administrator.cpp文件

#include "administrator.h"//管理员操作菜单
void administrator::menu_administrator()
{cout << "****************************" << endl;cout << "***----管理员操作菜单----***" << endl;cout << "***    1、增加新商品     ***" << endl;cout << "***    2、展示商品       ***" << endl;cout << "***    3、查找商品       ***" << endl;cout << "***    4、修改商品       ***" << endl;cout << "***    5、下架商品       ***" << endl;cout << "***    6、排序商品       ***" << endl;cout << "***    7、清空商品       ***" << endl;cout << "***    0、退出后台系统   ***" << endl;cout << "****************************" << endl;cout << endl;
}//管理员登陆界面
bool administrator::login_administrator()
{string str;//密码为:helloworldstring password = "helloworld";int i = 0;//3次输入密码机会for (i = 0; i < 3; i++){cout << "请输入登入密码:";cin >> str;if (!password.compare(str)){cout << "密码正确,欢迎进入系统" << endl;return true;}else{cout << "密码错误" << endl;}}cout << "三次都输入错误,强制退出系统" << endl;return false;
}//管理员操作超市系统
void administrator::operate_administrator(supermarket& sup)
{system("cls");//清屏cout << "欢迎管理员进入超市后台" << endl;int input = 0;do{this->menu_administrator();cout << "请输入对应的序号:";cin >> input;switch (input){case 1:this->addGoods_administrator(sup);break;case 2:this->showGoods_administrator(sup);break;case 3:this->inquireGoods_administrator(sup);break;case 4:this->reviseGoods_administrator(sup);break;case 5:this->delGoods_administrator(sup);break;case 6:this->sortGoods_administrator(sup);break;case 7:this->clearGoods_administrator(sup);break;case 0:cout << "退出超市系统后台" << endl;break;default:cout << "输入序号不存在,请重新输入" << endl;break;}} while (input);//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//添加商品
void administrator::addGoods_administrator(supermarket& sup)
{sup.addGoods();//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//管理员展示商品
void administrator::showGoods_administrator(supermarket& sup)
{sup.showGoods();//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//管理员查找商品
void administrator::inquireGoods_administrator(supermarket& sup)
{cout << "-----------------------------------------" << endl;cout << "--  1、按商品类别、名称、生产厂家查询  --" << endl;cout << "--  2、按商品类别、名称查询            --" << endl;cout << "-----------------------------------------" << endl;cout << "请输入要查询的方法序号:";int input;cin >> input;if (1 == input){int i = sup.inquireGoods_1();sup.printInquireGoods_1(i);}else if (2 == input){int* p = sup.inquireGoods_2();sup.printInquireGoods_2(p);}//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//管理员修改商品
void administrator::reviseGoods_administrator(supermarket& sup)
{sup.reviseGoods();//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//管理员删除商品
void administrator::delGoods_administrator(supermarket& sup)
{sup.delGoods();//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//管理员排序商品
void administrator::sortGoods_administrator(supermarket& sup)
{cout << "------------------------" << endl;cout << "--  1、按价格排序     --" << endl;cout << "--  2、按库存量排序   --" << endl;cout << "------------------------" << endl;cout << "请输入要排序方法序号:";int input;cin >> input;if (1 == input){sup.sortGoods_1();sup.showGoods();}else if (2 == input){sup.sortGoods_2();sup.showGoods();}//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//管理员清空商品
void administrator::clearGoods_administrator(supermarket& sup)
{sup.clearGoods();//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}

6、user.h文件

#pragma once
#include "supermarket.h"
#include <iostream>
using namespace std;//用户
class user
{
public://用户菜单void menu_user();//用户使用超市系统void operate_user(supermarket& sup);//用户销售功能void salesFeatures_user(supermarket& sup);//用户展示商品void showGoods_user(supermarket& sup);//用户查找商品void inquireGoods_user(supermarket& sup);//用户排序商品void sortGoods_user(supermarket& sup);
};

7、user.cpp文件

#include "user.h"//用户菜单
void user::menu_user()
{cout << "**************************" << endl;cout << "***----用户操作菜单----***" << endl;cout << "***    1、购买商品     ***" << endl;cout << "***    2、展示商品     ***" << endl;cout << "***    3、查找商品     ***" << endl;cout << "***    4、排序商品     ***" << endl;cout << "***    0、退出购买     ***" << endl;cout << "**************************" << endl;cout << endl;
}//用户使用超市系统
void user::operate_user(supermarket& sup)
{system("cls");//清屏cout << "欢迎光临本超市商城" << endl;int input = 0;do{this->menu_user();//用户菜单cout << "请输入对应的序号:";cin >> input;switch (input){case 1:this->salesFeatures_user(sup);break;case 2:this->showGoods_user(sup);break;case 3:this->inquireGoods_user(sup);break;case 4:this->sortGoods_user(sup);break;case 0:cout << "退出超市,欢饮下次光临" << endl;break;default:cout << "输入序号不存在,请重新输入" << endl;break;}} while (input);//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//用户销售功能
void user::salesFeatures_user(supermarket& sup)
{cout << "欢迎您购买商品" << endl;//用户查找商品的方式int* p = sup.inquireGoods_2();if (p == NULL)//查找是否成功{cout << "商品不存在,购买失败" << endl;return;}//将商品数据位置,放到arr中int count = 0;int i = 0;//记录总数int arr[ARRSIZE] = { 0 };for (i = 0; i < ARRSIZE; i++){//第一次是不需要判断的if (p[i] != 0){arr[i] = p[i];count++;}else{break;}}//打印查询结果sup.printInquireGoods_2(p);cout << endl;//判断输入是否合法int input = 0;while (true){cout << "请输入要买商品的序号:";cin >> input;if (input > count || input <= 0){cout << "输入序号无效,请重新输入" << endl;continue;}else{break;//输入合法退出死循环}}cout << endl;int temp = 0;int number = 0;//记录用户购买商品数//记录商品的库存量int inven = sup.goodsArray[arr[input - 1] - 1]->inventory;//输入的购买的商品数,是否合法,库存量while (true){cout << "请输入要购买的商品数:";cin >> number;if (number < 0)//输入buhef{cout << "输入购买的商品数无效,请重新输入" << endl;}else if (number > inven)//输入大于库存量{cout << "抱歉,您购买的商品数超出了本店的库存量" << endl;cout << "--------------------------------" << endl;cout << "-- 1、继续购买 -- 0、结束购买 --" << endl;cout << "--------------------------------" << endl;cout << "请输入您的选择:";cin >> temp;if (0 == temp){cout << "购买结束" << endl;return;//退出购买}else{cout << "购买继续" << endl;continue;}}else{break;//输入合法退出死循环}}int money = 0;//金钱money = sup.goodsArray[arr[input - 1] - 1]->price * number;cout << endl;cout << "----------------------------------------" << endl;cout << "--------------- 电子发票 ---------------" << endl;cout << "---  购买的商品名称:" << sup.goodsArray[arr[input - 1] - 1]->name << endl;cout << "---  购买的商品数量:" << number << "  个" << endl;cout << "---  购买的商品单价:" << sup.goodsArray[arr[input - 1] - 1]->price << "  元" << endl;cout << "---  总价:" << money << "  元" << endl;cout << "----------------------------------------" << endl;cout << endl;cout << "................请支付.................." << endl;cout << endl;//更新库存量sup.goodsArray[arr[input - 1] - 1]->inventory = inven - number;//更新文件的数据sup.save();cout << "购买成功,欢迎您下次购买" << endl;//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//用户展示商品
void user::showGoods_user(supermarket& sup)
{sup.showGoods();//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//用户查找商品
void user::inquireGoods_user(supermarket& sup)
{cout << "-----------------------------------------" << endl;cout << "--  1、按商品类别、名称、生产厂家查询  --" << endl;cout << "--  2、按商品类别、名称查询            --" << endl;cout << "-----------------------------------------" << endl;cout << "请输入要查询的方法序号:";int input;cin >> input;if (1 == input){int i = sup.inquireGoods_1();sup.printInquireGoods_1(i);}else if (2 == input){int* p = sup.inquireGoods_2();sup.printInquireGoods_2(p);}//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}//用户排序商品
void user::sortGoods_user(supermarket& sup)
{cout << "------------------------" << endl;cout << "--  1、按价格排序     --" << endl;cout << "--  2、按库存量排序   --" << endl;cout << "------------------------" << endl;cout << "请输入要排序方法序号:";int input;cin >> input;if (1 == input){sup.sortGoods_1();sup.showGoods();}else if (2 == input){sup.sortGoods_2();sup.showGoods();}//按任意键后,清屏回到上级目录cout << endl;system("pause");system("cls");
}

8、管理员密码:helloworld


总结(运行截图)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
其他的远行截图省略,自行运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/235505.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LED智能照明控制系统应用解决方案

LED智能照明控制系统是一种集成了先进技术的照明解决方案&#xff0c;它通过智能化的控制和管理&#xff0c;能够实现节能、舒适、安全的照明效果。随着科技的不断发展&#xff0c;LED智能照明控制系统在各个领域得到了广泛的应用&#xff0c;为人们的生活和工作带来了便利和舒…

ffmpeg 视频分辨率修改 质量压缩

随着手机像素的提高&#xff0c;拍摄视频也越来越大&#xff0c;10秒的视频动辄 二三十兆&#xff0c;这给视频传输和播放都带来了 诸多不变。一般都需要 前端或或者后端 对视频进行压缩。由于我这边前端是 H5&#xff0c;所以只能后端进行压缩&#xff0c; 采用主流压缩库采用…

x-cmd pkg | llm - 用于与 OPENAI 交互的命令行工具

目录 简介首次用户功能特点进一步探索 简介 llm 是一个命令行工具和 Python 库&#xff0c;用于与大型语言模型&#xff08;Large Language Models&#xff0c;简称 LLMs&#xff09;交互&#xff0c;既可以通过远程 API 访问&#xff0c;也可以在本地机器上运行安装的模型。由…

基于Spring-boot-websocket的聊天应用开发总结

目录 1.概述 1.1 Websocket 1.2 STOMP 1.3 源码 2.Springboot集成WS 2.1 添加依赖 2.2 ws配置 2.2.1 WebSocketMessageBrokerConfigurer 2.2.2 ChatController 2.2.3 ChatInRoomController 2.2.4 ChatToUserController 2.3 前端聊天配置 2.3.1 index.html和main.j…

Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)

CSDN 成就一亿技术人&#xff01; VSFTPD 实现客户端和服务器之间传输文件 CSDN 成就一亿技术人&#xff01; 目录 什么是VSFTPD&#xff1f; VSFTPD 的特点和功能 1. 设置和使用FTP服务器的步骤 1. 下载vsftpd包 2. 启动服务 开机自启 3. 关闭防火墙 4. 配置vsftpd服…

Java代理模式

代理&#xff1a;设计模式 代理是一种常用的设计模式&#xff0c;其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息&#xff0c;过滤消息并转发消息&#xff0c;以及进行消息被委托类执行后的后续处理。 图 1. 代理模式 图 1. 代理模式…

Unity组件开发--短连接HTTP

1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…

MySQL视图 索引 面试题

一. 视图 视图&#xff1a;一种虚拟存在的表&#xff0c;行和列的数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的&#xff0c;只保存了sql逻辑&#xff0c;不保存查询结果 视图语法 -- 创建 create view 视图名 as 查询语句;-- 使用 select * f…

Linux内核源码分析(强烈推荐收藏!)

前言&#xff1a;Linux内核是由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在1991年开始开发的。当时他为了得到一个可以运行UNIX操作系统的个人计算机&#xff0c;开始编写一个操作系统内核&#xff0c;并将其命名为Linux。随后&#xff0c;越来越多的开发者加入到项…

im6ull学习总结(三-4)freetype显示单个字体

矢量字体引入 使用点阵字库显示英文字母、汉字时&#xff0c;大小固定&#xff0c;如果放大缩小则会模糊甚至有锯齿出现&#xff0c;为了解决这个问题&#xff0c;引用矢量字体。 矢量字体形成分三步&#xff1a; 第1步 确定关键点&#xff0c; 第2步 使用数学曲线&#xff08…

正则表达式的语法

如果要想灵活的运用正则表达式&#xff0c;必须了解其中各种元素字符的功能&#xff0c;元字符从功能上大致分为&#xff1a; 限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符 我们先说一下元字符的转义号 元字符(Metacharacter)-转义号 \\ \\ 符号…

【K8S 存储卷】K8S的存储卷+PV/PVC

目录 一、K8S的存储卷 1、概念&#xff1a; 2、挂载的方式&#xff1a; 2.1、emptyDir&#xff1a; 2.2、hostPath&#xff1a; 2.3、NFS共享存储&#xff1a; 二、PV和PVC&#xff1a; 1、概念 2、请求方式 3、静态请求流程图&#xff1a; 4、PV和PVC的生命周期 5、…

【分布式】分布式链路跟踪技术

为什么需要分布式链路追踪 提到分布式链路追踪&#xff0c;我们要先提到微服务。相信很多人都接触过微服务。微服务是一种开发软件的架构和组织方法&#xff0c;它侧重将服务解耦&#xff0c;服务之间通过API通信。使应用程序更易于扩展和更快地开发&#xff0c;从而加速新功能…

PiflowX-MysqlCdc组件

MysqlCdc组件 组件说明 MySQL CDC连接器允许从MySQL数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是MySQL…

机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述

LLM开发者必读论文&#xff1a;检索增强&#xff08;RAG&#xff09;生成技术综述&#xff01; 目录&#xff1a; 1、动手实战人工智能 Hands-on Al2、huggingface的NLP、深度强化学习、语音课3、Awesome Jupyter4、计算机科学热门论文5、LLM开发者必读论文:检索增强 (RAG) 生…

工业智能网关如何保障数据通信安全

工业智能网关是组成工业物联网的重要设备&#xff0c;不仅可以起到数据交换、通信、边缘计算的功能&#xff0c;还可以发挥数据安全保障功能&#xff0c;保障工业物联网稳定、可持续。本篇就为大家简单介绍一下工业智能网关增强和确保数据通信安全的几种措施&#xff1a; 1、软…

UE4 4.21-4.27使用编辑器蓝图EditorBlueprint方法

在UE4 4.21中&#xff0c;编辑器蓝图&#xff08;Editor Blueprint&#xff09;是一个强大的工具&#xff0c;允许开发者扩展和自定义Unreal编辑器的功能。通过编辑器蓝图&#xff0c;我们可以创建自定义的工具和功能&#xff0c;以优化开发流程。 本教程将指导您如何在UE4 4.…

如何顺滑使用华为云编译构建平台?

这两年平台构建服务需求越来越大&#xff0c;却一直苦于找不到一些指南&#xff0c; 这里特意写了一篇&#xff0c; 对在学习代码阶段和新手程序员朋友也蛮友好&#xff0c; 配置真的也不难&#xff0c; 也特别适合想尝试从0到1做个APP的朋友了。 以华为云的CodeArts Build为例…

mysql服务多实例运行

1、官网下载mysql安装包 https://downloads.mysql.com/archives/community/ 2、解压安装包 tar -zxvf mysql-8.1.0-linux-glibc2.28-aarch64.tar.xz -C /usr/localmv /usr/local/mysql-8.1.0-linux-glibc2.28-aarch64 /usr/local/mysql 3、创建mysql用户组 groupadd…

Js--数组(三)

1.什么是数组&#xff1f; 数组&#xff1a;(Array)是一种可以按顺序保存数据的数据类型 2.为什么要数组&#xff1f; 思考&#xff1a;如果我想保存一个班里所有同学的姓名怎么办&#xff1f; 场景&#xff1a;如果有多个数据可以用数组保存起来&#xff0c;然后放到一个变量…