網站首頁 編程語言 正文
本文實例為大家分享了C++實現商店倉庫管理系統的具體代碼,供大家參考,具體內容如下
一、問題描述
系統應具有下列主要功能:輸入記錄功能:從鍵盤輸入貨物信息:商品代號,商品名稱, 數量,價格,所屬類別(如家用電器、日用品等)等;修改商品數量、刪除記錄功能、按商品代號查詢、按商品代號排序并顯示等功能。
二、基本要求
(1)使用面向對象編程思想編寫開發過程中需要用到的類,使用繼承的方法構造至少 3個類(即商品類(虛基類),家用電器類和日用品類(派生類)),另外再設計一個管理類,實現對商品的管理;
(2)輸入和輸出可以使用文本文件重定向輸入(保存數據為磁盤文件);也可以使用標準輸入輸出進行(提交時需要提交TXT格式輸入數據)。包含各類商品信息,程序運行時進行初始化數據,使用vector 數組存放對象指針。并能保存數據為磁盤文件。
(3)程序運行時使用菜單顯示添加(輸入)記錄,修改商品數量,瀏覽商品信息,按商品代號查找 ,刪除記錄。
(4)編寫同名 display() 成員函數既虛函數,用來輸出所有商品的信息。要求對<< 和>>
運算符進行重載,實現信息的輸入輸出。
(5) 基本功能要求具有增、刪、改、查。
基本流程圖
#include//基本的輸入輸出? #include //文件操作? #include //strcmp函數,比較兩個字符串? #include //用getch(); #include //vector數組? #define SIZE 100 ?//采用宏定義,定義char數組的大小? using namespace std; class Goods//Goods類定義? { ?? ?public: ?? ??? ?Goods(){}//無參數無初值的構造函數 ,缺省構造函數? ?? ??? ?char Number[SIZE];//編號? ?? ??? ?char Name[SIZE];//商品名? ?? ??? ?int Amount;//數量? ?? ??? ?float Price;//價格? ?? ??? ?char Type[SIZE];//類別? ?? ??? ?Goods * Next;//指針? ?? ??? ?vector Manage; //vector數組的定義? ?? ??? ?friend ostream& operator<<(ostream& out,Goods& ?obj)//重載<<輸出運算符? ?? ??? ?{ ?? ??? ??? ??? ?out< >(istream& in,Goods& obj)//重載>>輸入運算符? ?? ??? ?{ ?? ??? ??? ??? ?in>>obj.Number>>obj.Name>>obj.Amount>>obj.Type; ?? ??? ?} ?? ??? ?void SetType()//設置商品類別? ?? ??? ?{?? ?cout<<" 請選擇種類:";?? ?cin>>Type;} ?? ??? ?void SetName()//設置商品名? ?? ??? ?{?? ?cout<<" 請輸入商品的名稱:"; cin>>Name;} ?? ??? ?void SetNumber()//設置商品編號? ?? ??? ?{?? ?cout<<" ?請輸入商品的編號:"; cin>>Number;} ?? ??? ?void SetPrice()//設置類商品價格? ?? ??? ?{cout<<" 請輸入商品單價:"; cin>>Price;} ?? ??? ?void SetAmount()//設置商品數量? ?? ??? ?{cout<<" 請輸入商品庫存:"; cin>>Amount;} ?? ??? ?void SetOther() //設置其他數據? ?? ??? ?{?? ?cout<<" ?請輸入商品價格:"; cin>>Price; ?? ??? ??? ?cout<<" ?請輸入存貨數量:"; cin>>Amount;} ?? ? ?? ??? ?void ReadFile(istream & in)//讀取文件? ?? ??? ?{?? ?in>>Name>>Type>>Number>>Price>>Amount;}?? ? ?? ??? ?void SetAll()//成員函數 ?功能:輸入信息? ?? ??? ?{ ?? ??? ??? ?SetName(); ?? ??? ??? ?SetType(); ?? ??? ??? ?SetNumber(); ?? ??? ??? ?SetOther(); ?? ??? ? ?? ??? ?} ?? ??? ?void Show()//輸出商品信息? ?? ??? ?{?? ?cout<<"商品名: "< Next;goods!=End;goods=goods->Next)//從頭結點循環到尾節點,輸出全部的商品信息? ?? ??? ??? ?{ ?? ??? ??? ??? ?goods->Show(); //輸出每一個結點的各條信息? ?? ??? ??? ??? ?i++; ?? ? ? ? ? ?} ?? ??? ??? ?cout<<"共有"<Next!=End;goods=goods->Next)//匹配成功則返回上一個指針,不成功就返回空 ?? ??? ??? ??? ?if(!strcmp(goods->Next->Name,Name))return goods; ?? ??? ??? ??? ?return NULL; ?? ??? ?} ?? ??? ?Goods *FindNumber(char * Number)//按編號查找? ?? ??? ?{ ?? ??? ??? ?for(Goods * goods=Head;goods->Next!=End;goods=goods->Next)//匹配成功則返回上一個指針,不成功就返回空 ?? ??? ??? ??? ?if(!strcmp(goods->Next->Number,Number))return goods; ?? ??? ? ?? ? return NULL; ?? ??? ?} };? void Manage::AddGoods()//從鍵盤輸入商品信息 { ?? ?system("cls");//清空屏幕? ?? ?ShowMenu(1);//調用菜單函數? ?? ?End->SetName(); ?? ?End->SetType(); ?? ?do ?? ?{End->SetNumber();}while(FindNumber(End->Number));//當編號不為空時輸入每一條信息? ?? ?End->SetOther(); ?? ?End->Next = new Goods;//開辟新空間,存儲新的商品信息? ?? ?End=End->Next; ?? ?cout<<"添加成功!"< Next=new Goods;? ?? ?End=Head->Next; ?? ?in.open("倉庫.txt");//打開倉庫文件? ?? ?if(!in)//如果打開失敗? ?? ??? ?cout<<"沒有庫存"< ReadFile(in); ?? ??? ??? ?if(End->Name[0]=='\0')break;//當名字為0是結束讀取? ?? ??? ??? ?End->Next=new Goods; ?? ??? ??? ?End=End->Next; ?? ??? ?} ?? ??? ?in.close();//關閉文件? ?? ??? ?cout<<" 讀取商品信息成功!"< Next!=End;) //循環遍歷,釋放所有的指針? ?? ?{ ?? ??? ?temp=Head->Next; ?? ??? ?Head->Next=Head->Next->Next; ?? ??? ?delete temp; ?? ?} ?? ?delete Head,End; } void Manage::FindGoods() //查找商品? { ?? ?system("cls"); ?? ?char Name[SIZE] ,Number[10]; ?? ?int Input; ?? ?Goods * goods=NULL;//初始化指針? ?? ?ShowMenu(5);//調用菜單? ?? ?cin>>Input;//按姓名或者編號查詢? ?? ?switch(Input) ?? ?{ ?? ??? ?case 1:{cout<<" 請輸入要查找的商品的名稱:";cin>>Name; ?? ??? ??? ?if(goods=FindName(Name)) ?? ??? ??? ?{?? ?goods->Next->Show(); ?? ??? ??? ? ? ?? ?cout<<"按任意鍵繼續......"; ?? ??? ? ?? ? ? ?? ?getch();} ?? ??? ??? ?else{ ?? ??? ??? ??? ?cout<<" 沒有找到該名稱的商品!"<<'\n'< >Number; ?? ??? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?goods->Next->Show(); ?? ??? ??? ??? ??? ?cout<<"按任意鍵繼續......"; ?? ??? ??? ??? ??? ?getch(); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ?cout<<" 沒有找到該編號的商品!"<<'\n'< >Input; ?? ?switch(Input) ?? ?{ ?? ??? ?case 1: ?? ??? ?{ ?? ??? ??? ?char Number[SIZE]; ?? ??? ??? ?Goods * goods=NULL; ?? ??? ??? ?cout<<" 請輸入要修改的商品的編號:";cin>>Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ?cout<<" 已找到商品的信息,請輸入新的信息!"< Next->SetName();//將新輸入的姓名存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請輸入新的信息!"< Next->SetType();//將新輸入的類別存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請輸入新的信息!"< Next->SetNumber();//將新輸入的編號存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請輸入新的信息!"< Next->SetPrice();//將新輸入的價格存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{? ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請輸入新的信息!"< Next->SetAmount();//將新輸入的數量存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ?if(goods=FindNumber(Number))//調用 FindNumber()函數按照編號查找,找到后進行刪除? ?? ?{ ?? ??? ?temp=goods->Next; ?? ??? ?goods->Next=goods->Next->Next;? ?? ??? ?delete temp; ?? ??? ?cout<<" 刪除成功!"< Next;goods!=End;goods=goods->Next)//對所有結點進行遍歷,遍歷結束后n即為總數? ?? ??? ?n++; ?? ?return n; } void Manage::SaveGoods() // 將磁盤中的文件寫入文本文件中? { ?? ?out.open("倉庫.txt"); ?? ?for(Goods *goods=Head->Next;goods!=End;goods=goods->Next)//循環寫入? ?? ??? ?out< Name<<" "< Type<<" "< Number<<" "< Price<<" "< Amount<<'\n'; ?? ?out.close(); ?? ?cout<<"信息保存成功"< >Input; ?? ??? ?switch(Input) ?? ??? ?{? ?? ??? ??? ?case 0:{quit=true;break;} ?? ??? ??? ?case 1:{G.AddGoods();break;} ?? ??? ??? ?case 2:{G.Display();break;} ?? ??? ??? ?case 3:{G.FindGoods();break;} ?? ??? ??? ?case 4:{G.DelGoods();break;} ?? ??? ??? ?case 5:{G.ChangeGoods();break;} ?? ??? ??? ?case 6:{G.SaveGoods();break;} ?? ??? ??? ?} ?? ??? ?} ?? ?return 0;? }
原文鏈接:https://blog.csdn.net/cjl1831050185/article/details/109231553
相關推薦
- 2022-10-16 Django完整增刪改查系統實例代碼_python
- 2022-03-31 詳解C語言中的Static關鍵字_C 語言
- 2022-04-15 c語言?深入理解函數的遞歸_C 語言
- 2023-09-12 git 忽略掉不需要的文件
- 2022-07-16 CMake下調用anaconda的pytorch及numpy傳參CV::Mat給python(多線程
- 2021-12-02 C++?函數的介紹_C 語言
- 2022-03-17 c++智能指針unique_ptr的使用_C 語言
- 2022-07-22 jQuery實現點擊顯示密碼框密碼
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支