收藏 分销(赏)

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

上传人:天**** 文档编号:2221089 上传时间:2024-05-23 格式:DOC 页数:29 大小:326.50KB 下载积分:10 金币
下载 相关 举报
商品库存管理系统课程设计说明书.doc_第1页
第1页 / 共29页
商品库存管理系统课程设计说明书.doc_第2页
第2页 / 共29页


点击查看更多>>
资源描述
。 燕山大学 课 程 设 计 说 明 书 题目: 商品库存管理系统 学院(系):理学院 年级专业:13级应用软件 学 号:130108010020 学生姓名:杨亚南 指导教师:聂栋栋 燕山大学课程设计(论文)任务书 院(系): 理学院信息与计算科学系 基层教学单位: 学 号 130108010020 学生姓名 杨亚南 专业(班级) 应用软件 设计题目 商品库存管理系统 设 计 技 术 参 数 1. 以C++面向对象的设计思想完成设计任务; 2. 详细说明设计中的各个类,尤其是各类的属性及所提供的接口; 3. 要求对任务问题进行详细分析,说明程序所实现的功能; 4. 通过具体的应用程序对所实现的功能进行测试,并给出结果; 设 计 要 求 1. 详细说明程序的总体设计,及各个类的设计细节; 2. 写出各自对这次设计的心得体会; 3. 要求4篇以上参考文献; 4. 报告正文在5000字以上; 工 作 量 1. 主要包括程序的编码实现和数据库的设计 2. 代码总行数为307行,数据库中两张表 工 作 计 划 第一周:进行需求分析和业务流程图,实体关系图的绘制,建立逻辑模型 第二周:进行类的设计和数据库的设计,编码测试 参 考 资 料 1.马光志等编著. C++程序设计实践教程. 华中科技大学出版社,2001年 2.黄维通等编著.Visual C++ 面向对象与可视化程序设计.清华大学出版社,2000年 3.刘瑞新等编著. Visual C++ 面向对象程序设计教程. 机械工业出版社 指导教师签字 基层教学单位主任签字 说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。 年 月 日 燕山大学课程设计评审意见表 指导教师评语: 成绩: 指导教师: 年 月 日 答辩小组评语: 成绩: 组长: 年 月 日 课程设计总成绩: 答辩小组成员签字: 年 月 日 -可编辑修改- 。 目 录 摘要 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++面向对象编程的方法设计了一个商品库存管理系统,后台数据库采用轻量级数据库mysql 5.0,管理员通过账号密码登录系统后实现对库存商品的增加,删除,修改,查询等功能,进而实现对商品库存的管理。 1. 引言 面向对象程序设计与结构化程序设计考虑问题的角度不同,他的重点不是对问题本身的功能分解和各个功能的具体算法实现,而是从系统组成的角度进行分解,对问题进行自然分解,以更接近人类思维的方式建立问题域模型。 1.1 面向对象程序设计思想 将数据及对数据的操作方法进行封装,作为一个有机体——对象。封装使得算法和数据形成了相互依存的关系。 通过采用抽象、封装、继承和多态性等概念和措施,以一种模拟人类认知的方式对软件系统建模,从而构造出可重用性好、易维护的软件,提高软件的开放效率。 1.2 面向对象程序设计的优点 1) 程序模块之间的关系更为简单,程序模块的独立性、数据的安全性有良好的保障。 2) 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。 2. 总体设计 2.1 需求分析 管理员可以登录系统,登录成功后对查询所有商品的名称,编号,数量,价格以及类型; 通过商品编号修改某一商品的价格; 通过商品编号删除该商品; 输入商品的名称,编号,数量,价格,类型进行添加; 2.2 业务流程图 开始 输入用户名 以及密码 登录验证 添加 删除 修改 查询 退出 操作选择 注销用户 结束 1 2 0 4 3 否 是 2.3 实体-关系模型 商品 管理 管理员 姓名 编号 密码 名称 编号 数量 价格 类型 1 n 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 管理员在数据库中的id adminName 管理员姓名 adminPasswd 密码 adminNum 管理员编号 管理员表adminer的内容如下: 商品表goods的结构如下: 商品表的内容如下: 3. 实现方法 3.1 类的定义 /** * mysql数据库操作类 **/ class DataBase{ public: DataBase(); MYSQL *conn; MYSQL_RES *resSet; MYSQL_ROW row; MYSQL_FIELD *field; unsigned int ret,numFields; MYSQL* getConnection(); }; /** * 管理员类 */ class Adminer{ public: bool login(string user,string pwd); //登录方法 }; /** * 商品基类 **/ class BaseGoods{ protected: int goodsId; //数据库自增id string goodsName; //商品名称 string goodsNum; //编号 string goodsPrice;//价格 string goodsCount;//剩余数量 string goodsType; //类型 public: //基类属性的set get函数 void setGoodsId(int id); int getGoodsId(); void setGoodsName(string name); string getGoodsName(); void setGoodsNum(string num); string getGoodsNum(); void setGoodsPrice(string price); string getGoodsPrice(); void setGoodsCount(string count); string getGoodsCount(); void setGoodsType(string type); string getGoodsType(); //数据库操作函数 virtual void addGoods(BaseGoods* goods)=0; //纯虚函数--添加商品 void updateGoods(string goodsName,string goodsNum); void deleteGoods(string goodsNum); //删除商品 void getAllGoods(string type); //查看所有商品 void getGoodsByCount(string type,int count); //条件查询库存数量低于count的商品 }; /** * 散装商品类 **/ class BulkGoods:public BaseGoods{ public: void addGoods(BaseGoods* goods); }; /** * 零售商品类 **/ class RetailGoods:public BaseGoods{ public: void addGoods(BaseGoods* goods); }; 3.2 类的实现 /** * mysql数据库操作类 **/ DataBase::DataBase(){ conn=mysql_init(NULL); if(conn==NULL) cout<<"数据库初始化连接失败"<<endl; ret=mysql_options(conn,MYSQL_SET_CHARSET_NAME,"gb2312"); //设置字符编码 if(ret!=0) cout<<"数据库初始化设置失败"<<endl; if(mysql_real_connect(conn,"localhost","root","yyn1995","goodsManage",0,NULL,0)==NULL) cout<<"数据库连接失败!"<<endl; } /** * 管理员类 */ bool Adminer::login(string user,string pwd){ DataBase db; string sql="SELECT adminPasswd FROM adminer where adminNum='"+user+"'"; const char *c_sql=sql.c_str(); if(mysql_query(db.conn, c_sql)){ //查询成功返回非0 cout<<"查询失败"<<endl; }else{ db.resSet = mysql_store_result(db.conn); //查询失败返回NULL if(db.resSet==NULL){ cout<<"resSet is null"<<endl; }else{ db.numFields = mysql_num_fields(db.resSet); while ((db.row = mysql_fetch_row(db.resSet)) != NULL) { if(pwd!=db.row[0]) return false; else return true; } } } mysql_close(db.conn); } /** * 商品基类 **/ void BaseGoods::setGoodsId(int id){ if(id>0) this->goodsId=id; } int BaseGoods::getGoodsId(){ return goodsId; } void BaseGoods::setGoodsName(string name){ if(name.length()>0&&name.length()<=20) this->goodsName=name; } string BaseGoods::getGoodsName(){ return goodsName; } void BaseGoods::setGoodsNum(string num){ if(num.length()>0&&num.length()<=5) this->goodsNum=num; } string BaseGoods::getGoodsNum(){ return goodsNum; } void BaseGoods::setGoodsPrice(string price){ if(price.length()>0) this->goodsPrice=price; } string BaseGoods::getGoodsPrice(){ return goodsPrice; } void BaseGoods::setGoodsCount(string count){ if(count.length()>0) this->goodsCount=count; } string BaseGoods::getGoodsCount(){ return goodsCount; } void BaseGoods::setGoodsType(string type){ this->goodsType=type; } string BaseGoods::getGoodsType(){ return goodsType; } void BaseGoods::deleteGoods(string goodsNum){ //删除商品 DataBase db; string sql="delete from goods where 编号='"+goodsNum+"'"; const char *c_sql=sql.c_str(); mysql_query(db.conn,c_sql); int flag=mysql_affected_rows(db.conn); if(flag>0) cout<<"删除"<<flag<<"条记录成功"<<endl; else cout<<"删除失败"<<endl; mysql_close(db.conn); } void BaseGoods::getAllGoods(string type){ //按类型查询商品 DataBase db; string sql="SELECT * FROM goods where 类型='"+type+"'"; const char *c_sql=sql.c_str(); if(mysql_query(db.conn, c_sql)){ //查询成功返回非0 cout<<"mysql_query failed!"<<endl; }else{ db.resSet = mysql_store_result(db.conn); //查询失败返回NULL if(db.resSet==NULL){ cout<<"resSet is null"<<endl; }else{ db.numFields = mysql_num_fields(db.resSet); for(int i=0; i < db.numFields; i++) { db.field = mysql_fetch_field_direct(db.resSet, i); cout<<setw(10)<<db.field->name; } cout<<endl; while ((db.row = mysql_fetch_row(db.resSet)) != NULL) { for (int i = 0; i < mysql_num_fields(db.resSet); i ++) { cout<<setw(10)<<db.row[i]; } cout<<endl; } } } mysql_close(db.conn); } void BaseGoods::updateGoods(string goodsPirce,string goodsNum){ //更新商品信息 DataBase db; string sql="update goods set 价格='"+goodsPirce+"' where 编号='"+goodsNum+"'"; const char *c_sql=sql.c_str(); mysql_query(db.conn,c_sql); //执行插入一条商品记录操作 int flag=mysql_affected_rows(db.conn); if(flag>0) cout<<"修改"<<flag<<"条记录成功"<<endl; else cout<<"修改失败"<<endl; mysql_close(db.conn); } /** * 散装商品 **/ void BulkGoods::addGoods(BaseGoods* goods){ //添加商品 DataBase db; string name=goods->getGoodsName(); string num=goods->getGoodsNum(); string count=goods->getGoodsCount(); count.append("kg"); string price=goods->getGoodsPrice(); price.append("元/kg"); string type=goods->getGoodsType(); string sql="insert into goods(名称,编号,价格,数量,类型)values('"+name+"','"+num+"','"+price+"','"+count+"','"+type+"')"; const char *c_sql=sql.c_str(); mysql_query(db.conn,c_sql); //执行插入一条商品记录操作 int flag=mysql_affected_rows(db.conn); if(flag>0) cout<<"插入"<<flag<<"条记录成功"<<endl; else cout<<"插入失败"<<endl; mysql_close(db.conn); } /** * 零售商品 **/ void RetailGoods::addGoods(BaseGoods* goods){ //零售商品的添加商品 DataBase db; string name=goods->getGoodsName(); string num=goods->getGoodsNum(); string count=goods->getGoodsCount(); count.append("件"); string price=goods->getGoodsPrice(); price.append("元/件"); string type=goods->getGoodsType(); string sql="insert into goods(名称,编号,价格,数量,类型)values('"+name+"','"+num+"','"+price+"','"+count+"','"+type+"')"; const char *c_sql=sql.c_str(); mysql_query(db.conn,c_sql); //执行插入一条商品记录操作 int flag=mysql_affected_rows(db.conn); if(flag>0) cout<<"插入"<<flag<<"条记录成功"<<endl; else cout<<"插入失败"<<endl; mysql_close(db.conn); } 3.3 类的应用 void main(){ cout<<" -------------商品库存管理----------"<<endl; bool flag=true; bool flag2=true; while(flag){ DataBase a; RetailGoods bg; BaseGoods* goods=&bg; Adminer b; bool result; string user,password; while(flag2){ //登录判断 cout<<"请输入用户名和密码"<<endl; cin>>user>>password; result=b.login(user,password); if(result){ cout<<user<<"欢迎使用"<<endl; flag2=false; break; }else{ cout<<"用户名或密码错误"<<endl; } } if(result){ cout<<"请输入操作号 1.查看所有商品 2.添加商品 3.删除商品 4.修改商品 0.退出"<<endl; string goodsName,goodsNum,goodsPrice,goodsCount,goodsType; int num; cin>>num; switch(num){ case 0: flag=false;break; case 1: goods->getAllGoods("零售"); goods->getAllGoods("散装"); break; case 2: cout<<"请输入商品名称,编号,价格,数量,类型"<<endl; 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; case 3: cout<<"请输入要删除的商品编号"<<endl; cin>>goodsNum; goods->deleteGoods(goodsNum); break; case 4: cout<<"请输入商品价格,商品编号"<<endl; cin>>goodsPrice>>goodsNum; goods->updateGoods(goodsPrice,goodsNum); break; } } } } 3.4 程序代码 #include <iostream> #include<iomanip> #include <windows.h> #include <cstdlib> #include <cstdio> #include <mysql.h> #include <string> #pragma comment(lib, "libmysql.lib") using namespace std; /** * mysql数据库操作类 **/ class DataBase{ public: DataBase(); MYSQL *conn; MYSQL_RES *resSet; MYSQL_ROW row; MYSQL_FIELD *field; unsigned int ret,numFields; MYSQL* getConnection(); }; DataBase::DataBase(){ conn=mysql_init(NULL); if(conn==NULL) cout<<"数据库初始化连接失败"<<endl; ret=mysql_options(conn,MYSQL_SET_CHARSET_NAME,"gb2312"); //设置字符编码 if(ret!=0) cout<<"数据库初始化设置失败"<<endl; if(mysql_real_connect(conn,"localhost","root","yyn1995","goodsManage",0,NULL,0)==NULL) cout<<"数据库连接失败!"<<endl; } /** * 管理员类 */ class Adminer{ public: bool login(string user,string pwd); //登录方法 }; bool Adminer::login(string user,string pwd){ DataBase db; string sql="SELECT adminPasswd FROM adminer where adminNum='"+user+"'"; const char *c_sql=sql.c_str(); if(mysql_query(db.conn, c_sql)){ //查询成功返回非0 cout<<"查询失败"<<endl; }else{ db.resSet = mysql_store_result(db.conn); //查询失败返回NULL if(db.resSet==NULL){ cout<<"resSet is null"<<endl; }else{ db.numFields = mysql_num_fields(db.resSet); while ((db.row = mysql_fetch_row(db.resSet)) != NULL) { if(pwd!=db.row[0]) return false; else return true; } } } mysql_close(db.conn); } /** * 商品基类 **/ class BaseGoods{ protected: int goodsId; //数据库自增id string goodsName; //商品名称 string goodsNum; //编号 string goodsPrice;//价格 string goodsCount;//剩余数量 string goodsType; //类型 public: //基类属性的set get函数 void setGoodsId(int id); int getGoodsId(); void setGoodsName(string name); string getGoodsName(); void setGoodsNum(string num); string getGoodsNum(); void setGoodsPrice(string price); string getGoodsPrice(); void setGoodsCount(string count); string getGoodsCount(); void setGoodsType(string type); string getGoodsType(); //数据库操作函数 virtual void addGoods(BaseGoods* goods)=0; //纯虚函数--添加商品 void updateGoods(string goodsName,string goodsNum); void deleteGoods(string goodsNum); //删除商品 void getAllGoods(string type); //查看所有商品 void getGoodsByCount(string type,int count); //条件查询库存数量低于count的商品 }; void BaseGoods::setGoodsId(int id){ if(id>0) this->goodsId=id; } int BaseGoods::getGoodsId(){ return goodsId; } void BaseGoods::setGoodsName(string name){ if(name.length()>0&&name.length()<=20) this->goodsName=name; } string BaseGoods::getGoodsName(){ return goodsName; } void BaseGoods::setGoodsNum(string num){ if(num.length()>0&&num.length()<=5) this->goodsNum=num; } string BaseGoods::getGoodsNum(){ return goodsNum; } void BaseGoods::setGoodsPrice(string price){ if(price.length()>0) this->goodsPrice=price; } string BaseGoods::getGoodsPrice(){ return goodsPrice; } void BaseGoods::setGoodsCount(string count){ if(count.length()>0) this->goodsCount=count; } string BaseGoods::getGoodsCount(){ return goodsCount; } void BaseGoods::setGoodsType(string type){ this->goodsType=type; } string BaseGoods::getGoodsType(){ return goodsType; } void BaseGoods::deleteGoods(string goodsNum){ //删除商品 DataBase db; string sql="delete from goods where 编号='"+goodsNum+"'"; const char *c_sql=sql.c_str(); mysql_query(db.conn,c_sql); int flag=mysql_affected_rows(db.conn); if(flag>0) cout<<"删除"<<flag<<"条记录成功"<<endl; else cout<<"删除失败"<<endl; mysql_close(db.conn); } void BaseGoods::getAllGoods(string type){ //按类型查询商品 DataBase db; string sql="SELECT * FROM goods where 类型='"+type+"'"; const char *c_sql=sql.c_str(); if(mysql_query(db.conn, c_sql)){ //查询成功返回非0 cout<<"mysql_query failed!"<<endl; }else{ db.resSet = mysql_store_result(db.conn); //查询失败返回NULL if(db.resSet==NULL){ cout<<"resSet is null"<<endl; }else{ db.numFields = mysql_num_fields(db.resSet); for(int i=0; i < db.numFields; i++) { db.field = mysql_fetch_field_direct(db.resSet, i); cout<<setw(10)<<db.field->name; } cout<<endl; while ((db.row = mysql_fetch_row(db.resSet)) != NULL) { for (int i = 0; i < mysql_num_fields(db.resSet); i ++) { cout<<setw(10)<<db.row[i]; } cout<<endl; } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 技术指导

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服