第三方物流管理信息系统C++Word下载.docx
《第三方物流管理信息系统C++Word下载.docx》由会员分享,可在线阅读,更多相关《第三方物流管理信息系统C++Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
voidInsert();
//进货,插入结点
voidFindByNO();
//根据型号查找(结果不止一个,所以用void)
voidFindByName();
//根据名称查找(同上)
voidFindByBrand();
//根据品牌查找(同上)
boolDelete();
//提货,删除结点
boolModify();
//修改信息
voidPrintList()const;
//遍历单链表,按序号依次输出各元素
voidDataResume();
//**数据恢复**
~ProductList();
//析构函数
voidmenu()
cout<
<
"
----------------------交运0902---------------------------------------\n"
***************************第三方物流管理系统***************************\n"
----------------------------------------------------------------------\n"
从下面的功能中选择一个!
\n"
--------------------------------------------------------------\n"
*******显示与查询**************增删改**************其他*******\n"
1.显示全部产品信息5.进货(插入结点)8.存盘\n"
2.按型号查询6.提货(删除结点)9.营业结束(存盘退出)\n"
3.按名称查询7.修改产品信息a.数据恢复\n"
4.按品牌查询0.退出(不存盘)\n"
----------------------------------------------------------------------\n\n"
;
}
////主程序
intmain()
ProductListpl;
\t\t欢迎使用第三方物流管理系统\n"
\t1.开始营业\n\t2.退出\n请选择:
stringchoice;
while
(1)
cin>
>
choice;
if(choice[0]=='
2'
)exit(0);
elseif(choice[0]!
='
1'
)cout<
此序号不存在,请重新输入!
else
pl.ReadFile();
//读入文件
请按回车继续..."
getchar();
system("
cls"
);
//清屏
menu();
//显示菜单
请输入序号:
//选择
switch(choice[0])
case'
:
pl.PrintList();
break;
//显示全部产品信息
pl.FindByNO();
//按型号查询
3'
pl.FindByName();
//按名称查询
4'
pl.FindByBrand();
//按品牌查询
5'
pl.Insert();
//进货(插入结点)
6'
pl.Delete();
//提货(删除结点)
7'
pl.Modify();
//修改产品信息
8'
pl.WriteFile();
//存盘
9'
{pl.WriteFile();
谢谢使用!
exit(0);
}//营业结束(存盘退出)
a'
{pl.DataResume();
}//数据恢复
0'
{cout<
}//退出(不存盘)
default:
请选择:
////**在单链表中有序插入结点**//
voidProductList:
InitInsert(ProductNode*s)
ProductNode*f=first;
ProductNode*p=first->
next;
while(p&
&
p->
Price<
s->
Price)//f结点始终为p结点的前趋结点,退出循环时,s应插入f结点后
f=p;
p=p->
next=f->
f->
next=s;
////**营业开始,读入文件**//
ReadFile()
ifstreamfin("
product.txt"
//输入文件流对象
if(fin.fail()){cout<
product.txt文件读入错误!
请按回车键退出..."
stringoneline;
//文件的一行
ProductNode*r=first;
while(getline(fin,oneline))//当文件没有结束,读一行
istringstreamsin(oneline);
//字符串流
ProductNode*s=newProductNode;
sin>
NO>
Name>
Brand>
Price>
Quantity;
InitInsert(s);
}
voidProductList:
PrintList()const
{
cout<
产品信息如下:
型号"
\t\t"
名称"
品牌"
单价"
数量"
endl;
ProductNode*p=first->
while(p)
NO<
Name<
Brand<
Quantity<
p=p->
WriteFile()
ofstreamfout("
//输出文件流对象
fout<
\t"
ofstreamfout2("
diary.txt"
//清空日志文件
存盘成功!
ProductList:
~ProductList()
ProductNode*p=first;
ProductNode*q;
while(p)//释放单链表的每一个结点的存储空间
q=p;
//暂存被释放结点
//工作指针p指向被释放结点的下一个结点,使单链表不断开
deleteq;
FindByNO()
boolflag=false;
//假定没有此产品
输入产品型号:
cin>
NO;
ProductNode*p;
for(p=first->
p;
next)
if(p->
NO==NO)
if(flag==false)//只输出一次标题
查询结果如下:
flag=true;
//存在产品
if(flag==false)cout<
无此产品!
FindByName()
//假定没有
输入产品名称:
Name;
Name==Name)
if(flag==false)
FindByBrand()
输入产品品牌:
Brand;
Brand==Brand)
Insert()
PrintList();
请输入产品信息插入(输入产品型号时输入z并按回车返回)\n"
产品型号:
if(NO[0]=='
z'
)return;
s->
NO=NO;
产品名称:
产品品牌:
//工作指针p初始化
while(p&
!
(p->
NO==s->
NO&
Name==s->
Name&
Brand==s->
Brand))//查找结点
if(p)//此类产品存在
此类产品存在!
输入进货数量\n"
产品数量:
if(s->
=0){cout<
数据错误!
return;
p->
Quantity+=s->
Price=p->
Price;
//便于修改日志文件
else//此类产品不存在
产品单价:
ios:
app);
//向日志文件中添加记录
进货"
修改成功\n"
////**提货,数量减少or删除结点**//
boolProductList:
Delete()
输入卖出产品的信息!
stringNO,Name,Brand;
输入型号:
(输入z返回)"
)returnfalse;
ProductNode*f=first;
NO==NO&
Name==Name&
Brand==Brand))//查找结点
f=p;
if(!
p)//产品不存在
此产品不存在!
returnfalse;
else//产品存在
intPrice=p->
//修改日志用,因为p结点要被删除
输入提货数量:
while(Quantity>
Quantity){cout<
输入的数量超出库存量,请重新输入!
if(Quantity<
Quantity)p->
Quantity-=Quantity;
else//数量相等,删除结点
f->
next=p->
deletep;
此产品被删除!
提货"
returntrue;
////**数据恢复(读取日志文件进行相应操作)**//
DataResume()
ifstreamfin("
stringType;
//进货or提货
stringoneline;
while(getline(fin,oneline))//当文件没有结束,读一行
Type>
if(Type=="
)
{
Brand))//查找第i个结点
if(p)p->
//此类产品存在
elseInitInsert(s);
//此类产品不存在
Brand))//查找第i-1个结点
if(p)//产品存在
Quantity-=s->
elseif(s->
Quantity==p->
Quantity)//数量相等,删除结点
}
数据恢复成功\n"
//**修改产品信息**//
Modify()
输入要修改的产品信息!
(输入'
返回)"
p)//结点p不存在
else//结点p存在
fout<
intPrice,Quantity;
此产品信息如下:
型号:
\n名称:
\n品牌:
\n单价:
\n数量:
输入新型号:
(输入z不变)"
if(NO[0]!
)p->
输入新名称:
if(Name[0]!
Name=Name;
输入新品牌:
if(Brand[0]!
Brand=Brand;
输入新单价:
(输入0不变)"
if(Price!
=0)p->
Price=Price;
输入新数量:
if(Quantity!
Quantity=Quantity;
//向日志文件中添加记录
////按单价顺序调整记录顺序
if(!
(Price==0||(Price>
=f->
Price&
next==NULL||Price<
=p->
next->
Price))))//需要调整
{//单价没有改变or单价>
前一个结点的单价(包括头结点)并且单价<
后一个结点的单价(包括后一个结点为空)
//先删除p
InitInsert(p);
//再按单价顺序插入p
修改成功!
////判断密码//