
创建一个系统,用链表实现用来存贮一家商店存贮商品信息,并当这个系统的时候将其存成文件形式,对这个系统有增删改查的操作,以及打印
二、概要设计
建立一个系统,先建立一种数据结构,然后每个节点作为一种商品,按照链表的操作。
三、详细设计
运用链表存贮,文件读取操作,完善这个系统的功能
四、测试及结果
五、心得体会
通过这次试验我明白了链表的基本应用,做此程序过程中的最大问题便是对功能的完善问题,是否能够考虑的周到便是最大问题,其次便是对文件的读取与存贮
源代码清单
// 商品库存管理系统.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include #include #include #include using namespace std ; typedef struct CommodityNode { char name[10] ; //名称 char brand[10] ; //品牌 int price ; //单价 int count ; //数量 struct CommodityNode *next ; }CNode; void InitNode(CNode * &head) //初始化结点的函数 { if((head = new CNode) == NULL) exit(1) ; head->next = NULL ; } void CreatSystem(CNode * &head) //创建链表系统 { cout<<"请输入此商品的名称,品牌,单价和数量:"< InitNode(p) ; p = head ; bool judge = 0 ; bool over = 0 ; while(1) { if(judge == 0) { if(over == 1) { cout<<"是否结束是请输入/Yes/ 否则的话输入/No/"< cin>>input ; if(strcmp(input,"Yes") == 0) { break ; } } CNode *node ; InitNode(node) ; cin>>node->name ; cin>>node->brand ; cin>>node->price ; cin>>node->count ; p = node ; head = p ; cout<<"输入成功"< over = 1 ; } else { if(over == 1) { cout<<"是否结束是请输入/Yes/ 否则的话输入/No/"< cin>>input ; if(strcmp(input,"Yes") == 0) { break ; } } cout<<"请继续输入:"< InitNode(node) ; cin>>node->name ; cin>>node->brand ; cin>>node->price ; cin>>node->count ; p->next = node ; p = p->next ; cout<<"输入成功"< } } //第一个功能向系统添加信息 void InsertNode(CNode * &head) //插入家电的信息 { CNode *p ; InitNode(p) ; p = head ; CNode *node ; InitNode(node) ; cout<<"请输入家电的名称,品牌,单价以及数量"< cin>>node->brand ; cin>>node->price ; cin>>node->count ; node->next = p ; head = node ; cout<<"添加操作成功!"< //第二个功能删除某一个结点,删除某一项 void DeleteNode(CNode * &head) { cout<<"请输入您要删除的电器名称:"< cin>>input ; cout<<"请输入您要删除的电器品牌:"< cin>>input1 ; CNode *p ; p = head ; if((strcmp(input,p->name) == 0) && (strcmp(input1,p->brand) == 0)) //当第一个节点就是要删除的节点时候 { head = head->next ; delete p ; return ; } while((strcmp(input,(p->next)->name) != 0) && (strcmp(input1,(p->next)->brand) != 0)) { p = p->next ; } CNode *temp ; InitNode(temp) ; temp = p->next ; p->next = temp->next ; delete temp ; cout<<"删除操作成功!"< //第三个功能更新数据 void RenewData(CNode * &head) { cout<<"请输入您要更新数据电器的名称:"< cin>>input ; cout<<"请输入您要更新数据电器的品牌:"< cin>>input1 ; CNode *p ; InitNode(p) ; p = head ; while((strcmp(input,p->name) != 0) && (strcmp(input1,p->brand) != 0)) { p = p->next ; } cout<<"请输入您要进行的操作:"< cin>>temp ; cout<<"请输入您要(进/售)货的数量:"< cin>>num ; if(temp == '1') { p->count = p->count + num ; } if(temp == '2') { p->count = p->count - num ; } cout<<"操作成功!"< cout<<"家电名称:" ; cout< cout< cout< cout< //第四种功能 查询某种家电的信息 void SearchNode(CNode *head) { cout<<"请输入您要查询电器的名称:"< cin>>input ; cout<<"请输入您要查询电器的品牌:"< cin>>input1 ; CNode *p ; InitNode(p) ; p = head ; while((strcmp(input,p->name) != 0) && (strcmp(input1,p->brand) != 0)) { p = p->next ; if(p == NULL) { cout<<"输入有误并未找到该家电"< } } cout<<"查询成功!"< cout< cout< cout< cout< //第五种功能将商品信息存入文件 void SaveToFile(CNode *p) { ofstream outfile; outfile.open("E:\\\\Save.txt",ios::out); while(p!=NULL) { outfile < } outfile.close(); } //从文件中读出商品信息 CNode *ReadToList() { CNode *head; InitNode(head); CNode *p ; InitNode(p) ; bool judge = 0 ; ifstream input; input.open("E:\\\\Save.txt",ios::in); //............你继续吧。。 while (true) { if(judge == 0) { CNode *node ; InitNode(node) ; input >>node->name >>node->brand >>node->price >>node->count ; // 与write同理 if (false != input.eof()) { head = NULL ; break ; } head = node ; p = node ; judge = 1 ; } else { CNode *node ; InitNode(node) ; input >>node->name >>node->brand >>node->price >>node->count ; if (false != input.eof()) { delete node ; break ; } p->next = node ; p = p->next ; } } input.close(); return head ; } int CalListLong(CNode *head) { int i = 0 ; while(head != NULL) { i++ ; head = head->next ; } return i ; } void SeeSortingList(CNode * &head) //按照大小排序打印输出 { CNode *first; /*排列后有序链的表头指针*/ CNode *tail; /*排列后有序链的表尾指针*/ CNode *p_min; /*保留键值更小的节点的前驱节点的指针*/ CNode *min; /*存储最小节点*/ CNode *p; /*当前比较的节点*/ InitNode(min) ; InitNode(min) ; InitNode(p_min) ; InitNode(p) ; first = NULL; while (head != NULL) { for (p=head,min=head; p->next!=NULL; p=p->next) { if (p->next->price < min->price) { p_min = p; min = p->next; } } if (first == NULL) { first = min; tail = min; } else { tail->next = min; tail = min; } if (min == head) { head = head->next; } else { p_min->next = min->next; } } if (first != NULL) { tail->next = NULL; } head = first; cout<<"打印结果为(按价格从小到大):"< { cout<<"家电名称:" ; cout< cout< cout< cout< } } int _tmain(int argc, _TCHAR* argv[]) { cout<<"请输入密码以进入管理员模式:"< cin>>input ; if (strcmp(input,"1991329")==0) { fstream file; file.open("E:\\\\Save.txt",ios::in); if(!file) { cout<<"欢迎您,管理员!"< InitNode(head) ; bool judge = 0 ; CreatSystem(head) ; while(1) { if(judge == 1) { cout<<"若要结束的话请输入/Yes/ 否则的话请输入/No/"< cin>>input ; if(strcmp(input,"Yes") == 0) { cout<<"欢迎下次光临!"< exit(0) ; } } cout<<"请输入的您想做的操作:"< cin>>operate ; if(operate == '0') { cout<<"已退出! 欢迎下次光临...."< exit(0) ; } if(operate == '1') { InsertNode(head) ; } if(operate == '2') { DeleteNode(head) ; } if(operate == '3') { RenewData(head) ; } if(operate == '4') { SearchNode(head) ; } if(operate == '5') { ReadToList() ; } if(operate == '6') { CNode *p; InitNode(p); p = head; SeeSortingList(p) ; } judge = 1 ; } } else { CNode *head,*p ; InitNode(head) ; InitNode(p); head = ReadToList() ; p = head; while(p != NULL) { cout<<"家电名称:" ; cout< cout< cout< cout< } while(1) { cout<<"请输入的您想做的操作:"< cin>>operate ; if(operate == '0') { cout<<"已退出! 欢迎下次光临...."< exit(0) ; } if(operate == '1') { InsertNode(head) ; } if(operate == '2') { DeleteNode(head) ; } if(operate == '3') { RenewData(head) ; } if(operate == '4') { SearchNode(head) ; } if(operate == '5') { ReadToList() ; } if(operate == '6') { CNode *p; InitNode(p); p = head; SeeSortingList(p) ; } } } } else { cout<<"输出错误!进入普通用户模式:"< file.open("E:\\\\Save.txt",ios::in); if(!file) { cout<<"管理员还未创建系统!不能进行任何操作!"< } else { cout<<"是否进行进行请输入/Yes/ 否则的话/No/"< cin>>s ; bool t = 0 ; if(strcmp(s,"Yes")==0) { CNode *head ; InitNode(head) ; head = ReadToList() ; while(1) { if(t == 1) { cout<<"是否继续查询? 是请输入/Yes/ 否则输入/No/"< cin>>temp ; if(strcmp(temp,"No") == 0) { cout<<"退出中欢迎下次光临!"< } } SearchNode(head); t = 1 ; } } else { cout<<"退出中欢迎下次光临!"< } } } }
