数据结构课设:仓库管理系统(C++)
生活随笔
收集整理的這篇文章主要介紹了
数据结构课设:仓库管理系统(C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、倉庫要求是什么?
- 二、具體實現
- 1.結點設計
- 2.進貨操作
- 3.退貨操作
- 4.存文件
- 5.讀文件
- 6.根據售價排序(冒泡)
- 7.查找(關鍵值)
- 總結
前言
因為我的課設(最短路徑)完成的比較早,于是我又做了倉庫管理系統的設計。
整體代碼功能比較簡單,可以給小伙伴們提供一些參考。
一、倉庫要求是什么?
用鏈表實現進貨,退貨,排序(根據售價),關鍵值(名稱)搜索,顯示所有貨物,商品數量不足時提醒補貨,讀取倉庫文件,保存倉庫文件,選擇不同的倉庫。
二、具體實現
1.結點設計
代碼如下:
struct Node {woodinfo data; //woodinfo數據結點可以根據需要來寫Node* next; };2.進貨操作
代碼如下(示例):
void Goods::insertNodeByHead(Node* headNode, woodinfo data) {Node* insert = NULL;insert = searchByName(headNode,data.name);if (insert == NULL){Node* newNode = creatNode(data);newNode->next = headNode->next;headNode->next = newNode;cout << "入庫新物品“" << data.name << "”" << data.many<<"件" << endl;}else{cout << data.name << "原始庫存" << insert->data.many << "件" << endl;insert->data.many += data.many;cout << data.name << "現有庫存" << insert->data.many << "件" << endl;} }3.退貨操作
void Goods::deleteNodeByData(Node* headNode, string name,int count) {Node* posleftNode = headNode;Node* posNode = headNode->next;while (posNode != NULL && posNode->data.name != name){posleftNode = posNode;posNode = posleftNode->next;}if (posNode == NULL)cout << "當前倉庫中沒有找到" << name << endl;else{if (posNode->data.many > count){posNode->data.many -= count;cout << "出庫成功!" << endl;cout<< name <<"剩余" << posNode->data.many<<"件"<< endl;}else if (posNode->data.many == count){cout << "出庫成功!" << endl;cout << posNode->data.name<<"已全部出庫!若后續需要請及時補充!" << endl;posleftNode->next = posNode->next;delete posNode;posNode = NULL;}else if(posNode->data.many< count){cout << posNode->data.name << "剩余" << posNode->data.many << "件" << "無法滿足出貨要求!" << endl;}} }4.存文件
int Goods::Sum() //方便下次讀取文件,放在文件第一行 {Node* p = headNode->next;int sum = 0;while (p != NULL){sum++;p = p->next;}return sum; } void Goods::saveInforFormFile(string fileName, struct Node* headNode) {ofstream fout(fileName);//第一次開始無文件創建文件if (!fout)//創建文件{cerr << "打開失敗!";}Node* pMove = headNode->next;int n = Sum();fout << n << endl;while (pMove != NULL) //我的數據結點信息比較多,因此比較長,可根據需求自己調整{fout << setw(15) << std::left << pMove->data.num << setw(15) << std::left << pMove->data.name << setw(15) << std::left << pMove->data.type << setw(15) << std::left << pMove->data.inprice << setw(15) << std::left << pMove->data.outprice << setw(15) << std::left << pMove->data.many << setw(15) << std::left << pMove->data.soldname << endl;pMove = pMove->next;}fout.close(); }5.讀文件
void Goods::readInfoFromFile(string fileName, struct Node* headNode) {ifstream fin(fileName);//第一次開始無文件創建文件if (!fin)//創建文件{cerr << "倉庫不存在,請檢查!"<<endl;}else {Node* posleftNode = headNode;Node* posNode = headNode->next;while (posNode != NULL){posleftNode = posNode;posNode = posleftNode->next; delete posNode;posNode = NULL;}headNode->next = NULL;cout << "【加載倉庫文件:"<< fileName <<"]" << endl;woodinfo tempdata;int n;fin >> n;for (int i = 0; i < n; i++){fin >> tempdata.num >> tempdata.name >> tempdata.type >> tempdata.inprice >> tempdata.outprice >> tempdata.many >> tempdata.soldname;Node* newNode = creatNode(tempdata);newNode->next = headNode->next;headNode->next = newNode;}} }6.根據售價排序(冒泡)
void Goods::bubbleSortList(Node* headNode) {Node* headB = new Node;headB->next = NULL;Node* t = headB;Node* x = headNode->next;while (x != NULL){Node* m = new Node;m->data = x->data;x = x->next;m->next = NULL;t->next = m;t = t->next;}t->next = NULL;for (Node* p = headB->next; p!= NULL; p = p->next){for (Node* q = headB->next; q->next != NULL; q = q->next){if (q->data.outprice > q->next->data.outprice){//交換值woodinfo tempdata = q->data;q->data = q->next->data;q->next->data = tempdata;}}}printList(headB); }7.查找(關鍵值)
Node* Goods::searchByName(Node* headNode, string name) {Node* posNode = headNode->next;while (posNode != NULL && posNode->data.name != name){posNode = posNode->next;}return posNode; }總結
還有幾個比較簡單的函數沒有提及,比如插入新結點和刪除結點等,小伙伴可以思考一下,這里只是提供參考
下面是我的測試展示
數據看起來可能怪怪的,因為是我胡謅的。
總結
以上是生活随笔為你收集整理的数据结构课设:仓库管理系统(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 安装git失败,Linux运
- 下一篇: uboot源码——环境变量