-
物品库存管理课程设计报告
紫金学院
Visual
C++
课程设计
南京理工大学紫金学院
VC++
课程设
计报告
课
程:
VC++
课程设计
系
别:
计算机系
班
级:
计科一班
学
号:
120601105
姓
名:
付瑞
课题名称:
物品库存管理
起止时间:
2013.11.26~2013.12.11
指导教师:
朱
俊
2013
年
12
月
紫金学院
Visual C++
课程设计
2012
级
计科、网络、软件
1
.
程序功能介绍
用文件系统实现的物品
库存管理程序。一种商品
的品种里面包括(
<10
个)品牌,以品种为单位,可
以实现商品品种的添加、删除、查找、显示,以
及
商品的进货,出货等功能。
2
.
课程设计要求
(
1
)组成商品品种的品牌不限数量,设置一个最
大值(比如
10
)
,增加一个成员变量指示品牌的
具体
数量。商品品种的数量是每个品牌的数量之和。
(
2
)设计输出每日进货与出货的统计表,要求
进
货与出货分别为两个文本文件,清单上列有进出货
物的时间、
品种描述,具体品牌的进出货数量,如
果是出货清单,在每笔出货的清单后还要有该次提
取货物的总价格。
1
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
(
3
)商品品种以品种代码的顺序存放。
3
.
对课程题目的分析
该设计比较复杂,
要对原程序做较大的修改,首
先是数据的存放形式,因为要求数据按代码的顺序
存放,并且进出货时对数据的各个组成成员都要做
较大的修改。如果要用
文件的形式存放,那么文件
的读写就非常频繁,而且要使用大量的临时文件,
因此建议使用链表的形式存放数据,在程序开始运
行时读取固定文件中的数
据,程序运行时全部数据
都在内存进行操作。在程序运行结束前再将链表中
的数据存放在原来的文件中,供下次运行程序时读
取。建议首先将文件读取这
部分程序调试好,这样
在调试程序时就不用每次都从键盘输入数据了,可
以节省大量的时间。同时,对链表中结点的操作有
很多典型的程序可以参考,不
同的结点只是数据部
分类型不同,所以只要在上面稍加修改就可以使用。
4
.
程序设
计和说明(说明算法思想、设计思路,
给出重要的、关键的代码)
(
1)
类的封装
< br>
由于数据的存放形式使用链表的形式,
所以
2
紫金学院
Visual C++
课程设计
2012
级
计科、网络、软件
对于程序的很多操
作实际上都是要求对链表进行一
系列处理。其中吧
Citem<
/p>
类作为一个结点,因此包含
了大量对链表进行操作的函数,为了满
足程序的完
整性与可读性,应将对链表操作的所有程序封装在
一
起。
class Brand
//
品牌类
{
......
friend class
CItem;
//
定义品种类为友元类
}
;
class CNode
//
结点类
{
......
friend class CList
;
//
定义链表类为友元类
}
;
class coustomer
//
客户类
{
......
};
(
2
)程序功能菜单的设置
程序主题采用菜单选项的形式,
输入相应的
菜
单
选
项
后
程
序
可
以<
/p>
反
复
运
行
,
而
其
中
还
要
求
3
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
3.4.5.6.
8.9.
项各有一个菜单,分别是:按照商品
品种名称和按照商
品代码进行操作。
***
*****************************************
*
p>
¥
欢
迎
使
用
物
品
库
存
管
理
系
< br>统
¥
*
*
*
*
*
*
*
*
*
*
*******************************************
详细目录
1.
添加商品品种
2.
显示商
品品种
3.
查询商品
4.
删除商
4
*
设计者
付瑞
*
指导老师
朱俊
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
品
5.
商品出库
6.
商品进
库
7.
添加客户
8.
删除客
户
9.
查询客户
10.
显示客
户资料
0.
退出系统
输入选择
:
int
CItem::SetItem(int n)
//
置品种数据,正确返回
1
,当
n
为
1
时,是新进货物,输出至出清单文件
{
cout<<
输入商品名称
:
Flush(cin);
e(Item_name,20);
cout<<
输入商品代码
:
cin>>Item_code;
cout<<
输入商品颜色
:
Flush(cin);
e(colour,20);
<
/p>
cout<<
输
入
品
牌
数
:
不
超
过
个
)
cin>>nBrnd;
5
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
//
循环实现品牌数据的输入
,count
为商品总数
<
br>的数据 <
br>cout<< 输入品牌代码 错误,不能打开文件 <
br>
<
br> 1 <
br> <
br>这个函数也是与出货功能有关,与 //chuhuo <
br>为总价格 <
br>品牌 库存不足,重新输入 出货成功,按
输入进货数量 输入品牌代码 输入数量
for(int i=0,count=0;i
{
<
/p>
cout<<
输入品牌
n
输入品牌名称
:
Flush(cin);
e(brnd[i].brnd_name,20);
cout<<
:
cin>>brnd[i].Brand_code;
cout<<
输入数量
:
cin>>brnd[i].quantity;
cout<<
输入价格
:
cin>>brnd[i].brnd_price;
count+=brnd[i].quantity;
}
quantity=count;
if(n==1)
{
ofstream
file(
进
货
单
.txt
if(!file)
{
清
6
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
cout<<
.
getch();
exit(1);
}
timer=time(NULL);
file<
file<<
品种
代码
颜色
file<
our<<
file<<
品牌
代码
数量
价格
for(int
i=0;i
{
<
/p>
file<
code
<<
<
}
7
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
file<<
();
}
return 1;
}
此函数的两个功能:第一个是在添加商品时从键盘
输入商品的各
种数据,调用这个功能时利用
n
的缺省
值,在调用时不给
n
赋值;第二个是在进货时如果进
的是新的品种,那么也要从键盘输入这个品种的各
种数据,这部分与第一个
功能相同,但是进货要输
出进货清单,所以进货功能调用该函数时
n
设置为
1
,
函数在运行时增加一个判断语句,若
n
为
时,将所
键入的数据输出至进货清单。
void
CItem::Show()//
显示品种数据
{
co
ut<<
品种
代码
颜
色
cout<
lour<<
cout<<
p>
品牌
代码
数
量
价格
8
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
for(int i=0;i
{
cout<
_code<<
<
}
cout<<
system(
cout<<
}
InModify()
的
函数类似。因为是库中的商品出货,所以商品品种
必须存在,
若不存在,则输出提示信息,出货失败。
还有一种可能是商品品种曾经存在,但已经全部
出
完了,这时,该品种的各种数据还存在,只是数量
为零。所以
,在函数开始执行时要判断库存量是否
为零,若为零,则输出提示信息,出货失败。在出
货成功结束时同样要将本品种的各种品牌的出货数
9
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
据输出到出货清单
中。同样,该函数也是对链表中
所存在的结点的数据部分的修改。
void CItem::OutModify()//
出
货,修改结点中的数
据部分
{
int
choice,count,chuhuo,price=0;
为出货量,
price
int
*num;
num=new int[nBrnd];
if(quantity==0)
{
co
ut<<
数量为
0.
exit(1);
}
for(int i=0;i
//
储存原来的数量
{
num[i]=brnd[i].quantity;
}
cout<<
代码
数量
价格
for(i=0;i
{
10
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
cout<
nd[i]
.Brand_code<<
<
/p>
<
}
cout<<
cout<<
输入数字选择出货商品或按
0
退出
.n
cin>>choice;
while(choice>=1&&choice<=nBrnd)
{
<
/p>
cout<<
输入商品数量
:
cin>>count;
while(count>brnd[choice-1].quantity)
{
cout<<
:
cin>>count;
}
brnd[choice-1].quantity-=count;
cout<<
0
退出或按数字继续出
货
.n
11
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
cin>>choice;
}
ofstream
file(
出货清单
.txt
if(!file)
{
cout<<
错误,不能打开文件<
/p>
.
getch();
exit(1);
}
timer=time(NULL);
file<
file<<
品
种
代
码
颜
色
file<
olour<<
fil
e<<
品
牌
代
码
价
格
出货量
for(i=0;i
{
if(chuhuo=num[i]-brnd[i].quantity)
{
price=chuhuo*brnd[i].brnd_price;
12
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
file<
code<<
<
}
}
file<<
总价格为
:
delete []num;
();
}
InModify
()同样也与进货功能有关。因为所进
的品
种可能是也有的品种,只是增加其中的数量而
已。所以,在输入进货品种或品种代码时要
判断是
否是库中已有的品种,若是就调用这个函数,只从
键盘输
入具体的品牌数量或新增品牌数据即可,而
不用在键入品种的各种数据,同时,新键入的
各种
数据也输出到进货清单。实际上该函数是对链表中
所存在的
结点的数据部分的修改。此函数先判断出
货量是不是大于库存量,如果大于将显示“库存
不
足,重新输入”。如果小于的话将会继续程序,通
过
brnd[choice-1].quantity-=count;
把
原
有
量
减
p>
13
紫金学院
Visual C++
课程设计
2012
级
计科、网络、软件
去省下剩余量。
void CIte
m::InModify()//
已有商品,
再次进货,
修
改结点中的数据部分
{
char name[20];
char choice;
int count,jinhuo=0;
int prenBrnd=nBrnd;
//
原先品牌数
int n=1;
//
用于判断是否继续进货
int flag=0;
//
用于判断是否新品牌
int * num;
num=new int[prenBrnd];
for(int i=0;i
//
储存原来的数量
{
num[i]=brnd[i].quantity;
}
while(n)
{
<
/p>
cout<<
输入品牌名称
:
Flush(cin);
e(name,20);
for(int
i=0;i
14
紫金学院
Visual
C++
课程设计
2012
级
计科、网络、软件
{
if(strcmp(brnd[i].brnd_name,name)==0)
{
cout<<
:
cin>>count;
brnd[i].quantity+=count;
quantity+=count;
flag=1;
break;
}
}
if(flag==0)
{
strcpy(brnd[nBrnd].brnd_name,name);
cout<<
:
cin>>brnd[nBrnd].Brand_code;
cout<<
:
cin>>brnd[nBrnd].quantity;
cout<<
输入价格
:
cin>>brnd[nBrnd].brnd_price;
quantity+=brnd[nBrnd].quantity;
nBrnd++;
15
紫金学院
Visual C++
课程设计
2012
级
计科、网络、软件
}
cout<<
继续进货
:y/n
cin>>choice;
if(choice=='y'||choice=='Y')
n=1;
else n=0;
}
ofstream
file(
进货清单
.txt
if(!file)
{
cout<<
错误,不能打开文件<
/p>
.
getch();
exit(1);
}
timer=time(NULL);
file<
file<<
品
种
代
码
颜
色
file<
olour<<
fil
e<<
品
牌
代
码
价
格
进货量
16
-
-
-
-
-
-
-
-
-
上一篇:rsa算法介绍
下一篇:学生圣诞节活动方案20xx正式版