数据结构课程设计报告库存管理系统Word文档格式.docx
- 文档编号:18156872
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:17
- 大小:18.99KB
数据结构课程设计报告库存管理系统Word文档格式.docx
《数据结构课程设计报告库存管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告库存管理系统Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
[5]《C++程序设计》.谭浩强.清华大学出版社
#include<
iostream>
string>
iomanip>
fstream>
usingnamespacestd;
intcount=0;
classCData//定义数据基类
{
public:
CData(){};
virtualintCompare(CData&
)=0;
virtualvoidShow()=0;
virtual~CData(){};
};
classCNode//定义结点基类
private:
CData*pData;
//用于指向数据类的指针
CNode*pNext;
//用于指向链表的后向指针
voidInputData(CData*pdata){pData=pdata;
}//输入数据
voidShowNode(){pData->
Show();
}//打印一个节点的数据
CData*GetData(){returnpData;
}
friendclassCList;
//定义链表类为基类
classCList
CNode*pHead;
//链表头结点指针
CList(){pHead=0;
~CList(){DeleteList();
}
voidAddNode(CNode*pnode);
//在首部添加结点
CNode*DeleteNode(CNode*);
//删除一个指定的结点,返回该结点的指针
CNode*Search(CData&
);
//查找一个指定的数据,返回该数据所在的结点在链表的指针,未找到返回0
boolIsExist(CData&
voidShowList();
//打印整个链表
voidDeleteList();
//删除整个链表
CNode*GetListHead(){returnpHead;
}//返回链表首结点
CNode*GetListNextNode(CNode*pnode);
//返回链表指定结点的下一个结点
CNode*CList:
:
GetListNextNode(CNode*pnode)//返回链表指定结点的下一个结点
CNode*p1=pnode;
returnp1->
pNext;
voidCList:
AddNode(CNode*pnode)//在首部添加结点
if(pHead==0)//如果是空链表,插入的结点是唯一的结点
{
pHead=pnode;
pnode->
pNext=0;
return;
}
else//否则,插入到链表首部
pNext=pHead;
DeleteNode(CNode*pnode)//删除一个指定的结点,返回该结点的指针
CNode*p1,*p2;
p1=pHead;
//指向首结点
while(p1!
=pnode&
&
p1->
pNext!
=0)//寻找要删除的结点
p2=p1;
p1=p1->
//结点p2始终在p1的后面
if(p1==pHead)//如果要删除的是首结点
pHead=pHead->
//将首结点后移
returnpnode;
p2->
pNext=p1->
//p1指向被删除的结点,将p2结点与p1后面的结点连接起来
Search(CData&
data)//查找一个指定的数据,返回指针,若未找到返回0
CNode*p1=pHead;
while(p1)//从头结点开始查找
if(p1->
pData->
Compare(data)==0)
returnp1;
//找到后返回结点指针
return0;
//搜索完找不到,返回空指针0
ShowList()//打印整个链表
while(p1)
p1->
DeleteList()//删除整个链表结点
deletep1->
pData;
deletep2;
classRepository:
publicCData//库存为记录,为数据基类的公有派生类
private:
charszName[20];
//库存中数据:
商品名、商品数量和入库时间
unsignedintszNumber;
charszTime[20];
charszN;
CListShList;
Repository();
//构造函数
Repository(char*name,intnumber,char*time);
voidSetRecord(char*name,intnumber,char*time);
//输入数据函数
intCompare(CData&
//比较函数,比较商品名
voidShow();
voidAddRecord();
voidDisplay();
voidLookUpRecord();
voidDeleteRecord();
voidModifyRecord();
voidSaveToFile();
voidOperate(string&
strChoice);
voidReadFromFile();
voidOutput();
Repository:
Repository()
strcpy(szName,"
\0"
szNumber=0;
strcpy(szTime,"
Repository(char*name,intnumber,char*time)
strcpy(szName,name);
szNumber=number;
strcpy(szTime,time);
szN=name[0];
voidRepository:
SetRecord(char*name,intnumber,char*time)//输入数据函数
intRepository:
Compare(CData&
data)//比较商品名
Repository&
temp=(Repository&
)data;
returnstrcmp(szName,temp.szName);
Show()//打印一个结点的数据
cout<
<
setw(15)<
szName<
szNumber<
szTime<
endl;
AddRecord()//将记录添加到链表中
CNode*pNode;
Repository*pSh;
charszName[20],szTime[20];
"
请输入新商品名(输入0退出,并进入系统菜单):
;
cin>
>
szName;
while(strcmp(szName,"
0"
))
请输入新商品入库时间:
"
szTime;
请输入新商品数量:
szNumber;
pSh=newRepository;
//生成新的数据累对象
pSh->
SetRecord(szName,szNumber,szTime);
//数据类对象赋值
pNode=newCNode;
//生成新的结点
pNode->
InputData(pSh);
//结点插入链表
ShList.AddNode(pNode);
count++;
请输入新商品名(输入0退出,并进入系统菜单)"
endl<
Display()//显示全部链表数据
当前操作共有"
count<
条新商品的添加纪录。
\n\n"
目前库存共有商品信息记录是:
setiosflags(ios_base:
left)<
商品名"
商品数量"
入库时间"
ShList.ShowList();
system("
pause"
cls"
LookUpRecord()//按照商品名查找
CNode*pLook;
请输入您需要查找的商品名(输入0退出,并进入系统菜单):
while(strcmp(szName,"
Repositorysh(szName,0,"
//生成结点
pLook=ShList.Search(sh);
//查找指定结点的数据
if(pLook)
在库存商品信息记录中找到商品:
内容是:
pLook->
ShowNode();
else
在库存商品信息记录中找不到商品:
。
请输入您需要查找的商品名(输入0退出,并进入系统菜单):
DeleteRecord()//在链表中删除指定的结点的数据
请输入您需要删除的商品名(输入0退出,并进入系统菜单):
if(pLook)//删除时应先查找出结点
请确定是否删除此商品信息记录(Y/N)
【确定删除请输入Y或y,取消删除请输入N或n】:
charok;
ok;
if(ok=='
Y'
||ok=='
y'
)
ShList.DeleteNode(pLook);
的信息记录删除成功!
deletepLook;
count--;
elseif(ok=='
N'
n'
的信息记录删除失败!
else
ModifyRecord()//修改商品记录
请输入您需要修改的商品名(输入0退出,并进入系统菜单):
if(pLook)//修改时应先查找出结点
-----下面开始修改-----"
请输入修改后的商品名:
请输入修改后的商品数量:
请输入修改后的商品入库时间:
请确定是否修改此记录(Yes(Y)orNo(N)):
的信息记录修改成功!
的信息记录修改失败!
在库存商品信息记录中找不到"
"
请输入您需要修改的商品名(输入0退出,并进入系统菜单):
Output()
请输入您需要出库的商品名(输入0退出,并进入系统菜单):
pSh=(Repository*)pLook->
GetData();
if(0==pSh->
szNumber)
该商品缺货,请及时补充!
请输入您要取出的商品数量:
请确定是否取出该商品(Yes(Y)orNo(N)):
if(ok=='
if(pSh->
=szNumber)
您要求的商品数量大于仓库中的数量,故全部输出"
pSh->
个商品"
szNumber=0;
{
szNumber-=szNumber;
您已取出"
成功取出!
您取消了该操作"
请输入您需要出库的商品名(输入0退出,并进入系统菜单):
SaveToFile()//将链表中的数据保存在文件中
ofstreamoutfile("
repository.dat"
ios:
binary);
if(!
outfile)
数据文件打开错误,没有将数据存入文件!
\n"
CNode*pnode;
stringstrName,strNumber;
pnode=ShList.GetListHead();
//取出链表首结点指针
while(pnode)
pSh=(Repository*)pnode->
//返回结点指向的数据域指针
outfile.write((char*)pSh,sizeof(Repository));
//将数据域写入文件
pnode=ShList.GetListNextNode(pnode);
//取下一结点的指针
outfile.close();
ReadFromFile()//在程序开始先查找有无数据文件,找到后读取文件数据
ifstreaminfile("
infile)
没有数据文件,请您先添加!
while(!
infile.eof())
//定义数据域对象
infile.read((char*)pSh,sizeof(Repository));
//数据域对象内容生成结点
//将结点加入链表
ShList.DeleteNode(pNode);
//由于文件多读一次,所以将首结点删除
infile.close();
Operate(string&
strChoice)//根据主菜单选项进行操作
if(strChoice=="
1"
AddRecord();
elseif(strChoice=="
2"
Display();
3"
LookUpRecord();
4"
DeleteRecord();
elseif(strChoice=="
5"
ModifyRecord();
6"
Output();
SaveToFile();
elsecout<
对不起,您的输入有误,请重新输入您的选择:
voidmain()
Repositoryrepository;
*******************************************************************\n\n"
欢迎进入库存管理系统\n\n"
******************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 库存 管理 系统