版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学计算机基础强化训练课程设计PAGE PAGE 27超市商品管理的设计与实现系统描述1.1问题说明要求设计并实现一个简单超市商品管理系统,至少实现数据的增加、修改、删除、查询和显示相应结果,内存数据用链表组织,数据文件用文本文件,用户界面用字符界面,枚举量用枚举类型表示。1.2 数据需求编号数据项数据类型数据长度描述1编号字符串14商品的唯一标识2名称字符串25商品的名称3价格浮点型8商品的售价4数量整型4商品的库存数量5类别字符串12商品类别1.3 功能需求编号功能描述1添加商品若该编号的商品在文件中不存在,则将该商品记录添加到文件中。2删除商品若该编号的商品存在文件中,则将该商品
2、记录从文件中删除。3修改商品若该编号的商品存在文件中,则重新录入该商品记录。4显示清单显示商品清单5查询商品查询商品是否在文件中,若在则输出详细信息。查询操作可按多个数据项进行2.系统设计2.1 开发平台计算机系统:Microsoft Windows XP;开发工具:Microsoft Visual Studio 6.0;语言:C+2.2内存数据结构设计用单链表表示商品数据记录,链表接点定义为:struct node ProductsInfo productsInfo;node *pnext;其中自定义数据类型ProductsInfo定义为:struct ProductsInfo /定义超市商
3、品的相关属性char no14;char name25;float price;int num;char sort12;枚举菜单类型与操作类型:enum MenuType MAINMENU, SUBMENU; /枚举菜单类型enum FuncType 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用户
4、界面设计用户界面为控制台字符模式,根据功能为用户设计了主菜单与分菜单,界面友好,易于操作,主菜单如下:cout *&*&*&*&*&*&*&*欢迎使用商品管理系统*&*&*&*&*&*&*n;cout * *n;cout * 请按下面的选单进行功能选择: *n;cout * (1) 添加商品记录 *n;cout * (2) 显示商品清单 *n;cout * (3) 删除一条商品记录 *n;cout * (4) 修改一条商品记录 *n;cout * (5) 查询 *n;cout * (6) 保存至文档 *n;cout * (7) 退出 *n;cout*&*&*&*&*&*&*&*&*&*&*&*
5、&*&*&*&*&*&*&*&*&*&*&*&*&n;查询功能的分菜单如下:cout *&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*n;cout * 商品信息管理系统 *n;cout 查询 *n;cout * (1) 按商品编号查询 *n;cout * (2) 按商品名称查询 *n;cout * (3) 按商品价格查询 *n;cout * (4) 按商品分类查询 *n;cout * (5) 返回 *n;cout *n;2.5具体功能设计根据功能需求分析,定义了如下功能函数:FuncType PrintMenu(MenuType which); /
6、菜单选择函数node * CreateProList(char filename); /读取数据文件,建立数据链表void RemoveProList(); /撤销内存空间void RemoveQueryRes();void Save(char filename); /保存至文件void Print(node *pnode); /显示数据信息void Print(QueryRes *pnode);void modify(); /修改指定数据条目QueryRes * Query(ProductsInfo& productsInfo, FuncType func);/查询指定数据条目node *
7、Add(ProductsInfo& productsInfo); /添加数据项bool Delete(); /删除指定条目ProductsInfo& GetproductsInfo(ProductsInfo& productsInfo); /从终端接收数据ProductsInfo& SetproductsInfo1(ProductsInfo& productsInfo,FuncType func); 功能函数调用关系图如下:mainCreateProListmainCreateProListPrintMenuAddprintdeletemodifyquerysaveRemoveProListG
8、etproductsInfoSetproductsInfo1附:源程序清单/products.h/文件功能:定义超市商品的数据结构及其相关操作#include #include #include #include struct ProductsInfo /定义超市商品的相关属性char no14;char name25;float price;int num;char sort12;struct node /定义数据链表结点ProductsInfo productsInfo;node *pnext;struct QueryRes node * pnode;QueryRes * pnext;no
9、de *phead = NULL; /定义数据链表头指针QueryRes *pqueryres = NULL; enum MenuType MAINMENU, SUBMENU; /枚举菜单类型enum FuncType NONE, ADD, PRINT, DELETE, MODIFY,QUERY, QB_NO, QB_NAME, QB_price,QB_num, QB_sort, SAVE, EXIT; /枚举操作类型FuncType PrintMenu(MenuType which); /菜单选择函数node * CreateProList(char filename); /读取数据文件,建
10、立数据链表void RemoveProList(); /撤销内存空间void RemoveQueryRes();void Save(char filename); /保存至文件void Print(node *pnode); /显示数据信息void Print(QueryRes *pnode);void modify(); /修改指定数据条目QueryRes * Query(ProductsInfo& productsInfo, FuncType func); /查询指定数据条目node * Add(ProductsInfo& productsInfo); /添加数据项bool Delete(
11、); /删除指定条目ProductsInfo& GetproductsInfo(ProductsInfo& productsInfo); /从终端接收数据ProductsInfo& SetproductsInfo1(ProductsInfo& productsInfo,FuncType func); / products.h文件结束/products.cpp/文件功能:products.h文件中操作的具体实现及主函数部分#include products.husing namespace std;FuncType PrintMenu(MenuType which) FuncType func
12、= NONE;int choice = 0;switch(which) case MAINMENU: /主菜单选项cout *&*&*&*&*&*&*&*欢迎使用商品管理系统*&*&*&*&*&*&*n;cout * *n;cout * 请按下面的选单进行功能选择: *n;cout * (1) 添加商品记录 *n;cout * (2) 显示商品清单 *n;cout * (3) 删除一条商品记录 *n;cout * (4) 修改一条商品记录 *n;cout * (5) 查询 *n;cout * (6) 保存至文档 *n;cout * (7) 退出 *n;cout*&*&*&*&*&*&*&*&*
13、&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&n;cout choice;switch(choice) case 1: func = ADD; break;case 2: func = PRINT; break;case 3: func = DELETE; break;case 4: func = MODIFY; break;case 5: func = QUERY; break;case 6: func = SAVE; break;case 7: func = EXIT;break;default: func = NONE; break;break;case SUBMENU:
14、 /分菜单选项cout*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*n;cout * 商品信息管理系统 *n;cout 查询 *n;cout * (1) 按商品编号查询 *n;cout * (2) 按商品名称查询 *n;cout * (3) 按商品价格查询 *n;cout * (4) 按商品分类查询 *n;cout * (5) 返回 *n;cout *n;cout choice;cout &*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&n;switch(choice) case 1: func = QB_NO;
15、break;case 2: func = QB_NAME; break;case 3: func = QB_price; break;case 4: func = QB_sort; break;case 5: func = EXIT; break;default: func = NONE; break;break;default:cout 没有查询到该条商品记录!n;break;return func;node * CreateProList(char filename) node * p=NULL;ifstream products(filename);if(!products) cerr文
16、件不存在!请添加商品记录! p-productsInfo.no;products p-productsI;products p-productsInfo.price;products p-productsInfo.num;products p-productsInfo.sort;p-pnext = phead;phead = p;products.close();return phead;void RemoveProList() /撤销内存空间for(node *p2, *p1 = phead;p1;p1 = p2) p2 = p1-pnext;delete p1;phead
17、= NULL;void RemoveQueryRes() for(QueryRes *p2, *p1 = pqueryres;p1;p1 = p2) p2 = p1-pnext;delete p1;pqueryres = NULL;void Save(char filename) /保存至文档node * p;ofstream products(filename);if(!products) return;for(p = phead;p;p=p-pnext) products productsInfo.no;products productsI;products product
18、sInfo.price;products productsInfo.num;products productsInfo.sortpnext) coutproductsInfo.no ;coutproductsI ;coutproductsInfo.price ;coutproductsInfo.num ;coutproductsInfo.sort pnext) cout pnode-productsInfo.no ;cout pnode-productsI ;cout pnode-productsInfo.price ;cout pnode-productsIn
19、fo.num ;cout pnode-productsInfo.sort pnext) switch(func) case QB_NO: /按编号查询if(!strcmp(p-productsInfo.no, productsInfo.no) hasRes = 1;break;case QB_NAME: /按名称查询if(!strcmp(p-productsI, productsI) hasRes = 1;break;case QB_price: /按价格查询if(p-productsInfo.price = productsInfo.price) hasRes
20、 = 1;break;case QB_sort: /按分类查询if(!strcmp(p-productsInfo.sort, productsInfo.sort) hasRes = 1;break;default:break;if(hasRes) if(pquery = new QueryRes() pquery-pnode = p;pquery-pnext = pqueryres;pqueryres = pquery;hasRes = 0;return pqueryres;node * Add(ProductsInfo& productsInfo) /添加数据项node * p;if(p =
21、 new node() strcpy(p-productsInfo.no, productsInfo.no);strcpy(p-productsI, productsI);p-productsInfo.price = productsInfo.price;p-productsInfo.num = productsInfo.num;strcpy(p-productsInfo.sort, productsInfo.sort);p-pnext = phead;phead = p;return phead; bool Delete() /删除指定数据项cout请输入商品
22、编号:no;if(phead=NULL) cout 不存在商品记录!productsInfo.no, no) phead=phead-pnext; return true;for(phead;p-pnext;p = p-pnext) if(!strcmp(p-pnext-productsInfo.no, no) break;if(p-pnext=NULL)cout不存在商品记录!pnext=p-pnext -pnext;delete p-pnext;return true;void modify() /修改指定条目node *p=phead;if (p=NULL) cout不存在商品记录!;r
23、eturn;char no14;coutno;for(p=phead;p;p = p-pnext) if(!strcmp(p-productsInfo.no, no) break;if (p=NULL) cout不存在该编号的商品!n;return;coutproductsInfo);ProductsInfo& GetproductsInfo(ProductsInfo& productsInfo) /从终端接收数据cout productsInfo.no;cout productsI;cout productsInfo.price;cout productsInfo.num;c
24、out productsInfo.sort;return productsInfo;ProductsInfo& SetproductsInfo1(ProductsInfo& productsInfo,FuncType func) switch(func)case QB_NO:cout productsInfo.no;break;case QB_NAME:cout productsI;break;case QB_price:cout productsInfo.price;break;case QB_num:cout productsInfo.num;break;case QB_s
25、ort:cout productsInfo.sort;break;return productsInfo;int main() ProductsInfo productsInfo;int cont = 1;int cont1 = 1;phead = CreateProList(productsInfo.txt); /装载数据文件while(cont) switch(PrintMenu(MAINMENU) case ADD: /添加数据条目GetproductsInfo(productsInfo); phead = Add(productsInfo); break;case PRINT: /显示
26、商品清单cout *&*&*&*&*&*&*&*以下是商品清单*&*&*&*&*&*&*&n;Print(phead);break;case DELETE: /删除指定条目if(Delete()cout 已删除!n;else cout 删除失败!n; break;case MODIFY: /修改指定条目modify();break;case QUERY: /查询操作cont1 = 1;while(cont1) FuncType func;func = PrintMenu(SUBMENU);switch(func) case QB_NO: case QB_NAME: case QB_price:
27、 case QB_sort: SetproductsInfo1(productsInfo,func);Print(Query(productsInfo, func);RemoveQueryRes();break;case EXIT: cont1 = 0;break;default: break;break;case SAVE: /保存至文件Save(productsInfo.txt);break;case EXIT: /退出RemoveProList();cont = 0;break;default:break;return 0;3.系统测试3.1 程序调试多个功能在执行时均出现健壮性较差的问题,输入非法数据后程序容易出错而停止运行,或是在查询、修改一条数据链表中记录时,也回出现类似情况,发现该问题后加入了检查输入数据非法性的语句,程序运行正常;另在int strcmp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 节日主题教育活动计划
- 二零二五年度林业树木清理与可持续利用合同3篇
- 2025版隧洞施工合同:隧道施工合同履约保证与履约担保协议3篇
- 二零二五年度钢材料国际采购合同标准范本
- 二零二五年度个人购房装修分期付款合同样本3篇
- 二零二五年度楼房居间买卖合同(含家具家电)4篇
- 二零二五年度个人对网络安全企业借款合同4篇
- 防水套管后补做法施工方案
- 二零二五年度钢厂废钢回收处理及环保设施建设合同
- 二零二五年度企业品牌形象托管授权合同3篇
- 《肝硬化的临床表现》课件
- 新增值税法学习课件
- DB23T 3838-2024商贸行业有限空间个体防护装备配备规范
- 《电子技术基础(第二版)》中职技工全套教学课件
- 五年级上册美术《传统门饰》课件
- DL∕T 1309-2013 大型发电机组涉网保护技术规范
- 城乡低保待遇协议书
- 华为HCIA-Storage H13-629考试练习题
- 辽宁省抚顺五十中学2024届中考化学全真模拟试卷含解析
- 2024年中国科学技术大学少年创新班数学试题真题(答案详解)
- 煤矿复工复产培训课件
评论
0/150
提交评论