C++程序设计课程设计报告————超市管理系统班级:目录一.设计题目与要求…………………………………二.需求分析………………………………………………三.概要设计…………………………………四.详细设计……………………………………………五.测试………………………………………………六.结论及改进设想…………………………………一、课程设计题目与要求1.设计题目超市管理系统2.系统功能要求(1)销售功能。购买商品时,先输入类别,然后输入商品名称,并在库存中查找该商品的相关信息。如果有库存量,输入购买的数量,进行相应计算。如果库存量不够,给出提示信息,结束购买。(2)商品简单管理功能。①添加功能:主要完成商品信息的添加。②查询功能:可按商品类别、商品名称、生产厂家进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该记录不存在!”。③修改功能:可根据查询结果对相应的记录进行修改。④删除功能:主要完成商品信息的删除。先输入商品类别,再输入要删除的商品名称,根据查询结果删除该物品的记录,如果该商品不在物品库中,则提示“该商品不存在”。(3)统计功能。输出当前库存中所有商品的总数及详细信息;可按商品的价格、库存量、生产厂家进行统计,输出统计信息时,要按从大到小进行排序。(4)保存功能:将当前程序中的商品信息存入文件中。(5)读取功能:从文件中将商品信息读入程序。二.需求分析中小型超市采购的商品一般都成千上万件。对这些商品进行有效的管理必不可少。每件商品一般都需要记录商品名、条形码、类别、价格、出厂日期等商品的基本信息。除此之外,还需要记录商品的其他相关信息,如生产厂家、供货处代码、厂家网址、厂家电话等。超市商品的相关信息需要存储到文件系统中,一般都需要提供对商品信息的添加、编辑、删除等操作。超市管理员每天都会记录购进的商品信息,核销过期的商品等。为了巩固我们所学的C++语言程序设计知识,也为了满足课程设计的要求,我们在对几个中小型超市进行调研的基础上,设计和实现一个小型的超市商品管理系统,提供商品系统的添加、删除、编辑等功能。同类系统多数使用结构体数组来操作数据,本系统使用链表结构操作数据,提高了数据处理的效率。三.概要设计1增加商品2显示商品3排序统计商品4查找商品5删除商品6修改商品7安全退出四.详细设计1.设计classSupermarket商品类,实现对商品信息的描叙;设计classSupermarketmassage类,实现对商品信息的增加,删除,修改,查询,统计等。以下是函数功能表:函数功能voidDisplay()输出商品的信息Supermarket()构造函数~Supermarket()析构函数voidAddItem()增加商品voidRemoveItem()删除商品voidModifyItem()修改商品voidFind()查询商品intListCount()统计商品voidSave()基础数据存盘voidSort()排序商品Supermarketmassage()构造函数(1)用类的成员函数对链表的数据进行操作,其功能如上表所列。2.设计类及对象本程序定义了两个类,定义如下:1)classSupermarketclassSupermarket{public:charname[20];charNum[20];intCnum;//进货总数intMnum;//销售数目intEnum;//剩余库存数目doublePrice;//单价charAdd[20];//产地doubleSum;//销售额Supermarket*Next;voidInput(){cout\t\t请输入商品名:;cinname;cout\t\t请输入商品编号:;cinNum;cout\t\t请输入商品进货总数:;cinCnum;cout\t\t请输入商品销售数目:;cinMnum;cout\t\t请输入商品剩余库存数目:;cinEnum;cout\t\t请输入商品产地:;cinAdd;cout\t\t请输入商品单价:;cinPrice;Sum=Mnum*Price;}voidReadFile(istream&in)//文件指针{innameNumCnumMnumEnumAddPriceSum;}voidShow(){cout商品名:nameendl商品编号:Numendl进货总数:Cnumendl销售数目:Mnumendl剩余库存:Enumendl产地:Addendl单价:Priceendl销售额:Sumendlendl;}};2)classSupermarketmassage;classSupermarketmassage{public:Supermarketmassage();~Supermarketmassage();voidShowMenu();voidFind();voidSave();voidModifyItem();voidRemoveItem();voidSwap(Supermarket*,Supermarket*);voidSort();//voidUnpass();intListCount();//voidAverage();voidDisplay(){for(Supermarket*p=Head-Next;p!=End;p=p-Next)p-Show();cout输入任意字符!继续……;getch();}voidAddItem(){End-Input();End-Next=newSupermarket;End=End-Next;cout添加成功!endl;cout输入任意字符!继续……;getch();}private:Supermarket*Head,*End;ifstreamin;ofstreamout;Supermarket*FindItem(char*name){for(Supermarket*p=Head;p-Next!=End;p=p-Next)//匹配成功则返回上一个指针,不成功就返回空if(!strcmp(p-Next-name,name))returnp;returnNULL;}Supermarket*FindNum(char*Num){for(Supermarket*p=Head;p-Next!=End;p=p-Next)//匹配成功则返回上一个指针,不成功就返回空if(!strcmp(p-Next-Num,Num))returnp;returnNULL;}Supermarket*FindAdd(char*Add){for(Supermarket*p=Head;p-Next!=End;p=p-Next)//匹配成功则返回上一个指针,不成就返回空if(!strcmp(p-Next-Add,Add))returnp;returnNULL;}};3.程序源代码#includeiostream#includefstream#includestring.h#includeconio.h//用getch();usingnamespacestd;//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Supermarket类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌classSupermarket{public:charname[20];charNum[20];intCnum;//进货总数intMnum;//销售数目intEnum;//剩余库存数目doublePrice;//单价charAdd[20];//产地doubleSum;//销售额Supermarket*Next;voidInput(){cout\t\t请输入商品名:;cinname;cout\t\t请输入商品编号:;cinNum;cout\t\t请输入商品进货总数:;cinCnum;cout\t\t请输入商品销售数目:;cinMnum;cout\t\t请输入商品剩余库存数目:;cinEnum;cout\t\t请输入商品产地:;cinAdd;cout\t\t请输入商品单价:;cinPrice;Sum=Mnum*Price;}voidReadFile(istream&in)//文件指针{innameNumCnumMnumEnumAddPriceSum;}voidShow(){cout商品名:nameendl商品编号:Numendl进货总数:Cnumendl销售数目:Mnumendl剩余库存:Enumendl产地:Addendl单价:Priceendl销售额:Sumendlendl;}};//﹌﹌﹌﹌﹌﹌﹌﹌﹌Supermarketmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌classSupermarketmassage{public:Supermarketmassage();~Supermarketmassage();voidShowMenu();voidFind();voidSave();voidModifyItem();voidRemoveItem();voidSwap(Supermarket*,Supermarket*);voidSort();//voidUnpass();intListCount();//voidAverage();voidDisplay(){for(Supermarket*p=Head-Next;p!=End;p=p-Next)p-Show();cout输入任意字符!继续……;getch();}voidAddItem(){End-Input();End-Next=newSupermarket;End=End-Next;cout添加成功!endl;cout输入任意字符!继续……;getch();}private:Supermarket*Head,*End;ifstreamin;ofstreamout;Supermarket*FindItem(char*name){for(Supermarket*p=Head;p-Next!=End;p=p-Next)//匹配成功则返回上一个指针,不成功就返回空if(!strcmp(p-Next-name,name))returnp;returnNULL;}Supermarket*FindNum(char*Num){for(Supermarket*p=Head;p-Next!=End;p=p-Next)//匹配成功则返回上一个指针,不成功就返回空if(!strcmp(p-Next-Num,Num))returnp;returnNULL;}Supermarket*FindAdd(char*Add){for(Supermarket*p=Head;p-Next!=End;p=p-Next)//匹配成功则返回上一个指针,不成就返回空if(!strcmp(p-Next-Add,Add))returnp;returnNULL;}};//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Supermarketmassage::Supermarketmassage(){Head=newSupermarket;Head-Next=newSupermarket;End=Head-Next;in.open(sort.txt);if(!in)cout这是一个新系统,无商品信息。请先输入。endl;else{while(!in.eof()){End-ReadFile(in);if(End-name[0]=='\0')break;End-Next=newSuper