字数计算器

更新时间:2023-01-01 12:27:15 阅读: 评论:0


2023年1月1日发(作者:怪物碰碰胡)

课程设计报告

课程名称算法与程序设计

课题名称分数计算器设计

专业信息与计算科学

班级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时,输出分子

cout<

if(a>b&&b!=1)//判断分数为假分数

{

c=a/b;

a=a%b;

cout<

if(a!=0)

cout<<"又"<

}

if(a<0&&-a>b&&b!=1)//当分数为负时,判断为假分数

{

c=-a/b;

a=-a%b;

c=-c;

cout<<'='<

if(a!=0)

cout<<"又"<

}

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<<"运算式规范为:"<

()<

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<<"运算式规范为:"<

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图