基于C++开发的仓库管理系统(附源码)

  • 一、简介
    • 1、开始菜单
    • 2、登录后的菜单
  • 二、C++代码
    • main.cpp

一、简介

  仓库管理系统的功能有登录、注册、查询功能、入库功能、出库功能、添加商品、删除商品、退出,按下相应的数字键后进入各自的功能,用户的信息和商品的信息分别保存在user.txt和good.txt中,保存在文本文件中的数据不会轻易的遗失,可以很好的保存好用户和商品的信息。

1、开始菜单

  开始菜单为注册、登录、退出,注册时会将用户填写的信息写入user.txt中,注册时需要输入两次密码,保证用户密码的准确,注册成功后会在下方提示用户注册成功。登录时会提取user.txt中的用户数据进行登录验证,登录成功后会在下方提示用户登录成功。退出是退出当前的菜单。


2、登录后的菜单

  登录后的菜单为查询功能、入库功能、出库功能、添加商品、删除商品、退出。


  在查询功能中,可以查询当前用户的信息,也可以根据商品编号随时查看当前仓库的库存,包括商品编号、商品名称、原始库存、进货数目、出货数目、最终库存。退出是退出当前的菜单。



  在入库功能中,可以根据商品编号进行货物的入库,增加商品的库存量。


  在出库功能中,可以根据商品编号进行货物的出库,减少商品的库存量。


  在添加商品中,可以添加仓库的商品,添加的信息包括商品编号、商品名称、原始库存、进货数目、出货数目、最终库存,成功添加时会在下方提示商品添加成功。


  在删除商品功能中,可以根据商品编号进行商品的删除,成功删除时会在下方提示商品删除成功。


二、C++代码

    在本账号的资源中有分享出源文件

main.cpp

#include <iostream>
#include<string>
#include <vector>
#include <conio.h>
#include <fstream>
#include <sstream>using namespace std;void function();
void writeUser(string ID,string name,string pwd);
void writeGood(string ID,string name,int originalNum,int outNum,int inNum,int finalNum);
void query();//登录后的菜单
void menuLogin(){cout << " ---------------------------欢迎使用仓库管理系统------------------------" << endl;cout << " |                         1、查询功能                                  |" << endl;cout << " |                         2、入库功能                                  |" << endl;cout << " |                         3、出库功能                                  |" << endl;cout << " |                         4、添加商品功能                              |" << endl;cout << " |                         5、删除商品功能                              |" << endl;cout << " |                         6、退出                                      |" << endl;cout << " -----------------------------------------------------------------------" << endl;cout << " 请输入你的选择:";
}//查询功能的菜单
void menuQuery(){cout << " ---------------------------欢迎使用仓库管理系统------------------------" << endl;cout << " |                         1、查询账号信息                              |" << endl;cout << " |                         2、查询库存信息                              |" << endl;cout << " |                         3、退出                                      |" << endl;cout << " -----------------------------------------------------------------------" << endl;cout << " 请输入你的选择:";
}//总菜单
void menuSub(){cout << " ---------------------------欢迎使用仓库管理系统------------------------" << endl;cout << " |                         1、注册                                      |" << endl;cout << " |                         2、登录                                      |" << endl;cout << " |                         3、退出                                      |" << endl;cout << " -----------------------------------------------------------------------" << endl;cout << " 请输入你的选择:";
};//user类
class user{private:string ID;string Name;string Password;
public:user(){};void Register();void Enter();void queryUser();void readUser(string number);
};//读取用户的信息
void user::readUser(string number){string IDStr,nameStr,pwdStr;istringstream is(number);is>>IDStr>>nameStr>>pwdStr;this->ID=IDStr;this->Name=nameStr;this->Password=pwdStr;
}
//当前用户nowUser
user nowUser;//注册功能
void user::Register()
{string pw1;string pw2;user person;
flag:cout << "请设置您的ID:";cin >> person.ID;ifstream rfile;rfile.open("user.txt",ios::in);string temp;user u;while(getline(rfile,temp)){u.readUser(temp);if(u.ID == person.ID){cout << "该ID已存在,请重新设置!" << endl;goto flag;}}cout << "请设置您的用户名:";cin>>person.Name;cout << "请设置您的密码:";
flag0:cin >> pw1;cout << "请再次确认您的密码:";cin >> pw2;if(pw1 != pw2){cout << "前后两次输入密码不一致,请重新设置密码!" << endl;goto flag0;}person.Password  =pw1;writeUser(person.ID,person.Name,person.Password);cout << "\n" << endl;cout << "用户[" << person.Name << "]注册成功!" << endl;system("pause");
};//登录功能
void user::Enter()
{flag1:cout << "请输入你的ID:";string id;string pwd;cin >> id;ifstream rfileId;rfileId.open("user.txt",ios::in);string tempId;user userId;while(getline(rfileId,tempId)){userId.readUser(tempId);if(userId.ID == id){goto flag2;}}cout << "该ID不存在,请重新输入!" << endl;goto flag1;flag2:cout << "请输入你的密码:";cin >> pwd;ifstream rfilePwd;rfilePwd.open("user.txt",ios::in);string tempPwd;user userPwd;while(getline(rfilePwd,tempPwd)){userPwd.readUser(tempPwd);if(userPwd.ID == id){if(userPwd.Password == pwd){break;}else{cout << "密码错误,请重新输入!" << endl;system("pause");goto flag2;}}}nowUser = userPwd;cout << "\n" << endl;cout << "用户[" << userPwd.Name << "]登录成功!" << endl;system("pause");function();
};//显示当前用户的信息
void user::queryUser(){cout << "您的ID为:" << this->ID << endl;cout << "您的密码为:" << this->Password << endl;cout << "您的用户名为:" << this->Name << endl;system("pause");
}//将注册的用户信息写入user.txt
void writeUser(string ID,string name,string pwd){fstream wfile;int IDLen = ID.size();int nameLen = name.size();int pwdLen = pwd.size();char *IDnumber = new char[IDLen];char *username = new char[nameLen];char *password = new char[pwdLen];strcpy(IDnumber,ID.c_str());strcpy(username,name.c_str());strcpy(password,pwd.c_str());wfile.open("user.txt",ios::out|ios::app);wfile.write(IDnumber,IDLen);wfile.write(" ",strlen(" "));wfile.write(username,nameLen);wfile.write(" ",strlen(" "));wfile.write(password,pwdLen);wfile.write("\n",strlen("\n"));wfile.close();
}//good类
class good{private:string ID;string Name;int originalNum;int outNum;int inNum;int finalNum;
public:good(){};void queryGood();void library();void readGood(string number);void outbound();void deleteGood();
};//vector是一个封装了动态大小数组的顺序容器,用于存放所有商品的信息
vector<good> goods;//将商品信息写入good.txt
void writeGood(string ID,string name,int originalNum,int outNum,int inNum,int finalNum){char originalNumCh[10];_itoa(originalNum, originalNumCh, 10);string originalNumStr(originalNumCh, originalNumCh+strlen(originalNumCh));char outNumCh[10];_itoa(outNum, outNumCh, 10);string outNumStr(outNumCh, outNumCh+strlen(outNumCh));char inNumCh[10];_itoa(inNum, inNumCh, 10);string inNumStr(inNumCh, inNumCh+strlen(inNumCh));char finalNumCh[10];_itoa(finalNum, finalNumCh, 10);string finalNumStr(finalNumCh, finalNumCh+strlen(finalNumCh));int IDLen = ID.size();int nameLen = name.size();int originalNumStrLen = originalNumStr.size();int outNumStrLen = outNumStr.size();int inNumLen = inNumStr.size();int finalNumLen = finalNumStr.size();char *IDnumber = new char[IDLen];char *username = new char[nameLen];char *originalNumArr = new char[originalNumStrLen];char *outNumArr = new char[outNumStrLen];char *inNumArr = new char[inNumLen];char *finalNumArr = new char[finalNumLen];strcpy(IDnumber,ID.c_str());strcpy(username,name.c_str());strcpy(originalNumArr,originalNumStr.c_str());strcpy(outNumArr,outNumStr.c_str());strcpy(inNumArr,inNumStr.c_str());strcpy(finalNumArr,finalNumStr.c_str());fstream wfile;wfile.open("good.txt",ios::out|ios::app);wfile.write(IDnumber,IDLen);wfile.write(" ",strlen(" "));wfile.write(username,nameLen);wfile.write(" ",strlen(" "));wfile.write(originalNumArr,originalNumStrLen);wfile.write(" ",strlen(" "));wfile.write(outNumArr,outNumStrLen);wfile.write(" ",strlen(" "));wfile.write(inNumArr,inNumLen);wfile.write(" ",strlen(" "));wfile.write(finalNumArr,finalNumLen);wfile.write("\n",strlen("\n"));wfile.close();
}//读取商品的信息
void good::readGood(string number){string IDStr,nameStr,originalNumStr,outNumStr,inNumStr,finalNumStr;istringstream is(number);is >> IDStr >> nameStr >> originalNumStr >> outNumStr >> inNumStr >> finalNumStr;stringstream ssOriginalNum;ssOriginalNum << originalNumStr;int originalNum;ssOriginalNum >> originalNum;stringstream ssOutNum;ssOutNum << outNumStr;int outNum;ssOutNum >> outNum;stringstream ssInNum;ssInNum << inNumStr;int inNum;ssInNum >> inNum;stringstream ssFinalNum;ssFinalNum << finalNumStr;int finalNum;ssFinalNum >> finalNum;this->ID = IDStr;this->Name = nameStr;this->originalNum = originalNum;this->outNum = outNum;this->inNum = inNum;this->finalNum = finalNum;
}//查询并显示对应商品的信息
void good::queryGood(){good findGood;string temp;string inNumber;ifstream rfile;rfile.open("good.txt",ios::in);int num = rfile.tellg();if(num == -1){cout << "提示:找不到 good.txt 文件!" << endl;cout << "提示:请添加 good.txt 文件!" << endl;rfile.close();}else{rfile.close();while(1){ifstream rfile;rfile.open("good.txt",ios::in);cout << "请输入查询商品的货品编号:";cin >> inNumber;while(getline(rfile,temp)){findGood.readGood(temp);if(findGood.ID==inNumber){cout << "您的货品编号为:" << findGood.ID << endl;cout << "您的货品名称为:" << findGood.Name << endl;cout << "您的原始库存为:" << findGood.originalNum << endl;cout << "您的进货数目为:" << findGood.inNum << endl;cout << "您的出货数目为:" << findGood.outNum << endl;cout << "您的最终库存为:" << findGood.finalNum << endl;  rfile.close();goto flag3;}}cout << "输入有误,请重新输入!" << endl;}
flag3:system("pause");}
}//查询功能
void query()
{char choice;good queryGood;while(1){system("cls");menuQuery();cin >> choice;switch(choice){case '1':nowUser.queryUser();break;case '2':queryGood.queryGood();break;case '3':return ;break;default:cout << "提示:请输入有误,重新输入!" << endl;system("pause");}}
}//入库功能
void good::library(){ifstream rfile;good findGood;rfile.open("good.txt",ios::in);string temp;string inNumber;int num = rfile.tellg();if(num == -1){cout << "提示:找不到 good.txt 文件!" << endl;cout << "提示:请添加 good.txt 文件!" << endl;}else{while(1){cout << "请输入查询商品的货品编号:";cin >> inNumber;while(getline(rfile,temp)){        findGood.readGood(temp);if(findGood.ID == inNumber){goto flag4;}}cout << "输入有误,请重新输入!" << endl;system("pause");}
flag4:cout<<"请输入入库的数目:";int libraryNumber;cin >> libraryNumber;int inNumTemp = findGood.inNum;int finalNumTemp = findGood.finalNum;findGood.inNum += libraryNumber;findGood.finalNum += libraryNumber;if(findGood.inNum < 0 || findGood.finalNum < 0 || libraryNumber < 0){cout << "输入的数目错误,请重新输入!"<<endl;findGood.inNum = inNumTemp;findGood.finalNum = finalNumTemp;goto flag4;}//将文件的数据全部取出,修改对应的那行数据,再写入文件rfile.seekg(0);good tempGood;string tempStr;while(getline(rfile,tempStr)){      tempGood.readGood(tempStr);if(tempGood.ID == inNumber){goods.push_back(findGood); }else{goods.push_back(tempGood);}}ofstream f("good.txt",ios::trunc);f.close();for(int i=0;i<goods.size();i++){writeGood(goods.at(i).ID,goods.at(i).Name,goods.at(i).originalNum,goods.at(i).outNum,goods.at(i).inNum,goods.at(i).finalNum);}goods.clear();}cout << "\n" << endl;cout << "入库成功!" << endl;cout << "提示:当前入库的数目为:"<<findGood.inNum << ",当前库存的数目为:"<<findGood.finalNum<<endl;system("pause");
}//出库功能
void good::outbound(){ifstream rfile;good findGood;rfile.open("good.txt",ios::in);string temp;string inNumber;int num = rfile.tellg();if(num == -1){cout << "提示:找不到 good.txt 文件!" << endl;cout << "提示:请添加 good.txt 文件!" << endl;}else{while(1){cout << "请输入查询商品的货品编号:";cin >> inNumber;while(getline(rfile,temp)){       findGood.readGood(temp);if(findGood.ID==inNumber){goto flag5;}    }cout << "输入有误,请重新输入!"<< endl;}
flag5:cout<<"请输入出库的数目:";int outboundNumber;cin >> outboundNumber;int outNumTemp = findGood.outNum;int finalNumTemp = findGood.finalNum;findGood.outNum += outboundNumber;findGood.finalNum -= outboundNumber;if(findGood.outNum < 0 || findGood.finalNum < 0 || outboundNumber < 0){cout << "输入的数目错误,请重新输入!"<<endl;findGood.outNum = outNumTemp;findGood.finalNum = finalNumTemp;goto flag5;}//将文件的数据全部取出,修改对应的那行数据,清空文件数据,再重新写入文件rfile.seekg(0);good tempGood;string tempStr;while(getline(rfile,tempStr)){        tempGood.readGood(tempStr);if(tempGood.ID == inNumber){goods.push_back(findGood); }else{goods.push_back(tempGood);}}ofstream f("good.txt",ios::trunc);f.close();for(int i = 0;i<goods.size();i++){writeGood(goods.at(i).ID,goods.at(i).Name,goods.at(i).originalNum,goods.at(i).outNum,goods.at(i).inNum,goods.at(i).finalNum);}goods.clear();}cout << "\n" << endl;cout << "出库成功!" << endl;cout << "提示:当前出库的数目为:" << findGood.outNum << ",当前库存的数目为:"<<findGood.finalNum << endl;system("pause");
}//添加商品功能
void addGood(){string addID;string addName;int addOriginalNum;int addOutNum;int addInNum;int addFinalNum;cout << "请输入商品ID:";cin >> addID;cout << "请输入商品名称:";cin >> addName;cout << "请输入商品原始库存:";cin >> addOriginalNum;cout << "请输入商品出库数目:";cin >> addOutNum;cout << "请输入商品入库数目:";cin >> addInNum;cout << "请输入商品最终数目:";cin >> addFinalNum;writeGood(addID,addName,addOriginalNum,addOutNum,addInNum,addFinalNum);cout << "\n" << endl;cout << "商品[" << addName << "]添加成功!" << endl;system("pause");
}//删除商品功能
void good::deleteGood(){ifstream rfile;good findGood;rfile.open("good.txt",ios::in);string temp;string inNumber;int num = rfile.tellg();if(num == -1){cout << "提示:找不到 good.txt 文件!" << endl;cout << "提示:请添加 good.txt 文件!" << endl;}else{while(1){cout << "请输入查询商品的货品编号:";cin >> inNumber;while(getline(rfile,temp)){     findGood.readGood(temp);if(findGood.ID==inNumber){goto flag6;}    }cout << "输入有误,请重新输入!"<< endl;}
flag6://将文件的数据全部取出,删除对应的那行数据,清空文件数据,再重新写入文件rfile.seekg(0);good tempGood;string tempStr;while(getline(rfile,tempStr)){      tempGood.readGood(tempStr);if(tempGood.ID != inNumber){goods.push_back(tempGood);}}ofstream f("good.txt",ios::trunc);f.close();for(int i = 0;i<goods.size();i++){writeGood(goods.at(i).ID,goods.at(i).Name,goods.at(i).originalNum,goods.at(i).outNum,goods.at(i).inNum,goods.at(i).finalNum);}goods.clear();}cout << "\n" << endl;cout << "商品删除成功!" << endl;system("pause");
}//总功能
void function(){char choice;good d;while(1){system("cls");menuLogin();cin >> choice;switch(choice){case '1'://查询功能query();break;case '2'://入库功能d.library();break;case '3'://出库功能d.outbound();break;case '4'://添加商品功能addGood();break;case '5'://删除商品功能d.deleteGood();break;case '6'://退出return ;break;default:cout << "提示:请输入有误,重新输入!" << endl;system("pause");}}
}//主函数
void main()
{//设置控制台窗口和字体的颜色system("color 70");char choice;user u;while(1){system("cls");menuSub();cin >> choice;switch(choice){case '1'://注册功能u.Register();break;case '2'://登录功能u.Enter();break;case '3'://退出return ;break;default:cout << "提示:请输入有误,重新输入!" << endl;system("pause");}}
}

基于C++开发的仓库管理系统(附源码)相关推荐

  1. 基于JavaWeb学生成绩信息管理系统(附源码资料)-毕业设计

    1. 适用人群 本课程主要是针对计算机专业相关正在做毕业设计.或者是需要实战项目的Java开发学习者. 2. 你将收获 提供:项目源码.项目文档.数据库脚本.软件工具等所有资料(在平台的课程附件中进行 ...

  2. java基于springboot班级同学录网站管理系统附源码

    班级同学录管理系统是基于java编程语言,springboot框架,mysql数据库开发的,本设计主要分为用户,管理员两个角色,其中用户注册登陆后可以查看系统公告,校园校友风采,在线交流,在线报名聚会 ...

  3. [java毕业设计专栏]基于SSM实现的社区医院管理系统[附源码+论文+PPT视频]

    一.功能演示 1.1系统功能模块 社区医院管理服务系统,在系统首页可以查看首页.医生.公告资讯.个人中心.后台管理等内容进行详细操作,如图1-1所示. 1-1.系统首页 1.2用户注册 在用户注册页面 ...

  4. java基于springboot智能停车场车位管理系统附源码风格

    springboot智能停车场管理系统是基于java编程语言,mysql数据库,springboot框架制作,本系统主要分为用户,管理员两个角色,其中用户可以在线注册登陆,查看车站,申请车位,在线交流 ...

  5. java基于springboot社区养老服务管理系统附源码

    随着用户要求的不断提高及计算机科学的迅速发展,以及互联网的普及,越来越多的人每天都要通过上网来获取大量的即时信息.而潘随着我国人口老龄化的发展,中国正迈入老龄化社会,养老院有着良好的发展前景.

  6. java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw 本源码技 ...

  7. 计算机毕业设计springboot基于审批流的OA管理系统t4q46源码+系统+程序+lw文档+部署

    计算机毕业设计springboot基于审批流的OA管理系统t4q46源码+系统+程序+lw文档+部署 计算机毕业设计springboot基于审批流的OA管理系统t4q46源码+系统+程序+lw文档+部 ...

  8. 基于Java毕业设计茶店订购管理系统2021源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计茶店订购管理系统2021源码+系统+mysql+lw文档+部署软件 基于Java毕业设计茶店订购管理系统2021源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构 ...

  9. JAVA毕业设计海城同泽中学图书仓库管理系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计海城同泽中学图书仓库管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计海城同泽中学图书仓库管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目 ...

最新文章

  1. [ 总结 ] nginx 负载均衡 及 缓存
  2. CSS 居中完全指南
  3. 计算机课搞事情检讨,上微机课玩游戏检讨书
  4. C语言预处理命令总结
  5. java的write无法写入,Java加载ImageIO.write的文件在.jar中不起作用
  6. 推荐几个精致的前端Web UI框架
  7. 38. 遵循按照值传递的原则来设计函数子类
  8. windows打开属性就显示资源管理器重启(解决方法)
  9. Invest授粉模型问题求助
  10. javascript监听输入框_js监听输入框值的即时变化onpropertychange、oninput
  11. 软件质量因素 6个_影响软件质量管理的主要因素
  12. 基于bp神经网络的pid算法,神经网络pid控制器设计
  13. mdev动态创建插入硬件设备
  14. 屏幕复制 android,一键扫出截图中文字!屏幕文字复制App
  15. 【Linux】Linux下安装gcc/g++
  16. Robotic Process Automation 机器人流程自动化(2)
  17. 牛皮纸定格动画怎么制作?AE教程来了
  18. wps脚注转参考文献格式
  19. pcb螺丝孔与螺丝大小_螺丝,螺栓和钉子之间的区别(以及何时应使用)
  20. 高校计算机考试准考证号

热门文章

  1. C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。常见解决办法
  2. 云服务器宕机服务器Nginx,Tomcat等服务无法访问解决方法
  3. 黑马程序员 C++ 基础语法入门 学习记录
  4. python怎么使用int四舍五入_python 整数int 四舍五入
  5. Linux(Ubuntu)下C++获取可用内存、当前最大内存等信息
  6. C++ 学习笔记之---类和动态内存分配
  7. Android无埋点的技术选型之路
  8. FaceBoxes:A CPU Real-time Face Detector with High Accuracy 论文翻译和解析
  9. SEER新网页钱包UI设计第一版开发完毕
  10. 将多个sheet文件按顺序排列汇总到一个表格