超市商品管理系统+含报告Word格式文档下载.docx
《超市商品管理系统+含报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《超市商品管理系统+含报告Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
![超市商品管理系统+含报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/9/9a431f21-c4c1-49e5-80ae-44fed4af71a6/9a431f21-c4c1-49e5-80ae-44fed4af71a61.gif)
描述
添加商品
若该编号的商品在文件中不存在,则将该商品记录添加到文件中。
删除商品
若该编号的商品存在文件中,则将该商品记录从文件中删除。
修改商品
若该编号的商品存在文件中,则重新录入该商品记录。
显示清单
显示商品清单
查询商品
查询商品是否在文件中,若在则输出详细信息。
查询操作可按多个数
据项进行
2.系统设计
2.1开发平台
计算机系统:
MicrosoftWindowsXP;
开发工具:
MicrosoftVisualStudio6.0;
语言:
C++
2.2内存数据结构设计
用单链表表示商品数据记录,链表接点定义为:
structnode
{
ProductsInfoproductsInfo;
node*pnext;
};
其中自定义数据类型ProductsInfo定义为:
structProductsInfo//定义超市商品的相关属性
charno[14];
charname[25];
floatprice;
intnum;
charsort[12];
枚举菜单类型与操作类型:
enumMenuType{MAINMENU,SUBMENU};
//枚举菜单类型
enumFuncType{NONE,ADD,PRINT,DELETE,MODIFY,QUERY,QB_NO,QB_NAME,QB_price,QB_num,QB_sort,SAVE,EXIT};
//枚举操作类型
2.3数据文件设计
数据记录保存在文本文件productsInfo.txt里,利用C++流类库进行数据读写操作,每条数据记录之间换行分隔开。
2.4用户界面设计
用户界面为控制台字符模式,根据功能为用户设计了主菜单与分菜单,界面友好,易于操作,主菜单如下:
cout<
<
"
*&
*欢迎使用商品管理系统*&
*\n"
;
*
*请按下面的选单进行功能选择:
*\n"
*
(1)添加商品记录cout<
*
(2)显示商品清单cout<
*(3)删除一条商品记录cout<
*(4)修改一条商品记录cout<
*(5)查询
*(6)保存至文档
*(7)退出
cout<
"
\n"
查询功能的分菜单如下:
*主菜单->
查询
商品信息管理系统
*
(1)按商品编号查询
*
(2)按商品名称查询
*(3)按商品价格查询
*(4)按商品分类查询
*(5)返回
***********************************************\n"
2.5具体功能设计
根据功能需求分析,定义了如下功能函数:
FuncTypePrintMenu(MenuTypewhich);
//菜单选择函数
node*CreateProList(charfilename[]);
//读取数据文件,建立数据链表
voidRemoveProList();
//撤销内存空间
voidRemoveQueryRes();
voidSave(charfilename[]);
//保存至文件
voidPrint(node*pnode);
//显示数据信息
voidPrint(QueryRes*pnode);
voidmodify();
//修改指定数据条目
QueryRes*Query(ProductsInfo&
productsInfo,FuncTypefunc);
//查询指定数据条目node*Add(ProductsInfo&
productsInfo);
//添加数据项
boolDelete();
//删除指定条目
ProductsInfo&
GetproductsInfo(ProductsInfo&
//从终端接收数据ProductsInfo&
SetproductsInfo1(ProductsInfo&
productsInfo,FuncTypefunc);
功能函数调用关系图如下:
附:
源程序清单
//products.h
//文件功能:
定义超市商品的数据结构及其相关操作#include<
iostream>
#include<
iomanip>
fstream>
string>
structnode//定义数据链表结点
structQueryRes
node*pnode;
QueryRes*pnext;
node*phead=NULL;
//定义数据链表头指针
QueryRes*pqueryres=NULL;
//查询指定数据条目node*Add(ProductsInfo&
//添加数据项boolDelete();
//删除指定条目
//products.h文件结束
//products.cpp
products.h文件中操作的具体实现及主函数部分#include"
products.h"
usingnamespacestd;
FuncTypePrintMenu(MenuTypewhich){
FuncTypefunc=NONE;
intchoice=0;
switch(which){
caseMAINMENU:
//主菜单选项
cout<
*请选择(1-6):
cin>
>
choice;
switch(choice){
case1:
func=ADD;
break;
case2:
func=PRINT;
case3:
func=DELETE;
case4:
func=MODIFY;
case5:
func=QUERY;
case6:
func=SAVE;
case7:
func=EXIT;
break;
default:
func=NONE;
}
caseSUBMENU:
//分菜单选项
*
(1)按商品编号查询cout<
*
(2)按商品名称查询cout<
*(3)按商品价格查询cout<
*(4)按商品分类查询cout<
*请选择(1-6):
&
func=QB_NO;
func=QB_NAME;
func=QB_price;
func=QB_sort;
没有查询到该条商品记录!
!
returnfunc;
node*CreateProList(charfilename[]){
node*p=NULL;
ifstreamproducts(filename);
if(!
products)
cerr<
文件不存在!
请添加商品记录!
endl;
returnNULL;
while(!
products.eof()){//装载数据文件
if(p=newnode()){
products>
p->
productsInfo.no;
productsInfo.name;
productsInfo.price;
productsInfo.num;
productsInfo.sort;
p->
pnext=phead;
phead=p;
products.close();
returnphead;
voidRemoveProList(){//撤销内存空间
for(node*p2,*p1=phead;
p1;
p1=p2){
p2=p1->
pnext;
6
deletep1;
phead=NULL;
voidRemoveQueryRes(){
for(QueryRes*p2,*p1=pqueryres;
pqueryres=NULL;
voidSave(charfilename[]){//保存至文档
node*p;
ofstreamproducts(filename);
products){
return;
for(p=phead;
p;
p=p->
pnext){
products<
<
productsInfo.sort<
voidPrint(node*pnode){//输出数据for(node*p=pnode;
p=p->
productsInfo.no<
;
cout<
productsInfo.name<
productsInfo.price<
productsInfo.num<
productsInfo.sort<
voidPrint(QueryRes*pnode){
for(QueryRes*p=pnode;
pnode->
7
productsInfo,FuncTypefunc){//查询功能实现
inthasRes=0;
QueryRes*pquery=NULL;
for(node*p=phead;
switch(func){
caseQB_NO:
//按编号查询if(!
strcmp(p->
productsInfo.no,productsInfo.no)){
hasRes=1;
caseQB_NAME:
//按名称查询if(!
productsInfo.name,productsInfo.name)){
caseQB_price:
//按价格查询if(p->
productsInfo.price==productsInfo.price){
caseQB_sort:
//按分类查询if(!
productsInfo.sort,productsInfo.sort)){
if(hasRes){
if(pquery=newQueryRes()){
pquery->
pnode=p;
pnext=pqueryres;
pqueryres=pquery;
hasRes=0;
returnpqueryres;
node*Add(ProductsInfo&
productsInfo){//添加数据项
strcpy(p->
productsInfo.no,productsInfo.no);
productsInfo.name,productsInfo.name);
productsInfo.price=productsInfo.price;
productsInfo.num=productsInfo.num;
productsInfo.sort,productsInfo.sort);
boolDelete(){//删除指定数据项cout<
请输入商品编号:
cin>
no;
if(phead==NULL){cout<
不存在商品记录!
returnfalse;
node*p=phead;
productsInfo.no,no))
phead=phead->
returntrue;
for(phead;
pnext)
pnext->
productsInfo.no,no))break;
if(p->
pnext==NULL){cout<
不存在商品记录!
}p->
pnext=p->
pnext->
deletep->
voidmodify()//修改指定条目{
if(p==NULL)
9
请输入要修改的商品编号:
for(p=phead;
不存在该编号的商品!
请重新输入该商品信息:
GetproductsInfo(p->
productsInfo);
productsInfo){//从终端接收数据
请输入商品编号:
productsInfo.no;
请输入商品名称:
productsInfo.name;
请输入商品价格:
productsInfo.price;
请输入商品数量:
productsInfo.num;
请输入商品类别:
productsInfo.sort;
returnproductsInfo;
productsInfo,FuncTypefunc){switch(func){
10
caseQB_num:
intmain()
intcont=1;
intcont1=1;
ph