代码如下:
#include <iostream> //包含了对输入输出流进行操作所需的基本信息
#include <string.h> //包含了字符串处理函数
#include <vector> //存放动态数组,增加和压缩数据
#include <conio.h> //定义了通过控制台进行数据输入和数据输出的函数
#include <fstream> //用于用户管理的文件的I/O操作
#include <sstream> //支持IO,既可从string读数据也可向string写数据
#include <cstdlib> //可以提供一些类型、函数与常量
using namespace std; //使用C++的命名空间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 revise();
//总菜单
void menuSub(){
cout << " ---------------------------欢迎使用仓库管理系统------------------------" << endl;
cout << " | 1、注册 |" << endl;
cout << " | 2、登录 |" << endl;
cout << " | 3、退出 |" << endl;
cout << " -----------------------------------------------------------------------" << endl;
cout << " 请输入你的选择:";
};
//登录后的菜单
void menuLogin()
{
cout << " ---------------------------欢迎使用仓库管理系统------------------------" << endl;
cout << " | 1、查询功能 |" << endl;
cout << " | 2、修改商品功能 |" << endl;
cout << " | 3、入库功能 |" << endl;
cout << " | 4、出库功能 |" << endl;
cout << " | 5、添加商品功能 |" << endl;
cout << " | 6、删除商品功能 |" << endl;
cout << " | 7、退出 |" << endl;
cout << " -----------------------------------------------------------------------" << endl;
cout << " 请输入你的选择:";
}
//查询功能的菜单
void menuQuery()
{
cout << " ---------------------------欢迎使用仓库管理系统------------------------" << endl;
cout << " | 1、查询账号信息 |" << endl;
cout << " | 2、查询库存信息 |" << endl;
cout << " | 3、退出 |" << endl;
cout << " -----------------------------------------------------------------------" << endl;
cout << " 请输入你的选择:";
}
//修改功能的菜单
void menuRevise()
{
cout << " ---------------------------欢迎使用仓库管理系统------------------------" << endl;
cout << " | 1、修改商品编号 |" << endl;
cout << " | 2、修改商品名称 |" << endl;
cout << " | 3、修改原始库存 |" << endl;
cout << " | 4、修改出库数目 |" << endl;
cout << " | 5、修改入库数目 |" << endl;
cout << " | 6、修改最终库存 |" << endl;
cout << " | 7、退出 |" << 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); //包含在sstream中,输入输出控制类,从string中读取字符
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
rfile.open("user.txt",ios::in);//使文件流与user.txt建立关联
string temp;
user u;
while(getline(rfile,temp)){ //从标准输入读入整行数据,并存为字符数组
u.readUser(temp);
if(u.ID == person.ID){
cout << "该ID已存在,请重新设置!" << endl;
goto flag; //跳到 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);//写入ID、用户名、密码
cout << "\n" << endl;
cout << "用户[" << person.Name << "]注册成功!" << endl;
system("pause");
};
//登录功能
void user::Enter()
{
flag1:
cout << "请输入你的ID:";
string id;
string pwd;
cin >> id;
ifstream rfileId; //定义输入流对象rfileId
rfileId.open("user.txt",ios::in);//使文件流与user.txt建立关联
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
rfilePwd.open("user.txt",ios::in);//使文件流与user.txt建立关联
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;//定义输入输出文件流wfile
int IDLen = ID.size();//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; //定义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);string *p;
if(findGood.ID==inNumber)
{
cout << "您的商品编号为:" << findGood.ID << endl;
cout << "您的商品名称为:" << findGood.Name << endl;
cout << "您的原始库存为:" << findGood.originalNum << endl;
cout << "您的出货数目为:" << findGood.outNum << endl;
cout << "您的进货数目为:" << findGood.inNum << 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 revise()
{
char choose;
string a,b;int c,d,e,f;
while(1)
{
system("cls");
menuRevise();
cin>>choose;
switch(choose)
{
case '1':
cout<<"请输入您修改后的商品ID:"<<endl;
cin>>a;
writeGood(a,b,c,d,e,f);
break;
case '2':
cout<<"请输入您修改后的商品名称:"<<endl;
cin>>b;
writeGood(a,b,c,d,e,f);
break;
case '3':
cout<<"请输入您修改后的原始库存:"<<endl;
cin>>c;
writeGood(a,b,c,d,e,f);
break;
case '4':
cout<<"请输入您修改后的出库数目:"<<endl;
cin>>d;
writeGood(a,b,c,d,e,f);
break;
case '5':
cout<<"请输入您修改后的商品入库数目:"<<endl;
cin>>e;
writeGood(a,b,c,d,e,f);
break;
case '6':
cout<<"请输入您修改后的最终库存数:"<<endl;
cin>>f;
writeGood(a,b,c,d,e,f);
break;
case '7':
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':
//修改商品功能
revise();
break;
case '3':
//入库功能
d.library();
break;
case '4':
//出库功能
d.outbound();
break;
case '5':
//添加商品功能
addGood();
break;
case '6':
//删除商品功能
d.deleteGood();
break;
case '7':
//退出
return ;
break;
default:
cout << "提示:请输入有误,重新输入!" << endl;
system("pause");
}
}
}
//主函数
int main()
{
//设置控制台窗口和字体的颜色
system("color 70");
char choice;
user u;string *p;
while(1)
{
system("cls");
menuSub();
cin >> choice;
switch(choice)
{
case '1':
//注册功能
u.Register();
break;
case '2':
//登录功能
u.Enter();
break;
case '3':
//退出
return 0;
break;
default:
cout << "提示:请输入有误,重新输入!" << endl;
system("pause");
}
}
}
是哪里有问题呢