开发语言:C++

开发环境:VS2017

程序说明:商品销售系统程主要分为三部分:

commodity类的声明与实现(commodity.h、commodity.cpp)、

trade类的声明与实现(trade.h、trade.cpp)、

主函数及各功能模块设计(main.cpp)及相关的预编译头文件(stdafx.h、stdafx.cpp、tarverget.h)

程序的主界面及可实现的功能如下:

部分功能模块的界面如下:

程序会在当前目录下生成3个可见的txt文件,分别是stock.txt(商品记录)、sellRecord.cpp(销售记录)、buyRecord(进货记录)。

以下是代码部分:

commodity.h

#include <string.h>
class commodity
{
private:int static kinds;//商品种类int ID; //货品编号int stock;//库存量float buyValue;//进货的价格float sellValue;//卖出的价格char name[30];//商品名称
public:int getID();//获取IDint getStock();//获取库存float getBuyValue();//获取进货价float getsellValue();//获取卖出价char* getName();//获取商品名称void UpdateStock(int n);;  //改变库存量friend class trade;
commodity(char name[],float buyValue,float sellValue)
{kinds++;ID = kinds;this->stock = 0;//默认库存为0this->buyValue = buyValue;this->sellValue = sellValue;strcpy(this->name,name);
}
commodity(int ID,char name[],float buyValue,float sellValue,int stock)
{kinds++;this->ID = ID;this->stock = stock;this->buyValue = buyValue;this->sellValue = sellValue;strcpy(this->name,name);
}
};

commodity.cpp

#include "stdafx.h"
#include "commodity.h"
//初始化ID
int commodity::kinds  = 0;
void commodity::UpdateStock(int n)
{stock+=n;
}
int commodity::getStock()
{return stock;
}
int commodity::getID()
{return ID;
}
float commodity::getBuyValue()
{return buyValue;
}
float commodity::getsellValue()
{return sellValue;
}
char* commodity::getName()
{return name;
}

trade.h

#include "stdafx.h"
#include <list>
#include "commodity.h"
using std::list;
class trade{
struct record
{char name[30];//商品名称int count;//交易数量char sTime[70];//交易时间record(char* name,int count,char* time)//c++中的struct类似class{strcpy(this->name,name);this->count = count;strcpy(sTime,time);}
};//成员变量
private: list<commodity> dataList;//商品数据链表list<record> sellRecordList;//卖出商品数据链表list<record> buyRecordList;//买入商品数据链表//成员函数
public:bool GetInformathion(int index);//获取并输出商品信息void GetIndex();//获取并输出商品目录bool init();//从本地文件获取商品信息void save();//将商品信息保存到本地文件中bool Buy(int ID,int count);//买入商品的操作与数据检查bool Sell(int ID, int count);//售出商品的操作与数据检查void AddNew(char name[],float buyValue,float sellValue);//添加新的商品/*获得商品的购入和销售记录*/void getSellRecord();void getBuyRecord();
};

trade.cpp

#include "stdafx.h"
#include "trade.h"
#include <fstream>
#include <time.h>
#define CAP 5
#define TLEN 10
#define ALEN 30
using std::ofstream;
using std::ifstream;
bool trade::Buy(int ID,int count)
{for(auto iter = dataList.begin();iter!=dataList.end();iter++){ if(iter->getID() == ID){   iter->UpdateStock(count);time_t t =time(0);//记录当前系统时间char temp[50];strftime(temp,sizeof(temp),"%Y年%m月%d日%X%A",localtime(&t));//指定系统时间的输出格式并存入temp变量中buyRecordList.push_back(record(iter->name,count,temp));//将记录添加至买入商品数据链表尾部return true;}}return false;
}bool trade::Sell(int ID,int count)
{for(auto iter = dataList.begin();iter!=dataList.end();iter++){if(iter->getID() == ID && !(iter->getStock()+count<0))//当前库存不小于要卖出的数量{ iter->UpdateStock(-count);time_t t=time(0);char temp[50];strftime(temp,sizeof(temp),"%Y年%m月%d日%X%A",localtime(&t));sellRecordList.push_back(record(iter->name,count,temp));return true;} }return false;
}void trade::AddNew(char name[],float buyValue,float sellValue)
{dataList.push_back(commodity(name,buyValue, sellValue));
}
void trade::GetIndex()
{for(auto iter = dataList.begin();iter!=dataList.end();iter++){printf("\t  商品编号: %i  商品名称: %s\n",iter->getID(),iter->getName());}};
bool trade::GetInformathion(int index)
{for(auto iter = dataList.begin();iter!=dataList.end();iter++){if(iter->getID() == index ){printf("商品编号:%d\n商品名称:%s\n购入价格:%f\n出售价格:%f\n剩余:%d\n",index,iter->getName(),iter->getBuyValue(),iter->getsellValue(),iter->getStock());return true;}}return false;
}
void trade::save()
{ofstream file;file.open("stock.txt");if(!file.fail()){file<<" ════════════════════════════ \n";file<<"               ***** 商品信息 *****                       \n";file<<" ════════════════════════════ \n";for(auto iter = dataList.begin();iter!=dataList.end();iter++){file<<"ID:"<<iter->getID()<<"\tNAME:"<<iter->getName()<<"\tCOST:"<<iter->getBuyValue()<<"\tVALUE:"<<iter->getsellValue()<<"\tSTOCK:"<<iter->getStock()<<"\n";}}else{printf("记录文件创建失败");}file.close();file.open("sellRecord.txt");if(!file.fail()){file<<" ════════════════════════════ \n";file<<"               ***** 销售信息 *****                       \n";file<<" ════════════════════════════ \n";for(auto iter = sellRecordList.begin();iter!=sellRecordList.end();iter++){file<<"NAME:"<<iter->name<<"\tTIME:"<<iter->sTime<<"\tCOUNT:"<<iter->count<<"\n";}}else{printf("销售记录文件创建失败");}file.close();file.open("buyRecord.txt");if(!file.fail()){file<<" ════════════════════════════ \n";file<<"               ***** 购入信息 *****                       \n";file<<" ════════════════════════════ \n";for(auto iter = buyRecordList.begin();iter!=buyRecordList.end();iter++){file<<"NAME:"<<iter->name<<"\tTIME:"<<iter->sTime<<"\tCOUNT:"<<iter->count<<"\n";}}else{printf("购入记录文件创建失败");}}
bool trade::init()
{ifstream file("stock.txt");if(!file.fail()){char titles[CAP][TLEN]={"ID:","NAME:","COST:","VALUE:","STOCK:"};char saves [CAP][ALEN]={};int tIndex = 0;char buf[128];int kinds = 0;//商品种类计数for(int i=0;i<3;i++)  //忽略标题{      file.getline(buf,128);}while(!file.eof()){char temp[TLEN]="";//读取文件内容的字符数组for (int i=0;i<TLEN&&!file.eof();i++)//for NO.1{file.get(temp[i]);if(strcmp(temp,titles[tIndex])==0){for(int j=0;j<ALEN&&!file.eof();j++)//for NO.2{char c;file.get(c);if(c!='\t'&&c!='\n'){saves[tIndex][j] = c;}else if(c!='\n'){if(tIndex>4){return false;//行参数结尾后仍然有字符存在,失效}tIndex++;break; //break NO.2}else{dataList.push_back(commodity(atoi(saves[0]),saves[1],atof(saves[2]),atof(saves[3]),atoi(saves[4])));tIndex=0;  kinds++;break; //break NO.2}if(j==ALEN-1){return false;//超过了参数长度,初始化失败}}//end NO.2break;//break NO.1}if(i==TLEN-1){return false; //没有匹配到参数名称,初始化失败}}//end NO.1    }//end While,读取结束commodity::kinds=kinds ;return true;}return false;//文件不存在,初始化失败
}
void trade::getSellRecord()
{for(auto iter = sellRecordList.begin();iter!=sellRecordList.end();iter++){printf("\t出售商品名称:%s\n",iter->name);printf("\t交易日期:%s\n",iter->sTime);printf("\t出售数目:%d\n",iter->count);printf("\t ════════════════════════════ \n");}
}
void trade::getBuyRecord()
{for(auto iter = buyRecordList.begin();iter!=buyRecordList.end();iter++){printf("\t购入商品名称:%s\n",iter->name);printf("\t交易日期:%s\n",iter->sTime);printf("\t购入数目:%d\n",iter->count);printf("\t ════════════════════════════ \n");}
}

main.cpp

// 13.1.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "trade.h"
#include <iostream>
using namespace::std;
void ToBuy(int& ID,int& count)
{cout<<"请输入购买商品的编号"<<endl;cin>>ID;getchar();cout<<"请输入购买商品的数量:"<<endl;cin>>count;getchar();
}
void ToSell(int& ID,int& count)
{cout<<"请输入卖出商品的编号"<<endl;cin>>ID;getchar();cout<<"请输入卖出商品的数量:"<<endl;cin>>count;getchar();
}
void operate()
{printf("按任意键继续");getchar();system("cls");}
void drawIndex()
{system("cls");printf("\t ════════════════════════════ \n");printf("\t               ***** 商品目录 *****                       \n");printf("\t ════════════════════════════ \n");}
void drawLine()
{printf("\t ════════════════════════════ \n");
}
void DrawMainMenu()
{printf("\t--------------------------------------------------------\n");printf("\t|              欢迎使用商品销售系统                    |\n");printf("\t|------------------------------------------------------|\n");printf("\t|                 1 -   购进商品                       |\n");printf("\t|                 2 -   卖出商品                       |\n");printf("\t|                 3 -   添加新品                       |\n");printf("\t|                 4 -   查看商品信息                   |\n");printf("\t|                 5 -   查看采购记录                   |\n");printf("\t|                 6 -   查看销售记录                   |\n");printf("\t|                 7 -   退出                           |\n");printf("\t--------------------------------------------------------\n");
}
void drawBuyRecord()
{system("cls");printf("\t ════════════════════════════ \n");printf("\t               ***** 采购记录 *****                         \n");printf("\t ════════════════════════════ \n");
}void drawSellRecord()
{system("cls");printf("\t ════════════════════════════ \n");printf("\t               ***** 销售记录 *****                         \n");printf("\t ════════════════════════════ \n");
}int main(int argc, _TCHAR* argv[])
{trade myTrade;if(!myTrade.init()){myTrade = trade();}bool quitFlag =false;while(!quitFlag){DrawMainMenu();printf("请输入您的选项:");int selection;cin>>selection;getchar();int ID;int count;switch(selection){case 1:drawIndex();myTrade.GetIndex();drawLine();;ToBuy(ID,count);if(myTrade.Buy(ID,count)){system("cls");printf("操作成功,");}else{system("cls");printf("您的输入有误,");}operate();break;case 2:drawIndex();myTrade.GetIndex();drawLine();ToSell(ID,count);if(myTrade.Sell(ID,count)){system("cls");printf("操作成功,");                  }else{system("cls");printf("您的输入有误,");                  }operate();break;case 3:char name[30];float value;float cost;system("cls");cout<<"请输入新品的名称"<<endl;cin>>name;getchar();cout<<"请输入购入价格"<<endl;cin>>cost;getchar();cout<<"请输入出售价格"<<endl;cin>>value;getchar();myTrade.AddNew(name,cost,value);system("cls");printf("操作成功,");operate();break;case 4:drawIndex();myTrade.GetIndex();drawLine();cout<<"请输入商品编号:";int index;cin>>index;getchar();system("cls");if(!myTrade.GetInformathion(index)){cout<<"无效的商品编号,";operate();}else{operate();}break;case 5:drawBuyRecord();myTrade.getBuyRecord();operate();break;case 6:drawSellRecord();myTrade.getSellRecord();operate();break;case 7:quitFlag = true;break;default:system("cls");printf("无效的选项,");operate();}}myTrade.save();return 0;
}

stadfx.h

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>

stadfx.cpp

// stdafx.cpp : 只包括标准包含文件的源文件// stdafx.obj 将包含预编译类型信息#include "stdafx.h"

targetver.h

#pragma once// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。#include <SDKDDKVer.h>

按照书上敲得

C++入门编程实战(二)商品销售系统相关推荐

  1. C++项目实战(一)——简单商品销售系统实现

    本项目通过使用win32控制台应用程序实现一个非常简单的商品销售系统,主要涉及的知识点包含有:类的设计与使用.文件流操作.标准模板库的使用. 简单商品销售系统: 需求分析: 我们需要实现一个 能进货. ...

  2. C语言实现商品销售系统

    商品销售系统 #include<stdio.h> //头文件 #include<string.h> //头文件 #include<stdlib.h> //头文件 # ...

  3. C语言—商品销售系统

    #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //头文件 #include<string.h> //头文件 #incl ...

  4. java商品销售_商品销售系统(Java).doc

    淮海工学院计算机工程学院 实验报告书 课程名:<面向对象程序设计> 实验名称: Java深入面向对象编程 商品销售系统 班 级: 软件081 组 长: 组 员: 李宏志. 谢超 一.实验目 ...

  5. 入门与实战_商品运营入门——实战秘籍

    企业中, 一个专业的商品不一定帮企业赚到钱, 但一定能帮企业控制"风险" 商品企划偏离严重,可能带来大量库存: 门店补货时间节点没有把握好,可能补回来一堆库存: 不懂商品数据分析, ...

  6. c语言课程设计商品销售系统,c语言课程设计商品销售管理系统.pdf

    C语言课程设计商 品销售管理系统 1 2020 年 4 月 19 日 文档仅供参考 商品销售管理系统 目录 一. 需求分析 2 二.概要设计 2 三.详细设计 4 四.调试分析 14 五.用户手册 1 ...

  7. c++资料匠心精作C++从0到1入门编程(二)- c++核心

    目录 C++核心编程 1 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 new操作符 2 引用 2.1 引用的基本使用 2.2 引用注意事项 2.3 引用做函数参数 2.4 引用做函数 ...

  8. 基于C语言的商店商品销售系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/86927526 资源下载地址:https://download.csdn.net/downl ...

  9. JavaWeb商品销售系统的设计与实现

    前言 今天,博主接了一个小任务,开发一款JavaWeb网上点餐系统,此外要将该系统更改为鞋城销售系统,药品销售系统以及茶叶销售系统.话不多说,开干! 客户要求,使用他提供的一套数据库操作工具类,博主看 ...

最新文章

  1. SpringBoot-web开发(一): 静态资源的导入(源码分析)
  2. 最烦人的正则表达式记忆口诀
  3. Jquery中attr与prop的区别
  4. docker之手动构建新的镜像
  5. 关于ASP.NET MVC
  6. 一周消息树:程序员想找好工作?那就学好Linux!
  7. 你说,辽宁输在哪了?
  8. 运用事理图谱搞事情:新闻预警、事件监测、文本可视化、出行规划与历时事件流生成
  9. dubbo 支持服务降级吗_dubbo面试题!会这些,说明你真正看懂了dubbo源码
  10. thinkphp mysql 中文 问号_thinkphp分页中文参数乱码解决
  11. c语言程序如何实现分组,c程序-实现随机分组.ppt
  12. MyBatis数据库链接池源码分析
  13. 【转】牛仔裤品牌介绍大全
  14. 基于matlab的qpsk与bpsk信号性能比较仿真,基于matlab的QPSK与BPSK信号性能比较仿真...
  15. windows批量修改文件后缀名
  16. [Windows批处理]清除IE缓存
  17. 「经济读物」一课经济学
  18. 论坛报名 | 语音与自然语言处理的最新突破和前沿趋势。道翰天琼认知智能平台为您揭秘新一代人工智能-1。
  19. 阿里云服务器快速购买、自定义购买、通过活动购买图文教程
  20. Java实现图片格式转换(通过ImageIO)

热门文章

  1. docsify框架java_notes-docsify
  2. 互联网应用基础第三课:初识搜索引擎和常见网站类型
  3. 模拟电子技术实验作业(10)
  4. Tencent login函数登录成功后无法成功回传数据(无法返回回调方法) Android qq授权登录
  5. 如果需要跳槽,自己该怎样去写简历?
  6. linux 小企鹅输入法 方块乱码
  7. 中国监控电路市场深度研究分析报告
  8. C++编程(一) :C++基础入门
  9. 半角空格 全角空格 不间断空格 通过过滤器解决
  10. 学习笔记-使用python进行数据分析