基于C++的商品信息管理系统

风风光光好先生

发布日期: 2020-12-01 14:50:25 浏览量: 336
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 课题需求

定义一个基类来维护所有商品的基本信息。 每种商品维护着三种基本信息,包括:商品库存量、商品价格以及商品销售量。另外, 定义一个派生 类来维护带有折扣的商品的信息。此时,每种商品除了包含商品库存量、商品价格以及商品销售量三种基本信息外,还包含一个折扣信息,用于表示该商品出售时的折扣。

2 总体设计

该系统的主要功能包括:商品信息录人、商品信息输出、商品销售、商品进货、统计库存不足商品、统计营业额、统计销量最高和销量最低的商品、统计营业额最高和营业额最低的商品。

3 详细设计

3.1 商晶信息录入

在基类和派生类中都有一个成员函数来实现该功能。该成员函数包含一个形参,用于表示商品的种类。根据商品的种类来完成每种商品信息的初始化。对于基类,商品信息包括:商品数量和商品价格。在基类中,每种商品维护着三种信息;商品库存量、商品价格和商品销售量。三种信息分别用三个数组来存储,并作为类的数据成员存在。对于派生类,商品信息包括;商品数量、商品价格以及商品折扣。在派生类中,每种商品维护着四种信息:商品库存量、商品价格、商品销售量以及商品折扣。四种信息分别用四个数组来存储,并作为类的数据成员存在。在函数中进行信息录人时,用输人的商品数量来初始化商品库存量,用输人的商品价格来初始化商晶价格,并将商品销售量初始化为0。对于派生类,用输人的商品折扣来初始化商品折扣。

3.2 商品信息输出

在基类和派生类中都有一个成员函数来实现该功能。将所有商品的信息依次输出到屏幕上显示,每种商品信息显示一行。对于基类,输出的信息包括:商品库存量、商品价格和商品销售量。对于派生类,输出的信息包括:商品库存量、商品价格、商品销售量以及商品折扣。

3.3 商品销售

该功能由基类的一个单独的成员函数来实现。根据商品编号(编号从1开始)对某种商品进行销售,销售时需指定具体的商品销售数量。在对商品进行销售之前,需要对输人的商品编号和商品销售数量的信息进行合法性检测,只有输入数据合法时,才能进行商品销售。若输人数据合法,则根据具体的商品编号和商品销售数量对某种商品进行销售,销售成功后,需要相应的修改该商品的库存量和销售量的信息。注意:当库存量无法满足销售量需求时,同样不能进行商品销售。

3.4 商品进货

该功能由基类的一个单独的成员函数来实现。根据商品编号(编号从1开始)对某种商品进行进货,进货时需指定具体的商品进货数量。在对商品进行进货之前,需要对输人的商品编号和商品进货数量的信息进行合法性检测,只有输人数据合法时,才能进行商品进货。若输入数据合法,则根据具体的商品编号和商品进货数量对某种商品进行进货,进货成功后,需要相应的修改该商品的库存量信息。

3.5 统计库存不足商品

该功能由基类的一个单 独的成员函数来实现。 依次对所有商品的库存量进行检测,若某 种商品的库存量为0,则将该商品输出,每行输出一种商品。

3.6 统计营业额

在基类和派生类中都有一个成员函数来实现该功能。依次对每种商品的营业额进行统计,并输出该商品的营业额统计结果,每行输出一种商品。 对于基类,商品营业额计算公式为:商品价格X商品销售量。对于派生类,商品营业额计算公式为:商品价格X商品销售量X商品折扣。同时,将所有商品的营业额进行相加,在最后一行显示所有商品的总营业额。

3.7 统计销量最高和销量最低的商品

该功能由基类的一个单独的成员函数来实现。依次比较所有商品的销售量,从中找出销量最高和销量最低的商品。首先,定义两个变量分别用于存放最高销量和最低销量,初始时,将最高销量和最低销量都初始化为第一种商品的销售量。接下来,依次将其余商品的销售量与最高销量和最低销量进行比较。若当前商品的销售量大于最高销量,则将最高销量设置成该商品的销售量;此外,若当前商品的销售量小于最低销量,则将最低销量设置成该商品的销售量。

3.8 统计营业额最高和营业额最低的商品

在基类和派生类中都有一个成员函数来实现该功能。依次比较所有商品的营业额,从中找出营业额最高和营业额最低的商品。首先,定义两个变量分别用于存放最高营业额和最低营业额,初始时,将最高营业额和最低营业额初始化为第一种商品的营业额。接下来,依次将其余商品的营业额与最高营业额和最低营业额进行比较。若当前商品的营业额大于最高营业额,则将最高营业额设置成该商品的营业额;此外,若当前商品的营业额小于最低营业额,则将最低营业额设置成该商品的营业额。1587

原文分析

  1. Product::Product()
  2. {
  3. num=NULL;
  4. price=NULL;
  5. sell=NULL;
  6. total=0;
  7. }/*对数据成员进行初始化。

将商品种类初始化为0.将其余的指针成员初给化为空指针。

  1. Product::Product (int *_num,double *_price,int _total):total(_total)
  2. {
  3. num=new int[total];
  4. price=new double[total];
  5. sell=new int[total];
  6. for(int i=0;i<total;++i)
  7. {
  8. num[i]=_num[i];
  9. price[i]=_price[i];
  10. sell[i]=0;
  11. }
  12. }

对数据成员进行初始化。利用参数提供的商品种类对商品种类成员进行初始化。根据商品种类为其余指针成员开辟堆空间,并根据提供的形参对其进行初始化。

  1. Product::Product(const Product &prod):total(prod.total)
  2. {
  3. num =new int[total];
  4. price=new double[total];
  5. sell=new int[total];
  6. for(int i=0;i<total;++i)
  7. {
  8. num[i]=num[i];
  9. price[i]=price[i];
  10. sell[i]=0;
  11. }
  12. }

对数据成员进行初始化。利用参数提供的商品种类对商品种类成员进行初始化。根据商品种类为其余指针成员开辟堆空间,并根据提供的形参对其进行初始化。

  1. void Product::input(int _total)
  2. {
  3. total=_total;
  4. num=new int[total];
  5. price=new double[total];
  6. sell=new int[total];
  7. for(int i=0;i<total;++i)
  8. {
  9. cout<<"输入第"<<i+1<<"种商品的信息(数量,价格):";
  10. cin>>num[i]>>price[i];
  11. sell[i]=0;
  12. }
  13. }

利用参数提供的商品种类值对商品种类成员进行初始化,并根据商品种类为指针成员开辟堆空间。根据商品的种类依次输人每种商品的信息,信息包括:商品数量和商品价格。通过循环语句,每次循环输人一种商品的信息。

  1. void Product::output()const
  2. {
  3. for(int i=0;i<total;++i)
  4. cout<<"[商品"<<i+1<<"]库存量:"<<num[i]<<",价格:"<<price[i]<<",销量:"<<sell[i]<<endl;
  5. }

根据商品种类依次输出每种商品的信息信息包括:商品库存量,商品价格和商品销量。

通过循环语句,每次循环输出一种商品的信息。

  1. void Product::sale()
  2. {
  3. cout<<"请输入商品编号(1-"<<total<<")和销售数量(>0):";
  4. int product,n;
  5. cin>>product>>n;
  6. if(n>num[product-1])
  7. cout<<"商品"<<product<<"库存不足"<<endl;
  8. else
  9. {
  10. num[product-1]-=n;
  11. sell[product-1]+=n;
  12. cout<<"商品"<<product<<"销售成功"<<endl;
  13. }
  14. }

需要对输人的商品编号和销售数量进行合法性检测,当输入数据合法时再根据具体的商品编号和销售数量对某种商品进行销售。此外,只有在某种商品的库存量能够满足销售数量的需求时,才能对该商品进行销售。

  1. void Product::stock(int total)
  2. {
  3. cout<<"请输入商品编号(1-"<<total<<")和销售数量(>0):";
  4. int product,n;
  5. cin>>product>>n;
  6. if(n<0)
  7. cout<<"进货数量不能为负值!"<<endl;
  8. else
  9. {
  10. num[product-1]+=n;
  11. cout<<"商品"<<product<<"进货成功!"<<endl;
  12. }
  13. }

需要对输入的商品编号和进货数量进行合法性检测,当输人数据合法时再根据具体的商品编号和进货数量对某种商品进行进货。

  1. void Product::lack()const
  2. {
  3. for(int i=0;i<total;++i)
  4. if(num[i]==0)
  5. cout<<"商品"<<i+1<<"库存不足 !"<<endl;
  6. }

依次对每种商品的库存量进行检测,并输出所有库存量为0的商品。通过循环语句,每次循环检测种商品的库存量。

  1. double Product::statistics ()const
  2. {
  3. double sum=0.0;
  4. for(int i=0;i<total;++i)
  5. {
  6. cout<<"商品"<<i+1<<"营业额(元):"<<price[i]*sell[i]<<endl;
  7. sum+=price[i]*sell[i];
  8. }
  9. return sum;
  10. }

依次对每种商品的营业额进行统计,并输出该商品的营业额统计结果。商品营业额计算公式为:商品价格X商品销售量。通过循环语句,每次循环统计一种商品的营业额,并将其叠加到总营业额上。

  1. void Product::minmaxAmount()const
  2. {
  3. int max_amount,min_amount;
  4. max_amount=sell[0];
  5. min_amount=sell[0];
  6. for (int i=1;i<total;++i)
  7. {
  8. if(sell[i]>max_amount)
  9. max_amount=sell[i];
  10. if(sell[i]<min_amount)
  11. min_amount=sell[i];
  12. }
  13. }

依次将其余商品的销售量与最高销量和最低销量进行比较,若该商品的销售量大于最高销量,则将最高销量设置成该商品的销售量;另外,若该商品的销售量小于最低销量,则将最低销量设置成该商品的销售量。通过循环语句,每次循环比较一种商品的销售量。

  1. void Product::minmaxIncome()const
  2. {
  3. double max_income,min_income;
  4. max_income=price[0]*sell[0];
  5. min_income=price[0]*sell[0];
  6. for(int i=1;i<total;++i)
  7. {
  8. if(price[i]*sell[i]>max_income)
  9. max_income=price[i]*sell[i];
  10. if(price[i]*sell[i]<min_income)
  11. min_income=price[i]*sell[i];
  12. }
  13. }

依次将其余商品的营业额与最高营业额和最低营业额进行比较,若该商品的营业额大于最高营业额,则将最高营业额设置成该商品的营业额;另外,若该商品的营业额小于最低营业额,则将最低营业额设置成该商品的营业额。通过循环语句,每次循环比较一种 商品的营业额。

  1. DiscountProduct& DiscountProduct::opertor=(const DiscountProduct &dprod)
  2. {
  3. if(num!=NULL;)
  4. delete []num
  5. if(price!=NULL;)
  6. delete []price;
  7. if(sell!=NULL;)
  8. delete []sell;
  9. if(discount!=NULL;)
  10. delete []discount;
  11. total=prod.total;
  12. num=new int[total];
  13. price=new double[total];
  14. sell=new int[total];
  15. discount=new double[total];
  16. for(int i=0;i<total;++i)
  17. {
  18. num[i]=prod.num[i];
  19. price[i]=prod.price[i];
  20. sell[i]=prod.sell[i];
  21. discount[i]=prod.discount[i];
  22. }
  23. return *this;
  24. }

首先,释放基类和派生类指针成员原有的堆空间。然后,再根据参数对象的商品种类成员初始化自身的商品种类成员,并根据商品种类为基类和派生类的指针成员开辟新的堆空间。最后根据参数对象的成员来初始化基类和派生类的成员。

4 测试

5 总结

在本次实训中,通过课本与本次程序再一次的复习了,类的继承与派生的相关知识,并完成我的:商品信息管理系统设计。在编写程序过程中,遇到许许多多的困难,但是我每一次都是通过一次次的程序运行,将每一个错误逐一排除,遇到自己解决不了的就请教同学或者老师,在编写每一段程序的相关代码(不熟悉)都会去回顾一下课本或者老师上课所讲的ppt。

在为期近两周的实训中,我体会颇多,学到了很多东西。我加强了对C++程序

设计这门课程的认识,并且复习了自己以前学习到的知识。这些都使得我对计算机语言的学习有了更深入的认识!总之,通过这次实训,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。像职工信息表这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。而这些问题,这并不是我们平时只靠课本,就可以轻易解诀的。

所以,这次的实训锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。特别是学会了在Visual C++中 如何调试程序的方法。当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。

我在编写程序之前,首先在心中有一个大体的框架。比如:每种商品都有3个基本信息,包括:商品库存量,商品价格以及商品库存量。然后,需要定义一个派生类(有折扣的商品含有折扣),用于表示该商品出售时的折扣。然后分八条来编写 分别是:商品信息录人、商品信息输出、商品销售、商品进货、统计库存不足商品、统计营业额、统计销量最高和销量最低的商品、统计营业额最高和营业额最低的商品。

上传的附件 cloud_download 商品信息管理系统源代码.zip ( 2.80kb, 48次下载 )

发送私信

2
文章数
0
评论数
最近文章
eject