一、需求分析

1、商品上架:添加商品信息;
2、商品浏览:输出商品信息;
3、商品销售:输入商品编号和购买数量,通过商品标号获得商品名称和单价;通过输入的购买数量,修改该商品的库存量,计算该商品应付金额。一个销售单可包含多个商品,操作结束时打印整个销售单应付的金额;
4、商品查询;

二、数据结构

1)逻辑结构
商品及销售单使用线性结构表示(顺序表)
2)物理结构(物理结构要给出所用到的类型定义,如结点类型、线性表类型等)
//商品结构体
struct Goods {
string id; //编号
string name; //名称
double price; //单价
string producer; //生产商
int store; //库存
};
//销售单项
struct OrderItem {
string id; //编号
string name; //名称
double price; //单价
int count; //数量
};

typedef struct {
Goods *elem;//顺序表首地址
int length;
} SqlList; //商品表

typedef struct {
OrderItem *elem;
int length;
} OrderSqlList; //订单表

三、函数调用关系(所有函数间的调用关系,包括main函数)

main函数根据用户输入数字选项调用以下函数

//初始化
status InitListSq(SqlList &L);
status InitOListSq(OrderSqlList &L);

//根据id,name查询商品
int locateElem_Sq(SqlList &L, string id);

int Find_Name(SqlList &L, string name) ;

//商品上架
status ListInsert(SqlList &L, Goods g);

//添加订单
status ListOInsert(OrderSqlList &L, OrderItem o);

//商品的销售 修改goods库存
int ListUpdate(SqlList &L, string id, int count);

//打印
void PrintAllGoods(SqlList &L);
void PrintOrder(OrderSqlList &L);

//保存
void Save_Disk(SqlList &L);
void Save_Order_Disk(OrderSqlList &L);

【代码】
shop.h

#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
#include<stdio.h>// 程序状态码
#define MAXSIZE 100
#define OK 1
#define ERROR0 -3
#define ERROR1 0
#define ERROR2 -1
#define OVERFLOW -2using namespace std;typedef int status;//返回值状态
typedef int ElemType;//返回值的类型//商品结构体
struct Goods {string id; //编号string name; //名称double price; //单价string producer; //生产商int store;  //库存};
//销售项
struct OrderItem {string id; //编号string name; //名称double price; //单价int count;  //数量
};//顺序表结构体
typedef struct {Goods *elem;//顺序表首地址int length;
} SqlList; //商品表 typedef struct {OrderItem *elem;int length;
} OrderSqlList; //订单表 //顺序表的初始化
status InitListSq(SqlList &L);
status InitOListSq(OrderSqlList &L);//根据id,name查询商品
int locateElem_Sq(SqlList &L, string id);int Find_Name(SqlList &L, string name) ;//商品上架
status ListInsert(SqlList &L, Goods g);//添加订单
status ListOInsert(OrderSqlList &L, OrderItem o);//商品的销售  修改goods库存
int ListUpdate(SqlList &L, string id, int count);//打印
void PrintAllGoods(SqlList &L);
void PrintOrder(OrderSqlList &L);//保存
void Save_Disk(SqlList &L);
void Save_Order_Disk(OrderSqlList &L);

main.cpp

#include<iostream>
#include "shop.h"int main() {SqlList L;OrderSqlList O; int i = 0;int temp, a, c, choose = -1;double price;Goods e;OrderItem o;double total = 0;              //订单总应付价格 string hand_1, hand_2, hand_3, hand_4, hand_5;cout << "********************************************************" << endl;cout << "*                  商品销售管理系统菜单                *" << endl;cout << "********************************************************" << endl;cout << "*                                                      *" << endl;cout << "*      1、初始化  2、录入商品信息  3、商品查询         *" << endl;cout << "*                                                      *" << endl;cout << "*  4、商品上架  5、商品销售  6、浏览所有商品  7、退出  *" << endl;cout << "*                                                      *" << endl;cout << "********************************************************" << endl;while (choose!=0) {cout << "请输入操作项【0-7】:";cin >> choose;switch (choose) {case 1: {//创建顺序表if (InitListSq(L) && InitOListSq(O)) {cout << "初始化成功!" << endl;} else {cout << "初始化失败!" << endl;}break;}case 2: {    // 顺序表信息录入int i = 0;L.elem = new Goods[MAXSIZE];if (!L.elem) {exit(OVERFLOW);}L.length = 0;fstream FilePtr;FilePtr.open("e:/goods.txt");if (!FilePtr) {    //容错判断!!! cout << "文件读取失败!" << endl;exit(ERROR0);}//跳过文件中 第一行表头FilePtr >> hand_1 >> hand_2 >> hand_3>> hand_4 >> hand_5;while (!FilePtr.eof()) {FilePtr >> L.elem[i].id >> L.elem[i].name >> L.elem[i].price >> L.elem[i].producer >> L.elem[i].store;i++;}cout << "信息导入成功!" << endl;L.length = i;FilePtr.close();break;}case 3: { //查找string name;printf("请输入查找名称:");cin>>name;int index = Find_Name(L,name);if(index>=0) {//cout<<"您要查找的书籍"<<name<<"价格为:"<<L.elem[index].price<<endl<<endl;cout <<"查找到商品编号:"<<L.elem[index].id<<",名称:"<<L.elem[index].name<<",价格:"<<L.elem[index].price<<",生产商:"<<L.elem[index].producer<<",库存数:"<<L.elem[index].store<<endl;} else {printf("查找不存在!\n");}break;}case 4: {// 插入图书string id,name,pr;double p;int index,s;printf("请输入编码:");cin>>id;printf("请输入名称:");cin>>name;printf("请输入单价:");cin>>p;printf("请输入生产商:");cin>>pr;printf("请输入库存:");cin>>s;e.id = id;e.name = name;e.price = p;e.producer = pr;e.store = s;int state = ListInsert(L, e);if(state == ERROR2) {printf("存储位置已满!上架商品失败\n");} else {printf("成功存入!\n");}break;}case 5: {string buy;while(buy!="n") {string id; //idint c; //countcout << "请输入购买编号" << endl;cin>>id;cout << "请输入购买数量" << endl;cin>>c;//scanf("%s %d",&id,&c);              if(ListUpdate(L, id, c)) {                      cout << "购买成功!" << endl;}int index = locateElem_Sq(L, id);if(index>=0) {cout <<"商品编号:"<<L.elem[index].id<<",名称:"<<L.elem[index].name<<",价格:"<<L.elem[index].price<<",生产商:"<<L.elem[index].producer<<",库存数:"<<L.elem[index].store<<endl;} else {printf("查找不存在!\n");}o.id = id;o.name = L.elem[index].name;o.price = L.elem[index].price;o.count = c;int state = ListOInsert(O, o);if(state == ERROR2) {printf("存储位置已满!添加订单失败\n");} else {cout << "成功加入订单!" << endl;total+= o.price*o.count;cout << "********************************************************" << endl;cout << "总价:"<< total << endl; PrintOrder(O);cout << "********************************************************" << endl;cout << "是否继续购买?y/n" << endl;cin >> buy;                   }                                                                   }                           break;}                         case 6: {PrintAllGoods(L);cout << "打印完成!" << endl;break;}case 7: {cout << "************生成的销售单****************" << endl;PrintOrder(O);    cout << "需付总额为"<< total << endl; cout << "****************************************" << endl;                  Save_Disk(L);Save_Order_Disk(O);                printf("感谢使用!\n");return 0;}}}return 0;
}

shop_manager.cpp

#include "shop.h"//顺序表的初始化 商品
status InitListSq(SqlList &L) {L.elem = new Goods[MAXSIZE];    //申请100个数组if(!L.elem) {// 内存申请失败,直接退出程序exit(OVERFLOW);}L.length = 0;        //初始return OK;
};// 初始化 order
status InitOListSq(OrderSqlList &L) {L.elem = new OrderItem[MAXSIZE];  //申请100个数组if(!L.elem) {// 内存申请失败,直接退出程序exit(OVERFLOW);}L.length = 0;        //初始return OK;
};//查询 下标
int locateElem_Sq(SqlList &L, string e) { // 根据id查询 for(int i = 0; i < L.length; i++) {if(L.elem[i].id == e) {return i ;}}return 0;
}int Find_Name(SqlList &L, string name) { // 根据name查询 for(int i = 0; i < L.length; i++) {if(L.elem[i].name == name) {return i ;}}return -1;
}status ListInsert(SqlList &L, Goods g) { // 商品上架 if(L.length == MAXSIZE) return ERROR2;L.elem[L.length] = g;++L.length;return OK;
}status ListOInsert(OrderSqlList &L, OrderItem o) { // 添加至订单 if(L.length == MAXSIZE) return ERROR2;L.elem[L.length] = o;++L.length;return OK;
}int ListUpdate(SqlList &L, string id, int count) { //修改商品库存 for(int i = 0; i < L.length; i++) {if(L.elem[i].id == id) {L.elem[i].store -= count;} }return 1;
} //打印
void PrintAllGoods(SqlList &L) { //打印商品 for(int i=0;i<L.length;i++) {cout <<"商品编号:"<<L.elem[i].id<<",名称:"<<L.elem[i].name<<",价格:"<<L.elem[i].price<<",生产商:"<<L.elem[i].producer<<",库存数:"<<L.elem[i].store<<endl;}
}void PrintOrder(OrderSqlList &L) { //打印订单 for(int i=0;i<L.length;i++) {cout <<"商品编号:"<<L.elem[i].id<<",名称:"<<L.elem[i].name<<",单价"<<L.elem[i].price<<",购买数量:"<<L.elem[i].count<<endl;}
}void Save_Disk(SqlList &L) { //保存goods文件 fstream Fileout("e:/goods.txt",ios::out);if (!Fileout) {cout << "文件写入失败!" << endl;exit(ERROR0);}Fileout<<"id " <<"name "<<"price "<<"producer "<<"store"<<endl;for(int i = 0; i < L.length; ++i) {Fileout<<L.elem[i].id<<' '<<L.elem[i].name<<' '<<L.elem[i].price<<' '<<L.elem[i].producer<<' '<<L.elem[i].store<<endl;   }Fileout.close();return;
}void Save_Order_Disk(OrderSqlList &L) { //保存订单至磁盘fstream Fileout("e:/order.txt",ios::out);if (!Fileout) {cout << "订单文件写入失败!" << endl;exit(ERROR0);}Fileout<<"id " <<"name "<<"count "<<"price"<<endl;for(int i = 0; i < L.length; ++i) {Fileout<<L.elem[i].id<<' '<<L.elem[i].name<<' '<<L.elem[i].count<<' '<<L.elem[i].price<<endl;     }Fileout.close();return;
}

【运行结果】

数据结构课程设计---商品销售管理系统C/C++相关推荐

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

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

  2. c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...

    <数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...

  3. 计算机数据库课程设计,药品销售管理系统

    计算机数据库课程设计,药品销售管理系统 https://x-x.fun/i/Lb0b58c73eUr9

  4. 数据结构课程设计-班级考勤管理系统

    数据结构课程设计-班级考勤管理系统 写这个博客,主要是为了总结一下,之前写过的东西,方便以后回来看看,写得不好,勿喷!!! 题目描述: 设计一个对本班所有人员进行考勤的管理系统,要求系统管理员(班长. ...

  5. 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一.设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程.通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择 ...

  6. 数据结构课程设计---学生信息管理系统

    1. 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能:      建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息, ...

  7. 数据结构课程设计--学生信息管理系统

    stu.h /********************************************************************** *版权所有:2017,zhangcuipin ...

  8. 算法与数据结构课程设计城市公交管理系统(C、C++)

    城市公交管理系统 项目功能模块(需要源码请私信) 1.添加功能: [1]添加公交站,将站点信息写入stations.txt中: [2]添加交通路线,将路线信息写入bus.txt中: 2.删除功能: [ ...

  9. 数据结构课程设计(考试管理系统)

    为考试报名管理人员编写一个考试报名管理系统 ,用菜单选择方式完成下列功能: 1.考生报名信息添加:包括准考证号.姓名.性别.年龄.学院.专业.班级.身份证号.报考科目(eg. CET4/CET6)等. ...

最新文章

  1. centos php ioncube_Linux/Centos 安装PHP ioncube扩展
  2. 盘丝洞服务器维护,9月27日“盘丝洞”等服务器停机更新
  3. java中的dispose()方法
  4. Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改
  5. navicat 怎么调试存储过程_Mysql调试存储过程最简单的方法
  6. vscode python环境_在vscode中配置python环境
  7. MySql命令——命令行客户机的分隔符
  8. 毕设日志——Linux软连接的建立与删除
  9. 腾讯推出产业版地图WeMap,“一张图”破局五大行业场景
  10. JY游戏开发,案例之 《下到一百层》,欢迎大家品赏。
  11. c++ 暂停功能_苹果拥抱Rust,正在将C代码移植到Rust
  12. 大数据教程(10.3)web日志数据清洗
  13. Layui在表格中无法显示进度条(layui-progress)的值
  14. qgc地面站如何导入离线地图_【技术贴第三期】如何玩转离线地图?
  15. java大战坦克代码_坦克大战java源代码.doc
  16. 【C++ 程序】 小游戏汇编
  17. 11、ARM嵌入式系统:中断使能
  18. 【Rust日报】 2019-08-05:用Rust重写物联网网关 Part 2: 饮鸩止渴:为什么我们不用C++重写IoT应用...
  19. MFC对话框标题栏颜色自绘,标题栏由过渡色组成,自绘关闭按钮
  20. 大脸猫:「网站优化」网站优化宝典-网站优化建议

热门文章

  1. formatDate
  2. 阿里云服务器跟淘宝上租的服务器有什么区别
  3. 运营一款电视盒子需要注意什么?
  4. Chrome插件5: 点击插件超链接 自动百度
  5. Windows7 Home高级 64 中文版 + TortoiseSVN 64 英文版 + SVN Server 32
  6. Matlab进行射频TRL校准,如何使用TRL校准方式进行波导校准?
  7. 微信视频号重走公众号老路
  8. 在UWP应用中加入Cortana语音指令集
  9. 学校无盘服务器配置,学校无盘服务器配置
  10. 前华为全球高端招聘总监吕昕蔚 | 15年面试上万人的经验分享