C++超市管理系统(直接可以运行)

C++超市管理系统

心得

写这个东西最重要环节不是上手去实现代码,而是再此之前的整体的系统分析,分析整个系统所需要定义的类,以及不同类实现的功能,以及类与类之间的消息的传递。最重要的还有模块之间的解耦,为后续的迭代,二次开发打好基础。

由于还有两天就开学了,所以本人直接就略过最重要的一步系统分析,直接开始敲了,边敲边考虑类的设计,这样导致的结果就是类所属功能的划分不够明确,部分代码冗余,以及为了实现老师作业中的几个继承组合的要求,导致整个系统有些地方并不是十分合理,本系统只是实现了最基本的功能模块,且进货功能和账单功能并未做出单独的类去进行统一管理,但思想都大相径庭,想要在此基础之上进行改进,增加模块的小伙伴可以自行添加修改。

简介:环境 :codeblocks 20.03
我将会按照代码从上到下的顺序解析代码......

开始写了个getTime()方法,是卖货产生流水的获取本地时间的方法。一个员工类,继承出一个管理员,管理员可以创建新用户。商品基类,继承出食品类,饮品类,化妆品类,此处我认为着实牵强(老师要求),各自特有的实现方法我没有用,直接输出字符串了。紧接着就是管理商品的商品管理类(销售员),继承出商品管理类(管理员);销售员权限低,只能进行售货和查看,管理员除此之外还可以进行查看流水账单,进行商品补充进货,还可以创建新的账户。最后就是一个超市类,它持有一个员工类指针,还有一个商品管理类指针。大概一两天差不多OK!

注意

有些文件操作写在了超市类的析构函数中,若不是正常退出系统,会导致文件与内存数据之间存在差异(可以改但是我懒…),还有就是本系统涉及到三个txt文件,Users.txt(账户信息),Goods.txt(仓库商品),Bills.txt(流水账单),没有User.txt就登录不了了,自己建一个(同目录即可)每行中间三个空位\t,末尾位\n;
在这里插入图片描述

展示

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

#include <bits/stdc++.h>
#include <windows.h>
#include <time.h>
#include <conio.h>//包含getch();

using namespace std;


string getTime()
{
    time_t timep;
    time (&timep);
    char tmp[64];
    strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&timep) );
    return tmp;
}


//普通员工类
class LogUser
{
protected:
    string name;                            //员工姓名
    string userId;                          //员工唯一ID(账号)
    string userPassword;                    //登录密码
    string userLevel;                       //权限(管理员、售货员)
public:
    LogUser(string n,string ui,string up,string ul);
    friend ostream& operator<<(ostream& out,LogUser& obj);
    friend istream& operator>>(istream& in,LogUser& obj);
    // void readFile(istream & in);
    string getName();
    string getUserId();
    string getUserPassword();
    string getUserLevel();
};

LogUser::LogUser(string n,string ui,string up,string ul):name(n),userId(ui),userPassword(up),userLevel(ul)
{

}

ostream& operator<<(ostream& out,LogUser& obj)
{
    out<<obj.getName()<<obj.getUserId()<<obj.getUserPassword()<<obj.getUserLevel();
}

istream& operator>>(istream& in,LogUser& obj)
{
    in>>obj.name>>obj.userId>>obj.userPassword>>obj.userLevel;
}

//void LogUser::readFile(istream & in)
//{
//    in>>namename>>userId>>userPassword;
//}

//void LogUser::writeFile(ostream & out)
//{
//    out<<this->name<<"\t"<<this->userId<<"\t"<<this->userPassword<<'\n';
//}
string LogUser::getName()
{
    return name;
}

string LogUser::getUserId()
{
    return userId;
}

string LogUser::getUserPassword()
{
    return userPassword;
}

string LogUser::getUserLevel()
{
    return userLevel;
}

//管理员类
class LogAdministrator : public LogUser
{
protected:

public:
    LogAdministrator(string n,string ui,string up,string ul);
    void addUser();                                          //管理员特有的创建员工账号功能
};


LogAdministrator::LogAdministrator(string n,string ui,string up,string ul):LogUser( n, ui,up, ul)
{

}

void LogAdministrator::addUser()
{
    ofstream out("Users.txt",ios::app);
    if(!out)
    {
        cout<<"Users.txt error!"<<endl;
        abort();
    }
    else
    {
        system("cls");
        string name,userId,userPassword,userLevel;
        cout<<"输入员工信息:"<<endl;
        cout<<"姓名:";
        cin>>name;
        cout<<"ID:";
        cin>>userId;
        cout<<"密码:";
        cin>>userPassword;
        cout<<"权限:";
        cin>>userLevel;
        out<<name<<"\t"<<userId<<"\t"<<userPassword<<"\t"<<userLevel<<"\n";
        out.close();
    }
}

//商品基类
class Goods
{
protected:
    int id;                         //商品唯一编号
    string name;                    //商品名称
    double purchasingPrice;         //进货价格
    double price;                   //售价
    int repertory;                  //库存
    string producer;                //生厂商
    string brand;                   //品牌
    string type;                    //类型
public:
    Goods(int i,string n,double pP,double p,int r,string pr,string b,string t);
    virtual void introduce();       //产品说明
    void show();
    int getId();
    string getName();
    double getPurchasingPrice();
    double getPrice();
    int getRepertory();
    string getProducer();
    string getBrand();
    string getType();
    void setRepertory(int r);
};

Goods::Goods(int i,string n,double pP,double p,int r,string pr,string b,string t):name(n),producer(pr),brand(b),type(t)
{
    id=i;
    purchasingPrice = pP;
    price = p;
    repertory = r;
}

void Goods ::introduce()
{
    cout<<"商品基类!"<<endl;
}

void Goods :: show()
{
    cout<<"商品名称:"<<name<<endl<<"进货价格:"<<purchasingPrice<<"\t\t"<<"售价:"<<price<<endl<<"库存:"<<"\t"<<repertory<<"生厂商:"<<endl<<producer<<"品牌:"<<"\t"<<brand<<"类型:"<<type<<endl;
}

int Goods :: getId()
{
    return id;
}

string Goods :: getName()
{
    return name;
}

double Goods :: getPurchasingPrice()
{
    return purchasingPrice;
}

double Goods :: getPrice()
{
    return price;
}

int Goods :: getRepertory()
{
    return repertory;
}

string Goods :: getProducer()
{
    return producer;
}

string Goods :: getBrand()
{
    return brand;
}

string Goods :: getType()
{
    return type;
}


void Goods :: setRepertory(int r)
{
    repertory = r;
}

//食品类
class Food: public Goods
{
protected:
public:
    Food(int i,string n,double pP,double p,int r,string pr,string b,string t);
    void introduce();
};

Food::Food(int i,string n,double pP,double p,int r,string pr,string b,string t):Goods(i,n,pP,p,r,pr,b,t)
{

}

void Food::introduce()
{
    cout<<"食品类!"<<endl;
}

//饮料类
class Drink: public Goods
{
protected:
public:
    Drink(int i,string n,double pP,double p,int r,string pr,string b,string t);
    void introduce();
};

Drink::Drink(int i,string n,double pP,double p,int r,string pr,string b,string t):Goods(i,n,pP,p,r,pr,b,t)
{

}

void Drink::introduce()
{
    cout<<"饮料类!"<<endl;
}

//化妆品类
class Cosmetics: public Goods
{
protected:
public:
    Cosmetics(int i,string n,double pP,double p,int r,string pr,string b,string t);
    void introduce();
};

Cosmetics::Cosmetics(int i,string n,double pP,double p,int r,string pr,string b,string t):Goods(i,n,pP,p,r,pr,b,t)
{

}

void Cosmetics::introduce()
{
    cout<<"化妆品类!"<<endl;
}

//商品管理类(售货员)
class GoodsManage_Employee
{
protected:
    vector<Goods*> goods_Vector;
    vector<Goods*> shopping_Cart;
    vector<int> shopping_Cart_Sums;
public:
    GoodsManage_Employee();
    ~GoodsManage_Employee();
    void showAll();                                     //显示全部商品信息
    void showByIndex(int index);                        //显示单个产品信息
    void sell(LogUser* log);                            //出售
    virtual int showMenu(LogUser* log);                 //售货员视角菜单
};

GoodsManage_Employee::~GoodsManage_Employee()
{
    ofstream out("Goods.txt");
    if(!out)
    {
        cout<<"Goods.txt error!"<<endl;
        abort();
    }
    else
    {
        int n = goods_Vector.size();
        for(int i = 0; i<n; i++)
        {
            out<<goods_Vector[i]->getId()<<"\t"<<goods_Vector[i]->getName()<<"\t"<<goods_Vector[i]->getPurchasingPrice()<<"\t"<<goods_Vector[i]->getPrice()<<"\t"<<goods_Vector[i]->getRepertory()<<"\t"<<goods_Vector[i]->getProducer()<<"\t"<<goods_Vector[i]->getBrand()<<"\t"<<goods_Vector[i]->getType()<<"\n";
        }
        out.close();
    }
}
GoodsManage_Employee::GoodsManage_Employee()
{
    ifstream in("Goods.txt");
    if(!in)
    {
        cout<<"Goods.txt error!"<<endl;
        abort();
    }
    else
    {
        int id,repertory;
        string name, producer,brand,type;
        double purchasingPrice,price;

        while(!in.eof())
        {
            Goods *temp;
            in>>id>>name>>purchasingPrice>>price>>repertory>>producer>>brand>>type;
            if(type=="食品类")
            {
                temp= new Food(id,name,purchasingPrice,price,repertory,producer,brand,type);
            }
            else if(type=="饮料类")
            {
                temp = new Drink(id,name,purchasingPrice,price,repertory,producer,brand,type);
            }
            else if(type=="化妆品类")
            {
                temp = new Cosmetics(id,name,purchasingPrice,price,repertory,producer,brand,type);
            }
            goods_Vector.push_back(temp);
        }
        goods_Vector.pop_back();
        in.close();
    }
}

void GoodsManage_Employee :: showAll()
{
    int n = goods_Vector.size();
    system("cls");
    cout<<"ID\t"<<"商品名称\t"<<"进货价格\t"<<"售价\t"<<"库存\t"<<"生产商\t"<<"品牌\t"<<"类型"<<endl;
    for(int i = 0; i<n; i++)
    {
        cout<<goods_Vector[i]->getId()<<"\t"<<goods_Vector[i]->getName()<<"\t\t"<<goods_Vector[i]->getPurchasingPrice()<<"\t\t"<<goods_Vector[i]->getPrice()<<"\t"<<goods_Vector[i]->getRepertory()<<"\t"<<goods_Vector[i]->getProducer()<<"\t"<<goods_Vector[i]->getBrand()<<"\t"<<goods_Vector[i]->getType()<<endl;
    }
    cout<<"选择ID查看商品详细信息!输入0退出!"<<endl;
    int _p;
    cin>>_p;
    while(_p!=0)
    {
        showByIndex(_p);
        cin>>_p;
    }
}

void GoodsManage_Employee :: showByIndex(int index)
{
    int n = goods_Vector.size(),i;
    for(i = 0; i<n; i++)
    {
        if(goods_Vector[i]->getId()==index)
        {
            goods_Vector[i]->show();
            cout<<endl;
            break;
        }
    }
    if(i==n) cout<<"未查询到对应商品信息!请输入正确的ID!"<<endl;
}

void GoodsManage_Employee :: sell(LogUser* log)
{
    while(1)
    {
        system("cls");
        int n = goods_Vector.size();
        cout<<"ID\t"<<"商品名称\t"<<"进货价格\t"<<"售价\t"<<"库存\t"<<"生产商\t"<<"品牌\t"<<"类型"<<endl;
        for(int i = 0; i<n; i++)
        {
            cout<<goods_Vector[i]->getId()<<"\t"<<goods_Vector[i]->getName()<<"\t\t"<<goods_Vector[i]->getPurchasingPrice()<<"\t\t"<<goods_Vector[i]->getPrice()<<"\t"<<goods_Vector[i]->getRepertory()<<"\t"<<goods_Vector[i]->getProducer()<<"\t"<<goods_Vector[i]->getBrand()<<"\t"<<goods_Vector[i]->getType()<<endl;
        }


        double sum=0;
        cout<<"购物车:\t\t\t\t\t总金额:";
        if(shopping_Cart.size()==0)
        {

            cout<<sum<<endl<<"啥也没有啊!赶紧购物吧!"<<endl;
        }
        else
        {
            int m = shopping_Cart.size();
            for(int i = 0; i<m; i++)
            {
                sum += shopping_Cart[i]->getPrice()*shopping_Cart_Sums[i];
            }

            cout<<sum<<endl;
            cout<<"ID\t"<<"商品名称\t"<<"售价\t"<<"购买数量\t"<<"总价\t"<<endl;
            for(int i = 0; i<m; i++)
            {
                cout<<shopping_Cart[i]->getId()<<"\t"<<shopping_Cart[i]->getName()<<"\t\t"<<shopping_Cart[i]->getPrice()<<"\t"<<shopping_Cart_Sums[i]<<"\t\t"<<shopping_Cart_Sums[i]*shopping_Cart[i]->getPrice()<<endl;
            }
            cout<<endl;
        }


        int index,amount;
        cout<<"选择ID...(输入0退出)"<<endl;
        cin>>index;
        if(index==0) break;
        if(index<0||index>n)
        {
            cout<<"ID错误!"<<endl<<"退出中";
            for(int i=0; i<6; i++)
            {
                cout<<".";
                Sleep(250);
            }
            break;
        }
        cout<<endl<<"输入购买输入数量..."<<endl;
        cin>>amount;

        for(int i = 0; i<n; i++)
        {
            if(goods_Vector[i]->getId()==index)
            {
                if(amount>goods_Vector[i]->getRepertory())
                {
                    cout<<"库存不足!请输入正确数量";
                    for(int j=0; j<6; j++)
                    {
                        cout<<".";
                        Sleep(250);
                    }
                    break;
                }

                goods_Vector[i]->setRepertory(goods_Vector[i]->getRepertory() - amount);

                int m = shopping_Cart.size(),mm=0;
                for( mm = 0; mm<m; mm++)
                {
                    if(shopping_Cart[mm]->getId()==goods_Vector[i]->getId())
                    {
                        shopping_Cart_Sums[mm]+=amount;
                        break;
                    }
                }

                if(mm==m)
                {
                    shopping_Cart.push_back(goods_Vector[i]);
                    shopping_Cart_Sums.push_back(amount);
                }


                for(int i=0; i<6; i++)
                {
                    cout<<".";
                    Sleep(250);
                }
                cout<<endl<<"购买成功!";
                Sleep(1000);
                break;
            }
        }
    }
    ofstream out("Bills.txt",ios::app);
    if(!out)
    {
        cout<<"Bills.txt error!"<<endl;
        abort();
    }
    else
    {
        int m = shopping_Cart.size();
        for(int i = 0; i<m; i++)
        {
            out<<getTime()<<"\t"<<log->getName()<<"\t"<<shopping_Cart[i]->getId()<<"\t"<<shopping_Cart_Sums[i]<<"\n";
        }

    }

}

int GoodsManage_Employee :: showMenu(LogUser* log)
{
    for(int i=0; i<24; i++) cout<<"●";
    puts("");
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"1.查看商品信息"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"2.购买商品"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"0.退出系统"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    for(int i=0; i<24; i++) cout<<"●";
    puts("");
    cout<<"请输入执行操作的编号:"<<endl;

    int choice;

    cin>>choice;
    if(choice==1)
    {
        showAll();
    }
    else if(choice==2)
    {
        sell(log);
    }
    else if(choice==0)
    {

    }
    else
    {
        cout<<"输入错误,请重新输入..."<<endl;
    }
    return choice;
}

//商品管理类(管理员)
class GoodsManage_Administrator : public GoodsManage_Employee
{
protected:
public:
    GoodsManage_Administrator();
    ~GoodsManage_Administrator();
    void showBills();                                       //显示账单
    void purchaseGoods();                                   //进货
    void addUser(LogAdministrator* log);                                         //增加账户
    int showMenu(LogUser* log);
};

GoodsManage_Administrator :: GoodsManage_Administrator()
{

}

GoodsManage_Administrator :: ~GoodsManage_Administrator()
{

}

void GoodsManage_Administrator :: showBills()
{
    ifstream in("Bills.txt");
    if(!in)
    {
        cout<<"Users.txt error!"<<endl;
        abort();
    }
    else
    {
        system("cls");
        cout<<"日期\t\t\t"<<"售货员\t"<<"商品ID\t"<<"数量\t"<<endl;
        while(!in.eof())
        {
            string time1,time2,name;
            int type,sum;
            in >>time1>>time2>>name>>type>>sum;
            if(time1=="") break;
            cout<<time1<<" "<<time2<<"\t"<<name<<"\t"<<type<<"\t"<<sum<<endl;
        }
        in.close();
    }
    cout<<"按任意键退出!";
    getch();
}

void GoodsManage_Administrator :: purchaseGoods()
{
    while(1)
    {
        system("cls");
        int n = goods_Vector.size();
        cout<<"ID\t"<<"商品名称\t"<<"进货价格\t"<<"售价\t"<<"库存\t"<<"生产商\t"<<"品牌\t"<<"类型"<<endl;
        for(int i = 0; i<n; i++)
        {
            cout<<goods_Vector[i]->getId()<<"\t"<<goods_Vector[i]->getName()<<"\t\t"<<goods_Vector[i]->getPurchasingPrice()<<"\t\t"<<goods_Vector[i]->getPrice()<<"\t"<<goods_Vector[i]->getRepertory()<<"\t"<<goods_Vector[i]->getProducer()<<"\t"<<goods_Vector[i]->getBrand()<<"\t"<<goods_Vector[i]->getType()<<endl;
        }

        cout<<"退出:0\t增加新产品:1\t\t增加已有产品数量:2\n";
        int _P;
        cin>>_P;
        if(_P==0)
        {
            cout<<"退出中";
            for(int i=0; i<6; i++)
            {
                cout<<".";
                Sleep(250);
            }
            break;
        }
        else if(_P==1)
        {
            int m = goods_Vector.size();
            cout<<"1.食品类\t2.饮料类\t3.化妆品类"<<endl;
            int c;
            cin>>c;
            string name,producer,brand,type;
            double purchasingPrice,price;
            int repertory;
            if(c==1)
            {
                cout<<"商品名称:";
                cin>>name;
                cout<<"进货价格:";
                cin>>purchasingPrice;
                cout<<"售价:";
                cin>>price;
                cout<<"库存:";
                cin>>repertory;
                cout<<"生厂商:";
                cin>>producer;
                cout<<"品牌:";
                cin>>brand;
                goods_Vector.push_back(new Food(m+1,name,purchasingPrice,price,repertory,producer,brand,"食品类"));
            }
            else if(c==2)
            {
                cout<<"商品名称:";
                cin>>name;
                cout<<"进货价格:";
                cin>>purchasingPrice;
                cout<<"售价:";
                cin>>price;
                cout<<"库存:";
                cin>>repertory;
                cout<<"生厂商:";
                cin>>producer;
                cout<<"品牌:";
                cin>>brand;
                goods_Vector.push_back(new Drink(m+1,name,purchasingPrice,price,repertory,producer,brand,"饮料类"));

            }
            else if(c==3)
            {
                cout<<"商品名称:";
                cin>>name;
                cout<<"进货价格:";
                cin>>purchasingPrice;
                cout<<"售价:";
                cin>>price;
                cout<<"库存:";
                cin>>repertory;
                cout<<"生厂商:";
                cin>>producer;
                cout<<"品牌:";
                cin>>brand;
                goods_Vector.push_back(new Cosmetics(m+1,name,purchasingPrice,price,repertory,producer,brand,"化妆品类"));

            }
            else
            {
                cout<<"输入错误";
                for(int i=0; i<6; i++)
                {
                    cout<<".";
                    Sleep(250);
                }
            }

        }
        else if(_P==2)
        {

            int ID;
            cout<<"商品ID:";
            cin>>ID;
            if(ID<=0||ID>goods_Vector.size())
            {
                cout<<"ID非法,退出中";
                for(int i=0; i<6; i++)
                {
                    cout<<".";
                    Sleep(250);
                }
            }
            cout<<"输入进货数量:";
            int sum;
            cin>>sum;
            goods_Vector[ID-1]->setRepertory(goods_Vector[ID-1]->getRepertory() + sum);
            cout<<"加入中";
            for(int i=0; i<6; i++)
            {
                cout<<".";
                Sleep(250);
            }
            cout<<endl<<"加入成功";
            Sleep(1000);
        }
        else
        {
            cout<<"输入错误...\n退出中";
            for(int i=0; i<6; i++)
            {
                cout<<".";
                Sleep(250);
            }
        }
    }
}

void GoodsManage_Administrator ::addUser(LogAdministrator* log)
{
    log->addUser();
}

int GoodsManage_Administrator :: showMenu(LogUser* log)
{
    for(int i=0; i<24; i++) cout<<"●";
    puts("");
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"1.查看商品信息"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"2.购买商品"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"3.账单"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"4.进货"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"5.创建账户"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(16)<<left<<"●"<<setw(16)<<"0.退出系统"<<setw(16)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    for(int i=0; i<24; i++) cout<<"●";
    puts("");
    cout<<"请输入执行操作的编号:"<<endl;

    int choice;

    cin>>choice;
    if(choice==1)
    {
        showAll();
    }
    else if(choice==2)
    {
        sell(log);
    }
    else if(choice==3)
    {
        showBills();
    }
    else if(choice==4)
    {
        purchaseGoods();
    }
    else if(choice==5)
    {
        addUser((LogAdministrator*)log);
    }
    else if(choice==0)
    {

    }
    else
    {
        cout<<"输入错误,请重新输入..."<<endl;
    }
    return choice;
}

//超市类
class Supermarket
{
private:
    LogUser *user = nullptr;
    GoodsManage_Employee *goodsManage = nullptr;
    GoodsManage_Employee* getGoodsManage();
    void login();
    void Welcome();
public:
    Supermarket();
    ~Supermarket();
    void showMenu();
};


GoodsManage_Employee* Supermarket::getGoodsManage()
{
    if(user->getUserLevel()=="售货员")
    {
        return new GoodsManage_Employee();
    }
    else if(user->getUserLevel()=="管理员")
    {
        return new GoodsManage_Administrator();
    }
}

void Supermarket::login()
{
    ifstream in;
    string Log_Id,Log_Password;
    string name,userId,userPassword,userLevel;

    while(user==nullptr)
    {
        in.open("Users.txt");

        system("cls");
        for(int i=0; i<24; i++) cout<<"●";
        puts("");
        cout<<setw(46)<<left<<"●"<<"●"<<endl;
        cout<<setw(16)<<left<<"●"<<setw(16)<<"欢迎来到超市管理系统"<<setw(12)<<right<<"●"<<endl;
        cout<<setw(46)<<left<<"●"<<"●"<<endl;
        cout<<setw(16)<<left<<"●"<<setw(16)<<"请登录......"<<setw(16)<<right<<"●"<<endl;
        cout<<setw(46)<<left<<"●"<<"●"<<endl;
        cout<<setw(46)<<left<<"●"<<"●"<<endl;
        for(int i=0; i<24; i++) cout<<"●";
        puts("");
        cout<<"账号:";
        cin>>Log_Id;
        cout<<"密码:";
        cin>>Log_Password;
        if(!in)
        {
            cout<<"Users.txt error!"<<endl;
            abort();
        }
        else
        {
            while(!in.eof())
            {
                in >>name>>userId>>userPassword>>userLevel;
                if(Log_Id==userId&&Log_Password==userPassword)
                {
                    if(userLevel=="管理员")
                    {
                        user = new LogAdministrator(name,userId,userPassword,userLevel);
                    }
                    else
                    {
                        user = new LogUser(name,userId,userPassword,userLevel);
                    }
                    break;
                }
            }
            in.close();
        }
        if(user==nullptr)
        {
            cout<<"账号或密码错误!重新登录";
            for(int i=0; i<6; i++)
            {
                cout<<".";
                Sleep(250);
            }
        }
    }
}

void Supermarket :: Welcome()
{
    system("cls");
    for(int i=0; i<24; i++) cout<<"●";
    puts("");
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(10)<<left<<"●"<<setw(2)<<"欢迎"<<user->getName()<<"!"<<setw(27)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(10)<<left<<"●"<<setw(2)<<"正在进入超市管理系统"<<"(权限:"<<user->getUserLevel()<<")"<<setw(5)<<right<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    cout<<setw(46)<<left<<"●"<<"●"<<endl;
    for(int i=0; i<24; i++) cout<<"●";
    puts("");
    cout<<"加载数据中";
    for(int i=0; i<6; i++)
    {
        cout<<".";
        Sleep(250);
    }
}

Supermarket::Supermarket()
{
    login();
    goodsManage = getGoodsManage();
    Welcome();
}

Supermarket::~Supermarket()
{
    delete user;
    delete goodsManage;
}

void Supermarket :: showMenu()
{
    while(1)
    {
        system("cls");
        cout<<"用户:"<<user->getName()<<"\t\t\t     "<<"权限:"<<user->getUserLevel()<<endl;
        if(goodsManage->showMenu(user)==0) break;
    }
}

int main()
{
    Supermarket s;
    s.showMenu();
    cout<<getTime();
    return 0;
}

已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页