版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 Product
3、sInfo productsInfo; node *pnext; ; 其中自定义数据类型 ProductsInfo 定义为: struct ProductsInfo /定义超市商品的相关属性 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, Q
4、B_sort, SAVE, EXIT; / 枚举操作类型 2.3 数据文件设计 数据记录保存在文本文件 productsInfo.txt 里,利用 C+流类库进行数据读写操作,每 条数据记录之间换行分隔开。 2.4 用户界面设计 用户界面为控制台字符模式,根据功能为用户设计了主菜单与分菜单,界面友好,易 于操作,主菜单如下: cout * cout * *n; cout * 请按下面的选单进行功能选择 : *n; cout * (1) 添加商品记录 *n; cout * (2) 显示商品清单 *n; cout * (3) 删除一条商品记录 *n; cout * (4) 修改一条商品记录 *n;
5、 cout * (5) 查询 *n; cout * (6) 保存至文档 *n; cout * (7) 退出 *n; cout* 查询功能的分菜单如下: cout * 武汉理工大学计算机基础强化训练课程设计 cout * 商品信息管理系统 *n; cout 查询*n; cout *(1) 按商品编号查询*n; cout *(2) 按商品名称查询*n; cout *(3) 按商品价格查询*n; cout *(4) 按商品分类查询*n; cout *(5) 返回*n; *n; cout 2.5 具体功能设计 根据功能需求分析,定义了如下功能函数: FuncType PrintMenu(MenuTyp
6、e 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/查询指定数据条目 node * Add(Product
7、sInfo /添加数据项 bool Delete(); / 删除指定条目 ProductsInfo / 从终端接收数据 ProductsInfo 功能函数调用关系图如下: 武汉理工大学计算机基础强化训练课程设计 附:源程序清单 /products.h /文件功能:定义超市商品的数据结构及其相关操作 #include #include #include #include struct ProductsInfo/定义超市商品的相关属性 char no14; char name25; float price; int num; char sort12; ; struct node/ 定义数据链表结点
8、 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, SAVE, EXIT;
9、/ 枚举操作类型 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 * Qu
10、ery(ProductsInfo 武汉理工大学计算机基础强化训练课程设计 node * Add(ProductsInfo/ 添加数据项 bool Delete();/删除指定条 目 ProductsInfo/ 从终端接收数据 ProductsInfo / products.h 文件结束 /products.cpp /文件功能: products.h 文件中操作的具体实现及主函数部分 #include products.h using namespace std; FuncType PrintMenu(MenuType which) FuncType func = NONE; int choic
11、e = 0; switch(which) case MAINMENU:/主菜单选项 cout * 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* cout choice; 武汉理工大学计算机基础强化训练课程设计 switch(choice) case 1: fu
12、nc = 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* cout * 商品信息管理系统 *n; cout 查询*n; cout * (1) 按商品编号
13、查询 *n; cout * (2) 按商品名称查询 *n; cout * (3) 按商品价格查询 *n; cout * (4) 按商品分类查询 *n; cout * (5) 返回 *n; cout *n; cout choice; cout 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
14、 = NONE; break; break; default: 武汉理工大学计算机基础强化训练课程设计 cout 没有查询到该条商品记录 !n; return func; break; node * CreateProList(char filename) node * p=NULL; ifstream products(filename); if(!products) cerr文件不存在!请添加商品记录! p-productsInfo.no; products p-productsI; products p-productsInfo.price; products p-pro
15、ductsInfo.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() for(QueryRes *p2, *p1 = pqueryres;p1;p1 = p2) p2 = p1-pnext; delet
16、e 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 productsInfo.price; products productsInfo.num; products productsInfo.sort
17、pnext) coutproductsInfo.no ; coutproductsI ; coutproductsInfo.price ; coutproductsInfo.num ; coutproductsInfo.sort pnext) cout pnode-productsInfo.no ; cout pnode-productsI ; cout pnode-productsInfo.price ; cout pnode-productsInfo.num ; cout pnode-productsInfo.sort pnext) switch(func)
18、 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(!strcmp(p-productsIn
19、fo.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 if(p = new node() /按名称查询 /按价格查询 /按分类查询 /添加数据项 strcpy(p-productsInfo.no, productsI
20、nfo.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 请输入商品编号: no; if(phead=N
21、ULL) 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不存在商品记录! ; return
22、; char no14; coutno; for(p=phead;p;p = p-pnext) 10 武汉理工大学计算机基础强化训练课程设计 if(!strcmp(p-productsInfo.no, no) break; if (p=NULL) cout不存在该编号的商品! n; return; coutproductsInfo); /从终端接收 ProductsInfo cout productsI; cout productsInfo.price; cout productsInfo.num; cout productsInfo.sort; return products
23、Info; ProductsInfobreak; case QB_NAME: cout productsI;break; case QB_price: cout productsInfo.price;break; case QB_num: cout productsInfo.num;break; case QB_sort: cout productsInfo.sort;break; return productsInfo; int main() ProductsInfo productsInfo; int cont = 1; int cont1 = 1; /装载数据文件 /添加
24、数据条目 /显示商品清单 phead = CreateProList(productsInfo.txt); while(cont) switch(PrintMenu(MAINMENU) case ADD: GetproductsInfo(productsInfo); phead = Add(productsInfo); break; case PRINT: cout * Print(phead); break; /删除指定条目 case DELETE: if(Delete() cout 已删除 !n;elsecout 删除失败 !n; break; case MODIFY:/修改指定条目 mo
25、dify(); break; case QUERY:/查询操作 cont1 = 1; while(cont1) FuncType func; func = PrintMenu(SUBMENU); switch(func) case QB_NO: case QB_NAME: case QB_price: 12 武汉理工大学计算机基础强化训练课程设计 case QB_sort: SetproductsInfo1(productsInfo,func); Print(Query(productsInfo, func); RemoveQueryRes(); break; case EXIT: cont1
26、 = 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(char *,char *)函数使用 时,未弄清该函数的返回值问题,相关功能便会出现相反的结果;再者便是一些常见的语 法上的错误,一一改正之后,程序运行正常。 3.2 结果测试分析 13 武汉理工大学计算机基础强化训练课程设计 运行程序,结果如下: 输入 1 后进行添加操作,如下: 系统返回主菜单后再添加两条商品记录,输入 2 显示清单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储物流运输合同协议三篇
- 精神科患者法律问题护理
- 车间安全生产工作总结汇编14篇
- 后循环缺血护理中的远程监控
- 车间安全生产工作总结(汇编15篇)
- 2026年中班开学户外活动方案及流程
- 2026年工业设计产业园区建设方案
- 亳州市2025安徽省亳州市定向引进人才30人笔试历年参考题库典型考点附带答案详解
- 云南省2025云南省残疾人联合会直属事业单位招聘人员(3人)笔试历年参考题库典型考点附带答案详解
- 云南省2025云南交通职业技术学院招聘高层次人才(40人)笔试历年参考题库典型考点附带答案详解
- 2026交管12123学法减分题库200题(含标准答案)
- 特种设备相关法规标准现状及更新情况介绍
- 2026年危货运输安全管理试题及答案
- 2026年北京市海淀区五年级数学下册期末考试试卷及答案
- 2026年高等学校教师岗前培训暨教师资格笔题库高频重点提升及答案详解(名校卷)
- 广西工匠学院建设方案
- 部队车辆安全教育培训课件
- 艺术培训安全须知课件
- 2025年五类人员选拔考试试题及答案
- GB 2536-2025电工流体变压器和开关用的未使用过的矿物绝缘油
- 信访档案规范管理办法
评论
0/150
提交评论