商品库存管理系统课程设计说明书Word文档格式.docx

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

商品库存管理系统课程设计说明书Word文档格式.docx

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

商品库存管理系统课程设计说明书Word文档格式.docx

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散称商品类

元/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{

boollogin(stringuser,stringpwd);

//登录方法

*商品基类

classBaseGoods{

protected:

intgoodsId;

//数据库自增id

stringgoodsName;

//商品名称

stringgoodsNum;

//编号

stringgoodsPrice;

//价格

stringgoodsCount;

//剩余数量

stringgoodsType;

//类型

//基类属性的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{

voidaddGoods(BaseGoods*goods);

*零售商品类

classRetailGoods:

3.2类的实现

DataBase:

:

DataBase(){

conn=mysql_init(NULL);

if(conn==NULL)

cout<

<

"

数据库初始化连接失败"

endl;

ret=mysql_options(conn,MYSQL_SET_CHARSET_NAME,"

gb2312"

);

//设置字符编码

if(ret!

=0)

数据库初始化设置失败"

if(mysql_real_connect(conn,"

localhost"

"

root"

yyn1995"

goodsManage"

0,NULL,0)==NULL)

数据库连接失败!

}

boolAdminer:

login(stringuser,stringpwd){

DataBasedb;

stringsql="

SELECTadminPasswdFROMadminerwhereadminNum='

+user+"

'

;

constchar*c_sql=sql.c_str();

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

查询失败"

}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;

setGoodsName(stringname){

if(name.length()>

0&

&

name.length()<

=20)

goodsName=name;

stringBaseGoods:

getGoodsName(){

returngoodsName;

setGoodsNum(stringnum){

if(num.length()>

num.length()<

=5)

goodsNum=num;

getGoodsNum(){

returngoodsNum;

setGoodsPrice(stringprice){

if(price.length()>

goodsPrice=price;

getGoodsPrice(){

returngoodsPrice;

setGoodsCount(stringcount){

if(count.length()>

goodsCount=count;

getGoodsCount(){

returngoodsCount;

setGoodsType(stringtype){

this->

goodsType=type;

getGoodsType(){

returngoodsType;

deleteGoods(stringgoodsNum){//删除商品

deletefromgoodswhere编号='

+goodsNum+"

mysql_query(db.conn,c_sql);

intflag=mysql_affected_rows(db.conn);

if(flag>

cout<

删除"

flag<

条记录成功"

else

删除失败"

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

SELECT*FROMgoodswhere类型='

+type+"

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

mysql_queryfailed!

for(inti=0;

i<

db.numFields;

i++)

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

cout<

setw(10)<

db.field->

name;

for(inti=0;

mysql_num_fields(db.resSet);

i++)

{

cout<

db.row[i];

}

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

updategoodsset价格='

+goodsPirce+"

where编号='

//执行插入一条商品记录操作

修改"

修改失败"

*散装商品

voidBulkGoods:

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

stringname=goods->

getGoodsName();

stringnum=goods->

getGoodsNum();

stringcount=goods->

getGoodsCount();

count.append("

kg"

stringprice=goods->

getGoodsPrice();

price.append("

元/kg"

stringtype=goods->

getGoodsType();

insertintogoods(名称,编号,价格,数量,类型)values('

+name+"

'

+num+"

+price+"

+count+"

)"

插入"

插入失败"

*零售商品

voidRetailGoods:

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

件"

元/件"

3.3类的应用

voidmain(){

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

boolflag=true;

boolflag2=true;

while(flag){

DataBasea;

RetailGoodsbg;

BaseGoods*goods=&

bg;

Adminerb;

boolresult;

stringuser,password;

while(flag2){//登录判断

请输入用户名和密码"

cin>

>

user>

password;

result=b.login(user,password);

if(result){

user<

欢迎使用"

flag2=false;

break;

}else{

用户名或密码错误"

if(result){

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

stringgoodsName,goodsNum,goodsPrice,goodsCount,goodsType;

intnum;

num;

switch(num){

case0:

flag=false;

break;

case1:

goods->

getAllGoods("

零售"

散装"

case2:

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

cin>

goodsName>

goodsNum>

goodsPrice>

goodsCount>

goodsType;

bg.setGoodsName(goodsName);

bg.setGoodsNum(goodsNum);

bg.setGoodsPrice(goodsPrice);

bg.setGoodsCount(goodsCount);

bg.setGoodsType(goodsType);

addGoods(goods);

//向上转型分别调用对象各自的函数

case3:

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

goodsNum;

deleteGoods(goodsNum);

case4:

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

updateGoods(goodsPrice,goodsNum);

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

当前位置:首页 > 考试认证 > 其它考试

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

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