版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学计算机基础强化训练课程设计超市商品管理的设计与实现1. 系统描述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 /定义超市商品的相关属性c
3、har 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 << "* (
5、2) 显示商品清单 *n"cout << "* (3) 删除一条商品记录 *n"cout << "* (4) 修改一条商品记录 *n"cout << "* (5) 查询 *n"cout << "* (6) 保存至文档 *n"cout << "* (7) 退出 *n"cout<<"*&*&*&*&*&*&*&*&*&*&*&am
6、p;*&*&*&*&*&*&*&*&*&*&*&*&*&n"查询功能的分菜单如下:cout << "*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*n"cout << "* 商品信息管理系统 *n&qu
7、ot;cout << "*主菜单->查询 *n"cout << "* (1) 按商品编号查询 *n"cout << "* (2) 按商品名称查询 *n"cout << "* (3) 按商品价格查询 *n"cout << "* (4) 按商品分类查询 *n"cout << "* (5) 返回 *n"cout << "*n"2.5具体功能设计根据功能需求分析,定义了如下功
8、能函数:FuncType PrintMenu(MenuType which); /菜单选择函数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&
9、productsInfo, FuncType func);/查询指定数据条目node * Add(ProductsInfo& productsInfo); /添加数据项bool Delete(); /删除指定条目ProductsInfo& GetproductsInfo(ProductsInfo& productsInfo); /从终端接收数据ProductsInfo& SetproductsInfo1(ProductsInfo& productsInfo,FuncType func); 功能函数调用关系图如下:mainCreateProListPrin
10、tMenuAddprintdeletemodifyquerysaveRemoveProListGetproductsInfoSetproductsInfo1附:源程序清单/products.h/文件功能:定义超市商品的数据结构及其相关操作#include <iostream>#include <iomanip>#include <fstream>#include <string>struct ProductsInfo /定义超市商品的相关属性char no14;char name25;float price;int num;char sort12
11、;struct node /定义数据链表结点ProductsInfo productsInfo;node *pnext;struct QueryRes node * pnode;QueryRes * pnext;node *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,
12、SAVE, EXIT; /枚举操作类型FuncType PrintMenu(MenuType which); /菜单选择函数node * CreateProList(char filename); /读取数据文件,建立数据链表void RemoveProList(); /撤销内存空间void RemoveQueryRes();void Save(char filename); /保存至文件void Print(node *pnode); /显示数据信息void Print(QueryRes *pnode);void modify(); /修改指定数据条目QueryRes * Query(Pro
13、ductsInfo& productsInfo, FuncType func); /查询指定数据条目node * Add(ProductsInfo& productsInfo); /添加数据项bool Delete(); /删除指定条目ProductsInfo& GetproductsInfo(ProductsInfo& productsInfo); /从终端接收数据ProductsInfo& SetproductsInfo1(ProductsInfo& productsInfo,FuncType func); / products.h文件结束/
14、products.cpp/文件功能:products.h文件中操作的具体实现及主函数部分#include "products.h"using namespace std;FuncType PrintMenu(MenuType which) FuncType func = NONE;int choice = 0;switch(which) case MAINMENU: /主菜单选项cout << "*&*&*&*&*&*&*&*欢迎使用商品管理系统*&*&*&*&*&
15、amp;*&*n"cout << "* *n"cout << "* 请按下面的选单进行功能选择: *n"cout << "* (1) 添加商品记录 *n"cout << "* (2) 显示商品清单 *n"cout << "* (3) 删除一条商品记录 *n"cout << "* (4) 修改一条商品记录 *n"cout << "* (5) 查询 *n"co
16、ut << "* (6) 保存至文档 *n"cout << "* (7) 退出 *n"cout<<"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&n"cout << "* 请选择 (1-6):"cin >> choic
17、e;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: /分菜单选项cout<<"*&*&*&
18、*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*n"cout << "* 商品信息管理系统 *n"cout << "*主菜单->查询 *n"cout << "* (1) 按商品编号查询 *n"cout << "* (2) 按商品名称查询 *n"cout << "*
19、 (3) 按商品价格查询 *n"cout << "* (4) 按商品分类查询 *n"cout << "* (5) 返回 *n"cout << "*n"cout << "* 请选择(1-6):"cin >> choice;cout<< &*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*
20、&*&*&*&*&*&n"switch(choice) case 1: func = QB_NO; 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 fun
21、c;node * CreateProList(char filename) node * p=NULL;ifstream products(filename);if(!products) cerr<<"文件不存在!请添加商品记录!"<<endl;return NULL;while(!products.eof() /装载数据文件if(p = new node() products >> p->productsInfo.no;products >> p->productsI;products >&
22、gt; 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 = NULL;void RemoveQueryRes()
23、 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 << " " << p->productsInfo.no;products << "
24、" << p->productsI;products << " " << p->productsInfo.price;products << " " << p->productsInfo.num;products << " " << p->productsInfo.sort<<endl;products.close();void Print(node *pnode) /输出数据for(nod
25、e *p = pnode;p;p = p->pnext) cout<<p->productsInfo.no << " " ;cout<<p->productsI << " " ;cout<<p->productsInfo.price << " " ;cout<<p->productsInfo.num << " " ;cout<<p->productsInfo
26、.sort << "n"void Print(QueryRes *pnode) for(QueryRes *p = pnode;p;p = p->pnext) cout << p->pnode->productsInfo.no << " "cout << p->pnode->productsI << " "cout << p->pnode->productsInfo.price << "
27、; "cout << p->pnode->productsInfo.num << " "cout << p->pnode->productsInfo.sort << "n"QueryRes * Query(ProductsInfo& productsInfo, FuncType func) /查询功能实现int hasRes = 0;QueryRes *pquery = NULL; for(node *p = phead;p;p = p->pnext) swi
28、tch(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 = 1;break;case QB_sort: /按分类查询if(!
29、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 = new node() strcpy(
30、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
31、<<"请输入商品编号:"<<endl;char no14;cin>>no;if(phead=NULL) cout<<" 不存在商品记录!"<<endl; return false;node *p=phead;if(!strcmp(p->productsInfo.no, no) phead=phead->pnext; return true;for(phead;p->pnext;p = p->pnext) if(!strcmp(p->pnext->product
32、sInfo.no, no) break;if(p->pnext=NULL)cout<<"不存在商品记录!"<<endl; return false;p->pnext=p->pnext ->pnext;delete p->pnext;return true;void modify() /修改指定条目node *p=phead;if (p=NULL) cout<<"不存在商品记录!"return;char no14;cout<<"请输入要修改的商品编号:"cin
33、>>no;for(p=phead;p;p = p->pnext) if(!strcmp(p->productsInfo.no, no) break;if (p=NULL) cout<<"不存在该编号的商品!n"return;cout<<"请重新输入该商品信息:"GetproductsInfo(p->productsInfo);ProductsInfo& GetproductsInfo(ProductsInfo& productsInfo) /从终端接收数据cout << &
34、quot;请输入商品编号: "cin >> productsInfo.no;cout << "请输入商品名称: "cin >> productsI;cout << "请输入商品价格: "cin >> productsInfo.price;cout << "请输入商品数量: "cin >> productsInfo.num;cout << "请输入商品类别: "cin >> produ
35、ctsInfo.sort;return productsInfo;ProductsInfo& SetproductsInfo1(ProductsInfo& productsInfo,FuncType func) switch(func)case QB_NO:cout << "请输入商品编号: "cin >> productsInfo.no;break;case QB_NAME:cout << "请输入商品名称:"cin >> productsI;break;case QB_p
36、rice:cout << "请输入商品价格: "cin >> productsInfo.price;break;case QB_num:cout << "请输入商品数量: "cin >> productsInfo.num;break;case QB_sort:cout << "请输入商品类别: "cin >> productsInfo.sort;break;return productsInfo;int main() ProductsInfo productsIn
37、fo;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: /显示商品清单cout << "*&*&*&*&*&*&*&*以下是商品清单*
38、&*&*&*&*&*&*&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: case QB_sort: SetproductsInfo1(productsInf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国子宫疾病影像诊断指南(2026版)
- 水处理岗位考试题及答案
- 配电箱巡检记录表
- 2026环保工程师基础知识练习题(含答案)
- 过敏性休克应急预案考核试题及答案
- 烟草专卖法复习题及答案
- 铁路安全隐患排查措施
- CN119952711A 一种基于多脑区联合模型的机械臂力柔顺交互控制方法
- 干热风灾害防控
- 腭撕裂缝合术后护理查房
- 2026年北京市西城区初三一模英语试卷(含答案)
- 电力重大事故隐患判定标准2026版解读
- 2026届湖南省常德市芷兰实验校中考联考数学试题含解析
- 2026年38期入团考试题及答案
- 小学生讲故事比赛评分标准
- GB/T 16271-2025钢丝绳吊索插编索扣
- T/CBMCA 039-2023陶瓷大板岩板装修镶贴应用规范
- GB/T 9163-2001关节轴承向心关节轴承
- GB/T 26163.1-2010信息与文献文件管理过程文件元数据第1部分:原则
- GA 270-2009警用服饰帽徽
- 习作:《我学会了-》课件
评论
0/150
提交评论