C++ 语言 课程设计仓库管理系统.docx
《C++ 语言 课程设计仓库管理系统.docx》由会员分享,可在线阅读,更多相关《C++ 语言 课程设计仓库管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
C++语言课程设计仓库管理系统
1课程设计的目的和意义
课程设计的目的:
企业的库存管理往往是很复杂、很繁琐的。
由于所掌握的物资种类众多,出入库、管理、供销商的渠道各有差异,各个企业之间的管理体制不尽相同,因此仓库的库存管理必须编制一套库存管理系统,实现计算机化操作,而且必须根据企业的具体情况制定相应的方案。
根据当前的企业管理体制,一般的库存管理系统,总是根据所掌握的物资类别,相应分成几个模块来进行商品的出入库,库存盘点,以及对供销商的详细记录。
为了加强关键物资、设备的管理,要定期掌握其储备,消耗情况,根据计划进行进货,使得各商品不会缺货,使物资设备的储备最佳。
因此有必要开发一套库存管理系统来提高企业工作效率,而所使用的这套库存管理系统是企业生产经营管理活动中的核心,此系统必须可以用来控制合理的库存费用、适时适量的库存数量,使企业生产活动效率最大化。
通过对这些情况的仔细调查,我们开发了下面的仓库库存管理系统。
课程设计的意义:
库存管理的主要目标就是通过对仓库所有入出库活动的管理及对库存数据有效的统计和分析,以保证企业生产中畅通的物流,使决策人员及早发现问题,采取相应措施,调整库存结构,缩短储备周期,加速资金周转,最大限度地降低库存占用,同时,通过周期性的仓库盘点,及时补救管理中的漏洞,使库存管理系统实时地反映企业中各个仓库的现时情况,为各类管理人员从不同侧面提供所需信息,以便协调企业经营收到更大效益,库存管理系统是协调企业生产经营的基础,其数据的准确性、方便的查询、有效的分析是整个计算机管理系统顺利运行的关键。
随着我国经济的飞速发展,各种类型规模的公司企业迅速崛起,许多从事生产和经营管理的企业都有自己生产和销售的产品,而这些产品都需要储存在仓库中,对于每个企业来说,随着企业规模的不断扩大,产品数量的急剧增加,所生产产品的种类也会不断地更新与发展,有关产品的各种信息量也会成倍增长。
面对庞大的产品信息量,如何有效地管理库存产品,对这些企业来说是非常重要的,库存管理的重
点是销售信息能否及时反馈,从而确保企业运行效益。
而库存管理又涉及入库、出库的产品及客户等方方面面的因素,如何管理这些信息数据,是一项复杂的系统工程,充分考验着仓库管理员的工作能力,工作量的繁重是可想而知的,所以这就需要由库存管理系统来提高库存管理工作的效率,这对信息的规范管理、科学统计和快速查询,减少管理方面的工作量,同时对于调动广大员工的工作积极性,提高企业的生产效率,都具有十分重要的现实意义。
2需求分析
本系统是一个针对企业商品的仓库管理的软件,我们需要做到的是让企业能够更好的对旗下的仓库进行记录,汇总查询,以及掌握商品的供销商的信息记录。
库存管理系统的总层次图
本人负责的物品信息管理层次图
3系统设计
3.1各模块功能分析
模块一:
增加项目
按
任
意
键
返
回
此模块是为库存管理系统增加仓库的新商品信息。
运行界面如下:
模块二:
显示全部项目
按
任
意
键
返
回
此模块是为仓库管理员提供仓库所有的商品的信息。
运行界面如下:
模块三:
查找项目信息
物品信息管理系统选择界面
返回
输入数字:
3
查找菜单
此模块是帮助仓库管理员查找仓库所有商品信息。
运行界面如下:
模块四:
修改项目信息
物品信息管理系统选择界面
返回
输入数字:
4
修改菜单
此模块是帮助仓库管理员修改仓库商品信息。
运行界面如下:
模块五:
删除项目信息
物品信息管理系统选择界面
返回
输入数字:
5
删除菜单
此模块是帮助仓库管理员删除仓库里的错误商品信息。
运行界面如下:
3.2类、函数及说明
classInventory
{
public:
Stock*pHead;//定义一个头结点
intcount;//定义数量
Inventory();//构造函数
~Inventory();//析构函数
intSave(charfileName[]);//保存所有项目信息到文件
intLoad(charfileName[]);//从文件中读取项目信息
voidMenu();//处理项目信息模块菜单
private:
friendclassOutStocks;//声明友元类
voidDisplay();
voidAddStock(Stock*);//添加一个项目
voidAddStocks();//添加多个项目
intMenuSelect();//显示和处理项目信息模块菜单
};
classStock
{
protected:
intprice;//单价
intamount;//数量
charnum[20];//编号
charname[20];//品名
public:
Stock(void);//构造函数
Stock*next;//定义next指针
voidSetNum(char[]);//声明初始化编号函数
char*GetNum();//获得编号函数
voidSetName(char[]);//初始化名称函数
char*GetName();//获得名称函数
voidSetPrice(int);//声明初始化价格函数
intGetPrice();//获得价格函数
voidSetAmount(int);//初始化数量函数
intGetAmount();//获得数量函数
voidInput(char*a);//声明输入函数
voidAdd(int);//声明添加函数
voidOut(int);//声明出库函数
voidUpdate();//声明更新函数
voidDisplay();//声明打印函数
};
4系统测试
输入数字:
2
首先增加项目:
然后显示全部项目:
然后查找(例如按品名查找和按单价查找):
然后是修改(例如按编号或者总价修改:
然后删除操作(例如按数量和编号删除):
5心得体会
通过两周的课程设计使我对C++有了更深刻的认识,不仅学习到了基本的理论知识,还了解到了C++语言程序设计的思想,这些知识都为我的课程设计和进一步的学习打下了坚实的基础。
关于库存管理系统的课程设计,一方面是为了检查这一个学期来计算机语言及链表的学习成果,另一方面也是为了让我们进一步掌握和熟练地运用它,与此同时,也能够让我们认清自己在C++学习方面的不足之处和薄弱环节,并加以弥补和巩固。
通过对库存管理系统的程序设计,进一步的巩固了用C++语言编写程序的能力,并且利于更好的掌握C++语言!
在为期近两周的C++课程设计中,我加强了对C++程序设计这门课程的认识,并且复习了自己以前学习到的知识,自己的逻辑思考能力也提高不少。
这些都使得我对计算机语言的学习有了更深入的认识!
总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。
最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序。
整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的旧知识,又学到了一些新的知识。
像库存管理系统这样的应用程序的设计和创建,经历了平时在课堂和考试中不会出现的难题和考验。
而这些问题,又都是课本上很少提到的、更深一层的实践与知识相结合的问题,这并不是我们平时只靠课本,就可以轻易解决的。
刚开始我们的程序缺乏实际应用意义,在屠老师的指导下,我们更深刻的知道了一个库存管理系统应该具备的内容,比如出入库,库存信息,供销商信息等等。
所以,这次课程设计锻炼了我们面对难题,学会根据客户需求解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。
特别是对于链表的运用。
当然,屠老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。
总而言之,这次C++程序设计实践让我收获很大。
参考文献
[1]数据结构(C语言版)清华大学出版社
[2]C语言课程设计(第2版)电子工业出版社
[3]XX-C++课程设计吧
附录源程序
头文件:
Inventory.h
#pragmaonce
#include"Stock.h"
classInventory
{
public:
Stock*pHead;//定义一个头结点
intcount;//定义数量
Inventory();//构造函数
~Inventory();//析构函数
intSave(charfileName[]);//保存所有项目信息到文件
intLoad(charfileName[]);//从文件中读取项目信息
voidMenu();//处理项目信息模块菜单
private:
friendclassOutStocks;//声明友元类
voidDisplay();
voidAddStock(Stock*);//添加一个项目
voidAddStocks();//添加多个项目
intMenuSelect();//显示和处理项目信息模块菜单
};
头文件:
Stock.h:
#pragmaonce
classStock
{
protected:
intprice;//单价
intamount;//数量
charnum[20];//编号
charname[20];//品名
public:
Stock(void);//构造函数
Stock*next;//定义next指针
voidSetNum(char[]);//声明初始化编号函数
char*GetNum();//获得编号函数
voidSetName(char[]);//初始化名称函数
char*GetName();//获得名称函数
voidSetPrice(int);//声明初始化价格函数
intGetPrice();//获得价格函数
voidSetAmount(int);//初始化数量函数
intGetAmount();//获得数量函数
voidInput(char*a);//声明输入函数
voidAdd(int);//声明添加函数
voidOut(int);//声明出库函数
voidUpdate();//声明更新函数
voidDisplay();//声明打印函数
};
Inventory.cpp:
#include"Search.h"
#include
#include
#include
usingnamespacestd;
externSearchSearch;//寻找Search的定义
Inventory:
:
Inventory()
{
count=0;
pHead=newStock();//给头结点分配储存空间
pHead->next=NULL;//头结点的下一个节点置空
}
Inventory:
:
~Inventory()//析构函数
{
//要将所有节点释放掉
Stock*pCurrent;//定义一个当前指针
pCurrent=pHead;//把头结点赋给当前指针
while(pCurrent->next!
=NULL)//当当前指针指向的下一个节点不为空
{
pHead=pHead->next;//头结点后移一个单位
free(pCurrent);//释放当前节点
pCurrent=pHead;//头结点赋给当前指针
}
free(pCurrent);//释放当前节点
}
voidInventory:
:
AddStock(Stock*pCurrent)
{
charn[5];
while(pCurrent->next!
=NULL)//当pCurrent下一个节点不为空
pCurrent=pCurrent->next;//pCurrent结点后移一个单位
cout<<"\t\t编号:
";
cin>>n;
pCurrent->Input(n);//调用输入函数
pCurrent->next=newStock();//给pCurrent下一个结点分配储存空间
pCurrent=pCurrent->next;//pCurrent结点后移一个单位
pCurrent->next=NULL;//pCurrent下一个节点为空
count++;
}
voidInventory:
:
AddStocks()
{
intn;
cout<<"\n\t\t请输入入库项目数量:
";
cin>>n;
getchar();//消除回车符
if(n<1)
return;
Stock*pCurrent;
pCurrent=pHead;//把头结点赋给当前指针
for(inti=1;i<=n;i++)
{
cout<<"\n\t\t"<
"<AddStock(pCurrent);
}
system("pause");
}
voidInventory:
:
Display()
{
if(count==0)
{
system("cls");
cout<<"\n\n\n\t\t无物品记录。
\n\n\t\t";
system("pause");
return;
}
system("cls");
cout<<"库存物品共"<";
cout<<"\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<"┃序号编号品名单价数量总价┃\n";
cout<<"┠─────────────────────────────────────┨\n";
cout<<"┃┃\n";
Stock*pCurrent;
pCurrent=pHead;//把头结点赋给当前指针
for(inti=1;pCurrent->next!
=NULL;i++)
{
cout<<"┃"<pCurrent->Display();//调用打印函数
cout<<"┃"<pCurrent=pCurrent->next;//pCurrent结点后移一个单位
}
cout<<"┃┃\n";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
system("pause");
}
intInventory:
:
Save(charfileName[])
{
ofstreamoFile(fileName,ios:
:
out|ios:
:
binary);//二进制方式写入文件
if(!
oFile)
{
cout<<"\t\t文件“"<"<return0;
}
oFile.write((char*)&count,sizeof(int));
Stock*pCurrent;
pCurrent=pHead;//把头结点赋给当前指针
while(pCurrent!
=NULL)//pCurrent指针不为空
{
oFile.write((char*)pCurrent,sizeof(*pCurrent));
pCurrent=pCurrent->next;//pCurrent结点后移一个单位
}
oFile.close();//别忘了关闭文件流
return1;
}
intInventory:
:
Load(charfileName[])
{
ifstreamiFile(fileName,ios:
:
in|ios:
:
binary);
if(!
iFile)
{
cout<<"\t\t文件“"<"<return0;
}
iFile.read((char*)&count,sizeof(int));
if(iFile.peek()!
=EOF)//文件内容不为空
{
//第一个节点需单独读取
pHead=newStock();
iFile.read((char*)pHead,sizeof(*pHead));
}
else
{
pHead=NULL;//头结点为空
return1;
}
Stock*pCurrent;
pCurrent=pHead;//把头结点赋给当前指针
while(iFile.peek()!
=EOF)//后续节点循环读取
{
pCurrent->next=newStock();//给pCurrent下一个结点分配储存空间
iFile.read((char*)&(*(pCurrent->next)),sizeof(*(pCurrent->next)));
pCurrent=pCurrent->next;//pCurrent结点后移一个单位
}
pCurrent->next=NULL;
iFile.close();//别忘了关闭文件流
return1;
}
intInventory:
:
MenuSelect()
{
chars[5];
intcn;
system("cls");
cout<<"\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<"┠─────────────物品信息管理───ver0.9测试版────┨\n";
cout<<"┃┃\n";
cout<<"┃1.增加项目┃\n";
cout<<"┃2.显示全部项目┃\n";
cout<<"┃3.查找项目信息┃\n";
cout<<"┃4.修改项目信息┃\n";
cout<<"┃5.删除项目信息┃\n";
cout<<"┃┃\n";
cout<<"┃6.保存库存记录┃\n";
cout<<"┃7.读取库存记录┃\n";
cout<<"┃0.返回┃\n";
cout<<"┃┃\n";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
cout<<"\n";
cout<<"\t\t请按键选择选择:
";
for(;;)
{
gets_s(s);
cn=atoi(s);
if(cn>7)
cout<<"\n\t\t输入错误,请按目录选择:
";
else
break;
}
returncn;
}
voidInventory:
:
Menu()
{
for(;;)
{
switch(MenuSelect())
{
case1:
AddStocks();//调用增加函数
break;
case2:
Display();//调用打印函数
break;
case3:
:
:
Search.Menu
(1);//调用查找函数
break;
case4:
:
:
Search.UpdateMenu
(1);
break;
case5:
:
:
Search.DeleteMenu
(1);
break;
case6:
if(Save("Stock.data"))
cout<<"\t\t项目信息保存成功!
\n"<else
cout<<"\t\t项目信息保存失败!
\n"<system("pause");
break;
case7:
if(Load("Stock.data"))
cout<<"\t\t项目信息读取成功!
\n"<else
cout<<"\t\t项目信息读取失败!
\n"<system("pause");
break;
case0:
return;
}
}
}
Stock.cpp:
#include"Stock.h"
#include
#include
usingnamespacestd;
Stock:
:
Stock(void)
{
amount=0;
next=NULL;
}
voidStock:
:
SetNum(charn[])
{
strcpy_s(num,n);
}
char*Stock:
:
GetNum()
{
returnnum;
}
voidStock:
:
SetName(charn[])
{
strcpy_s(name,n);
}
char*Stock:
:
GetName()
{
returnname;
}
voidStock:
:
SetPrice(intn)
{
price=n;
}
intStock:
:
GetPrice()
{
returnprice;
}
voidStock:
:
SetAmount(intn)
{
amount=n;
}
intStock:
:
GetAmount()
{
returnamount;
}
voidStock:
:
Input(char*a)
{
intn;
charch[10];
SetNum(a);
cout<<"\t\t品名:
";
cin>>ch;
SetName(ch);
cout<<"\t\t单价:
";
cin>>n;
getchar();
SetPrice(n);
}
voidStock:
:
Add(intn)
{
amount+=n;
}
voidStock:
:
Out(intn)
{
amount-=n;
}
voidStock:
:
Update()
{
intn;
charch[10];
cout<<"\t\t编号:
";
cin.getline(ch,'\n');
SetNum(ch);
cout<<"\t\t品名:
";
cin.getline(ch,'\n');
SetName(ch);
cou