面向对象程序设计课程设计报告正文.docx
《面向对象程序设计课程设计报告正文.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计课程设计报告正文.docx(17页珍藏版)》请在冰豆网上搜索。
面向对象程序设计课程设计报告正文
目录
1前言1
2需求分析1
2.1任务和要求1
2.2运行环境1
2.3开发工具1
3分析和设计1
3.1系统分析及设计思路1
3.2主要类图1
3.3函数流程图2
4具体代码实现2
5课程设计总结2
5.1程序运行结果或预期运行结果2
5.2设计结论2
参考文献2
致谢2
1前言
随着科学的进步和科技的发展,计算机的应用可以说是家喻户晓,但是随着计算机应用领域的不断扩大,计算机已经深入到社会和生活的各个领域,而对于我们21世纪的青年来说,在社会主义发展的新阶段,更应该了解和掌握时代的脉搏,通晓计算机的知识和识别计算机的语言,在掌握了C++语言的概念和语法后,能熟悉掌握面向对象程序设计的编程方法及各种编程技巧,并能够利用简洁的语句编写出高效、完整,以解决在生活中各个方面遇到的具体问题,且为程序语言的软件编程奠定基础,也是在C语言程序的基础之上,使我对计算机语言有了更进一步的理解,和更深一步的认知。
同时通过用C++程序设计语言的应用,可以让我们提高学生的C++编程水平,让我们能够学有所获,灵活的运用所学知识,来实现机器语言。
2需求分析
2.1任务和要求
(1)该程序是分数计算器,程序能完成基本的加减乘除算术运算,要求界面提示清楚,便于操作。
(2)以a/b的形式输入输出分数,对输出结果可以约分的分数要进行约分。
(3)程序具有判断功能,当有非法的输入时(如分母等于零等),能给出提示信息并退出运算
(4)程序能以菜单形式显示相应的运算。
2.2运行环境
(1)WINDOWS2000/XP系统
(2)VisualC++6.0编译环境或DEVC++5.0编译环境
2.3开发工具
C++语言
3分析和设计
3.1系统分析及设计思路
该程序是分数计算器,所以要完成分数与分数之间的加、减、乘、除、乘运算和分数与整数之间的加、减、乘、除、乘运算,以及分数的幂运算。
程序分为以下几个模块:
1.类模块
该模块主要是定义一个分数类Fraction。
其中包括两个私有成员numerator(分子),denominator(分母),并对在后面需要用到的程序进行声明。
Fraction(){numerator=1;denominator=1;}//定义构造函数
Fraction(intn,intd){numerator=n;denominator=d;}
用两个构造函数对私有成员numerator(分子)、denominator(分母)进行初始化。
具体实现代码如下;
classFraction//声明分数类
{
public:
Fraction(){numerator=1;denominator=1;}//定义构造函数
Fraction(intn,intd){numerator=n;denominator=d;}
voidsimplify();//声明约分函数
voidsetdate();//声明输入函数
voiddisplay();//声明输出函数
voidpower();//声明分数的幂函数
friendvoidcalculate();//声明计算方法函数
Fractionoperator+(Fraction&f2);//声明重载分数和分数的加法运算符
Fractionoperator-(Fraction&f2);//声明重载分数和分数的减法运算符
Fractionoperator*(Fraction&f2);//声明重载分数和分数的乘法运算符
Fractionoperator/(Fraction&f2);//声明重载分数和分数的除法运算符
//Fractionoperator*=(Fraction&f2);
Fractionoperator+(int&i2);//声明重载分数和整数的加法运算符
Fractionoperator-(int&i2);//声明重载分数和整数的减法法运算符
Fractionoperator*(int&i2);//声明重载分数和整数的乘法运算符
Fractionoperator/(int&i2);//声明重载分数和整数的除法运算符
private:
intnumerator,denominator;//定义分数的分子和分母
};
2.重载模块
由于是特殊的函数成员对象之间相互运算,所以需要使用运算符重载功能,以便用来计算数据之间的大小。
该模块有两个部分:
一个部分是对分数和分数的四则运算符重载。
四则运算的原理为:
加法原理:
结果的分子是两个数的分子分母交换相乘相加的和,结果的分母是两分母相乘。
减法的原理与加法类似。
乘法的原理:
分母相乘,分子相乘。
除法的原理:
第二个分数的分子分母互换,再使用乘法原理。
实现代码如下:
FractionFraction:
:
operator+(Fraction&f2)//重载分数与分数运算符+
{Fractionf;
f.numerator=numerator*f2.denominator+denominator*f2.numerator;
f.denominator=denominator*f2.denominator;
returnf;
}
FractionFraction:
:
operator-(Fraction&f2)//重载分数与分数运算符-
{Fractionf;
f.numerator=numerator*f2.denominator-denominator*f2.numerator;
f.denominator=denominator*f2.denominator;
returnf;
}
FractionFraction:
:
operator*(Fraction&f2)//重载分数与分数运算符*
{Fractionf;
f.numerator=numerator*f2.numerator;
f.denominator=denominator*f2.denominator;
returnf;
}
FractionFraction:
:
operator/(Fraction&f2)//重载分数与分数运算符/
{Fractionf;
f.numerator=numerator*f2.denominator;
f.denominator=denominator*f2.numerator;
returnf;
}
另一个部分是分数与整数的四则运算符重载。
在做分数与整数的四则运算时,只要将整数看成是分母为1的分数,其他的和分数与分数的四则运算类似。
实现将整数看成分数的语句如下:
(i2是用户定义的整数)
Fractionf2;
f2.numerator=i2;
f2.denominator=1;
3输入输出约分模块
在输入函数中用cin>>numerator>>ch>>denominator;输入一个分数,形如a/b。
再用一个for语句来判断输入的分数是否符合要求。
for(;denominator==0;)
{
cout<<"输入错误,分母不能为零!
"<setdate();
break;
}
在输出函数中,用几个if语句来考虑分数输出结果的几种情况。
当分子为0时,则输出0,;当分子是分母的整数倍时,则一个整数numerator/denominator;否则,输出分数a/b的形式。
实现代码如下:
if(numerator==0)//当分子为0时,输出0
cout<<'0'<else
if(numerator%denominator==0)//当分子是分母的整数倍时,输出一个整数
cout<else
cout<}
在约分函数中,先用一个for语句和一个if语句来判断分子与分母是否有公约数,如果有,分子分母除以这个公约数,一以实现约分。
实现代码如下:
for(i=1;i<=denominator&&i<=numerator;i++)
{
if(denominator%i==0&&numerator%i==0)
{
sum=i;
if(sum!
=1)
{
numerator=numerator/sum;
denominator=denominator/sum;
}
}
}
4.计算模块
此模块主要是对计算具体过程的实现。
在这个过程中,我们要用到system("cls")进行清屏,这样可以使界面更为清晰,直观。
首先是分数与分数的四则运算的实现。
用一个fraction函数来调用calculate函数,在calculate函数中,通过调用输入函数setdate来输入两个分数,并定义字符ch,用来选择要输入的运算符(“+”、“-”、“*”、“/”)在调用约分函数simplify函数和输出函数display函数来输出最终的计算结果。
在计算完成后用一个if语句来判断是否继续进行当前的运算。
具体实现代码如下:
voidcalculate()
{charch,ch1;
Fractions,f1,f2;
f1.setdate();
cin>>ch;
f2.setdate();
switch(ch)//选择运算符“+”、“-”、“*”、“/”
{case'+':
s=f1+f2;break;
case'-':
s=f1-f2;break;
case'*':
s=f1*f2;break;
case'/':
s=f1/f2;break;
}
f1.display();
cout<f2.display();
cout<<"=";
s.simplify();
s.display();
cout<cout<<"是否继续进行计算?
(Y/N):
";
cin>>ch1;
if(ch1=='n')
k=0;
system("cls");
}
然后是分数与整数的四则运算的实现。
在此过程中,我们只需要自定义一个整数,其他实现过程和分数与分数的四则运算的实现过程类似。
最后是分数的幂运算的实现。
在进行幂运算时,也要注意不同情况,先要用if判断语句来判断是否为0次幂,若是则输出1。
否则就用一个for语句通过累乘来计算。
在调用约分函数simplify函数和输出函数display函数来输出最终的计算结果。
在计算完成后用一个if语句来判断是否继续进行当前的运算。
具体实现代码如下:
voidpower()//定义分数的幂运算函数
{system("cls");//清屏
Fractionf,f1;
intn,i;
charch1;
f.setdate();
cin>>n;
if(n==0)//如果是0次幂,则输出1
cout<<"f="<<1<else
{for(i=1;i<=n;i++)
{f1=f1*f;//计算分数的多次幂
}
f.display();
cout<<"^"<f1.simplify();//调用约分函数
f1.display();
cout<cout<<"是否继续进行计算?
(Y/N):
";
cin>>ch1;
if(ch1=='n')
k=0;
system("cls");
}
}
5主函数模块
用为该分数计算器的特点是实现对分数进行加减乘除幂操作,根据这个特点在主函数设计菜单,列出这个程序所有能进行的功能。
用switch语句来判断用户选择的功能并进行相应的运算。
调用fraction()是进行分数与分数的四则运算。
调用integer()是进行分数与整数的四则运算。
调用power()是进行分数的幂运算。
在每次计算后再用一条if语句来判断是否继续运行。
当不再使用此分数计算器是,则按0退出,并显示“谢谢您的使用”的界面。
具体实现代码如下:
intmain()
{
charch1;
while(k!
=0)
{system("cls");//清屏
cout<<"**********∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽**********"<cout<<"********************"<cout<<"**********欢迎使用分数计算器**********"<cout<<"********************"<cout<<"**********∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽**********"<cout<cout<<"*******************************"<cout<cout<<"**********∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽**********"<cout<<"**********1.分数与分数的四则运算**********"<cout<<"**********2.分数与整数的四则运算**********"<cout<<"**********3.幂**********"<cout<<"**********0.退出**********"<cout<<"**********∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽**********"<cin>>k;
switch(k)//选择计算类型
{
case1:
{system("cls");//清屏
fraction();//分数与分数的运算
cout<<"是否继续进行分数与分数的计算?
(Y/N)";
cin>>ch1;
if(ch1=='n')
{k=5;break;};
}
case2:
{
system("cls");//清屏
integer();//分数与整数的运算
cout<<"是否继续进行分数与整数的计算?
(Y/N)";
cin>>ch1;
if(ch1=='n')
{k=5;break;};
}
case3:
{
system("cls");//清屏
power();//分数的幂运算
cout<<"是否继续进行分数的幂计算?
(Y/N)";
cin>>ch1;
if(ch1=='n')
{k=5;break;};
}
case5:
continue;
}
}
system("cls");//清屏
cout<<"**********∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽**********"<cout<<"********************"<cout<<"**********谢谢您的使用**********"<cout<<"********************"<cout<<"**********∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽**********"<return0;
}
3.2主要类图
+共有成员
-私有成员
#保护成员
3.3函数流程图
根据需要填上具体内容,没有重要的流程图可以不填。
4具体代码实现
写上源程序,并加上必要的注释。
5课程设计总结
5.1程序运行结果或预期运行结果
程序运行的主菜单模式:
图5.1主界面图
当分母为0时,显示出错信息:
图5.2错误提示
两个分数相加,并对输出结果进行约分:
图5.3两个分数相加图
两个分数相减,且最终的计算结果中分母为0时,则输出0。
.
图5.1两个分数相减图
两个分数相乘,且最终计算结果分子是分母的整数倍,则输出一个整数numerator/denominator。
图5.1分数与整数相乘图
分数的幂运算。
图5.1分数幂运算图
按0则退出,显示“欢迎使用的界面”。
图5.1退出界面图
5.2设计结论
试验中,我们按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;
通过对例题的学习,我们最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;
编码的速度有一个从慢到快的过程,在本次试验中,我们的速度依然比较慢,这看出我们平时编码比较少,缺乏熟练度,并对算法了解不深入;
但是我们的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。
再以后我们将通过练习基础功,简化程序代码,实现简单代码完善功能的理想。
1.编码要尽量使程序简单,采用最切实可靠的算法,实现封装,不同部分的代码应分工明确,最后由主函数统一调用;
2.编写完成后先自己检查一遍代码,然后由机器检测,找出错误的根源,从不同角度思考如何解决问题;
3.测试时应尽可能输入各种可能情况的数据以确保程序准确无误。
4.应避免任何可能的漏洞,使代码的可用性和可靠性增强。
5.试验中,我按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;
6.通过对例题的学习,我最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;
7.编码的速度有一个从慢到快的过程,在本次试验中,我的速度依然比较慢,这看出我平时编码比较少,缺乏熟练度,并对算法了解不深入;
8.但是我的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。
再以后我将通过练习基础功,简化程序代码,实现简单代码完善功能的理想。
本次试验中,我们先将书上的代码编译通过,通过讨论,认为书上检查异常的方式不便于理解,于是直接采用输出到dos窗口的方式,所以没有使用到utility.h头文件,同时,由于我们电脑上安装的编译系统不方便对.h文件进行调试修改,所以我们采用的cpp文件,在一个cpp文件中写下所有代码。
对于txt文件输出的格式,我们做的稍微人性化,界面简洁,容易区分
参考文献
[1]张福祥.C语言程序设计[M].辽宁大学出版社,2008.1
[2]张福祥,王萌.C语言程序设计习题解答与实验实训[M].沈阳:
辽宁大学出版社,2008.
[3]牛莉,刘远军等.计算机等级考试辅导教程[M].北京:
中国铁道出版社,2008.
致谢
经过两周的课程设计,我学到了许多关于c++的知识,我要感谢罗老师对我们的耐心指导,同时,我也感觉到了团队的力量