【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】

news2024/11/24 9:14:19

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】


目录

  • 【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
  • 一、设计要求
  • 二、设计思路
      • 代码总体设计
      • 用户管理模块
      • 会员卡管理模块
      • 文件操作与数据持久化
      • 系统交互和菜单展示
  • 三、功能展示
    • 注册-管理员
    • 注册-普通用户
    • 登录-管理员
    • 管理员-添加会员卡
    • 管理员-删除会员卡
    • 管理员-查找会员卡
    • 管理员-修改会员卡
    • 用户-查找会员卡
    • 用户-修改个人信息


一、设计要求

(1)登录或注册超市会员卡管理系统;
(2)能够录入会员信息,包括:会员卡编号,持有人姓名,余额,折扣,办卡日期,购买次数,积分数,绑定手机号,身份证号等:
(3)每个用户的信息包括:用户名,账号,密码,权限级别(区别贵宾用户和普通用户)。
(4)能够按权限设置、实现基本的添加、制除、查找、修改、排序功能
(5)能够将会员卡信息、消费信息等保存到磁盘、从文件导入。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈


二、设计思路

代码总体设计

这段代码实现了一个超市会员管理系统,主要包括用户管理和会员卡管理两大模块。用户管理模块支持管理员和普通用户的注册、登录、和信息修改功能。会员卡管理模块支持管理员对会员卡的增删改查和排序操作,以及普通用户对会员卡的查询功能。通过面向对象编程(OOP)设计,代码结构清晰,职责明确,每个类和函数各司其职,体现了良好的软件设计原则。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈


class User {
protected:
    string username;
    string account;
    string password;
    string role;

public:
    User(string user, string acc, string pass, string rol) 
        : username(user), account(acc), password(pass), role(rol) {}

    virtual void showMenu() = 0; // 纯虚函数

    string getRole() const { return role; }
    string getUsername() const { return username; }
    string getAccount() const { return account; }
    bool verifyPassword(string pass) const { return password == pass; }

    void setPassword(string newPass) { password = newPass; }
    void setUsername(string newUser) { username = newUser; }
};

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

用户管理模块

用户管理模块主要由User类及其派生类Admin和Member组成。User类是一个抽象基类,定义了基本的用户信息和行为,包括用户名、账号、密码和角色。它包含了基本的getter和setter方法以及一个纯虚函数showMenu,用于展示不同角色的菜单。Admin类和Member类继承自User类,分别实现了showMenu函数,展示管理员和普通用户各自的操作菜单。

class Member : public User {
public:
    Member(string user, string acc, string pass) 
        : User(user, acc, pass, "普通用户") {}

    void showMenu() override {
        cout << "1. 查找会员卡" << endl;
        cout << "2. 修改个人信息" << endl;
        cout << "3. 退出" << endl;
    }
};

系统通过一个System类来管理用户的注册和登录操作。registerUser函数用于注册用户,接收一个User对象并将其添加到用户列表中。login函数通过账号和密码验证用户身份,并返回匹配的User对象。logout函数则用于注销当前用户。通过面向对象设计,用户管理功能可以很容易地扩展,例如增加更多的用户角色或修改现有角色的权限。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

会员卡管理模块

会员卡管理模块由Card类和System类中的相关函数实现。Card类封装了会员卡的各种属性,包括卡号、持有人姓名、余额、折扣、办卡日期、购买次数、积分、手机号和身份证号。Card类的display函数用于展示会员卡的详细信息。System类则负责管理这些Card对象,通过向量存储会员卡信息,并提供一系列操作函数。

class Card {
public:
    string cardNumber;
    string holderName;
    double balance;
    double discount;
    string issueDate;
    int purchaseCount;
    int points;
    string phoneNumber;
    string idNumber;

    Card(string cn, string hn, double b, double d, string id, int pc, int p, string pn, string in) 
        : cardNumber(cn), holderName(hn), balance(b), discount(d), issueDate(id), purchaseCount(pc), points(p), phoneNumber(pn), idNumber(in) {}

    void display() const {
        cout << "会员卡编号: " << cardNumber << endl;
        cout << "持有人姓名: " << holderName << endl;
        cout << "余额: " << balance << endl;
        cout << "折扣: " << discount << endl;
        cout << "办卡日期: " << issueDate << endl;
        cout << "购买次数: " << purchaseCount << endl;
        cout << "积分数: " << points << endl;
        cout << "绑定手机号: " << phoneNumber << endl;
        cout << "身份证号: " << idNumber << endl;
    }
};

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

System类中的addCard函数用于添加新的会员卡,deleteCard函数根据卡号删除会员卡,findCard函数根据卡号查找会员卡,modifyCard函数根据卡号修改会员卡信息,sortCards函数则对会员卡进行排序。这些函数通过简单的查找和操作,实现了会员卡的基本管理功能。值得注意的是,这些操作大多是由管理员进行的,普通用户只能查询会员卡信息。

文件操作与数据持久化

为了实现数据的持久化,System类提供了saveToFile和loadFromFile函数。saveToFile函数将当前系统中的所有会员卡信息保存到指定的文件中,而loadFromFile函数则从文件中加载会员卡信息。这两个函数使用C++标准库中的fstream进行文件操作,通过文本格式存储和读取会员卡数据。这样,系统可以在重启后恢复之前的状态,确保数据的持久性和一致性。


    void loadFromFile(const string& filename) {
        ifstream file(filename);
        if (file.is_open()) {
            cards.clear();
            string cn, hn, id, pn, in;
            double b, d;
            int pc, p;
            while (file >> cn >> hn >> b >> d >> id >> pc >> p >> pn >> in) {
                cards.emplace_back(cn, hn, b, d, id, pc, p, pn, in);
            }
            file.close();
        }
    }

文件操作的实现非常简单,直接将每张会员卡的信息逐行写入文件,并在读取时逐行解析。这种方法虽然有效,但不够高效和灵活,未来可以考虑使用更复杂的数据存储和读取方法,例如使用数据库来存储会员卡信息,以提高数据处理的效率和安全性。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

系统交互和菜单展示

代码在main函数中实现了一个简单的交互式菜单系统,用户可以通过输入数字来选择不同的操作。系统启动后,首先展示一个主菜单,用户可以选择登录、注册或退出。登录后,根据用户的角色展示相应的菜单,管理员可以进行会员卡的增删改查和排序操作,普通用户则只能查询会员卡信息和修改个人信息。

int main() {
    System system;

    system.registerUser(new Admin("admin", "admin", "123456"));
    system.registerUser(new Member("user1", "user1", "password"));

    while (true) {
        cout << "======超市会员管理系统======" << endl;

        cout << "1. 登录" << endl;
        cout << "2. 注册" << endl;
        cout << "3. 退出" << endl;

        int choice;
        cin >> choice;

        if (choice == 1) {
            string account, password;
            cout << "请输入账号: ";
            cin >> account;
            cout << "请输入密码: ";
            cin >> password;
            
		// 略....此处代码太长

菜单的实现通过一个while循环不断接受用户输入,根据输入的选择调用相应的函数执行操作。管理员和普通用户的操作界面分别通过Admin类和Member类的showMenu函数展示,并根据用户的选择执行具体操作。这种设计使得系统的交互逻辑清晰明了,用户体验良好。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

该代码通过面向对象的设计,实现了一个功能完善的超市会员管理系统,涵盖了用户管理和会员卡管理的基本功能。通过User类及其派生类Admin和Member,系统实现了不同角色的用户管理,通过Card类和System类中的相关函数,系统实现了会员卡的增删改查和排序操作。此外,通过简单的文件操作,系统实现了数据的持久化,确保了数据的安全和一致性。代码结构清晰,模块划分明确,具有良好的可扩展性和维护性。未来可以进一步优化文件操作和数据存储,提高系统的性能和安全性,并增加更多实用的功能。


三、功能展示

注册-管理员

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

注册-普通用户

在这里插入图片描述

登录-管理员

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

管理员-添加会员卡

在这里插入图片描述

管理员-删除会员卡

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

管理员-查找会员卡

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

管理员-修改会员卡

在这里插入图片描述

用户-查找会员卡

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈

用户-修改个人信息

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 超会 ” 获取。👈👈👈


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VRay是什么?有什么特点?渲染100邀请码1a12

Vray是由Chaos Group开发的高性能渲染引擎&#xff0c;能为不同的三维建模软件提供图像和动画渲染服务&#xff0c;它有以下几个特点。 1、Vray采用了先进的光线追踪技术&#xff0c;能够模拟真实世界中光线的传播和反射&#xff0c;生成的图像和动画十分逼真。 2、Vray提供了…

【C++】 ——【模板初阶】——基础详解

目录 1. 泛型编程 1.1 泛型编程的概念 1.2 泛型编程的历史与发展 1.3 泛型编程的优势 1.4 泛型编程的挑战 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 2.6 函数模板的特化 2.7 函数模板的使…

目前常见的几款企业级im即时通讯软件有哪些?

在目前的市场上&#xff0c;有几款常见的企业级即时通讯软件广受企业青睐。以下是其中几款主流企业级即时通讯软件的介绍和特点。 1. 微软Teams 微软Teams是一款集即时通讯、协作和视频会议功能于一体的企业级通讯软件。它提供了实时聊天、语音通话、视频会议、文件共享和团队…

账号和权限的管理1

文章目录 修改用户账号的属性usermod格式常用选项 用户账号的初始化配置文件文件来源主要的用户初始配置文件 组账号文件添加组账号groupadd格式常用选项其他选项 删除组账号groupdel格式 查询账号信息groups格式 id格式 finger格式 W、who、users格式 文件/目录的权限和归属访…

整车功能开发

整车功能开发 站在前人的肩膀上&#xff0c;从系统功能架构集成角度梳理下整车功能开发相关内容 1、整车功能开发相关文件介绍 1.1 配置表 上面的表格&#xff0c;是一种车辆特性的表达方式&#xff0c;其实比较传统&#xff0c;我们称之为配置表&#xff08;Feature list&a…

Python使用defaultdict简化值为list的字典

原始代码&#xff1a; from typing import Dictrelated_objects_for_fetch: Dict[str, list] {}for key, value in [(k1, v1), (k1, v2), (k2, v2), (k3, v3), (k2, v2)]:if key not in related_objects_for_fetch:related_objects_for_fetch[key] []if value not in (value…

AH1117-3.3芯片使用记录

今天在新做好的电路板上测试电源时发现一个问题&#xff0c;那就是散热端不能接地&#xff0c;接地了就好像短路一样&#xff0c;芯片会热的厉害&#xff0c;当我把该引脚与地的所有连接都切断后&#xff0c;短路现象消失&#xff0c;特此记录一下&#xff0c;防止自己下次再犯…

Shell脚本编程 — Shell Script

Shell脚本编程 — Shell Script 基本概念示例脚本示例1&#xff1a;备份文件示例2&#xff1a;监控磁盘使用情况示例3&#xff1a;批量重命名文件 运行脚本提示 Shell脚本是一种编程语言&#xff0c;主要用于在Unix/Linux系统中自动化执行任务。它通过编写一系列的命令来完成特…

49 - 列出指定时间段内所有的下单产品(高频 SQL 50 题基础版)

49 - 列出指定时间段内所有的下单产品 -- 指定2020年2月的方法 -- (1) order_date between 2020-02-01 and 2020-02-29 -- (2) order_date like 2020-02% -- (3) DATE_FORMAT(order_date, "%Y-%m") "2020-02" -- (4) LEFT(order_date, 7) 或 subst…

AI Agent:技术原理与未来趋势

在人工智能的快速发展中&#xff0c;AI Agent作为一项创新技术&#xff0c;正逐渐成为研究和应用的热点。AI Agent不仅仅是执行命令的程序&#xff0c;它们能够感知环境、做出决策并采取行动&#xff0c;展现出类似人类的群体协作能力。本文将探讨AI Agent的技术原理、开源框架…

解决idea中git无法管理项目中所有需要管理的文件

点击文件->设置 选择版本控制—>目录映射 点击加号 设置整个项目被Git管理

淘宝天猫小学升级复习学习资料怎么领取大额优惠券返利购物更省钱?

暑假是一个很好的机会来回顾和巩固过去一年里学到的知识。通过复习学习资料&#xff0c;孩子可以加深对基础知识的理解和记忆&#xff0c;为下一学年的学习打下坚实的基础。对于即将升入更高年级的孩子来说&#xff0c;他们可能会面临更加复杂和深入的学习内容。购买升学复习资…

图灵虚拟机配置

导入虚拟机 点击新建&#xff0c;选择虚拟硬盘文件 环境机器.vmdk 配置网络

pcap包常见拆分方法

文章目录 Wireshark 拆分流量包SplitCap使用简介魔数报错示例结果 在进行流量分析时&#xff0c;经常需要分析pcap流量包。但是体积过大的流量包不容易直接分析&#xff0c;经常需要按照一定的规则把它拆分成小的数据包。 这里统一选择cic数据集里的Thursday-WorkingHours.pcap…

10大内网安全管理系统!企业内网安全必备系统

内网安全管理系统对于维护企业网络安全至关重要&#xff0c;它们帮助监控、管理内部网络资源&#xff0c;防止数据泄露和安全威胁。以下是十款知名的内网安全管理系统。 1. 安企神终端安全管理系统 详细介绍&#xff1a; 安企神是针对企业内网安全需求设计的一款综合管理系统&…

HTML5的多线程技术:Web Worker API

Web Workers API 是HTML5的一项技术&#xff0c;它允许在浏览器后台独立于主线程运行脚本&#xff0c;即允许进行多线程处理。这对于执行密集型计算任务特别有用&#xff0c;因为它可以防止这些任务阻塞用户界面&#xff0c;从而保持网页的响应性和交互性。Web Workers在自己的…

计算机图形学笔记----矩阵

矩阵和标量的运算 ,则 矩阵与矩阵相乘 的矩阵A&#xff0c;的矩阵B。两矩阵&#xff0c;结果为的矩阵&#xff0c;第一个矩阵的列数必须和第二个矩阵的行数相同&#xff0c;否则不能相乘 &#xff0c;中的每个元素等于A的第i行所对应的矢量和B的第j列所对应的矢量进行矢量点…

Django 页面展示模型创建表的数据

1&#xff0c;添加视图函数 Test/app8/urls.py from django.shortcuts import render from .models import Userdef create_user(request):if request.method POST:username request.POST.get(username)email request.POST.get(email)# ... 获取其他字段的值# 创建用户实例…

新手练习项目 7:猜数字游戏

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#xff09; 目录 一、项目描述二、项目实现三、项目步骤四、项目扩展方向 更多项目内容&#xff0c;请关注我、订…

源码学习:文件描述符

在进程描述学习中&#xff0c;扯到了max_fds&#xff0c;接着就联想到了日常运维中常见的ulimit参数、sysctl内核参数&#xff0c;原来以为max_fds与这些个关联性比较强&#xff0c;但经过一早上折腾以后&#xff0c;发现其实还是有一些差距的。但是在学习过程中&#xff0c;却…