课程设计报告
课程名称算法与程序设计
课题名称分数计算器设计
专业信息与计算科学
班级1601班
学号1428
姓名王世成许依哲
指导教师王祝君、赵钍焱
2018年01月04日
湖南工程学院
课程设计任务书
课程名称算法与程序设计
课题分数计算器设计
专业班级信息与计算科学1601班
学生姓名王世成许依哲
学号1428
指导老师王祝君、赵钍焱
审批
任务书下达日期2017年12月18日
任务完成日期2018年01月04日
一.设计要求:
1、问题描述
定义一个整数类。
定义一个分数类,由整数类派生。能对分数进行各种计算和输入/输出。
2、功能要求
(1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。
(2)输入/输出:对流提取和流插入运算符进行重载。
(3)计算功能:可进行分数的加、减、乘和除法运算。
(4)化简功能:将分数化简为最简分数。
(5)异常处理功能:分数中分母不能为零。
(6)菜单功能:每种功能的操作都是在菜单中进行相应选择。
3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
前言
在网站上找了一个源代码对它进行了分析,我们一起读懂这个程序
在这个过程当中碰到我不懂的和他不懂的地方,但是经过两个人的合作
最终把程序全部都读懂了,如由开始的定义整数类,不清楚为什么要定
义两个,后来慢慢看下去之后就知道了,因为这个要由整数类派生出分
数类,在后面也碰到王看不懂的地方如约分,经过我给他举实例然后再
通过用程序代码打上去,慢慢就对这个分数计算器的计算功能全部了解
了,包括后面的层次图,我通过上网百度层次图的结构,他则对整个程
序进行分析,从整个层面上看。
拿到这个课题之后我们一起查找资料,源代码有很多不理解的地
方,我们一起学习,一点点的理解。还有层次图的设计,系统的调试,
分析,一个个过程慢慢摸索,两个人互相帮助下,完成了这个课题。系
统调试过程出现一些问题,后来经过询问来老师,上网搜索的方法纠正
了错误,让程序顺利进行。
目录
二、设计内容
(一)需求分析
系统设计目的与意义:
制作一个分数计算器,以完成分数与分数,整数与分数之间的四则运算,
以及分数的化简,并对分数进行输入/输出。
(二)总体设计
系统功能分析;
(1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。
(2)输入/输出:对流提取和流插入运算符进行重载。
(3)计算功能:可进行分数的加、减、乘和除法运算。
(4)化简功能:将分数化简为最简分数。
(5)异常处理功能:分数中分母不能为零。
(6)菜单功能:每种功能的操作都是在菜单中进行相应选择。
系统功能模块划分与设计(系统功能模块图):
头文件
声明整数类
声明派生类
(三)详细设计
类层次图
成员函数定义
主函数
定义类的对象
定义成员函数
整
数
类
分
数
类
加法运算
减法运算
乘法运算
除法运算
约分
加
法
运
算
减
法
运
算
乘
法
运
算
除
法
运
算
(四)系统调试
系统主界面
进行分数与整数运算调试
进行分数约分调试
进行分数与分数运算调试
退出调试
进行分母为0的调试
(六)使用说明及编程体会
按照屏幕上的提示进行操作,输入整数与分数,其次按照页面弹出来的文字
进行分数与分数的四则运算或者整数与分数的四则运算,在调试的过程中我们忽
略了这是由多个文件合并而来的大文件,之间合并在一起去操作,导致怎么运行
都是出现一个错误,最后拆分开来就调试成功了,包括后面的处理整个过程真的
有点麻烦,最后还是坚持下来了,觉得挺好的,当然完成这个课设也让我们再次
感觉到这么学科的好处以及学习的乐趣
(七)关键源程序(带注释)
//分数计算器:
#include<>
classInteger//整数类
{
protected:
intfz;
intfm;
public:
Integer(inta=0,intb=1):fz(a),fm(b){}
~Integer(){}
voiddisplay();
};
classFraction:publicInteger//分数类,进行计算和输入输出
{
public:
Fraction(inta=0,intb=1):Integer(a,b){}
friendistream&operator>>(istream&,Fraction&);//重载输入流
friendostream&operator<<(ostream&,Fraction&);//重载输出流
Fractionoperator+(Fraction&c);//重载+运算符(分数与分数)
Fractionoperator+(intn);//重载+运算符(整数与分数)
Fractionoperator-(Fraction&c);//重载-运算符(分数与分数)
Fractionoperator-(intn);//重载-运算符(整数与分数)
friendFractionoperator-(intn,Fraction&c);
Fractionoperator*(Fraction&c);//重载*运算符(分数与分数)
Fractionoperator*(intn);//重载*运算符(整数与分数)
Fractionoperator/(Fraction&c);//重载/运算符(分数与分数)
Fractionoperator/(intn);//重载/运算符(整数与分数)
friendFractionoperator/(intn,Fraction&c);
Fractionpredigest();//约分函数
voiddisplay();
};
//实现函数(分数计算器设计)
#include<>
//#include"分数计算器"
voidInteger::display()
{
cout<
cout<<"------------------分数计算器
-----------------"<
cout<<"请选择功能:"<
cout<<"1分数与整数的四则运算。"<
cout<<"2整数与分数的四则运算。"<
cout<<"3分数与分数的四则运算。"<
cout<<"0输入0退出。"<
}
FractionFraction::predigest()//定义约分函数
{
intn,d,t,sign=1;
Fractiontemp;
if(fz<0&&fm<0)
{
fz=-fz;
fm=-fm;
}
if(fz>0&&fm<0)
{
fm=-fm;
sign=-1;
}
if(fz<0&&fm>0)
{
fz=-fz;
sign=-1;
}
n=fz;
d=fm;
intr;
if(n
{t=n;n=d;d=t;}
r=n%d;
while(r!=0)
{
n=d;
d=r;//d为最大公约数
r=n%d;
}
=sign*(fz/d);
=fm/d;
returntemp;
}
FractionFraction::operator+(Fraction&c)//重载两个分数的加法运算符
{
Fractiontemp;
=fz*+fm*;
=fm*;
returntemp;
}
FractionFraction::operator+(intn)//重载分数和整数的加法运算
{
Fractiontemp;
=fm*n+fz;
=fm;
returntemp;
}
Fractionoperator-(intn,Fraction&c)
{
Fractiontemp;
=*;
=;
returntemp;
}
FractionFraction::operator-(intn)//重载分数减整数的减法运算符
{
Fractiontemp;
=fz-fm*n;
=fm;
returntemp;
}
FractionFraction::operator-(Fraction&c)//重载两个分数的减法运算符
{
Fractiontemp;
=fz*-fm*;
=fm*;
returntemp;
}
FractionFraction::operator*(Fraction&c)//重载两个分数的乘法运
算符
{
Fractiontemp;
=fz*;
=fm*;
returntemp;
}
FractionFraction::operator*(intn)//重载分数与整数的乘法运算
符
{
Fractiontemp;
=fz*n;
=fm;
returntemp;
}
FractionFraction::operator/(Fraction&c)//重载两个分数的除法运算符
{
Fractiontemp;
=fz*;
=fm*;
returntemp;
}
FractionFraction::operator/(intn)//重载分数除以整数的除法运算符
{
Fractiontemp;
=fz;
=fm*n;
returntemp;
}
Fractionoperator/(intn,Fraction&c)
{
Fractiontemp;
=n*;
=;
returntemp;
}
ostream&operator<<(ostream&output,Fraction&t)//重载输出运算符,输出分数
{
inta,b,c;
a=;
b=;
if(a==0||b==0)//当分子,或者分母为0时,输出0
cout<<"0";
if(b==1)//当分母为1时,输出分子
if(a>b&&b!=1)//判断分数为假分数
{
c=a/b;
a=a%b;
cout<
if(a!=0)
}
if(a<0&&-a>b&&b!=1)//当分数为负时,判断为假分数
{
c=-a/b;
a=-a%b;
c=-c;
cout<<'='<
if(a!=0)
}
if>0&&<&&!=0&&!=1)//判断为真分数
output<<<<'/'<<;
if<0&&<&&!=0&&!=1)//判断为真分数
output<<"("<<<<'/'<<<<")";
returnoutput;
}
istream&operator>>(istream&input,Fraction&t)//重载输入运算符,输入分数
{inta,c;
charb;
input>>a>>b>>c;
if(b=='/'&&c!=0)
{
=a;
=c;
}
el
cout<<"错误!!!输入格式错误或分母为0!请退出重新输入!"<
returninput;
}
#include<>
intmain()//main函数
{
Integerdis;
Fractiona,b,result,real;
intm,z;
charc;//数据类型
();
while(m!=0)
{
cout<<"请输入:(0-3):";
cin>>m;
if(m==1)//分数与整数的运算
{
cout<
cin>>a;
cout<
cin>>c;
cout<
cin>>z;
if(c=='+')
result=a+z;
if(c=='-')
result=a-z;
if(c=='*')
result=a*z;
if(c=='/')
result=a/z;
real=();
()<
cout<
}
if(m==2)//整数与分数的运算
{
cout<
cout<
cin>>z;
cout<
cin>>c;
cout<
cin>>b;
if(c=='+')
result=b+z;
if(c=='-')
result=z-b;
if(c=='*')
result=b*z;
if(c=='/')
result=z/b;
real=();
cout<<"运算式规范为:"<
()<<'='<
cout<
}
if(m==3)//分数与分数的运算
{
cout<
cout<
cin>>a;
cout<
cin>>c;
cout<
cin>>b;
if(c=='+')
result=a+b;
if(c=='-')
result=a-b;
if(c=='*')
result=a*b;
if(c=='/')
result=a/b;
real=();
cout<
}
}
return0;
}
书写格式
a.要求用A4纸打印成册
b.正文格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋
体;行距为22。
c.正文的内容:正文总字数要求在3000字左右(不含程序原代码)。
d.封面格式如下页。
考核方式
指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神
和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学
的课程设计成绩。具体考核标准包含以下几个部分:
a.平时出勤(占10%)
b.系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)
c.程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)
d.设计报告(占30%)
注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
e.独立完成情况(占10%)。
课程验收要求
a.判定算法设计的合理性,运行相关程序,获得正确的数值结果。
b.回答有关问题。
c.提交课程设计报告。
d.提交软盘(源程序、设计报告文档)。
e.依内容的创新程度,完善程序情况及对程序讲解情况打分。
二、教材及参考书
朱战立等着,C++面向对象程序设计,人民邮电出版社;
郑莉着,C++语言程序设计(含实验指导书)。清华大学出版社(结构化程序设计部
分)
钱能主编,C++程序设计教程,清华大学出版社,
戴锋编着,VisualC++程序设计基础,清华大学出版社,
吕日着,C++程序设计教程,清华大学出版社,
C++大学教程,美国Harvey等
三、进度安排
1、班级:信息与计算科学:1601、1602
2、主讲教师:
3、辅导教师:
4、时间安排:
第18周
星期一8时:30分——11时:30分;14时:00分——17时:00分
星期二8时:30分——11时:30分;14时:00分——17时:00分
星期三8时:30分——11时:30分;14时:00分——17时:00分
星期四8时:30分——11时:30分;14时:00分——17时:00分
星期五8时:30分——11时:30分;14时:00分——17时:00分
附:选题方案:
所选题目根据学生学号确定,学号模7加1,即(学号%9+1)。如你的学号为17,
则所选题目号为:17%7+1==4(题目4)。
同班的同学自由组合,可以最多三个选同一题的同学共同完成一项作业。
学有余力的同学可以自由组合做题目8,可以自由设计吉祥物的图案。
理学院课程设计评分表
课程名称:算法与程序设计
项目评价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日期:
本文发布于:2023-01-01 12:27:15,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/71953.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |