📄 家电管理.cpp
字号:
// 链表的维护与文件形式的保存
// 以链表结构的有序表表示某商场家电部的库存模型。当有货 或进货时需要对该链表及时进行维护。
// 每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需 将以文件形式保
// 存的数据恢复成链表结构的有序表。
// 链表结点的数据域包括家电名称、品牌、单价、和数量,以单价的升序体现链表的有序性。
// 程序功能包括:初始化、创 建表、插入、删除、更新数,查询及链表数据与文件之间的 转换问题。
// 作者 陆玥玥 学号06010811
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
#include <string.h>
#include <fstream.h>
const int MaxSize=50;
struct goods
{
char name[15]; //家电名称
char code[5]; //家电品牌
int value; //单价
int num; //数量
};
typedef goods ElemType;
//运算符重载
int operator==(const ElemType&e1,const ElemType&e2)
{
return(strcmp(e1.name,e2.name)==0&&strcmp(e1.code,e2.code)==0);
}
int operator<(const ElemType&e1,const ElemType&e2)
{
return(strcmp(e1.name,e2.name)==-1&&strcmp(e1.code,e2.code)==-1);
}
ostream & operator<<(ostream& ostr,const ElemType& x)
{
ostr<<x.name<<setw(12)<<x.code<<setw(12)<<x.value<<setw(12)<<x.num<<endl;
return ostr;
}
#include"link.h"
//数据流的输入输出
void SetupGoodsList(LNode *&L,char *fname)
{
ifstream ifstr(fname,ios::nocreate);
if(!ifstr)
{
cerr<<"File 'goods' not found!"<<endl;
exit(1);
}
goods g;
while(ifstr>>g.name)
{
ifstr>>g.code>>g.value>>g.num;
InsertRear(L,g);
}
ifstr.close();
}
void WriteGoodsFile(char*fname,LNode* &L)
{
ofstream ofstr(fname);
if(!ofstr)
{
cerr<<"File 'goods' no create!"<<endl;
exit(1);
}
goods g;
int n=ListSize(L);
for(int i=1;i<=n;i++)
{
g=GetElem(L,i);
ofstr<<g.name<<" "<<g.code<<" "<<g.value<<" " <<g.num<<endl;
}
ofstr.close();
}
void main()
{
loop1: LNode *L1;
InitList(L1);
SetupGoodsList(L1,"goods.txt");
OrderSort(L1);
int i,flag=1;
while (flag)
{
cout<<" 家电库存管理"<<endl;
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<<"请输入你的选择:";
cin>>i;
while (i<1||i>7)
{
cout<<"重新输入选择(1~7):";
cin>>i;
}
cout<<endl;
switch (i)
{
case 1: //打印库存表的内容
cout<<"家电库存表内容如下:"<<endl;
TraverseList(L1);
break;
case 2: //修改纪录的单价或者数量
goods g;
int x,price,number;
loop2: cout<<"输入待修改的家电的名称和品牌 :";
cin>>g.name>>g.code;
if(Find(L1,g)) //判断库存表中是否由此商品
{
int flag1=1;
while(flag1)
{
cout<<" 1.更改商品单价:"<<endl;
cout<<" 2.更改商品数量:"<<endl;
cout<<" 3.退出更改:"<<endl;
cout<<" 请选择需要更改的项目:"<<endl;
cin>>x;
while (x<1||i>3)
{
cout<<"重新输入选择(1~3):";
cin>>i;
}
cout<<endl;
switch(x)
{
case 1:
cout<<"请输入新的单价:";
cin>>price;
g.value=price;
Update(L1,g);
OrderSort(L1);
cout<<"单价更改后的纪录为:"<<endl;
TraverseList(L1);
break;
case 2:
int temp;
loop: cout<<"请输入进出货物数量(进货用正数,出货用负数):";
cin>>number;
temp=g.num;
g.num+=number;
if(g.num<0) //判断库存中是否有那么多货可以取出
{
int y;
cout<<"库存中没有这么多货!"<<endl;
cout<<"你需要再次输入出货量请按0,若要退出对货物的数量更改请按1:"<<endl;
cin>>y;
if(!y)
{
g.num=temp;
goto loop;
}
else
{
g.num=temp;
break;
}
}
Update(L1,g);
cout<<"数量更改后的纪录为:"<<endl;
TraverseList(L1);
break;
case 3:
cout<<"更改操作处理结束,请重新选择其他操作!"<<endl;
flag1=0;
}
}
}
else
{
int z;
cout<<"没有此商品,重新输入需要更新的商品请按0,需要在库存表中另外插入此种商品请按1:";
cin>>z;
if(!z)
goto loop2;
else
goto loop3;
}
cout<<"更改后的家电纪录为:"<<endl;
TraverseList(L1);
break;
case 3: //删除纪录
cout<<"输入待删除商品的名称和品牌:";
cin>>g.name>>g.code;
if(Find(L1,g))
{
Delete(L1,g);
cout<<"删除此商品后的库存表为:"<<endl;
}
else
cout<<"您输入的商品不存在!"<<endl;
TraverseList(L1);
break;
case 4: //插入纪录
loop3: cout<<"请输入需要插入的商品的名称和品牌:";
cin>>g.name>>g.code;
if(Find(L1,g))//万一插入的商品已经在库存表中存在,则回到主菜单选择更新操作
cout<<"库存中已有此纪录请选择2 更新纪录:"<<endl;
else
{
cout<<"请输入新商品的单价和数量:";
cin>>g.value>>g.num;
Insert(L1,g);
OrderSort(L1);
}
cout<<"插入新商品后的库存表为:"<<endl;
TraverseList(L1);
break;
case 5: //查找纪录
cout<<"输入需查找的商品的名称和品牌:";
cin>>g.name>>g.code;
if(Find(L1,g))
{
cout<<"已经找到,此商品的单价和数量如下:"<<endl;
cout<<g.name<<" "<<g.code<<" "<<g.value<<" "<<g.num<<endl;
}
else
cout<<"库存表中没有此家电!"<<endl;
break;
case 6: //把修改后的库存表存入goods.txt中
WriteGoodsFile("goods.txt",L1);
cout<<"新的库存表已经保存!"<<endl;
TraverseList(L1);
break;
case 7: //退出操作
char save;
cout<<"是否要保存上述操作?(Y/N):";//万一用户没有保存的一种提醒
cin>>save;
while(save!='y'&&save!='n')
{
cout<<"请重新输入选择(Y/N):";
cin>>save;
}
if(save=='y')
{
char esc;
WriteGoodsFile("goods.txt",L1);
cout<<"已经保存!是否真的要退出(Y/N):";//万一用户想继续操作的一种挽回
cin>>esc;
if(esc=='y')
{ cout<<"本次处理结束,再见!"<<endl;
flag=0;
}
else
{
goto loop1;
}
}
else
{
char esc;
cout<<"是否真的要退出?(Y/N):";
cin>>esc;
if(esc=='y')
{ cout<<"本次处理结束,再见!"<<endl;
flag=0;
}
else
{
goto loop1;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -