-
信息技术系课程设计报告
课
程
:
物品库存管理
年
级
:
09
级
专
业
:
计算机应用
姓
名
:
指导老师
:
评语
:
得分
:
指导老师签名:
二
O
p>
一
O
年十一月三十日
实验内容
1
.程序功能介绍
< br>用文件系统实现的物品库存管理程序。一种商品的品种里面包括三个品牌,以
品种
为单位,可以实现商品品种的添加、删除、查找、显示等功能。
2
.课程设计要求
(
1
)组成
商品品种的品牌不限数量,设置一个最大值(比如
10
)
,增加一
个成员变量指示品牌的具体数量。商品品种的数量是每个品牌
的数量之和。
(
2
)设计输出每日进货与出货的统计表,要求进货与出货分别为两个文<
/p>
本文件,清单上列有进出货物的时间、品种描述,具体品牌的进出货数量,如果是
出货清单,在每笔出货的清单后还要有该次提取货物的总价格。
(
3
)商品品种以品种代码的顺序存放。
3
.程序设计思想
该设计
比较复杂,要对原程序做较大的修改,首先是数据的存放形式,
因为要求数据按代码的顺
序存放,并且进出货时对数据的各个组成成员都要做较大
的修改。如果要用文件的形式存
放,那么文件的读写就非常频繁,而且要使用大量
的临时文件,因此建议使用链表的形式
存放数据,在程序开始运行时读取固定文件
中的数据,程序运行时全部数据都在内存进行
操作。在程序运行结束前再将链表中
的数据存放在原来的文件中,供下次运行程序时读取
。建议首先将文件读取这部分
程序调试好,这样在调试程序时就不用每次都从键盘输入数
据了,可以节省大量的
时间。同时,对链表中结点的操作有很多典型的程序可以参考,不
同的结点只是数
据部分类型不同,所以只要在上面稍加修改就可以使用。
(
1)
类的封装
由
于数据的存放形式使用链表的形式,所以对于程序的很多操作实际上都
是要求对链表进行
一系列处理。
其中吧
Citem
类作为
一个结点,
因此包含了大量对链
表进行操作的函数,为了满足程
序的完整性与可读性,应将对链表操作的所有程序
封装在一起。
class Brand ....
friend
class CItem; ....
friend
class
CList; 3.4.5.
项各有一个菜单,分别是:按照商品品种名
称和按照商品代码进行操作。
&
物品库存管理系统
&
**************************************************
1.
添加商品品种
2.
显示商品品种
3.
查询商品
4.
删除商品
5.
商品出库
6.
商品进库
0.
退出系统
**********************************
*****************
4
< br>.设计中所负责的部分
————
商品的出库与入库部分<
/p>
int CItem::SetItem(int n)
rnd_name,20);
c
out<<
输入品牌代码
:
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)
{
cout<<
错误,不能打开文件<
/p>
.
getch();
exit(1);
}
timer=time(NULL);
品种 <
br>
<
br> <
br>输入商品数量 <
br> 错误,不能打开文件
实际上该函数是对链表中所存在的结点的数据部分的修改。此函数先判断出货量是 输入价格 错误,不能打开文件
<
br>达到要求。 输入品牌代码 品种 <
br>
file<
file<<
代码
颜色
file<
file<<
品牌
代码
数量
价格
for(int i=0;i
{
file<
<
}
file<<
();
}
return 1;
}
此函数的两个功能:第一个是在添加商品时从键盘输入商品的各种数据,调用这个
功能时利用
n
的缺省值,在调用时不给
n
赋值;第二个是在进货时如果进的是新的品
种,那么也要从键盘输入这个品种的各种数据,这部分与第一个功能相同,但是进
货要输
出进货清单,所以进货功能调用该函数时
n
设置为
1
,函数在运行时增加一个
判断语句,若
n
为
1
时,将所键入的数
据输出至进货清单。
void
CItem::Show()rnd_name<<
<
}
cout<<
system(
cout<<
}
这个
函数也是与出货功能有关,与
InModify()
的函数类似
。因为是库中的商品
出货,所以商品品种必须存在,若不存在,则输出提示信息,出货失
败。还有一种
可能是商品品种曾经存在,但已经全部出完了,这时,该品种的各种数据还
存在,
只是数量为零。所以,在函数开始执行时要判断库存量是否为零,若为零,则输出
提示信息,出货失败。在出货成功结束时同样要将本品种的各种品牌的出货数据输
出到出货清单中。同样,该函数也是对链表中所存在的结点的数据部分的修改。
void CItem::OutModify();
exit(1);
}
for(int
i=0;i
uantity;
}
cout<<
品牌
代码
数量
价格
for(i=0;i
{
cout<
<
}
cout<<
cout<<
输入数字选择出货商品或
按
0
退出
.n
cin>>choice;
while(choice>=1&&choice<=nBrnd)
{
cout<<
:
cin>>count;
while(count>brnd[choice-1].quantity)
{
<
/p>
cout<<
库存不足,重新输入
:
p>
cin>>count;
}
brnd[choice-1].quantity-=count;
cout<<
出货成功,按
0
退出或按数字继续出货
.n
cin>>choice;
}
ofstream
file(
出货清单
.txt
if(!file)
{
cout<<
.
getch();
exit(1);
}
timer=time(NULL);
file<
file<<<
/p>
品种
代码
颜色
file<
file<<
品牌
代码
价格
出
货量
for(i=0;i
{
if(chuhuo=num[i]-brnd[i].quantity)
{
price=chuhuo*brnd[i].brnd_price;
file<
<
}
}
file<<
总价格为
:
delete []num;
();
}
InModify
()同样也与进货功能有关。因为所进的品种可能是也有的品种,只
是增加其中的数量而已。所以,在输入进货品种或品种代码时要判断是否是库中已
有的品种,若是就调用这个函数,只从键盘输入具体的品牌数量或新增品牌数据即
可,而不用在键入品种的各种数据,同时,新键入的各种数据也输出到进货清单。
不
是大于库存量,如果大于将显示
“
库存不足,重新输入
”
。如果小于的话将会继续
程序,通过
brnd[choice-1].quantity-=count;
把
原有量减去省下剩余量。
void
CItem::InModify()uantity;
}
while(n)
{
co
ut<<
输入品牌名称
:
Flush(cin);
(name,20);
for(int i=0;i
{
if(strcmp(brnd[i].brnd_name,name)==0)
{
p>
cout<<
输入进货数量
:
cin>>count;
brnd[i].quantity+=count;
quantity+=count;
flag=1;
break;
}
}
if(flag==0)
{
strcpy(brnd[nBrnd].brnd_name,name);
cou
t<<
输入品牌代码
:
cin>>brnd[nBrnd].Brand_code;
cou
t<<
输入数量
:
cin>>brnd[nBrnd].quantity;
cout<<
:
cin>>brnd[nBrnd].brnd_price;
quantity+=brnd[nBrnd].quantity;
nBrnd++;
}
cout<<
继续进货
:y/n
cin>>choice;
if(choice=='y'||choice=='Y')
n=1;
else n=0;
}
ofstream
file(
进货清单
.txt
if(!file)
{
cout<<
.
getch();
exit(1);
}
timer=time(NULL);
file<
file<<<
/p>
品种
代码
颜色
file<
file<<
品牌
代码
价格
进
货量
for(i=0;i
{
if(jinhuo=brnd[i].quantity-num[i])
{
file<
<
}
}
if(nBrnd>prenBrnd)
{
for(i=prenBrnd;i
{
file<
<
}
}
file<<
delete
[]num;
();
}
5.
课程设计遇到的技术问题与解决思路
1.
在实际操作中,可能会因错误而
输入错误的字符,这时可能会对程序的正常
运行造成影响,
所以
必须刷新输入流清除储存器中的数据,
经过翻阅
C
语言方面的资
料发现使用以下函数就可实现。
inline istream & Flush(istream &
stream)
{
();
int
chars_to_skip=()->in_avail();
return (chars_to_skip);
}
2.
怎样实现按任意键回到主菜单。
为了
使程序的可读性和使用的方便性更好,设计程序时,打算增加此功能。在
设计过程中,试
图通过一段程序实现,但始终都要输入一个字符后按回车键才行,
表面上已经实现了此功
能,但其实并没有达到预期的效果。过了几天,在网上查找
相关资料,终于在别人设计的
一个小程序里面找到代码,原来只需要在利用库函数
里面的一函数
system()
,
当然这里要包含头文件,
程序中加入
system(
“
pause
”
)
即可
3.
为保证程序界
面的美观,如何清屏?
在图书馆查阅了有关方面的书籍和文献
,
利用网络资源,
使用函数
syste
m(
即可。
程序完整代码
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<> rnd_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)
{
cout<<
错误,不能打开文件<
/p>
.
getch();
exit(1);
}
timer=time(NULL);
file<
file<<
代码
颜色
file<
file<<
品牌
代码
数量
价格
for(int i=0;i
{
file<
<
}
file<<
();
}
return 1;
}
void CItem::Show()rnd_name<<
<
}
cout<<