my商场管理系统

大二上c++期末设计 

这是牧心小辉第二篇博客,全程干货,分享个人感觉比较有意思的点。

这次系统制作中牧心小辉算是起到了个设计架构师的作用,代码的编写以及全盘的了解,当然也要感谢另外三位组员的贡献。

总体说明下:

这个系统执行角色分为管理员角色和顾客角色

管理员角色和顾客角色分别有:1.停车场 2.地图指引 3.品牌商品 4.vip会员四个方面的相应功能

源代码:【免费】my商场信息管理系统的源代码资源-优快云文库


一.停车场信息

管理员:

 顾客:

核心函数架构:

#ifndef PARKING_H
#define PARKING_H

#include <iostream>
#include <map>
#include <set>
#include <string>
#include <fstream>
#include <stdexcept>
#include <iomanip>// std::setprecision
#include <chrono>

using namespace std;
using namespace std::chrono;//time_point

// 基类:停车场基础功能
class BaseParking {
protected:
    map<int, string> parkingSpots; // 停车位信息:车位编号 -> 车牌号
    map<int, time_t> parkingTimes;      // 车位编号 -> 入库时间
    set<int> availableSpots;      // 可购买的车位编号集合
    string parkingFile;           // 停车数据文件路径
    void updateAvailableSpots();
public:
    BaseParking() {};
    BaseParking(const string& filename);
    virtual ~BaseParking();

    // 加载和保存数据
    void loadParkingData();
    void saveParkingData();

    // 查询某个停车位信息
    virtual void queryParkingSpot(int spot) const;
    //查询所有停车信息
    virtual void queryAllParkingSpots();
};

// 管理员类
class AdminParking : public BaseParking {
public:
    using BaseParking::BaseParking;

    // 管理员功能
    void queryPurchasedSpaces(); // 查询所有已被购买车位
    void queryAvailableSpots()const;//查询可购买的车位
    //添加
    void addParkingSpot(int spot, const string& plate);
    //删除
    void removeParkingSpot(int spot);
};


// 小区住户类
class ResidentParking : public BaseParking {
//private:
    //set<int> ownedSpots; // 住户已购买车位编号
public:
    using BaseParking::BaseParking;

    // 住户功能
    void purchaseSpot(int spot, const string& room);//购买新停车位
    void queryOwnedSpots(const string& room) const;//查询自己的停车位
    void queryAvailableSpots() const;// 查询空闲可购买车位(小区住户车主可购买的 临时车主不可查询)
    //入库出库
    void parkVehicle(int spot, const string& room);
    void unparkVehicle(int spot, const string& room);
};

// 顾客类
class CustomerParking :public BaseParking {
private:
    time_t entryTime, exitTime;
    double fee;

    double calculateFee(time_t entryTime, time_t exitTime) {
        double duration = difftime(exitTime, entryTime) / 60.0; // 秒转换为分钟
        return duration *0.05 ;                     // 计算费用
    }

public:
  
    using BaseParking::BaseParking;
    void parkVehicle1(int spot,const string& plate);
    void unparkVehicle1(int spot);
};


void adminParkingmenu();
void adminparking();

void park();

void resParkingmenu();
void resparking();

void cusParkingmenu();
void cusparking();

#endif

这个代码中感触比较深的就是构造函数的加载数据,析构函数释放数据,小白之前写的时候不晓得还能这么干,都是另起函数进行完成相应功能。


 二.品牌商品

管理员:

 顾客:

核心代码架构:

#ifndef BRANDMESSAGE_H
#define BRANDMESSAGE_H

#include <iostream>
#include<fstream>
#include <map>
#include <vector>
#include <string>
#include<sstream>
#include <set>
#include <stdexcept>
#include<algorithm>//find()
using namespace std;

// 基类:顾客类(查询品牌信息)
class CustomerBrand {
protected:
    // 数据存储
    map<int, string>Brands;
    map<string, string> Locations;       // 品牌名称 -> 门店位置
    map<string, vector<string>> Products; // 品牌名称 -> 商品列表
    map<string, vector<string>> Employees; // 品牌名称 -> 员工列表
    vector<string> AvailableAreas;   // 未进驻区域
    
public:
    CustomerBrand();
    virtual ~CustomerBrand();

    // 加载数据
    void loadFromFile();
    // 保存数据
    void saveToFile();

    // 查询品牌信息
    virtual void viewBrands()const;

    // 查询品牌商品信息
    virtual  void viewProducts(const string&brand);

  
};

// 派生类:管理员类
class AdminBrand : public CustomerBrand {
public:
    //构造函数
    AdminBrand();
    //查询品牌职工
    void viewEmployee(const string& brand);

     查询空余未进驻的区域
    //void viewAvailableAreas();

    // 招商新品牌
    void addBrand(const string& brandName/*, const string& location*/);

    // 删除品牌
    void removeBrand(const string& brandName);
    int getBrandIdByName(const string& brandName) const;

    // 添加商品到品牌
    void addProductToBrand(const string& brandName, const string& product);

    // 删除品牌的商品
    void removeProductFromBrand(const string& brandName, const string& product);

    // 添加职工到品牌
    void addEmployeeToBrand(const string& brandName, const string& employee);

    // 删除品牌职工
    void removeEmployeeFromBrand(const string& brandName, const string& employee);
};

void adminbrandhandle();
void adminbrandmenu();

void customerBrandhandle();
void customerBrandmenu();

#endif

这部分代码由于数据的存储与读取比较多,那时候调的时候是非常头疼的地方,好在后面解决了。

三.地图指引

管理员:

顾客:

核心代码架构:

#pragma once
#pragma once
//地图指引
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <unordered_map>
#include <vector>
#include <iomanip>
using namespace std;

// 商店结构体
struct Store {
    string name;       // 商店名称
    string location;   // 商店位置
    string category;   // 商店类别
};

// 基类:商场地图
class MallMap {
public:
    MallMap(int r, int c);

    virtual ~MallMap();

    // 添加商店
    void addStore(const string& name, int row, int col, const string& category);
    void addStore(const string& name, int row, int col, const string& category, ofstream& outputFile);

    // 显示地图
    void showMap();

    // 查找商店位置
    void findStore(const string& name);

    // 按类别查找商店
    void findStoresByCategory(const string& category);

    // 获取楼层名称(纯虚函数)
    virtual string getFloorName() const = 0;

    // 获取商店位置信息
    string getStoreLocation(const string& name);
protected:
    int rows, cols;                              // 地图大小
    vector<vector<string>> layout;               // 地图布局
    unordered_map<string, Store> stores;         // 商店集合
};

// 子类:第一层地图
class Floor1Map : public MallMap {
public:
    Floor1Map(int r, int c) : MallMap(r, c) {}

    string getFloorName() const override {
        return "一层";
    }
};

// 子类:第二层地图
class Floor2Map : public MallMap {
public:
    Floor2Map(int r, int c) : MallMap(r, c) {}

    string getFloorName() const override {
        return "二层";
    }
};

// 子类:第三层地图
class Floor3Map : public MallMap {
public:
    Floor3Map(int r, int c) : MallMap(r, c) {}

    string getFloorName() const override {
        return "三层";
    }
};

// 跨楼层路径规划
void navigate(MallMap* startFloor, MallMap* endFloor, const string& startStore, const string& endStore);

//管理员操作权限(总)

//管理员地图模块
void showMenu1();
void adminmap();
// 从文件加载商店信息
void loadStoresFromFile(MallMap* mallFloors[], const string& filename);


//购物者地图模块

void showMenu2();
void shopermap();

 这部分代码是牧心小辉写的,我的想法就是三乘三的方格,叠加三楼的设计思路,过程中有遇到如何将三层楼的位置存储在一个文件中,而不是三个文件的问题,最终解决了,详见源代码。

四.vip会员

管理员:

顾客:

核心代码架构:

#pragma once

//vip会员
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

// 基类: VIP会员信息
class VIPMember {
protected:
    string name;
    int id;
    string level; // 会员等级
public:
    VIPMember(string name, int id, string level);

    virtual void displayInfo();

    //展示名字
    string showname() {
        return name;
    }

    // 保存基本信息到文件
    virtual void saveToFile(ofstream& out);

    // 读取基本信息从文件
    virtual void loadFromFile(ifstream& in);

    virtual ~VIPMember() {} // 虚析构函数
};

// 派生类: 普通VIP会员
class RegularVIP : public VIPMember {
public:
    RegularVIP(string name, int id);

    void displayInfo() override;

    void saveToFile(ofstream& out)override;

    void loadFromFile(ifstream& in) override;
};

// 派生类: 尊贵VIP会员
class PremiumVIP : public VIPMember {
private:
    double discount; // 尊贵VIP会员享有的折扣
public:
    PremiumVIP(string name, int id, double discount);

    void displayInfo() override;

    void saveToFile(ofstream& out) override;

    void loadFromFile(ifstream& in) override;
};

// VIP会员管理类
class VIPMemberManager {

public:
    // 添加会员
    void addMember(VIPMember* member);

    // 显示所有会员信息
    void displayAllMembers();

    // 保存所有会员信息到文件
    void saveMembersToFile(const string& filename);

    // 从文件读取所有会员信息
    void loadMembersFromFile(const string& filename);
    
    // 删除会员信息的方法
    void deleteMember(const string& name);

    //从文件中读取一个人的会员信息(为顾客操作服务
    void foudshoper(string s);

    ~VIPMemberManager() {
        for (auto& member : members) {
            delete member; // 释放动态分配的内存
        }
    }
private:
    vector<VIPMember*> members; // 存储会员的动态数组
};



//管理员操作
void adminvip();

//顾客操作

void shopervip();

 这部分代码的亮点是使用到vector的动态数组,以及虚函数,虚函数妙在我只需要调用这一个函数实现vip会员信息部分和尊贵vip会员信息部分,实现动态绑定,对整体代码的简洁度,可读性有非常大的提示。


总结

具体源代码我会上传,这次比较赶水水的,主要展示了代码的主要架构和有意思的点,具体可见源代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值