C++面向对象实验四:超市管理系统

C++面向对象实验四:超市管理系统

一、实验目的

1、 掌握类与对象的用法
2、 掌握继承、重载、构造函数的具体使用
3、 综合使用学习的知识来编程

二、实验要求

实现一个超市管理系统,要求如下功能:
1、 增加商品(商品对应的属性有,商品代码,商品名称,生产地,商品价格,商品数量)
2、 删除商品(通过商品名称来查找删除)
3、 修改商品(通过商品名称来查找修改)
4、 查询商品(通过商品名称来查找)
5、 统计商品(统计的属性有商品价格,商品数量,商品总价值)
6、 退出系统

三、实验过程

(用适当的形式表达算法设计思想与算法实现步骤)
1、 通过do实现菜单提示,通过switch case循环语句来进行菜单选择。

    do{
        cout<<"\n****超市进销存管理系统****\n";
        cout<<" 1—增加商品\n";
        cout<<" 2—删除商品\n";
        cout<<" 3—修改商品\n";
        cout<<" 4—查询商品\n";
        cout<<" 5—统计商品\n";
        cout<<" 6—退出 \t 请选择(1—6):"; 
        cin>>c; 
        switch(c)
        {
        case '1':a.Add();a.Save();break;
        case '2':a.Load();a.Delete();a.Save();break;
        case '3':a.Load();a.Modify();a.Save();break;
        case '4':a.Load();a.Query(); break;
        case '5':a.Load();a.Add_up();break;
        }
    }
    while(c!='6');
    return 0;

2、 通过Goods类定义商品的属性及初始化条件

public:
    Goods(double num,char*name,char*person,int price,double amount)
    {
        this->num=num;
        strcpy(this->name,name);
        strcpy(this->person,person);
        this->price=price;
        this->amount=amount;
    }
    void Output()
    {
        cout<<"num:"<<num<<" name:"<<name<<" person:"<<person<<" price:"<<price<<" amount:"<<amount<<endl;}
    friend class Supermarket;
};

3、 通过定义Supermarket类来实现各种增删查改的操作。

class Supermarket
{
private:
    Goods *goods; //商品表
    void Clear(); //清除内存中数据
public:
    Supermarket()
    {
        goods=NULL;
        Load();
    }~Supermarket()
    {
        Goods*p;
        p=goods;
        while(p)
        {
            p=p->next;
            delete goods;
            goods=p;
        }
        goods=NULL;
    }
    void Add(); //增加商品
    void Delete(); //删除商品
    void Modify(); //修改商品
    void Query(); //查询商品
    void Add_up(); //统计商品
    void Save(); //基础数据存盘
    void Load(); //基础数据装入
};

四、源码

#include "stdafx.h"

#include<iostream>
#include<fstream>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int n=0; //全局数据,结点数量
class Goods
{
protected:
    char name[20]; //商品名称
    double num; //商品代码
    char person[30]; //经办人
    int price; //进货价
    double amount; //库存量
    Goods *next;
public:
    Goods(double num,char*name,char*person,int price,double amount)
    {
        this->num=num;
        strcpy(this->name,name);
        strcpy(this->person,person);
        this->price=price;
        this->amount=amount;
    }
    void Output()
    {
        cout<<"num:"<<num<<" name:"<<name<<" person:"<<person<<" price:"<<price<<" amount:"<<amount<<endl;}
    friend class Supermarket;
};
class Supermarket
{
private:
    Goods *goods; //商品表
    void Clear(); //清除内存中数据
public:
    Supermarket()
    {
        goods=NULL;
        Load();
    }~Supermarket()
    {
        Goods*p;
        p=goods;
        while(p)
        {
            p=p->next;
            delete goods;
            goods=p;
        }
        goods=NULL;
    }
    void Add(); //增加商品
    void Delete(); //删除商品
    void Modify(); //修改商品
    void Query(); //查询商品
    void Add_up(); //统计商品
    void Save(); //基础数据存盘
    void Load(); //基础数据装入
};
void Supermarket::Clear() //清除内存中商品数据(内部使用)
{
    Goods* p; 
    p=goods;
    while(p)
    {
        goods=p->next;
        delete p;
        p=goods;
    }
}
void Supermarket::Add() 
{
    Goods *p;
    double num,amount;
    char name[20],person[30]; 
    int price;
    cout<<"\n请输入新增商品信息:\n";
    cout<<"商品代码:";cin>>num;
    cout<<"商品名称:";cin>>name;
    cout<<"商品产地:";cin>>person;
    cout<<"商品单价:";cin>>price;
    cout<<"该商品库存量:";cin>>amount;//创建新商品类结点
    p=new Goods(num,name,person,price,amount);
    p->next=NULL;
    if(goods==NULL)
    {
        goods=p;
        n++; 
    }
    else
    {
        Goods *p2=goods;
        while(p2->next)
            p2=p2->next;
        p2->next=p;
        n++;
    }
} 
void Supermarket::Delete() //删除商品
{
    char name[20];
    cout<<"\n请输入要删除的商品名称:\n";
    cin>>name;//查找要删除的结点
    Goods *p1,*p2; p1=goods;
    while(p1)
    {
        if(strcmp(p1->name,name)==0) break;
        else
        {
            p2=p1;
            p1=p1->next;
        }
    }
    //删除结点
    if(p1!=NULL) //若找到结点,则删除
    {
        if(p1==goods) //若要删除的结点是第一个结点
        {
            goods=p1->next;
            delete p1;
            n--;
        }
        else //若要删除的结点是后续结点
        {
            p2->next=p1->next;
            delete p1;
            n--;
        }
        cout<<"找到并删除\n";
    }
    else //未找到结点
        cout<<"Sorry,未找到!\n";
}
void Supermarket::Modify() //修改商品信息
{
    double num,amount;
    char name[20],person[30]; 
    int price;
    cout<<"\n 修改商品,请输入要查的商品名称:\n";
    cout<<"Name:"; cin>>name;//查找要修改的结点
    Goods *p1,*p2; p1=goods;
    while(p1)
    {
        if(strcmp(p1->name,name)==0) break;
        else
        {
            p2=p1;
            p1=p1->next;
        }
    }//修改结点
    if(p1!=NULL) //若找到结点
    {
        p1->Output();
        cout<<"\n请选择要修改的信息(1—商品代码,2—商品名称,3—产地,4—单价,5—该商品库存量,6—修改全部信息):\n"; 
        int a; cin>>a;
        switch(a)
        {
        case 1:cout<<"请输入新代码:"; cin>>num;
            strcpy(name,p1->name);strcpy(person,p1->person);price=p1->price;amount=p1->amount; break;
        case 2:cout<<"请输入新名称:"; cin>>name;
            num=p1->num;strcpy(person,p1->person);price=p1->price;amount=p1->amount; break;
        case 3:cout<<"请输入新产地:"; cin>>person;
            num=p1->num;strcpy(name,p1->name);price=p1->price;amount=p1->amount; break;
        case 4:cout<<"请输入新单价:"; cin>>price;
            num=p1->num;strcpy(name,p1->name);strcpy(person,p1->person);amount=p1->amount; break;
        case 5:cout<<"请输入新库存数据:"; cin>>amount;
            num=p1->num;strcpy(name,p1->name);strcpy(person,p1->person);price=p1->price; break;
        case 6:cout<<"请输入新信息:\n";
            cout<<"商品代码:"; cin>>num;
            cout<<"商品名称:"; cin>>name;
            cout<<"商品产地:"; cin>>person;
            cout<<"商品单价:"; cin>>price;
            cout<<"该商品库存量:"; cin>>amount; break;
        }//创建新商品结点
        Goods *p3;
        p3=new Goods(num,name,person,price,amount); 
        //员工结点替换到链表
        p3->next=p1->next;
        if(p1==goods) //若要替换的结点是第一个结点
            goods=p3;
        else //若要替换的结点是后续结点
            p2->next=p3;
        delete p1; //删除原来的商品结点
        cout<<"修改成功!\n";
    }
    else //未找到结点
        cout<<"Sorry,未找到!\n";
}
void Supermarket::Query()
{
    cout<<"\n****查询商品****\n";
    char name[20];
    cout<<"\n请输入要查询的商品名称:\n";
    cin>>name;
    Goods *p1=goods;
    while(p1)
    {
        if(strcmp(p1->name,name)==0) break;
        else p1=p1->next;
    }
    if(p1!=NULL) //若找到结点
    {
        cout<<"\n要查询的信息如下:\n";
        cout<<"该类商品代码:\t"<<p1->num<<"\t"<<"该类商品名称:\t"<<p1->name<<"\t\n";
        cout<<"该类商品产地:\t"<<p1->person<<"\t"<<"该类商品单价:\t"<<p1->price<<"\t\n";
        cout<<"该类商品库存量:\t"<<p1->amount<<"\t";
    }
    else //未找到结点
        cout<<"\nSorry,未找到该类商品!\n"; 
}
void Supermarket::Add_up() //统计超市商品总数量于价值
{
    cout<<"\n****商品统计****\n";
    double Amount=0,Value=0;
    char name[20];
    cout<<"\n请输入要统计的商品名称:\n";
    cin>>name;
    Goods *p1;
    p1=goods;
    while(p1)
    {
        if(strcmp(p1->name,name)==0) break;
        else p1=p1->next;
    }
    if(p1)
    {
        while(p1)
        {
            Amount+=p1->amount;
            Value+=p1->amount*p1->price;
            p1=p1->next;
        }
        cout<<"商品总数量是:\n";
        cout<<Amount;
        cout<<"\n商品总价值是:\n";
        cout<<Value;
    }
    else 
        cout<<"\nSorry,未找到该类商品!\n"; 
}
void Supermarket::Save() //数据存盘
{ 
    cout<<"是否保存?[Y/N]";
    char a;
    cin>>a;
    if(a=='n')return;
    if(a=='y'||a=='Y')
    {
        ofstream outfile("base.dat",ios::out|ios::app);
        if(!outfile){cerr<<"open error!";exit(1);}
        Goods* p;p=goods;
        while(p)
        {
            outfile<<p->num<<endl;
            outfile<<p->name<<endl;
            outfile<<p->person<<endl;
            outfile<<p->price<<endl;
            outfile<<p->amount<<endl;
            cout<<endl;
            p=p->next;
        }
        outfile.close();
        cout<<"已完成数据的保存\n";
    }
} 
void Supermarket::Load() //数据装入
{
    Goods *p=goods;
    ifstream infile("base.dat",ios::in|ios::binary);//读一条信息
    if (!infile.good())
        return;
    p=new Goods(1,"a","a",1,1);
    infile>>p->num>>p->name>>p->person>>p->price>>p->amount;
    while(infile.good())
    {
        //创建商品结点
        p=new Goods(p->num,p->name,p->person,p->price,p->amount);
        p->next=NULL;
        //商品结点加入
        if(goods) //若已存在结点
        {
            p->next=goods;
            goods = p;
            //Goods*p2;
            //p2=goods;
            //while(p2->next) //查找尾结点
            //  p2=p2->next;
            //p2->next=p; //连接
        }
        else //表空
            goods=p; //连接
        //读下一条信息
        infile>>p->num>>p->name>>p->person>>p->price>>p->amount;
    }
    cout<<"\n商品数据已经装入\n";
}
int main()
{
    char c;
    Supermarket a;
    do{
        cout<<"\n****超市进销存管理系统****\n";
        cout<<" 1—增加商品\n";
        cout<<" 2—删除商品\n";
        cout<<" 3—修改商品\n";
        cout<<" 4—查询商品\n";
        cout<<" 5—统计商品\n";
        cout<<" 6—退出 \t 请选择(1—6):"; 
        cin>>c; 
        switch(c)
        {
        case '1':a.Add();a.Save();break;
        case '2':a.Load();a.Delete();a.Save();break;
        case '3':a.Load();a.Modify();a.Save();break;
        case '4':a.Load();a.Query(); break;
        case '5':a.Load();a.Add_up();break;
        }
    }
    while(c!='6');
    return 0;
}

五、实验结果
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

六、总结

我加深了对程序实践设计的了解和相关知识的应用。遇到的问题通过老师的帮助和同学的帮助以及查阅资料一一解决。这次实验,让我们增强的动手能力和合理利用所学知识的能力。

  • 41
    点赞
  • 328
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
网上超市购物管理系统,具体功能如下: 1、商品基本信息 1)商品代码,商品名称,商品价格,商品库存。 2)设计约定:可以假定超市有 N 种商品,在系统启动时将这些商品信息加载到商品库中。 2、顾客信息 1)普通顾客属性:ID(顾客代码)(随机生成或流水号) 2)普通会员:ID(会员代码),会员姓名,会员电话,会员积分。 3)高级会员:ID(会员代号),会员姓名,会员电话,会员积分,副卡 ID。 3、购物管理 1)为每一个普通顾客生成临时顾客代码。 2)普通会员购买商品时,可享受 9.8 折,普通顾客在单次购物满 1000 元,添加个人基本信息后,可成为普通会员。 3)高级会员购买商品时,可享受 9.5 折,普通顾客在单次购物满 2000 元,添加个人基本信息后,或普通会员单次购物满 1000 元可成为高级会员。普通会员和高级会员可查询 1 年内的购物详单,会员购物积分按照 1 元 1 分计。 4)每次购物后,输出购物清单。包括顾客代号(会员代码)、商品的名称、代号、单价、折扣、数量、价格以及合计价格、购买时间。 4、店铺管理 1)实现商品信息的添加、修改、删除、查询的功。可查询库存少于一定数量的商品。 2)实现会员资料的查询、修改、删除;实现会员整理的功能,对于 1 年内无购物的会员,进行自动删除。 3)可以按照时间区间统计,包括:销售总额;分类统计商品的销售情况;统计对会员的让利情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值