资源描述
河北联合大学
2012-2013第2学期
《软件设计基础-C++》
课程设计报告
设计名称: 饮料自动售货机
姓 名: 牛翔飞 学 号: 201214160110
专业班级: 12化学工程与工艺1班
学 院: 化学工程学院
设计时间: 2013-6-5
设计地点: 河北联合大学
指导教师评语:
教师评定:
自评成绩:78
指导教师签字:
年 月 日
《软件设计基础-C++》课程设计报告 第 18 页,共 18 页
目 录
1.课程设计目的
2.课程设计任务与要求
3.课程设计说明书
4.课程设计成果
5.程序调试过程
6.设计问题的不足和改进方案
7.课程设计心得
8.参考文献
1.课程设计目的
《软件设计基础-C++》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。
2.课程设计任务与要求:
要求:
本次课程设计利用《软件设计基础-C++》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。
要求:
1、对系统进行功能需求分析
2、设计合理的数据结构和系统框架
3、编程简练,程序功能齐全,能正确运行
4、说明书、流程图要清楚
5、课题完成后必须按要求提交课程设计报告
任务:
将自己选择题目的任务要求简单填写在此处。
基本要求:
(1)本售货机只接受10元、5元、2元、1元和0.5元的纸币和硬币。
(2)顾客一次只能投入一种上述金额的纸币或硬币,当用户重复投入时货币金额的累加。
(3)销售的饮料包括5种:可口可乐(2元)、百事可乐(2元)、橙汁(3元)、咖啡(5元)、纯净水(1.5元)。
(4)系统通过必要的提示信息,提示用户完成相应的操作。
(5)若顾客所购买的饮料已经售完,提示用户完成相应的操作。
(6)完成一次售货后,系统自动进行结算找零。
3.创新要求
在基本要求达到后,可以进行创新设计。
(1)更改程序,实现一次购买多种商品的功能。
(2)对于自动售货机的商家而言,还应该有一个交互的界面,可以让商家来更改自动售货机中货物的品种、单价、数量等信息。
3.课程设计说明书
⑴概要设计
在主函数中,首先定义了一个DrinkMachine类(自动售货机类)的对象dri,并未显 式地定义MoneyCounter类和GoodsInfo类的对象。但是在DrinkMachine类中含有MoneyCounter类和GoodsInfo类的数据成员。
然后设计一个两重循环,外循环的持续条件是顾客继续购买,内循环的持续条件是顾客继续重复投币,即顾客可以反复投币,直至投够为止。当顾客购买成功或不再继续购买时,流程中止。程序流程如图所示
模块说明:
模块结构图
⑵详细设计
总体流程图:
4.课程设计成果
程序源代码,运行结果(可用屏幕抓图的方法说明)(五号,宋体)(多页)
#include <iostream>
#include <string>
#include<stdlib.h>
using namespace std;
class moneycounter//钱币类
{
public:
moneycounter()//初始化
{
input_money=0.0;
}
~moneycounter(){}
void getmoney();//提示顾客投币
float money_from_buyer();//投币金额
void clear();//清空,准备下一轮投币
private:
float input_money;//顾客投入的金额
};
class goodsinfo//商品类
{
public:
goodsinfo()
{
name="";
price=0.0;
total=0;
}
~goodsinfo(){}
void set_goods(string,float,int);
string goods_name();
float goods_price();
int goods_number();
private:
string name;
float price;
int total;
};
class drinkmachine//售货机类
{
public:
drinkmachine();
~drinkmachine(){}
void showchoices();//显示饮料信息
void inputmoney();//获取顾客投入的钱币
bool goodsitem(int);//检查饮料的状态
void return_allmoney();//返回钱数
void return_money();
void deal_money(int select);
private:
moneycounter moneyctr;
goodsinfo v_goods[5];
};
static float change;
void moneycounter::getmoney()
{
float money;
cout<<endl<<"请投入钱币。"<<endl;
cin>>money;
input_money += money;
change = input_money;
cout<<endl<<"您投入的金额是"<<input_money<<"元。"<<endl;
}
float moneycounter::money_from_buyer()
{
return input_money;
}
void goodsinfo::set_goods(string n,float p,int num)
{
name=n;
price=p;
total=num;
}
string goodsinfo::goods_name()
{
return name;
}
float goodsinfo::goods_price()
{
return price;
}
int goodsinfo::goods_number()
{
return total;
}
drinkmachine::drinkmachine()
{
v_goods[0].set_goods("橙汁",3,20);
v_goods[1].set_goods("咖啡",5,0);
v_goods[2].set_goods("纯净水",1.5,20);
v_goods[3].set_goods("可口可乐",2,30);
v_goods[4].set_goods("百事可乐",2,28);
}
void drinkmachine::showchoices()
{
cout<<endl<<"请选择商品代码"<<endl;
for(int i=0;i<5;i++)
{
cout<<i<<" "<<v_goods[i].goods_name()<<" "<<v_goods[i].goods_price()<<"元"<<endl;
}
cout<<"5 退款并且退出"<<endl;
}
void drinkmachine::inputmoney()
{
cout<<endl<<"本机只接受10元、5元、2元、1元和0.5元的纸币和硬币。"<<endl;
moneyctr.getmoney();
}
bool drinkmachine::goodsitem(int select)
{
int number=v_goods[select].goods_number();
if(number>0)
{
if(moneyctr.money_from_buyer()>=v_goods[select].goods_price())
{
float change=moneyctr.money_from_buyer()-v_goods[select].goods_price();
return true;
}
else
{
cout<<endl<<"您投入的金额不足!"<<endl;
return false;
}
}
else
{
cout<<endl<<"您选择的饮料已售完!"<<endl;
return false;
}
return false;
}
void drinkmachine::deal_money(int select)
{
change -= v_goods[select].goods_price();
if(change < 0)
{
cout<<"您的余额不足!";
change += v_goods[select].goods_price();
}
}
void drinkmachine::return_allmoney()
{
cout<<endl<<"退款"<<moneyctr.money_from_buyer()<<"元。"<<endl;
return;
}
void drinkmachine::return_money()
{
cout<<endl<<"找零"<<change<<"元。"<<endl;
}
//***************************************************************************************
void main()
{
drinkmachine dri;
string buf;
bool go_on(true),cash_on(true),got_it(true);
bool judge = true;
int count = 0;
cout<<endl<<"====================欢迎使用本自动售货机====================="<<endl<<endl;
while(go_on)
{
while(cash_on && judge)
{
dri.inputmoney();
cout<<endl<<"继续投币吗?(y/n)";
cin>>buf;
if(buf=="n")
{
cash_on=false;
break;
}
}
dri.showchoices();
cin>>buf;
int select=atoi(buf.c_str());
if(select==5)
{
if(count == 0)
{
dri.return_allmoney();
}
else
dri.return_money();
go_on = false;
}
else
{
got_it=dri.goodsitem(select);
judge = false;
if(got_it)
{
dri.deal_money(select);
}
cout<<endl<<"需要其他饮料吗?(y/n)";
cin>>buf;
if(buf=="y")
{
cash_on=true;
go_on=true;
}
else
{
dri.return_money();
cout<<endl<<"请在出口处拿取您选择的饮料。"<<endl;
go_on=false;
}
}
}
cout<<endl<<"谢谢,再见!"<<endl<<endl;
}
5.程序调试过程
6.设计问题的不足和改进方案
实现一次购买多种商品的功能。
7.课程设计心得
首先通过这次的编程实习很好的帮助我复习巩固了大一一年来所学的C++的所有基础知识,通过对这些知识的综合应用加深了我对这些知识的理解,当然也让我牢牢的掌握了很多C++知识。
其次在变这个系统程序的过程中我也遇到了很多问题,但通过复习、自学解决了很大一部分,因此该实习很好的提升了我的综合能力,还有极少的一部分难题或者想不通的地方都通过与同学的交流学习解决了,从这个角度来说这个实习还提升了我与人交流的能力。
综上所述,这个实习让我受益匪浅。
8.参考文献
Visusl C++2005 入门经典(美 Ivor Horton 著)
展开阅读全文