C项目实训指导书汇总.docx
- 文档编号:11333711
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:25
- 大小:316.74KB
C项目实训指导书汇总.docx
《C项目实训指导书汇总.docx》由会员分享,可在线阅读,更多相关《C项目实训指导书汇总.docx(25页珍藏版)》请在冰点文库上搜索。
C项目实训指导书汇总
《中小企业桌面应用系统开发》实训指导书
项目一饮料自动贩卖机模拟程序
一、项目需求
1.项目描述
本项目模拟饮料自动售卖机的销售过程。
顾客首先进行投币,机器显示投币金额。
接下来顾客选择要购买的饮料,如果投币金额足够并且所购饮料存在,则提示用户在出口处取走饮料,同时找零。
如果投币金额不足,显示提示信息。
如果所购饮料已经售完,显示售完信息。
2.效果图
图1-1饮料自动贩卖机项目效果图
3.功能说明
(1)只接受10元、5元、2元、1元和0.5元的纸币和硬币。
(2)顾客一次只能投入上述一种金额的纸币或硬币,当用户重复投入时货币金额累加。
(3)销售的饮料包括5种:
可口可乐(2元)、百事可乐(2元)、橙汁(3元)、咖啡(5元)、纯净水(1.5元)。
(4)系统通过必要的提示信息,提示用户完成相应的操作。
(5)若顾客所购买的饮料已经售完,则进行提示并询问用户是否购买其它的饮料。
(6)完成一次售卖后,系统自动进行结算找零。
二、项目分析
根据系统功能要求,首先设计处理钱币的类和商品信息类。
处理钱币的类主要完成与钱币相关的工作,如给顾客找零等过程。
商品信息类主要用来处理与商品相关的工作,如获得商品信息等操作。
还需要设计一个自动贩卖机类来实现饮料的售卖过程。
在这个类里面,将钱币类和商品信息类作为其数据成员。
同时定义了包含5个GoodsInfo对象的数组,负责保存饮料的三个信息:
名称、价格和库存量,并且可以反馈这些信息。
项目需要用到类与类之间的一种关系:
has-a拥有关系,has-a关系是指一个对象包含另一个对象,即一个对象是另一个对象的成员。
三、项目设计
1.类的设计
根据上述的设计思想,设计了“MoneyCounter类”、“GoodsInfo类”和“DrinkMachine类”3个类。
(1)MoneyCounter类的设计
图1-2MoneyCounter类图
数据成员
floatinput_money;用于记录顾客投币金额
函数成员
MoneyCounter();构造函数,初始化顾客投币金额为0.00
~MoneyCounter(){} 析构函数
voidgetmoney(); 提示顾客投币
floatmoney_from_buyer(); 返回投币金额
voidclear(); 清空,准备下一轮投币
voidreturn_money(float);返回找的零钱
(2)GoodsInfo类的设计
图1-3GoodsInfo类图
数据成员
stringname;用于记录饮料名称
floatprice;用于记录饮料的单价
int total;用于记录饮料的总库存数
函数成员
GoodsInfo();构造函数,初始化饮料信息
~GoodsInfo(){} 析构函数
voidset_goods(string,float,int); 设置每种饮料的属性:
名称,价格,数量
stringgoods_name(); 返回饮料的名称
floatgoods_price(); 返回饮料的价格
intgoods_number();返回饮料的数量
(3)DrinkMachine类的设计
图1-4DrinkMachine类图
数据成员
MoneyCountermoneyctr; 定义MoneyCounter的对象,实现投币、找零等功能
GoodsInfov_goods[5];定义GoodsInfo的对象,实现商品信息的维护,此处设计了5种饮料,详见该类的实现
函数成员
DrinkMachine(); 构造函数,初始化自动售货机中的商品信息
~DrinkMachine() 析构函数
voidshowchoices(); 显示饮料选择信息
voidinputmoney(); 获取顾客投入钱币
boolgoodsitem(int);检查饮料状况
voidreturn_allmoney(); 返回钱数
2.主程序设计
在主函数中,首先定义了一个DrinkMachine类(自动售货机类)的对象dri,并未显式地定义MoneyCounter类和GoodsInfo类的对象。
但是在DrinkMachine类中含有MoneyCounter类和GoodsInfo类的数据成员。
其次设计一个两重循环,外循环的持续条件是顾客继续购买,内循环的持续条件是顾客继续重复投币,即顾客可以反复投币直至投够为止。
当顾客购买成功或不再继续购买时流程中止。
程序流程图如图1-5所示。
图1-5程序流程图
项目二超市收银系统模拟
一、项目需求
1.项目描述
模拟“美特好”超市购物过程,根据货物清单,选定所购货物种类和数量,实现收银结账。
2.效果图
效果图如图2-1所示。
图2-1超市收银系统效果图
3.功能说明
(1)显示超市库存商品信息。
(2)显示购物流程提示信息。
(3)实现购物过程,反复输入所购各种商品的索引和购买数量,直到商品索引号输入”-1”结束购物流程。
(4)实现收银,根据顾客所交现金,自动找零。
二、项目分析
在本项目中,超市收银系统应具备四大基本功能:
商品管理、货架管理、购物篮管理和收银管理。
货架管理实现库中某种商品的入库、出库、查询及显示等功能。
需要建立一个货架类,通过调用相应的函数来实现。
每种商品有单价、条形码、商品名称等属性。
商品管理类实现了设置、获取商品信息,复制商品信息等功能。
购物篮管理就是一个小型的货架管理,可以用货架类来实现。
收银实现商品的结账、找零等任务。
需要建立一个收银台类,通过调用相应的函数来实现。
其中,需要注意以下一些问题:
从货架拿货时,应该把商品拿一部分出去,通过把商品“复制”一份出去来实现。
“货架”上有形形色色的商品,因此,这个类需要向量这个容器来容纳这些商品。
向量中仅存储商品对象是不够的,因为商品没有量的概念,到底容器中包含多少件此类商品还需要用另外一个变量来表示,通过把商品对象和商品数量集成到一个结构体中来实现。
如何构建购物篮对象?
仔细想一下,“购物篮”就是一个小型的货架,因此可以用“货架”类模拟一个购物篮。
三、项目设计
1.类的设计
根据上述的设计思想,设计了“商品类”、“货架类”和“收银台类”3个类,这3个类的声明部分在“counter.h”中实现,3个类的成员函数的实现部分在文件“counter.cpp”中完成。
其中商品类(CGoods类)负责完成商品信息的存储、获取、复制等,货架类(CStore类)负责完成库中商品的入库、出库、查询及显示等。
收银台类(CCounter类)负责完成商品的结账、找零等任务。
另外在counter.h文件中还定义了一个表示货架商品对象的结构SStoreElement,它有两个成员,一个是商品对象的指针,一个是此类商品的数目。
货架中的每个商品都是这个结构类型的。
(1)CGoods类(商品类)的设计
图2-2CGoods类的结构
数据成员
int m_iIndex 用于记录商品索引,作用类似于条形码。
string m_strName 用于记录商品名称。
double m_dUnitPrice用于记录商品单价。
函数成员
CGoods(intiIndex,stringstrName,doubledUnitPrice) 构造函数,用来建立一个新商品,建立商品时给出商品索引、商品名及单价。
virtual~CGoods(void) 析构函数,用来进行清理工作。
string GetName(void)const 获取商品名称。
int GetIndex(void)const 获取商品索引。
double GetUnitPrice(void)const 获取商品单价。
void SetUnitPrice(doubledUnitPrice) 设置商品单价。
CGoods*Clone() 复制本类商品,但初始商品数目为0。
(2)结构体
tagStoreElement //货架元素数据类型
typedef struct tagStoreElement
{
CGoods*pGoods; //商品指针
int iNum; //记录商品数量
}StoreElement,*pStoreElement;
图2-3结构体tagStoreElement
(3)CStore类(货架类)的设计
图2-4CStore类的结构
数据成员
vector
函数成员
CStore() 构造函数,用来进行初始化工作。
virtual~CStore() 析构函数,在此调用成员函数DeleteAllGoods()删除货架中所有的商品。
boolAddGoods(CGoods*pGoods,intiNum) 该成员函数用来向货架增加商品,假如货架中已经有了同类商品,那么只增加此类商品的数目。
其中,pGoods--欲增加的商品对象,iNum--增加的数量。
返回值:
true--成功,false--失败。
int QueryGoods(conststring&strName) 该成员函数是重载函数,用来查询商品。
其中,strName--要查询的商品的名字。
返回值:
商品数量。
int QueryGoods(intiIndex) 该成员函数是重载函数,用来查询商品。
其中,iIndex--要查询的商品的索引号。
返回值:
商品数量。
int DeleteGoods(conststring&strName,intiNum) 该成员函数是重载函数,用来删除商品。
其中,strName--商品名字,iNum--删除数目,-1为全部删除。
返回值:
剩余商品数量。
int DeleteGoods(intiIndex,intiNum)该成员函数是重载函数,用来删除商品。
其中,iIndex--商品索引号,iNum--删除数目,-1为全部删除。
返回值:
剩余商品数量。
voidDeleteAllGoods(void) 该成员函数用来删除购物篮中的所有商品。
vector
返回值:
所有商品信息组成的向量。
pStoreElementGetGoods(intiIndex) 该成员函数是重载函数,用来获取某种商品。
其中,iIndex--商品索引号。
返回值:
如果货架存在此类商品,则返回此类商品的存储元素指针,否则返回NULL。
pStoreElementGetGoods(conststring&strName) 该成员函数是重载函数,用来获取某种商品。
其中,strName--商品名称。
返回值:
如果货架存在此类商品,则返回此类商品的存储元素指针,否则返回NULL。
voidPrint() 该成员函数用来打印货架全部货物清单,包括商品索引号、商品名、数量及单价。
(4)CCounter类(收银台类)的设计
图2-5CCounter类的结构
数据成员
CStore*m_pBasket 定义购物篮指针m_pBasket。
double m_dCash 记录共收取现金数额。
函数成员
CCounter(CStore*pBasket) 构造函数,用来进行初始化工作,设置购物篮指针和购物篮商品金额,初始金额为0.0。
virtual~CCounter(void) 析构函数,用来进行清理工作。
doubleBill(void) 该成员函数用来计算购物篮中商品金额。
返回值:
购物篮中商品金额。
doubleCount(doubledCash) 该成员函数用来收钱找零。
其中,dCash--顾客所交现金。
返回值:
给顾客的找零。
doubleGetCash() 该成员函数用来返回共收取顾客的现金金额。
返回值:
收取顾客的现金金额。
2.主程序设计
(1)函数设计
CStore*PrepareStore()
该函数用于最初“进货”,即往货架存入一批商品,包括这些商品的商品索引、商品名称、数量及单价,即创建一个商店。
返回值:
CStore*pStore为Cstore类的指针,代表一个货架。
voidusage()
该函数用为用户显示操作提示,即告诉“客人”超市购物的购物流程。
返回值:
无
(2)主函数设计
在main()函数中,首先分别对三个类定义一个超市、一个购物篮和一个收银台对象,然后定义了一个顾客交钱的变量,并初始化为0。
利用上诉类的其它成员函数来实现购物过程。
具体流程如图3-6。
图2-6主程序调用流程图
项目三 工资个人所得税计算器
一、项目需求
1.项目描述
从2006年1月1日起,工资个人所得税标准从1600元起征。
对每月收入超过3000元以上的部分征税,适用5%至45%的9级超额累进税率。
即:
计税金额=每月工资-3000元,个人所得税=计税金额×税率-速算扣除数。
税率表如表3-1所示。
试开发个人所得税计算器。
表3-1税率表
本月应纳税所得额
税率
速算扣除数(元)
不超过1500元
3%
0
超过1500元至4500元
10%
105
超过4500元至9000元
20%
555
超过9000元至35000元
25%
1005
超过35000元至55000元
30%
2755
超过55000元至80000元
35%
5505
超过80000元
45%
13505
2.效果图
图3-1效果图
3.功能说明
定义一个对话框对输入的个人工资,计算所得税。
二、项目分析
根据项目需求,需要利用MFC环境定义一个菜单;一个输入对话框类,提供个人月收入的输入界面;另外定义一个PayTax类,在PayTax类中定义了数据成员:
个人月收入和个人所得税,定义了成员函数:
税率计算函数。
最后在对话框上输出了相应的缴纳税额。
三、项目设计
1.类的设计
基于上述分析,本项目需要设计一个类PayTax。
图3-2PayTax类图
数据成员
doubleincome; 工资月收入。
doubleoutput; 个人所得税。
函数成员
PayTax(doublemoney);带参构造函数。
doublecalculate(); 计算个人所得税。
在类视图ClassView上选中Example2classes点击右键选择NewClass,弹出NewClass对话框,在Classtype中选择普通类GenericClass,在ClassInformation的Name单选框中输入类名PayTax,点击OK按钮,如图4-3所示。
图3-3创建PayTax类
完成后在类视图ClassView中出现新类PayTax。
在文件视图的HeaderFiles下找到PayTax.h文件双击打开,其中已经出现该类的声明,添加成员函数calculate(),修改构造函数PayTax的声明,添加变量成员income,output的声明。
在文件视图的SourceFiles下找到PayTax.cpp文件双击打开,可以看到构造函数和析构函数的定义已经存在,在其下添加成员函数calculate()的定义和修改构造函数PayTax()的定义。
2.对话框设计
在资源视图ResourceView上选择Dialog,点击右键,选择InsertDialog,在对话框内添加静态文本StaticText和编辑框EditBox控件并修改属性,上面的Edit控件的ID为IDC_EDIT1,下面的Edit控件的ID为IDC_EDIT2,而且因为IDC_EDIT2控件用于个人所得税的输出,所以设计其属性中的Border为False,Read-only为True,如图3-4所示。
对话框的设计结果如图3-5所示。
图3-4对话框IDC_EDIT2属性的修改 图3-5对话框设计结果
双击对话框弹出AddClass对话框,保持默认值添加一个新类Creatanewclass,点击OK按钮。
在图3-6所示对话框中填写对话框类名inputdlg,点击确定。
图3-6创建对话框类
在View菜单下选择MFCClassWizard菜单项,切换到MemberVariable标签页。
修改成员变量的名称和类型。
其中IDC_EDIT1的成员变量名为m_income,类型为double,代表个人收入;IDC_EDIT2的成员变量名为m_output,类型为double,代表个人所得税,点击OK退出。
设计结果如图4-7所示。
图3-7对话框类成员变量的设计结果
从菜单View中打开类向导Classwizard,如图3-8所示。
在ObjectIDs中选择IDOK,在Classname中选择Inputdlg,在Message中选择COMMAND后,点击Addfunction按钮,弹出对话框,默认菜单成员函数的名字为OnOK(),点击OK按钮,则在Memberfunction中添加了成员函数,该函数是Inputdlg类的成员函数,点击EditCode按钮可以对函数进行编辑。
图3-8设计对话框成员函数
3.菜单设计
在资源视图ResourceView上点击Menu,双击打开IDR_MAINFRAME,修改菜单项,设置菜单Tax的ID为ID_MENUTax,如图3-9所示。
图3-9设计菜单
从菜单View中打开类向导Classwizard,如图3-10所示。
在ObjectIDs中选择ID_MENUTax,在Classname中选择CExample1View,在Message中选择COMMAND后,点击Addfunction按钮,弹出对话框,默认菜单成员函数的名字为OnMENUTax(),点击OK按钮,则在Memberfunction中添加了成员函数,该函数是CExample2View类的成员函数,单击EditCode按钮可以对函数进行编辑。
图3-10MFC类向导
菜单调用流程图见图3-11。
图3-11菜单调用流程图
项目四复数的四则运算
一、项目需求
1.项目描述
复数a=x1+y1i和a=x2+y2i的四则运算公式如下:
,
,
试编写程序对输入的两个复数进行加减乘除四则运算,并在屏幕上输出计算结果。
2.效果图
图4-1项目效果图
3.功能说明
(1)进行加“+”,减“-”,乘“*”,除“/”运算符重载,对输入的两个复数对象输出其运算结果。
(2)当第二个复数b的实部和虚部同时为0时,除法不能运算,需要提示。
(3)设计输出函数,对于计算结果的虚部为负数的情况能进行处理。
如2-2i不要输出为2+-2i。
二、项目分析
根据项目需求,需要利用MFC环境定义了一个菜单;一个输入对话框类,提供个两个复数的输入界面;另外定义一个complex类,在complex类中定义了数据成员:
实部值和虚部值,定义了成员函数:
声明了友元加号运算符重载函数、友元减号运算符重载函数、友元乘号运算符重载函数、友元除号运算符重载函数、实部值获取函数和虚部值获取函数。
最后在视图区输出了两个复数的运算结果。
本项目的重点是如何使用运算符重载函数来进行复数对象的四则运算,因为在MFC环境中不能重载输入和输出运算符,需要独立设计复数输出函数。
本项目的难点在于复数的虚部计算结果为负数时的输出函数设计。
三、项目设计
1.类的设计
本项目需要设计一个类complex。
图4-2complex类图
数据成员
doublereal; 复数实部。
doubleimag; 复数虚部。
函数成员
complex();默认构造函数。
complex(double,double);带参构造函数。
friendcomplexoperator+(complex&c1,complex&c2);友元运算符重载函数+。
friendcomplexoperator-(complex&c1,complex&c2);友元运算符重载函数-。
friendcomplexoperator*(complex&c1,complex&c2);友元运算符重载函数*。
friendcomplexoperator/(complex&c1,complex&c2);友元运算符重载函数/。
doublegetr();读出实部值函数。
doublegeti();读出虚部值函数。
2.对话框设计
在资源视图ResourceView上选择Dialog,点击右键,选择InsertDialog,在对话框内添加静态文本StaticText和编辑框EditBox控件并修改属性,对话框的设计结果如图4-3所示。
图4-3设计对话框
双击对话框弹出AddClass对话框,保持默认值添加一个新类Creatanewclass,点击OK按钮。
在弹出的对话框中填写对话框类名inputdlg,点击确定。
在View菜单下选择MFCClassWizard菜单项,切换到MemberVariable标签页。
添加成员变量的名称和类型m_ar和m+ai是a复数的实部和虚部,m_br和m+bi是b复数的实部和虚部。
设计结果如图4-4所示。
图4-4对话框类成员变量的设计结果
3.菜单设计
在资源视图ResourceView上点击Menu,双击打开IDR_MAINFRAME,修改菜单项,设置菜单complex的ID为ID_MENUcomplex,如图4-5所示。
图4-5设计菜单
从菜单View中打开类向导Classwizard,如图4-6所示。
在ObjectIDs中选择ID_MENUcomplex,在Classname中选择CExample4View,在Message中选择COMMAND后,点击Addfunction按钮,弹出对话框,默认菜单成员函数的名字为OnMENUcomplex(),点击OK按钮,则在Memberfunction中添加了成员函数,该函数是CExample4View类的成员函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目实训指导书汇总 项目 指导书 汇总