数据结构课程设计报告库存管理系统.docx

上传人:b****0 文档编号:9504918 上传时间:2023-05-19 格式:DOCX 页数:21 大小:19.42KB
下载 相关 举报
数据结构课程设计报告库存管理系统.docx_第1页
第1页 / 共21页
数据结构课程设计报告库存管理系统.docx_第2页
第2页 / 共21页
数据结构课程设计报告库存管理系统.docx_第3页
第3页 / 共21页
数据结构课程设计报告库存管理系统.docx_第4页
第4页 / 共21页
数据结构课程设计报告库存管理系统.docx_第5页
第5页 / 共21页
数据结构课程设计报告库存管理系统.docx_第6页
第6页 / 共21页
数据结构课程设计报告库存管理系统.docx_第7页
第7页 / 共21页
数据结构课程设计报告库存管理系统.docx_第8页
第8页 / 共21页
数据结构课程设计报告库存管理系统.docx_第9页
第9页 / 共21页
数据结构课程设计报告库存管理系统.docx_第10页
第10页 / 共21页
数据结构课程设计报告库存管理系统.docx_第11页
第11页 / 共21页
数据结构课程设计报告库存管理系统.docx_第12页
第12页 / 共21页
数据结构课程设计报告库存管理系统.docx_第13页
第13页 / 共21页
数据结构课程设计报告库存管理系统.docx_第14页
第14页 / 共21页
数据结构课程设计报告库存管理系统.docx_第15页
第15页 / 共21页
数据结构课程设计报告库存管理系统.docx_第16页
第16页 / 共21页
数据结构课程设计报告库存管理系统.docx_第17页
第17页 / 共21页
数据结构课程设计报告库存管理系统.docx_第18页
第18页 / 共21页
数据结构课程设计报告库存管理系统.docx_第19页
第19页 / 共21页
数据结构课程设计报告库存管理系统.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计报告库存管理系统.docx

《数据结构课程设计报告库存管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告库存管理系统.docx(21页珍藏版)》请在冰点文库上搜索。

数据结构课程设计报告库存管理系统.docx

数据结构课程设计报告库存管理系统

课程设计任务书

2011—2012学年第1学期

电子与信息工程系计算机科学与技术专业班级

课程设计名称:

数据结构课程设计

设计题目:

库存管理系统

完成期限:

自2012年1月2日至2012年1月6日共1周

设计依据、要求及主要内容(可另加附页):

一、设计目的

熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求

(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;

(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。

凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;

(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;

(4)认真编写课程设计报告。

三、设计内容

1)问题描述

试设计一库存管理系统,产品信息包括产品编号、名称、价格、数量等(产品编号不重复)。

2)基本要求

该系统应具有以下功能:

1、产品信息录入功能(产品信息用文件保存)--输入

2、产品信息浏览功能--输出

3、产品入库

4、产品出库

5、查询和排序功能:

1)按价格从大到小排序

2)按名称查询

6、产品信息删除、修改功能。

四、参考文献

[1]《数据结构》.王红梅.清华大学出版社

[2]《数据结构学习辅导与实验指导》.王红梅.清华大学出版社

[3]《C++程序设计》.钱能.清华大学出版社

[4]《C++程序设计试验指导》.钱能.清华大学出版社

[5]《C++程序设计》.谭浩强.清华大学出版社

#include

#include

#include

#include

usingnamespacestd;

intcount=0;

classCData//定义数据基类

{

public:

CData(){};

virtualintCompare(CData&)=0;

virtualvoidShow()=0;

virtual~CData(){};

};

classCNode//定义结点基类

{

private:

CData*pData;//用于指向数据类的指针

CNode*pNext;//用于指向链表的后向指针

public:

voidInputData(CData*pdata){pData=pdata;}//输入数据

voidShowNode(){pData->Show();}//打印一个节点的数据

CData*GetData(){returnpData;}

friendclassCList;//定义链表类为基类

};

classCList

{

CNode*pHead;//链表头结点指针

public:

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//否则,插入到链表首部

{

pnode->pNext=pHead;

pHead=pnode;

}

};

CNode*CList:

:

DeleteNode(CNode*pnode)//删除一个指定的结点,返回该结点的指针

{

CNode*p1,*p2;

p1=pHead;//指向首结点

while(p1!

=pnode&&p1->pNext!

=0)//寻找要删除的结点

{

p2=p1;

p1=p1->pNext;//结点p2始终在p1的后面

}

if(p1==pHead)//如果要删除的是首结点

{

pHead=pHead->pNext;//将首结点后移

returnpnode;

}

p2->pNext=p1->pNext;//p1指向被删除的结点,将p2结点与p1后面的结点连接起来

returnpnode;

}

CNode*CList:

:

Search(CData&data)//查找一个指定的数据,返回指针,若未找到返回0

{

CNode*p1=pHead;

while(p1)//从头结点开始查找

{

if(p1->pData->Compare(data)==0)

returnp1;//找到后返回结点指针

p1=p1->pNext;

}

return0;//搜索完找不到,返回空指针0

}

voidCList:

:

ShowList()//打印整个链表

{

CNode*p1=pHead;

while(p1)

{

p1->pData->Show();

p1=p1->pNext;

}

}

voidCList:

:

DeleteList()//删除整个链表结点

{

CNode*p1,*p2;

p1=pHead;

while(p1)

{

deletep1->pData;

p2=p1;

p1=p1->pNext;

deletep2;

}

}

classRepository:

publicCData//库存为记录,为数据基类的公有派生类

{

private:

charszName[20];//库存中数据:

商品名、商品数量和入库时间

unsignedintszNumber;

charszTime[20];

charszN;

CListShList;

public:

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,"\0");

}

Repository:

:

Repository(char*name,intnumber,char*time)

{

strcpy(szName,name);

szNumber=number;

strcpy(szTime,time);

szN=name[0];

}

voidRepository:

:

SetRecord(char*name,intnumber,char*time)//输入数据函数

{

strcpy(szName,name);

szNumber=number;

strcpy(szTime,time);

szN=name[0];

}

intRepository:

:

Compare(CData&data)//比较商品名

{

Repository&temp=(Repository&)data;

returnstrcmp(szName,temp.szName);

}

voidRepository:

:

Show()//打印一个结点的数据

{

cout<

}

voidRepository:

:

AddRecord()//将记录添加到链表中

{

CNode*pNode;

Repository*pSh;

charszName[20],szTime[20];

unsignedintszNumber;

cout<<"请输入新商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

while(strcmp(szName,"0"))

{

cout<<"请输入新商品入库时间:

";

cin>>szTime;

cout<<"请输入新商品数量:

";

cin>>szNumber;

pSh=newRepository;//生成新的数据累对象

pSh->SetRecord(szName,szNumber,szTime);//数据类对象赋值

pNode=newCNode;//生成新的结点

pNode->InputData(pSh);//结点插入链表

ShList.AddNode(pNode);

count++;

cout<<"请输入新商品名(输入0退出,并进入系统菜单)";

cin>>szName;

}

cout<

}

voidRepository:

:

Display()//显示全部链表数据

{

cout<<"当前操作共有"<

\n\n";

cout<<"目前库存共有商品信息记录是:

\n\n";

cout<

:

left)<

ShList.ShowList();

cout<

system("pause");

system("cls");

}

voidRepository:

:

LookUpRecord()//按照商品名查找

{

CNode*pLook;

charszName[20];

cout<<"请输入您需要查找的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

while(strcmp(szName,"0"))

{

Repositorysh(szName,0,"0");//生成结点

pLook=ShList.Search(sh);//查找指定结点的数据

if(pLook)

{

cout<<"在库存商品信息记录中找到商品:

"<

"<

cout<

pLook->ShowNode();

}

else

cout<<"在库存商品信息记录中找不到商品:

"<

"<

cout<<"请输入您需要查找的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

}

cout<

}

voidRepository:

:

DeleteRecord()//在链表中删除指定的结点的数据

{

CNode*pLook;

charszName[20];

cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

while(strcmp(szName,"0"))

{

Repositorysh(szName,0,"0");

pLook=ShList.Search(sh);

if(pLook)//删除时应先查找出结点

{

cout<<"在库存商品信息记录中找到商品:

"<

"<

cout<

pLook->ShowNode();

cout<<"请确定是否删除此商品信息记录(Y/N)【确定删除请输入Y或y,取消删除请输入N或n】:

";

charok;

cin>>ok;

if(ok=='Y'||ok=='y')

{

ShList.DeleteNode(pLook);

cout<

"<

deletepLook;

count--;

}

elseif(ok=='N'||ok=='n')

cout<

"<

}

else

cout<<"在库存商品信息记录中找不到商品:

"<

"<

cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

}

cout<

}

voidRepository:

:

ModifyRecord()//修改商品记录

{

CNode*pLook;

Repository*pSh;

charszName[20],szTime[20];

unsignedintszNumber;

cout<<"请输入您需要修改的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

while(strcmp(szName,"0"))

{

Repositorysh(szName,0,"0");

pLook=ShList.Search(sh);

if(pLook)//修改时应先查找出结点

{

cout<<"在库存商品信息记录中找到商品:

"<

"<

cout<

pLook->ShowNode();

cout<<"-----下面开始修改-----"<

";

cin>>szName;

cout<<"请输入修改后的商品数量:

";

cin>>szNumber;

cout<<"请输入修改后的商品入库时间:

";

cin>>szTime;

cout<<"请确定是否修改此记录(Yes(Y)orNo(N)):

";

charok;

cin>>ok;

if(ok=='Y'||ok=='y')

{

pSh=newRepository;

pSh->SetRecord(szName,szNumber,szTime);

pLook->InputData(pSh);

cout<

"<

}

elseif(ok=='N'||ok=='n')

cout<

"<

}

else

cout<<"在库存商品信息记录中找不到"<

cout<<"请输入您需要修改的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

}

}

voidRepository:

:

Output()

{

CNode*pLook;

Repository*pSh;

charszName[20];

unsignedintszNumber;

cout<<"请输入您需要出库的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

while(strcmp(szName,"0"))

{

Repositorysh(szName,0,"0");

pLook=ShList.Search(sh);

if(pLook)//修改时应先查找出结点

{

pSh=(Repository*)pLook->GetData();

cout<<"在库存商品信息记录中找到商品:

"<

"<

cout<

pLook->ShowNode();

if(0==pSh->szNumber)

{

cout<<"该商品缺货,请及时补充!

"<

}

else

{

cout<<"请输入您要取出的商品数量:

";

cin>>szNumber;

cout<<"请确定是否取出该商品(Yes(Y)orNo(N)):

";

charok;

cin>>ok;

if(ok=='Y'||ok=='y')

{

if(pSh->szNumber<=szNumber)

{

cout<szNumber<<"个商品"<

pSh->szNumber=0;

}

else

{

pSh->szNumber-=szNumber;

cout<

}

cout<

"<

}

else

if(ok=='N'||ok=='n')

cout<

}

}

else

cout<<"在库存商品信息记录中找不到"<

cout<<"请输入您需要出库的商品名(输入0退出,并进入系统菜单):

";

cin>>szName;

}

}

voidRepository:

:

SaveToFile()//将链表中的数据保存在文件中

{

ofstreamoutfile("repository.dat",ios:

:

binary);

if(!

outfile)

{

cout<<"数据文件打开错误,没有将数据存入文件!

\n";

return;

}

CNode*pnode;

Repository*pSh;

stringstrName,strNumber;

pnode=ShList.GetListHead();//取出链表首结点指针

while(pnode)

{

pSh=(Repository*)pnode->GetData();//返回结点指向的数据域指针

outfile.write((char*)pSh,sizeof(Repository));//将数据域写入文件

pnode=ShList.GetListNextNode(pnode);//取下一结点的指针

}

outfile.close();

}

voidRepository:

:

ReadFromFile()//在程序开始先查找有无数据文件,找到后读取文件数据

{

ifstreaminfile("repository.dat",ios:

:

binary);

if(!

infile)

{

cout<<"没有数据文件,请您先添加!

\n\n";

return;

}

CNode*pNode;

Repository*pSh;

while(!

infile.eof())

{

pSh=newRepository;//定义数据域对象

infile.read((char*)pSh,sizeof(Repository));

pNode=newCNode;

pNode->InputData(pSh);//数据域对象内容生成结点

ShList.AddNode(pNode);//将结点加入链表

}

ShList.DeleteNode(pNode);//由于文件多读一次,所以将首结点删除

infile.close();

}

voidRepository:

:

Operate(string&strChoice)//根据主菜单选项进行操作

{

if(strChoice=="1")

AddRecord();

elseif(strChoice=="2")

Display();

elseif(strChoice=="3")

LookUpRecord();

elseif(strChoice=="4")

DeleteRecord();

elseif(strChoice=="5")

ModifyRecord();

elseif(strChoice=="6")

Output();

elseif(strChoic

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2