商品库存管理系统课程设计说明书.docx

上传人:b****5 文档编号:6406393 上传时间:2023-01-06 格式:DOCX 页数:31 大小:259.51KB
下载 相关 举报
商品库存管理系统课程设计说明书.docx_第1页
第1页 / 共31页
商品库存管理系统课程设计说明书.docx_第2页
第2页 / 共31页
商品库存管理系统课程设计说明书.docx_第3页
第3页 / 共31页
商品库存管理系统课程设计说明书.docx_第4页
第4页 / 共31页
商品库存管理系统课程设计说明书.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

商品库存管理系统课程设计说明书.docx

《商品库存管理系统课程设计说明书.docx》由会员分享,可在线阅读,更多相关《商品库存管理系统课程设计说明书.docx(31页珍藏版)》请在冰豆网上搜索。

商品库存管理系统课程设计说明书.docx

商品库存管理系统课程设计说明书

燕山大学

课程设计说明书

 

题目:

商品库存管理系统

 

学院(系):

理学院

年级专业:

13级应用软件

学号:

130108010020

学生姓名:

杨亚南

指导教师:

聂栋栋

 

燕山大学课程设计(论文)任务书

院(系):

理学院信息与计算科学系基层教学单位:

学号

130********0

学生姓名

杨亚南

专业(班级)

应用软件

设计题目

商品库存管理系统

1.以C++面向对象的设计思想完成设计任务;

2.详细说明设计中的各个类,尤其是各类的属性及所提供的接口;

3.要求对任务问题进行详细分析,说明程序所实现的功能;

4.通过具体的应用程序对所实现的功能进行测试,并给出结果;

1.详细说明程序的总体设计,及各个类的设计细节;

2.写出各自对这次设计的心得体会;

3.要求4篇以上参考文献;

4.报告正文在5000字以上;

1.主要包括程序的编码实现和数据库的设计

2.代码总行数为307行,数据库中两张表

第一周:

进行需求分析和业务流程图,实体关系图的绘制,建立逻辑模型

第二周:

进行类的设计和数据库的设计,编码测试

 

1.马光志等编著.C++程序设计实践教程.华中科技大学出版社,2001年

2.黄维通等编著.VisualC++面向对象与可视化程序设计.清华大学出版社,2000年

3.刘瑞新等编著.VisualC++面向对象程序设计教程.机械工业出版社

 

指导教师签字

基层教学单位主任签字

说明:

此表一式四份,学生、指导教师、基层教学单位、系部各一份。

年月日

燕山大学课程设计评审意见表

指导教师评语:

成绩:

指导教师:

年月日

答辩小组评语:

成绩:

组长:

年月日

课程设计总成绩:

答辩小组成员签字:

 

年月日

目录

摘要5

1.引言5

1.1面向对象程序设计思想5

1.2面向对象程序设计的优点5

2.总体设计5

2.1需求分析5

2.2程序流程图6

2.3实体-关系模型6

2.4类的设计7

2.4.1管理员类7

2.4.2商品基类7

2.4.3零售商品类7

2.4.4散称商品类7

2.4.5数据库连接类7

2.5数据库的设计7

3.实现方法8

3.1类的定义8

3.2类的实现10

3.3类的应用15

3.4程序源代码16

4.运行结果及分析25

5.结论26

6.心得体会26

参考文献28

 

摘要

商品库存管理系统是商店中不可缺少的部分,本篇主要利用C++面向对象编程的方法设计了一个商品库存管理系统,后台数据库采用轻量级数据库mysql5.0,管理员通过账号密码登录系统后实现对库存商品的增加,删除,修改,查询等功能,进而实现对商品库存的管理。

1.引言

面向对象程序设计与结构化程序设计考虑问题的角度不同,他的重点不是对问题本身的功能分解和各个功能的具体算法实现,而是从系统组成的角度进行分解,对问题进行自然分解,以更接近人类思维的方式建立问题域模型。

1.1面向对象程序设计思想

将数据及对数据的操作方法进行封装,作为一个有机体——对象。

封装使得算法和数据形成了相互依存的关系。

通过采用抽象、封装、继承和多态性等概念和措施,以一种模拟人类认知的方式对软件系统建模,从而构造出可重用性好、易维护的软件,提高软件的开放效率。

1.2面向对象程序设计的优点

1)程序模块之间的关系更为简单,程序模块的独立性、数据的安全性有良好的保障。

2)通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。

2.总体设计

2.1需求分析

管理员可以登录系统,登录成功后对查询所有商品的名称,编号,数量,价格以及类型;

通过商品编号修改某一商品的价格;

通过商品编号删除该商品;

输入商品的名称,编号,数量,价格,类型进行添加;

2.2业务流程图

 

 

 

 

 

2.3实体-关系模型

 

2.4类的设计

2.4.1管理员类

管理员类静态属性有管理员姓名,管理员密码,管理员编号

动态方法有登录login();

2.4.2商品基类

商品基类静态属性有商品名称,商品价格,商品数量,商品编号,商品类型

动态方法有添加商品addGoods(),更新商品价格updateGoods(),删除商品deleteGoods(),查询所有商品getAllGoods();

其中添加商品addGoods()为纯虚函数,因为考虑到散称和零售商品添加的时候商品价格表示不同,所以设置成纯虚函数,由各自的类重写该方法。

2.4.3零售商品类

重写了添加商品addGoods();价格设置成:

元/件

2.4.4散称商品类

重写了添加商品addGoods();价格设置成:

元/kg

2.4.5数据库连接类

主要负责数据库的连接,操作指针的生成。

方法有构造方法DataBase();初始化数据库连接

2.5数据库的设计

数据库中总共有两个表,管理员表adminer,商品表goods

管理员表adminer结构如下:

adminId管理员在数据库中的idadminName管理员姓名

adminPasswd密码adminNum管理员编号

管理员表adminer的内容如下:

商品表goods的结构如下:

商品表的内容如下:

3.实现方法

3.1类的定义

/**

*mysql数据库操作类

**/

classDataBase{

public:

DataBase();

MYSQL*conn;

MYSQL_RES*resSet;

MYSQL_ROWrow;

MYSQL_FIELD*field;

unsignedintret,numFields;

MYSQL*getConnection();

};

/**

*管理员类

*/

classAdminer{

public:

boollogin(stringuser,stringpwd);//登录方法

};

/**

*商品基类

**/

classBaseGoods{

protected:

intgoodsId;//数据库自增id

stringgoodsName;//商品名称

stringgoodsNum;//编号

stringgoodsPrice;//价格

stringgoodsCount;//剩余数量

stringgoodsType;//类型

public:

//基类属性的setget函数

voidsetGoodsId(intid);

intgetGoodsId();

voidsetGoodsName(stringname);

stringgetGoodsName();

voidsetGoodsNum(stringnum);

stringgetGoodsNum();

voidsetGoodsPrice(stringprice);

stringgetGoodsPrice();

voidsetGoodsCount(stringcount);

stringgetGoodsCount();

voidsetGoodsType(stringtype);

stringgetGoodsType();

//数据库操作函数

virtualvoidaddGoods(BaseGoods*goods)=0;//纯虚函数--添加商品

voidupdateGoods(stringgoodsName,stringgoodsNum);

voiddeleteGoods(stringgoodsNum);//删除商品

voidgetAllGoods(stringtype);//查看所有商品

voidgetGoodsByCount(stringtype,intcount);//条件查询库存数量低于count的商品

};

/**

*散装商品类

**/

classBulkGoods:

publicBaseGoods{

public:

voidaddGoods(BaseGoods*goods);

};

/**

*零售商品类

**/

classRetailGoods:

publicBaseGoods{

public:

voidaddGoods(BaseGoods*goods);

};

3.2类的实现

/**

*mysql数据库操作类

**/

DataBase:

:

DataBase(){

conn=mysql_init(NULL);

if(conn==NULL)

cout<<"数据库初始化连接失败"<

ret=mysql_options(conn,MYSQL_SET_CHARSET_NAME,"gb2312");//设置字符编码

if(ret!

=0)

cout<<"数据库初始化设置失败"<

if(mysql_real_connect(conn,"localhost","root","yyn1995","goodsManage",0,NULL,0)==NULL)

cout<<"数据库连接失败!

"<

}

/**

*管理员类

*/

boolAdminer:

:

login(stringuser,stringpwd){

DataBasedb;

stringsql="SELECTadminPasswdFROMadminerwhereadminNum='"+user+"'";

constchar*c_sql=sql.c_str();

if(mysql_query(db.conn,c_sql)){//查询成功返回非0

cout<<"查询失败"<

}else{

db.resSet=mysql_store_result(db.conn);//查询失败返回NULL

if(db.resSet==NULL){

cout<<"resSetisnull"<

}else{

db.numFields=mysql_num_fields(db.resSet);

while((db.row=mysql_fetch_row(db.resSet))!

=NULL)

{

if(pwd!

=db.row[0])

returnfalse;

else

returntrue;

}

}

}

mysql_close(db.conn);

}

/**

*商品基类

**/

voidBaseGoods:

:

setGoodsId(intid){

if(id>0)

this->goodsId=id;

}

intBaseGoods:

:

getGoodsId(){

returngoodsId;

}

voidBaseGoods:

:

setGoodsName(stringname){

if(name.length()>0&&name.length()<=20)

this->goodsName=name;

}

stringBaseGoods:

:

getGoodsName(){

returngoodsName;

}

voidBaseGoods:

:

setGoodsNum(stringnum){

if(num.length()>0&&num.length()<=5)

this->goodsNum=num;

}

stringBaseGoods:

:

getGoodsNum(){

returngoodsNum;

}

voidBaseGoods:

:

setGoodsPrice(stringprice){

if(price.length()>0)

this->goodsPrice=price;

}

stringBaseGoods:

:

getGoodsPrice(){

returngoodsPrice;

}

voidBaseGoods:

:

setGoodsCount(stringcount){

if(count.length()>0)

this->goodsCount=count;

}

stringBaseGoods:

:

getGoodsCount(){

returngoodsCount;

}

voidBaseGoods:

:

setGoodsType(stringtype){

this->goodsType=type;

}

stringBaseGoods:

:

getGoodsType(){

returngoodsType;

}

voidBaseGoods:

:

deleteGoods(stringgoodsNum){//删除商品

DataBasedb;

stringsql="deletefromgoodswhere编号='"+goodsNum+"'";

constchar*c_sql=sql.c_str();

mysql_query(db.conn,c_sql);

intflag=mysql_affected_rows(db.conn);

if(flag>0)

cout<<"删除"<

else

cout<<"删除失败"<

mysql_close(db.conn);

}

voidBaseGoods:

:

getAllGoods(stringtype){//按类型查询商品

DataBasedb;

stringsql="SELECT*FROMgoodswhere类型='"+type+"'";

constchar*c_sql=sql.c_str();

if(mysql_query(db.conn,c_sql)){//查询成功返回非0

cout<<"mysql_queryfailed!

"<

}else{

db.resSet=mysql_store_result(db.conn);//查询失败返回NULL

if(db.resSet==NULL){

cout<<"resSetisnull"<

}else{

db.numFields=mysql_num_fields(db.resSet);

for(inti=0;i

{

db.field=mysql_fetch_field_direct(db.resSet,i);

cout<name;

}

cout<

while((db.row=mysql_fetch_row(db.resSet))!

=NULL)

{

for(inti=0;i

{

cout<

}

cout<

}

}

}

mysql_close(db.conn);

}

voidBaseGoods:

:

updateGoods(stringgoodsPirce,stringgoodsNum){//更新商品信息

DataBasedb;

stringsql="updategoodsset价格='"+goodsPirce+"'where编号='"+goodsNum+"'";

constchar*c_sql=sql.c_str();

mysql_query(db.conn,c_sql);//执行插入一条商品记录操作

intflag=mysql_affected_rows(db.conn);

if(flag>0)

cout<<"修改"<

else

cout<<"修改失败"<

mysql_close(db.conn);

}

/**

*散装商品

**/

voidBulkGoods:

:

addGoods(BaseGoods*goods){//添加商品

DataBasedb;

stringname=goods->getGoodsName();

stringnum=goods->getGoodsNum();

stringcount=goods->getGoodsCount();

count.append("kg");

stringprice=goods->getGoodsPrice();

price.append("元/kg");

stringtype=goods->getGoodsType();

stringsql="insertintogoods(名称,编号,价格,数量,类型)values('"+name+"','"+num+"','"+price+"','"+count+"','"+type+"')";

constchar*c_sql=sql.c_str();

mysql_query(db.conn,c_sql);//执行插入一条商品记录操作

intflag=mysql_affected_rows(db.conn);

if(flag>0)

cout<<"插入"<

else

cout<<"插入失败"<

mysql_close(db.conn);

}

/**

*零售商品

**/

voidRetailGoods:

:

addGoods(BaseGoods*goods){//零售商品的添加商品

DataBasedb;

stringname=goods->getGoodsName();

stringnum=goods->getGoodsNum();

stringcount=goods->getGoodsCount();

count.append("件");

stringprice=goods->getGoodsPrice();

price.append("元/件");

stringtype=goods->getGoodsType();

stringsql="insertintogoods(名称,编号,价格,数量,类型)values('"+name+"','"+num+"','"+price+"','"+count+"','"+type+"')";

constchar*c_sql=sql.c_str();

mysql_query(db.conn,c_sql);//执行插入一条商品记录操作

intflag=mysql_affected_rows(db.conn);

if(flag>0)

cout<<"插入"<

else

cout<<"插入失败"<

mysql_close(db.conn);

}

3.3类的应用

voidmain(){

cout<<"-------------商品库存管理----------"<

boolflag=true;

boolflag2=true;

while(flag){

DataBasea;

RetailGoodsbg;

BaseGoods*goods=&bg;

Adminerb;

boolresult;

stringuser,password;

while(flag2){//登录判断

cout<<"请输入用户名和密码"<

cin>>user>>password;

result=b.login(user,password);

if(result){

cout<

flag2=false;

break;

}else{

cout<<"用户名或密码错误"<

}

}

if(result){

cout<<"请输入操作号1.查看所有商品2.添加商品3.删除商品4.修改商品0.退出"<

stringgoodsName,goodsNum,goodsPrice,goodsCount,goodsType;

intnum;

cin>>num;

switch(num){

case0:

flag=false;break;

case1:

goods->getAllGoods("零售");

goods->getAllGoods("散装");

break;

case2:

cout<<"请输入商品名称,编号,价格,数量,类型"<

cin>>goodsName>>goodsNum>>goodsPrice>>goodsCount>>goodsType;

bg.setGoodsName(goodsName);

bg.setGoodsNum(goodsNum);

bg.setGoodsPrice(goodsPrice);

bg.setGoodsCount(goodsCount);

bg.setGoodsType(goodsType);

goods->addGoods(goods);//向上转型分别调用对象各自的函数

break;

case3:

cout<<"请输入要删除的商品编号"<

cin>>goodsNum;

goods->deleteGoods(goodsNum);

break;

case4:

cout<<"请输入商品价格,商品编号"<

cin>>goodsPrice>>goodsNum;

goods->updateGoods(

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1