網(wǎng)站首頁 編程語言 正文
本文實(shí)例為大家分享了C++實(shí)現(xiàn)商店倉庫管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、問題描述
系統(tǒng)應(yīng)具有下列主要功能:輸入記錄功能:從鍵盤輸入貨物信息:商品代號(hào),商品名稱, 數(shù)量,價(jià)格,所屬類別(如家用電器、日用品等)等;修改商品數(shù)量、刪除記錄功能、按商品代號(hào)查詢、按商品代號(hào)排序并顯示等功能。
二、基本要求
(1)使用面向?qū)ο缶幊趟枷刖帉戦_發(fā)過程中需要用到的類,使用繼承的方法構(gòu)造至少 3個(gè)類(即商品類(虛基類),家用電器類和日用品類(派生類)),另外再設(shè)計(jì)一個(gè)管理類,實(shí)現(xiàn)對(duì)商品的管理;
(2)輸入和輸出可以使用文本文件重定向輸入(保存數(shù)據(jù)為磁盤文件);也可以使用標(biāo)準(zhǔn)輸入輸出進(jìn)行(提交時(shí)需要提交TXT格式輸入數(shù)據(jù))。包含各類商品信息,程序運(yùn)行時(shí)進(jìn)行初始化數(shù)據(jù),使用vector 數(shù)組存放對(duì)象指針。并能保存數(shù)據(jù)為磁盤文件。
(3)程序運(yùn)行時(shí)使用菜單顯示添加(輸入)記錄,修改商品數(shù)量,瀏覽商品信息,按商品代號(hào)查找 ,刪除記錄。
(4)編寫同名 display() 成員函數(shù)既虛函數(shù),用來輸出所有商品的信息。要求對(duì)<< 和>>
運(yùn)算符進(jìn)行重載,實(shí)現(xiàn)信息的輸入輸出。
(5) 基本功能要求具有增、刪、改、查。
基本流程圖
#include//基本的輸入輸出? #include //文件操作? #include //strcmp函數(shù),比較兩個(gè)字符串? #include //用getch(); #include //vector數(shù)組? #define SIZE 100 ?//采用宏定義,定義char數(shù)組的大小? using namespace std; class Goods//Goods類定義? { ?? ?public: ?? ??? ?Goods(){}//無參數(shù)無初值的構(gòu)造函數(shù) ,缺省構(gòu)造函數(shù)? ?? ??? ?char Number[SIZE];//編號(hào)? ?? ??? ?char Name[SIZE];//商品名? ?? ??? ?int Amount;//數(shù)量? ?? ??? ?float Price;//價(jià)格? ?? ??? ?char Type[SIZE];//類別? ?? ??? ?Goods * Next;//指針? ?? ??? ?vector Manage; //vector數(shù)組的定義? ?? ??? ?friend ostream& operator<<(ostream& out,Goods& ?obj)//重載<<輸出運(yùn)算符? ?? ??? ?{ ?? ??? ??? ??? ?out< >(istream& in,Goods& obj)//重載>>輸入運(yùn)算符? ?? ??? ?{ ?? ??? ??? ??? ?in>>obj.Number>>obj.Name>>obj.Amount>>obj.Type; ?? ??? ?} ?? ??? ?void SetType()//設(shè)置商品類別? ?? ??? ?{?? ?cout<<" 請(qǐng)選擇種類:";?? ?cin>>Type;} ?? ??? ?void SetName()//設(shè)置商品名? ?? ??? ?{?? ?cout<<" 請(qǐng)輸入商品的名稱:"; cin>>Name;} ?? ??? ?void SetNumber()//設(shè)置商品編號(hào)? ?? ??? ?{?? ?cout<<" ?請(qǐng)輸入商品的編號(hào):"; cin>>Number;} ?? ??? ?void SetPrice()//設(shè)置類商品價(jià)格? ?? ??? ?{cout<<" 請(qǐng)輸入商品單價(jià):"; cin>>Price;} ?? ??? ?void SetAmount()//設(shè)置商品數(shù)量? ?? ??? ?{cout<<" 請(qǐng)輸入商品庫存:"; cin>>Amount;} ?? ??? ?void SetOther() //設(shè)置其他數(shù)據(jù)? ?? ??? ?{?? ?cout<<" ?請(qǐng)輸入商品價(jià)格:"; cin>>Price; ?? ??? ??? ?cout<<" ?請(qǐng)輸入存貨數(shù)量:"; cin>>Amount;} ?? ? ?? ??? ?void ReadFile(istream & in)//讀取文件? ?? ??? ?{?? ?in>>Name>>Type>>Number>>Price>>Amount;}?? ? ?? ??? ?void SetAll()//成員函數(shù) ?功能:輸入信息? ?? ??? ?{ ?? ??? ??? ?SetName(); ?? ??? ??? ?SetType(); ?? ??? ??? ?SetNumber(); ?? ??? ??? ?SetOther(); ?? ??? ? ?? ??? ?} ?? ??? ?void Show()//輸出商品信息? ?? ??? ?{?? ?cout<<"商品名: "< Next;goods!=End;goods=goods->Next)//從頭結(jié)點(diǎn)循環(huán)到尾節(jié)點(diǎn),輸出全部的商品信息? ?? ??? ??? ?{ ?? ??? ??? ??? ?goods->Show(); //輸出每一個(gè)結(jié)點(diǎn)的各條信息? ?? ??? ??? ??? ?i++; ?? ? ? ? ? ?} ?? ??? ??? ?cout<<"共有"<Next!=End;goods=goods->Next)//匹配成功則返回上一個(gè)指針,不成功就返回空 ?? ??? ??? ??? ?if(!strcmp(goods->Next->Name,Name))return goods; ?? ??? ??? ??? ?return NULL; ?? ??? ?} ?? ??? ?Goods *FindNumber(char * Number)//按編號(hào)查找? ?? ??? ?{ ?? ??? ??? ?for(Goods * goods=Head;goods->Next!=End;goods=goods->Next)//匹配成功則返回上一個(gè)指針,不成功就返回空 ?? ??? ??? ??? ?if(!strcmp(goods->Next->Number,Number))return goods; ?? ??? ? ?? ? return NULL; ?? ??? ?} };? void Manage::AddGoods()//從鍵盤輸入商品信息 { ?? ?system("cls");//清空屏幕? ?? ?ShowMenu(1);//調(diào)用菜單函數(shù)? ?? ?End->SetName(); ?? ?End->SetType(); ?? ?do ?? ?{End->SetNumber();}while(FindNumber(End->Number));//當(dāng)編號(hào)不為空時(shí)輸入每一條信息? ?? ?End->SetOther(); ?? ?End->Next = new Goods;//開辟新空間,存儲(chǔ)新的商品信息? ?? ?End=End->Next; ?? ?cout<<"添加成功!"< Next=new Goods;? ?? ?End=Head->Next; ?? ?in.open("倉庫.txt");//打開倉庫文件? ?? ?if(!in)//如果打開失敗? ?? ??? ?cout<<"沒有庫存"< ReadFile(in); ?? ??? ??? ?if(End->Name[0]=='\0')break;//當(dāng)名字為0是結(jié)束讀取? ?? ??? ??? ?End->Next=new Goods; ?? ??? ??? ?End=End->Next; ?? ??? ?} ?? ??? ?in.close();//關(guān)閉文件? ?? ??? ?cout<<" 讀取商品信息成功!"< Next!=End;) //循環(huán)遍歷,釋放所有的指針? ?? ?{ ?? ??? ?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);//調(diào)用菜單? ?? ?cin>>Input;//按姓名或者編號(hào)查詢? ?? ?switch(Input) ?? ?{ ?? ??? ?case 1:{cout<<" 請(qǐng)輸入要查找的商品的名稱:";cin>>Name; ?? ??? ??? ?if(goods=FindName(Name)) ?? ??? ??? ?{?? ?goods->Next->Show(); ?? ??? ??? ? ? ?? ?cout<<"按任意鍵繼續(xù)......"; ?? ??? ? ?? ? ? ?? ?getch();} ?? ??? ??? ?else{ ?? ??? ??? ??? ?cout<<" 沒有找到該名稱的商品!"<<'\n'< >Number; ?? ??? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?goods->Next->Show(); ?? ??? ??? ??? ??? ?cout<<"按任意鍵繼續(xù)......"; ?? ??? ??? ??? ??? ?getch(); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ?cout<<" 沒有找到該編號(hào)的商品!"<<'\n'< >Input; ?? ?switch(Input) ?? ?{ ?? ??? ?case 1: ?? ??? ?{ ?? ??? ??? ?char Number[SIZE]; ?? ??? ??? ?Goods * goods=NULL; ?? ??? ??? ?cout<<" 請(qǐng)輸入要修改的商品的編號(hào):";cin>>Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ?cout<<" 已找到商品的信息,請(qǐng)輸入新的信息!"< Next->SetName();//將新輸入的姓名存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請(qǐng)輸入新的信息!"< Next->SetType();//將新輸入的類別存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請(qǐng)輸入新的信息!"< Next->SetNumber();//將新輸入的編號(hào)存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請(qǐng)輸入新的信息!"< Next->SetPrice();//將新輸入的價(jià)格存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ??? ??? ?if(goods=FindNumber(Number)) ?? ??? ??? ?{? ?? ??? ??? ??? ?cout<<" 已找到商品的信息,請(qǐng)輸入新的信息!"< Next->SetAmount();//將新輸入的數(shù)量存到磁盤中? ?? ??? ??? ??? ?cout<<"修改成功!"< >Number; ?? ?if(goods=FindNumber(Number))//調(diào)用 FindNumber()函數(shù)按照編號(hào)查找,找到后進(jìn)行刪除? ?? ?{ ?? ??? ?temp=goods->Next; ?? ??? ?goods->Next=goods->Next->Next;? ?? ??? ?delete temp; ?? ??? ?cout<<" 刪除成功!"< Next;goods!=End;goods=goods->Next)//對(duì)所有結(jié)點(diǎn)進(jìn)行遍歷,遍歷結(jié)束后n即為總數(shù)? ?? ??? ?n++; ?? ?return n; } void Manage::SaveGoods() // 將磁盤中的文件寫入文本文件中? { ?? ?out.open("倉庫.txt"); ?? ?for(Goods *goods=Head->Next;goods!=End;goods=goods->Next)//循環(huán)寫入? ?? ??? ?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
相關(guān)推薦
- 2022-12-02 Android?Flutter實(shí)現(xiàn)自由落體彈跳動(dòng)畫效果_Android
- 2022-06-30 利用Python刪除電腦中重復(fù)文件的方法_python
- 2022-08-25 Python??中的pass語句語法詳析_python
- 2023-07-18 讀取Springboot的jar包中的文件資源方式
- 2022-06-06 python?包之?threading?多線程_python
- 2022-08-26 Rust+React創(chuàng)建富文本編輯器_React
- 2022-07-07 關(guān)于bat腳本中的命令狀態(tài)碼相關(guān)的%errorlevel%變量問題_DOS/BAT
- 2024-07-18 maven:解決release錯(cuò)誤:Artifact updating: Repository =‘
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支