C++课程设计 6.docx
《C++课程设计 6.docx》由会员分享,可在线阅读,更多相关《C++课程设计 6.docx(22页珍藏版)》请在冰点文库上搜索。
C++课程设计6
辽宁工业大学
《C++语言程序设计》课程设计(论文)
题目:
商品库存管理系统
院(系):
软件学院
专业班级:
软件工程113班
学号:
111301062
学生姓名:
安凯辰
指导教师:
翟宝峰
教师职称:
副教授
起止时间:
2011.12.12-2011.12.25
课程设计(论文)任务及评语
院(系):
软件学院教研室:
软件教研室
学号
111301062
学生姓名
安凯辰
专业班级
软件工程113班
课程设计(论文)题目
商品库存管理系统
课程设计(论文)任务
程序设计的任务与要求:
(1).掌握面向对象程序设计语言C++的基本语法
(2).掌握C++面向对象设计的思想
(3).掌握VC++6.0与DEVC++开发工具的使用
(4).运用标准C++规范设计应用程序
设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。
正确地完成上述内容,规范完整地撰写出设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
年月日
目录
第1章课程设计目的与要求1
1.1设计目的1
1.2实验环境1
1.3预备知识1
1.4设计要求1
第2章课程设计内容2
2.1课题描述2
2.2系统设计2
2.2.1功能分析2
2.2.2面向对象设计3
2.2.3类成员描述5
2.3程序实现6
2.3.1源码分析6
2.3.2运行结果12
3章课程设计总结15
参考文献16
第1章课程设计目的与要求
1.1设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
1.2实验环境
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
1.3预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.4设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章课程设计内容
2.1课题描述
随着当今社会飞速发展,销售行业也是飞速的发展。
而一个好的销售企业,必须对企业所销售的商品的库存进行管理和统计,所以商品库存管理是必不可少的。
由此我设计了一个针对小型企业的商品库存管理系统。
这次设计的主要目标是实现仓库商品的信息化管理。
由于以往仓库管理的采用的是人工管理方式,这种方式不但容易出错,而且随着商品的增多也使得仓库管理员的工作量加大,同时工作效率也非常低,所以开发此系统的主要目的是解决这些问题。
它实行了信息化管理,也就是使用计算机来自动处理数据,从提高了仓库管理员的管理水平和工作效率,同时也可以极大限度的减少手工操作带来的错误,减少了部分劳动力的开销。
2.2系统设计
2.2.1功能分析
商品库存管理系统的功能主要包括,用户登陆,商品信息管理,入库管理,出库管理和查询管理。
用户登陆:
库存管理系统是企业负责库存的相关人员使用,其他人员无权使用。
因此系统要求输入正确的用户名和登录密码才可以使用。
主要目的是为了使系统更安全。
商品基本信息管理:
库存管理系统的目标是管理商品的出入库和盘点,商品基本信息的管理应该是库存管理系统的一个基础功能。
它包括商品信息的新增、修改和删除。
商品新增时,必须选择所在的分类。
系统使用编码来唯一标识某个商品。
商品应该包括编号、商品分类、商品名称、商品型号、商品规格、零售价等属性。
由于不同的商品可能属于不同的类别,对商品进行分类方面对商品进行管理。
因此我们需要单独的将商品的类别提出来作为一个独立的模块,方便用户设置商品的类别。
入库管理:
出入库是库存管理的核心功能之一,入库顾名思义就是新增商品的库存。
入库时,要求选择存放的仓库、具体的商品分类,根据商品分类再选择具体的商品。
最后输入入库数量和日期完成入库操作,商品入库后库存数量相应增加。
根据入库日期和入库操作人姓名记录入库的情况,在入库的过程中提供修改功能,入库以后就不可以修改入库记录,这样可以保证入库正确性。
提供打印入库单功能,方便入库记录存档。
出库管理:
和入库管理相对应,出库就是减少库存的行为。
商品出库功能中,应该首先根据商品所在的仓库、商品的分类,然后查询出所需的商品信息。
系统自动记录出库日期及出库操做人完成出库操作。
同入库一样,为了保证出库的正确性,在出库的过程中提供修改功能,入库以后就不可以修改出库记录。
提供打印出库单功能,方便出库记录存档。
查询管理:
查询是仓库管理的一个重要功能。
该功能用于商品库存的盘点,一般来说,分为入库盘点和出库盘点。
要求提供多重条件进行盘点的功能。
例如根据品种代号进行盘点、根据商品类型进行盘点等。
图2.1商品库存管理系统功能模块图
2.2.2面向对象设计
1.UML类图
商品库存管理系统设计了6个类分别是Brand类,CItem类,User类和Admin类,由于数据的存储方式采用链式存储方式所以还包括了CNode类和CList类。
各类中的数据成员和函数成员定义以及各个类之间的继承关系,如图2.2。
图2.2商品库存管理系统UML类图
2.程序总体流程图
程序首先进入登陆模块,选择1进行用户身份验证,在输入完用户名和密码后对用户名和密码进行判断是否有权限使用当前系统。
如果不满足要求则给出提示信息登陆失败重新登陆。
如果验证成功则进入系统功能选择界面,其中功能选择分别对应了添加商品品种,显示商品品种,查询商品,商品删除,商品入库,商品出库和密码修改功能。
通过用户的不同选择从而实现了使用不同功能。
当该功能执行结束后则回到系统功能选择菜单,输入0后退出系统。
系统总体流程图如图2.3
图2.3商品库存管理系统总体流程图
2.2.3类成员描述
1.User类
User类是一个抽象类,主要包括了对用户应该实现的功能进行定义,没有具体的方法实现。
其中包括了设置用户名的纯虚函数visualvoidsetname(stringn)=0,设置用户密码的纯虚函数virtualvoidsetpwd(stringp)=0,获得用户名的纯虚函数virtualstringgetname()=0和获得用户密码的纯虚函数virtualstringgetpwd()=0。
这样做的主要目的是为User类的派生类提供一个规范的接口。
2.Admin类
Admin类是从抽象类User派生下来的子类。
私有数据成员:
name存储用户名,pwd存储用户密码
公有成员函数:
setname(stringn)将传递过来的形参赋值给私有数据成员name,setpwd(stringp)将传递过来的形参赋值给私有数据成员pwd,getname()获得私有数据成员用户名,getpwd()获得私有数据成员用户密码,beifen()对私有数据成员进行备份并且写入到文件admin.txt中和islogin()判断用户是否可以进入系统。
3.Brand类
Brand类是商品品牌类,主要的功能是对商品品牌信息的管理。
私有数据成员:
brnd_name用字符数组来存放品牌名称,Brand_code存放品牌代号,quantity存放品牌数量,brnd_price存放品牌价格。
公有成员函数:
getbrn_name()获得私有数据成员品牌名称,getBrand_code()获得私有数据成员品牌编号,getquantity()获得私有数据成员品牌数量,getbrn_price()获得私有数据成员品牌价格,setbrn_name(char*n)设置私有数据成员brnd_name的值,voidsetBrand_code(intcode)设置私有数据成员Brand_code的值,voidsetquantity(intq)设置私有数据成员quantity的值,voidsetbrnd_price(floatp)设置私有数据成员brnd_price的值。
4.CItem类
CItem是品种类,它从父类Brand派生出的子类,继承了父类的私有数据成员和公有函数成员通过使用父类的公有函数成员来操作父类中私有数据成员。
私有数据成员:
Item_name,用来存放商品名称,Item_code用来存放商品代号colour用来存放商品的颜色,quantity用来存放商品数量,Brandbrnd[MAX]存放这种商品最多拥有的品牌数量,这是一个类的嵌套,因为同一种商品都有不同的品牌。
nBrnd存放品牌的数量。
公有成员函数:
GetItemName()返回品种名称,返回值是一个字符串类型GetItemCode()返回品种代码,Compare(CItem&)比较品种名称,使用当前商品和传递过来的商品对象进行比较,CompareCode(CItem&)比较品种代码,voidShow()显示品种数据voidOutModify()出货,修改结点中的数据部分。
5.CNode类
CNode是链表的结点类,用于存放每种个商品的信息。
私有数据成员:
CNode*pNext存放下一个节点的地址,CItem*pData是节点的数据域存放的是商品的信息。
公有数据成员:
CNode()结点无参构造函数,CNode(CNode&node)用于拷贝的构造函数,InputData(CItem*pSal)输入数据,ShowNode()输出结点中的数据,GetData()返回下一结点的指针。
6.CList类
CList类是CNode类的派生类,主要功能是对链表进行操作,其中包括了添加结点,删除和打印链表。
私有数据成员:
CNode*pHead链表头结点指针,公有数据成员CList()链表对象的默认构造函数,~CList()链表类的析构函数,AddNode(CNode*pnode)首部添加结点,DeleteNode(CNode*)删除一个指定的结点,返回该结点的指针,CNode*LookUp(CItem&)查找一个指定的数据,返回该数据所在结点在链表中的指针,若未找到返回0,voidShowList()打印整个链表,voidDeleteList()删除整个链表,CNode*GetListHead()返回链表首结点,CNode*GetListNextNode(CNode*)返回链表指定结点的下一个结点,voidInsert(CNode*)链表插入节点。
2.3程序实现
2.3.1源码分析
////////////////////////////////////////////////////////////////
/*文件名称:
User.h*/
/*功能:
实现User类和Admin类的定义*/
/*时间:
2011-12-13*/
/*作者:
王阳*/
////////////////////////////////////////////////////////////////
#include"stdafx.h"//包括了程序中重要的系统头文件
#include//引用字符串头文件
#include//引用文件操作头文件
usingnamespacestd;//使用标准命名空间
classUser//抽象类只能派生不能实例化
{
public:
virtualvoidsetname(stringn)=0;//纯虚函数实现接口的定义
virtualvoidsetpwd(stringp)=0;
virtualstringgetname()=0;
virtualstringgetpwd()=0;
};
classAdmin:
publicUser//管理员类从User派生出来
{
private:
stringname;//存放用户名
stringpwd;//存放用户密码
public:
Admin();//Admin类的默认构造函数
voidsetname(stringn);
voidsetpwd(stringp);
stringgetname();
stringgetpwd();
voidbeifen();//保存用户名和密码到admin.txt文件中
intislogin();
};
////////////////////////////////////////////////////////////////
/*文件名称:
User.cpp*/
/*功能:
实现Adimin类的方法*/
/*时间:
2011-12-13*/
/*作者:
王阳*/
////////////////////////////////////////////////////////////////
#include"stdafx.h"//包括了程序中重要的系统头文件
#include"User.h"//定义User类和Admin类
Admin:
:
Admin()//Admin类默认构造函数
{
Char*mpwd;//保存文本文件中读取到的字符串
std:
:
ifstreamin;//定义了文件输入流
in.open("admin.txt");//打开admin.txt文件
if(in)//判断文件是够打开成功
{
in>>name>>pwd;
mpwd=const_cast(pwd.c_str());
inti=0;
while(mpwd[i]!
='\0')
{
mpwd[i]=mpwd[i]-10;//对文件的内容进行解密
i++;}
pwd=mpwd;
}
Else
{cout<<"没有发现文件!
请输入默认用户名和密码"<name="admin";
pwd="admin";}
in.close();
}
voidAdmin:
:
setname(stringn)//设置用户名
{name=n;}
voidAdmin:
:
setpwd(stringp)//设置用户密码
{pwd=p;}
stringAdmin:
:
getname()//得到用户名
{returnname;}
stringAdmin:
:
getpwd()//得到密码
{returnpwd;}
voidAdmin:
:
beifen()//将用户名和密码加密后保存到admin中
{
char*mpwd;
inti=0;
mpwd=const_cast(pwd.c_str());
while(mpwd[i]!
='\0')
{
mpwd[i]=mpwd[i]+10;//对密码进行加密处理
i++;
}
pwd=mpwd;
std:
:
ofstreamout("admin.txt");
out<out.close();
}
intAdmin:
:
islogin()//判断用户是否可以使用该系统
{
charn[10],p[10];
cout<<"用户名(不超过10个字符):
";
cin>>n;
cout<<"密码(不超过10个字符):
";
cin>>p;
if(n==name&&p==pwd)//判断用户名和密码是否正确正确返回1错误返回0
{return1;
}
return0;
}
////////////////////////////////////////////////////////////////
/*文件名称:
cbrand.h*/
/*功能:
实现Brand类的定义*/
/*时间:
2011-12-13*/
/*作者:
王阳*/
////////////////////////////////////////////////////////////////
#ifndef_Brand_H_//如果没有定义_Brand_H_宏则定义_Brand_H_宏
#define_Brand_H_
classBrand//品牌类
{
private:
charbrnd_name[20];//品牌名称
intBrand_code;//品牌代号
intquantity;//数量
floatbrnd_price;//价格
public:
Brand();//品牌类默认构造函数
char*getbrn_name();
intgetBrand_code();
intgetquantity();
floatgetbrn_price();
voidsetbrn_name(char*n);
voidsetBrand_code(intcode);
voidsetquantity(intq);
voidsetbrnd_price(floatp);};
#endif
////////////////////////////////////////////////////////////////
/*文件名称:
cbrand.cpp*/
/*功能:
实现Brand类方法实现*/
/*时间:
2011-12-13*/
/*作者:
王阳*/
////////////////////////////////////////////////////////////////
#include"cbrand.h"//包含了Brand类的定义
#include"stdafx.h"//包括了程序中重要的系统头文件
Brand:
:
Brand()//Brand类默认构造函数
{
quantity=0;//数量初始值是0
strcpy(brnd_name,"0");}
char*Brand:
:
getbrn_name()//获得品牌名称
{
returnbrnd_name;}
intBrand:
:
getBrand_code()//获得品牌编号
{
returnBrand_code;}
intBrand:
:
getquantity()//获得品牌数量
{
returnquantity;}
floatBrand:
:
getbrn_price()//获得品牌价格
{
returnbrnd_price;}
voidBrand:
:
setbrn_name(char*n)//设置品牌名称
{
strcpy(brnd_name,n);}
voidBrand:
:
setBrand_code(intcode)//设置品牌编号
{
Brand_code=code;}
voidBrand:
:
setquantity(intq)//设置品牌数量
{
quantity=q;}
voidBrand:
:
setbrnd_price(floatp)//设置品牌价格
{brnd_price=p;}
////////////////////////////////////////////////////////////////
/*文件名称:
CList.h*/
/*功能:
实现CItem类方法实现*/
/*时间:
2011-12-14*/
/*作者:
王阳*/
////////////////////////////////////////////////////////////////
#include"cbrand.h"//包含Brand类
#include"stdafx.h"
classCItem:
publicBrand//品种类,是Brand的子类
{private:
charItem_name[10];//商品名称
intItem_code;//商品代号
charcolour[10];//颜色
intquantity;//数量
Brandbrnd[MAX];//最多MAX个品牌
intnBrnd;//品牌的数量(public:
CItem()//缺省构造函数
{strcpy(Item_name,"\0");
quantity=0;nBrnd=0;}
CItem(char*name)//用品种名称构造商品
{strcpy(Item_name,name);
Item_code=0;}
CItem(intcode)//用品种代码构造商品
{Item_code=code;strcpy(Item_name,"\0");}
intSetItem(intn=0);//置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件
char*GetItemName()//返回商品名
{returnItem_name;}
intGetItemCode()//返回品种代码
{returnItem_code;}
intCompare(CItem&);//比较品种名称,供查找用,比较结果为1,0
intCompareCode(CItem&);//比较品种代码,比较结果为1,0
voidShow();//显示品种数据
voidOutModify();//出货,修改结点中的数据部分
voidInModify();}
2.3.2运行结果
登陆界面,通过对输入的用户名和密码对用户的权限进行判断,如果成功则进入系统功能界面,如果失败则重新输入,当如是0的时退出系统。
用户的登陆账号信息保存在admin.txt文件中。
2.4用户登陆界面
功能选择界面,用户可以通过输入不同数字来选择需要使用系统的功能。
输入0则退出系统。
图2.5商品库存功能菜单
商品查询,这里包括了两种查询方式分别是按照品种名称查询和品种代码查询,输入0返回功能选择菜单。
图2.6商品库存功能菜单
商品出库,通过输入商品品种代码或者是商品名称进行出库操作,然后通过选择不同品牌的商品,对该商品进行出库操作,当库存数量不足时给出提示信息,提示用户库存不足,输入0退出出库操作。
图2.7商品出库功能
商