课程设计要求

本次考试可以选择使用的理论知识点罗列如下:
常量、new/delete、引用、构造函数、析构函数、拷贝构造、静态成员、友元、组合类、重载函数、虚函数、运算符重载、模板、错误异常处理、格式化输入输出以及文件存取管理等。
请每个同学结合自己对现实世界的认知能力和代码实践能力综合运用所学的C++面向对象程序设计语言完成以下测试要求。
设定食品类做基类,干果类为派生类,请按照下面各题的要求编写程序:
(1) 合理编写基类和派生类代码完成基本功能。要求基类至少包含三个以上的数据成员和若干个合适的成员函数(其中构造函数至少2个),派生类至少增加二个以上的数据成员和若干合适的的成员函数。在主函数中声明至少包含5个派生类对象的数组完成初始化输入功能。每个函数都要写简明注释,说明功能。(30分)
(2) 编写一个函数可以随机修改对象的数据。要求写简明注释,说明功能。(5分)
(3) 设计合理情景, 增加静态成员对所有对象实现合理的统计功能并输出结果。如统计对象个数,求平均值以及找出最小的对象等等(以什么条件判断最小,每个考生结合自己的类自行设计合理条件)。要求写简明注释,说明功能。(10分)
(4) 编写一个能够将“对象”或“对象指针”或“对象引用”作为参数的函数,并调用此函数完成和本考题的基类或派生类相关的功能。要求写简明注释,说明功能。(10分)
(5) 每个考生依据自己的类增加一个合适的友元函数完成运算符重载(如 +、-、*、/、>、<、>>、<< 等等),以便能直接操作自定义的类对象 。要求写简明注释,说明功能。(10分)
(6) 对主函数中已经声明的对象数组,使用对象指针遍历对象数组中的数据,并将数据通过输入输出流类控制格式(如对齐方式、列宽、填充字符、精度等格式控制)输出到屏幕上,同时把数据一并输出到文件中(文本文件、二进制文件不限)。要求写简明注释,说明功能。(20分)
(7) 在以上6题的基础上,鼓励考生在面向对象编程方法上、设计思想理念上、跨课程等方面进行创新性编程并融入到考试答案中。要求写简明注释,说明编程意图(15分)
第(7)题提示,但考生可以不局限于提示:
(1) 面向对象编程方法:类的组合、虚函数、模板、异常处理、虚基类等。
(2) 跨课程:数据结构、数据库、软件工程、计算方法等。
(3) 多应用:增加题目中类和对象的应用情景等。如利用文件保存对象数组后,可以读出数据并对文件中的对象数据进行查、删、增、改等操作。

我的课程设计

此次课程设计的大致框架写在了最前面
具体步骤和关键点代码中都有注释和说明
如有写的不正确的地方欢迎给我指出问题,我会进行修改和完善

/***
本次设计是以食品类为基类,干果为派生类
且干干果为本店特色食品,购买两件以上的干果干果价格打9折
且商家一开始可以修改食物价格
场景是模拟顾客到超市食品区购买商品
(7) 在以上6题的基础上,鼓励考生在面向对象编程方法上、设计思想理念上、跨课程等方面进行创新性编程并融入到考试答案中。要求写简明注释,说明编程意图(15分)
可以把c++接入MySQL,记录数据,把此程序设计成一个超市管理系统,超市拥有者可以自定义加入商品,顾客可以进行选购商品,并且可以调用<graphics.h>函数,
*/
#include<iostream>
#include<string>
#include<cmath>
#include<iomanip>
#include<fstream>
using namespace std;
void Customer_System();
class food  //食品基类
{private :string name;//食品名称double price;//食品价格bool specialty;//是否为特色食品(干果)int id;//食物种类编号static int tot_num;//商店食品总数
public:food() {}; //无参构造函数food(string name1,double price1,bool specialty1){tot_num++;id=tot_num;name = name1;price = price1;specialty = specialty1;};//普通构造函数food(string name1,double price1){tot_num++;id=tot_num;name = name1;price = price1;specialty = false;};//默认为food的构造函数void print_information(){cout<<"商品名称:"<<name<<"         ";cout<<"商品价格:"<<price<<endl;cout<<endl;};//输出食品信息string getname(){return name;};//得到食品名称double getprice(){return price;   //得到食品价格}bool getspecialty(){return specialty;   //食品是否为干果}void writename(string name1) ///可以直接修改对象的数据{name = name1;}void writeprice(double price1){price = price1;}///(2)  编写一个函数可以随机修改对象的数据。要求写简明注释,说明功能。(5分)friend double operator-(food& a,food &b){double temp;temp = a.price-b.price;return temp;}///计算两个食品之间的价格差///(5) 每个考生依据自己的类增加一个合适的友元函数完成运算符重载(如 +、-、*、/、>、<、>>、<< 等等),以便能直接操作自定义的类对象 。要求写简明注释,说明功能。(10分)
};
class Dry_Fruits:public food //干果子类
{private:string information;//干果信息string nutritive_value;//营养价值
public:Dry_Fruits(string name1,double price1,bool specialty1,string information1,string nutritive_value1):food(name1,price1,specialty1){information = information1;nutritive_value = nutritive_value1;};//构造函数void print_information(){cout<<"坚果名称:"<<getname()<<"   ";cout<<"坚果价格:"<<getprice()<<"   ";cout<<"坚果描述:"<<information<<"   ";cout<<"坚果营养价值:"<<nutritive_value<<endl;cout<<endl;}
};///(1)    合理编写基类和派生类代码完成基本功能。要求基类至少包含三个以上的数据成员和若干个合适的成员函数(其中构造函数至少2个),派生类至少增加二个以上的数据成员和若干合适的的成员函数。在主函数中声明至少包含5个派生类对象的数组完成初始化输入功能。每个函数都要写简明注释,说明功能。///将对象作为参数的函数
double cast(food &f,int x,int y) //计算当前食品的总价格
{if(f.getspecialty()) //是坚果{if(y>=2){return f.getprice()*x*0.9;}else return f.getprice()*x;}else{return f.getprice()*x;}
}///(4) 编写一个能够将“对象”或“对象指针”或“对象引用”作为参数的函数,并调用此函数完成和本考题的基类或派生类相关的功能。要求写简明注释,说明功能。(10分)//初始化tot_num;
int food::tot_num=0;int main()
{//顾客进行点单Customer_System();//顾客点单系统return 0;
}void Customer_System() //顾客点单系统
{加载食品信息food f[6]={food(),food("泡椒凤爪",10,false),food("冰红茶",3),food("泡面",5,false),Dry_Fruits("榛子",50,true,"榛子是国际畅销的名贵干果,有“坚果之王”的美誉","high"),Dry_Fruits("腰果",60,true,"腰果有丰富的营养价值,可炒菜,也可作药用,为世界著名四大干果之一","mid")};
//可以修改食品价格
//cout<<"超市食物信息"<<endl;
//for(int i=1;i<=5;i++){//    f[i].print_information();
//}
///把输出的内冲输入到文件名称为food的dat文件中ofstream fout("food.dat",ios::out);//定义一个流对象
///使用对象指针输出food的商品列表(数组)中的数据,并通过输出流的控制格式输出商品的名称和价格food *p;//定义指向类food的对象指针p=f;int e=5;while(e--){p++;///输出到屏幕上cout<<"商品名称:";cout.fill(' ');//设置填充字符为空格cout.width(8);//设置域宽为10cout<< p->getname();//把fodd商品表输入到屏幕上cout.width(22);//设置域宽为15cout.fill('_');//设置填充字符为-cout<<"价格:"<<p->getprice()<<endl;//把food商品表输入到屏幕上
///同时输出到food文件中fout<<"商品名称:";fout.fill(' ');//设置填充字符为空格fout.width(8);//设置域宽为10fout<< p->getname();//把fodd商品表输入到文件中fout.width(22);//设置域宽为15fout.fill('_');//设置填充字符为-fout<<"价格:"<<p->getprice()<<endl;//把food商品表输入到文件中}fout.close();//关闭文件
///(6)对主函数中已经声明的对象数组,使用对象指针遍历对象数组中的数据,并将数据通过输入输出流类控制格式(如对齐方式、列宽、填充字符、精度等格式控制)输出到屏幕上,同时把数据一并输出到文件中(文本文件、二进制文件不限)。要求写简明注释,说明功能。(20分)cout<<"现在你是管理者,你可以修改商品的价格!"<<endl;for(int i=1; i<=5; i++){cout<<"你是否要修改"<<f[i].getname()<<"的价格?"<<endl;cout<<" yes or no "<<endl;string s;cin>>s;if(s=="yes"){cout<<"请输入想修改的食品价格"<<endl;double y;cin>>y;f[i].writeprice(y);}else{cout<<"此商品价格没有改变"<<endl;}}cout<<"新的超市食物信息"<<endl;for(int i=1; i<=5; i++){f[i].print_information();}cout<<"---------------欢迎光临小月亮食品超市--------------"<<endl;int a[6];int tot1=0;//选购食品件数int tot2=0;//坚果商品件数\for(int i=1; i<=5; i++){a[i]=0;}while(1){cout<<"*****************************************"<<endl;cout<<"请输入您要进行的操作:"<<endl;cout<<"1.选择商品"<<endl;cout<<"2.查看已购买商品的信息"<<endl;cout<<"3.结账"<<endl;cout<<"4.比较两种商品的价格差"<<endl;int x;cin>>x;switch(x){case(1): //选购食品{for(int i=1; i<=5; i++){cout<<i<<'.';f[i].print_information();}int y;cin>>y;if(y==4||y==5){tot2++;}a[y]++;break;}case(2): //购物车{cout<<"您选购的商品有"<<endl;int tot3=0;double sum=0;for(int i=1; i<=5; i++){if(a[i]!=0){tot3++;cout<<tot3<<".";cout<<f[i].getname();cout<<" *"<<a[i];cout<<"    ";double c=cast(f[i],a[i],tot2);sum+=c;cout<<c<<"元"<<endl;}}cout<<"商品总计"<<sum<<"元"<<endl;break;}case(3):{double sum=0;for(int i=1; i<=5; i++){if(a[i]!=0){double c=cast(f[i],a[i],tot2);sum+=c;}}while(1){cout<<"您需要支付"<<sum<<"元,请付钱:"<<endl;double y;cin>>y;for(int i=1; i<=5; i++){if(a[i]!=0){y-=cast(f[i],a[i],tot2);}}if(y>=0) //结账{cout<<"找零"<<y<<"元,";cout<<"欢迎下次光临"<<endl;return ;break;//结账成功}else{cout<<"付款金额不足,请重新支付"<<endl;}}break;}case(4): //比较两个食品时间的价格{cout<<"请输入要进行对比的两种食品"<<endl;int y,z;cin>>y>>z;double d=f[y]-f[z];if(fabs(d)<=0.000001){cout<<f[y].getname()<<"与"<<f[z].getname()<<"价格相同"<<endl;}else if(d>0){cout<<f[y].getname()<<"比"<<f[z].getname()<<"贵"<<d<<"元"<<endl;}else{cout<<f[z].getname()<<"比"<<f[y].getname()<<"贵"<<-d<<"元"<<endl;}break;}default:{cout<<"输入有误请重新输入"<<endl;}}///(3)   设计合理情景, 增加静态成员对所有对象实现合理的统计功能并输出结果。如统计对象个数,求平均值以及找出最小的对象等等(以什么条件判断最小,每个考生结合自己的类自行设计合理条件)。要求写简明注释,说明功能。(10分}
}

c++面向对象程序设计------课程设计相关推荐

  1. C++《面向对象程序设计课程设计》

    C++<面向对象程序设计课程设计> <面向对象程序设计课程设计>课程说明 适用专业:计算机科学与技术 课程周数:5周 一.根据计算机科学与技术专业人才培养方案制订. (一)课程 ...

  2. 面向对象程序设计课程设计:利用决策树方法判定西瓜质量

    目录 第一章课程设计的目的及要求 1.1课程设计目标 1.2课程设计实验环境 1.3课程设计的预备知识 1.4课程设计要求 第二章课程设计的内容 2.1c++语言程序设计--<利用决策树方法判定 ...

  3. 武汉工程大学信息与计算科学专业面向对象程序设计课程设计题

    课程设计内容(从以下任务中任选一个) 1  售票处的服务系统 设计民航售票处的计算机系统可以为客户提供以下各项服务: (1)查询航线:根据旅客提出的终点站名输出以下信息:航班号.飞机号.星期几飞行.最 ...

  4. 面向对象程序设计课程设计——MFC实现同学通讯录管理系统

    先上效果图; 1.设计目的 同学通讯录管理程序是为了更好地管理学生信息而开发的数据管理软件.如今,同学与同学.老师与同学联系都是通过电话联系.但是,通常这些数据与其他人的信息混合在一起,同学信息并不方 ...

  5. 程序设计课程设计报告(学生成绩管理系统)

    程序设计课程设计报告 课程设计题目及内容 题目:学生成绩管理系统 设计要求及提示如下: (1).设计一个学生类Student,包括数据成员:姓名.学号.二门课程(面向对象程序设计.高等数学)的成绩. ...

  6. C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序

    C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序 实验内容:Windows 窗体程序 一.实验目的及要求 二.实验环境 三.实验内容与步骤 一.设计简单的计算器 3.1.实验内容 ...

  7. C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制

    C#面向对象程序设计课程实验一:实验名称:C#语言基础.程序流程控制 实验内容:C#语言基础.程序流程控制 一. 实验目的 二.实验环境 三.实验内容 四.实验总结 实验内容:C#语言基础.程序流程控 ...

  8. 猜数字java程序设计分析_JAVA程序设计课程设计-猜数字游戏设计

    JAVA程序设计课程设计-猜数字游戏设计 课 程 设 计 报 告课程设计名称 Java 程序设计 专 业 计算机科学与技术 班 级 2 班 学 号 08030212 姓 名 指导教师 成 绩 2011 ...

  9. java猜数字游戏课程设计报告_Java程序设计课程设计-猜数字游戏设计.doc

    Java程序设计课程设计-猜数字游戏设计.doc 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 课 程 设 计 报 告课程设计名称 Jav ...

最新文章

  1. 攻克指针(三)~自我总结篇
  2. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化
  3. 关于微信小程序的的总结
  4. linux查看文件夹目录大小
  5. 内蒙古广播电视大学计算机专修学院电话,内蒙古广播电视大学
  6. 关于Sybase ASE数据库的license以及试用版过期的问题的解决方案
  7. 依赖注入_引用其他的bean
  8. Hibernate Session get()vs load()的区别
  9. C++字符串处理小结
  10. python中的字符数字之间的转换函数
  11. VINS(二)Feature Detection and Tracking
  12. JS代码计算正方教务系统目前成绩的加权平均分和平均绩点
  13. 快速查询多个圆通快递未签收单号的走件信息
  14. ipv6被拒的解决方法
  15. “百度杯”CTF比赛2017年2月场WP--web
  16. 从零开始搭建网站 01:IP、域名、域名解析服务器(DNS)、DNSSEC
  17. 油桃文案:推广油桃水果文案,吸引人的水果油桃文案
  18. Cadence Allegro打阵列过孔方法图文教程及视频演示
  19. 11:ERNIE-VIL:KNOWLEDGE ENHANCED VISION-LANGUAGE REPRESENTATIONS THROUGH SCENE GRAPH
  20. 苹果手机与电脑互传文件(win10自带方法)

热门文章

  1. 微型计算机内存的基本单元的长度是,2017年计算机应用基础统考试题库
  2. python-数据分析-pandas基础知识
  3. ncist网络空间安全专业护网方向认知实习笔记2021.12 DAY1.2
  4. 如何用python 炒股赚钱_教程 | 如何用Python和机器学习炒股赚钱?
  5. 神鬼传奇客户端-终极优化精简方法
  6. 常见的自然法则及管理启示
  7. Java(正,反)序列化
  8. mysql数据库的行级锁有几种_数据库行级锁和表锁区别
  9. 单身汪慎入,志玲姐姐的这个故事太虐心
  10. 阿里校园招聘2017编程题