中南大学C++课程设计实践报告

时间:2024.3.31

课程设计实践报告

设计题目:简易计算器

    :   冯康杰   

专业班级:   材料114

    :     18     

指导老师:   曹岳辉  

上课地点:  414机房  

上课时间: 6.18~6.27  


目录

设计要求: 1

设计思想... 1

程序代码... 1

调试过程... 10

运行结果... 11

心得体会... 16


设计要求:

用visual C++程序设计一个简易的计算器,具有多种功能。例如加减乘除、阶乘、温度转换等。

设计思想

为了方便起见,我主要是以类和对象来进行设计,将各个功能化成各个小类,然后综合的用main主函数来运行以保证程序的稳定可靠性

程序代码

#include<iostream>

#include<cmath>

#include<iomanip>

#include<stdlib.h>

using namespace std;

class show

{

public:

      void showtime()

      {

           cout<<"*****************************欢迎使用**********************************"<<endl;

           cout<<"1.加减乘除运算"<<setw(30)<<"2.复数乘法运算"<<endl;

           cout<<"3.素数判断"<<setw(44)<<"4.最小公倍数,最大公约数"<<endl;

           cout<<"5.一元二次方程求解"<<setw(20)<<"6.求阶乘"<<endl;

           cout<<"7.排列组合求解"<<setw(26)<<"8.温度转换"<<endl;

           cout<<endl<<"************版权所有*盗版不究**本代码最终解释权归fengkj所有************"<<endl;

      }

};

class jiajian

{

      int i;

      double a,b,s;

public:

      void print()

      {cout<<"1.加法运算"<<"\t2.减法运算"<<"\t3.乘法运算"<<"\t4.除法运算"<<endl;

      cout<<"请输入代号:"<<endl;

here:cin>>i;

      cout<<"请输入两个数a,b"<<endl;

      cout<<"a=";cin>>a;cout<<"b=";cin>>b;

      switch(i)

      {

      case 1:s=a+b;cout<<a<<'+'<<b<<"="<<s;

           break;

      case 2:s=a-b;cout<<a<<'-'<<b<<"="<<s;

           break;

    case 3:s;s=a*b;cout<<a<<'*'<<b<<"="<<s;

           break;

      case 4:if(b==0)cout<<"数据错误!";else{s=a/b;cout<<a<<'/'<<b<<"="<<s;}

           break;

      default:cout<<"代号数据错误,请重输";goto here;

      }

      }

};

class fushu

{

      float a,b,c,d,j,k;

public:

      void getin()

      {

           cout<<"请输入两个复数:"<<endl;

        cout<<"x=_+_i";cin>>a>>b;cout<<"y=_+_i";cin>>c>>d;

      }

      void multi()

      {j=a*c-b*d;k=b*c+a*d;}

      void print()

      {if(k>0)cout<<"x+y="<<j<<'+'<<k<<'i'<<endl;else if(k<0)cout<<"x+y="<<j<<'-'<<-k<<'i'<<endl;else cout<<"x+y="<<j<<endl;}

};

class sushu

{

public:    

    long t;

      void get(){cout<<"请输入一个待验证的数x:";cin>>t;}

      int prime(long x)

      {

           long i;

           for(i=2;i<x/2;i++)

                 if(x%i==0)return 2;

           return 3;

      }

      void print(){long x;x=t;if(prime(x)==2)cout<<t<<"不是素数";else cout<<t<<"是素数";}

};

class gongbeishu

{

      long x,y,max,min;

public:

      void get()

      {cout<<"请输入两个正整数x,y:"<<endl;

      cout<<"x=";cin>>x;cout<<"y=";cin>>y;

      }

      void jisuan()

      {long m,n,r,t;

      m=x;n=y;

      t=m*n;

      if(m<n){r=m;m=m;n=r;}

      while((r=m%n)!=0)

      {

           m=n;

           n=r;

      }

      max=n;min=t/n;

      }

      void print(){cout<<x<<""<<y<<"的最大公约数是:"<<max<<','<<"最小公倍数是:"<<min<<endl;}

};

class qiujie

{

      float a,b,c,x1,x2,t,s;

public:

      void get()

      {cout<<"请输入方程的系数a,b,c:"<<endl;

      cout<<"a=";cin>>a;cout<<"b=";cin>>b;cout<<"常数c=";cin>>c;}

      void jisuan()

      {float i;i=b*b-4*a*c;t=0;s=0;

      if(i>=0){x1=(-b+sqrt(i))/(2*a);x2=(-b-sqrt(i))/(2*a);}else{x1=-b/(2*a);x2=-b/(2*a);s=sqrt(-i)/(2*a);t=-sqrt(-i)/(2*a);}

      }

      void print()

      {cout<<"方程的解为:"<<endl;

      cout<<"x1="<<x1<<'+'<<t<<'i'<<"\tx2="<<x2<<'+'<<s<<'i';

      }

};

class jiecheng

{

      int n,s;

public:

      void get()

      {cout<<"请输入待阶乘的数:n=";cin>>n;}

      void jisuan()

      {int i;

      s=1;

      for(i=1;i<n;i++)s*=i;

      }

      void print()

      {cout<<"阶乘结果为:"<<"n!="<<s;}

};

class pailie

{

      int n,r;

public:

      void get()

      {

ak: cout<<"请输入排列组合数:C(n,r)P(n,r):"<<endl;

      cout<<"n=";cin>>n;cout<<"r=";cin>>r;

      if(n<r){cout<<"数据错误,请重新输入!";goto ak;}

      }

      int jiecheng(int x)

      {int i,s=1;for(i=1;i<=x;i++)s*=i;return s;}

      void print()

      {cout<<"排列数P="<<jiecheng(n)/jiecheng(n-r)<<','<<"组合数C="<<jiecheng(n)/(jiecheng(r)*jiecheng(n-r));}

};

class wendu

{int i;

float n,s;

public:

      void get()

      {cout<<"请选择温度转换方向:0.摄氏转华氏  1.华氏转摄氏:";

      cin>>i;

      cout<<"请输入温度:";cin>>n;

      }

      void zhuanhuan()

      {s=0;if(!i)s=32+n*1.8;else s=(n-32)/1.8;}

      void print()

      {if(!i)cout<<"摄氏温度为:"<<n<<"'C"<<','<<"华氏温度为:"<<s<<"'F";else cout<<"华氏温度为:"<<n<<"'F"<<','<<"摄氏温度为:"<<s<<"'C";}

};

void main()

{int i,pp=1,ss=1;

while(pp)

{system("cls");

show v;

v.showtime();

qq: cout<<"请输入您要进行运算的编码:";

cin>>i;

switch(i)

{

case 1:g1: jiajian aa;aa.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g1;else break;

case 2:g2: fushu bb;bb.getin();bb.multi();bb.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g2;else break;

case 3:g3: sushu cc;cc.get();cc.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g3;else break;

case 4:g4: gongbeishu dd;dd.get();dd.jisuan();dd.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g4;else break;

case 5:g5: qiujie ee;ee.get();ee.jisuan();ee.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g5;else break;

case 6:g6: jiecheng ff;ff.get();ff.jisuan();ff.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g6;else break;

case 7:g7: pailie gg;gg.get();gg.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g7;else break;

case 8:g8: wendu hh;hh.get();hh.zhuanhuan();hh.print();cout<<"重新计算请按1,否则请按0";cin>>ss;if(ss)goto g8;else break;

default:cout<<"数据错误!请输入1~8之间的一个整数";goto qq;

}

cout<<"返回主菜单请按1,退出程序请按0";

cin>>pp;

}

}

调试过程

由于学的知识不是很多,也不是很熟练,在最开始的时候老是范一些小错误,而且很多语法错误,比如忘了写分号啊,把分号写成逗号啦。而且忘了写全{}就会出现很多个错误,在一个庞大的程序里面找这些错误再一一改正,很可能还是不能运行,但是多加一个}就很可能全部错误都搞定!调试的时候很多地方都是牵一发而动全身,特别是修改的时候,修改一个变量就得把其他部分的都改掉,不然就会一直出现错误。还经常忘了定义变量就用,不过看英文提示面前能看懂,也能找到相应的错误。

在把语法小错误解决之后就剩下运行了,但是运行的情况不容乐观,很多地方呢不是我想要的结果。例如在加减乘除那里,由于当时变量粗心的定义为long,得出的数总是为整数,后来改正为float后问题就解决了,还有就是开始界面里的序列号对不齐,后来尝试着用setw()来解决,尝试多次后得以解决。在老师的建议之下通过包含stdlib.h头文件和调用system("cls")函数成功的做到进行一次计算之后清理屏幕的效果。

运行结果

通过输入编码来选择计算类型。例如输入1.

方法同上继续进行输入代码的操作。

重新计算输入1,否则输入0.

这里我输入0然后。

输入1

回到主菜单,并清理屏幕。

其他函数基本同上,在演示一个,例如4.最小公倍数最大公约数。

心得体会

    本次程序设计所用时间较长,工作量很饱满,而且所用的知识很多,但是我们平常在课堂上所学的知识很有限,这就需要我大量的自学书本和课外的其他书籍上的知识。为了让程序容易使人看懂,我用到的知识点不是非常多,大都是一些基本知识,我能熟练地运用这些知识编程也算一个很大的成功了。毕竟很多知识没有学,能用基本知识就尽量用的基本知识。C++设计实践是对之前学过的知识的加深和巩固,之前学得较浅,实践的机会不多,这次实践让我对C++程序有了更加深入的了解,心理也由原来的不喜欢到喜欢,感觉很有意思也很有用,可也设计一些有用的或者是自己喜欢的程序。最令我收益的是写程序的过程和调试修改的过程,因为之前我们就学了几章,没有把知识学习全面,因此编写起来是有难度的,在预先想好程序结构后,就开是卡看书,一个函数一个函数来编写,不懂的地方就上网搜或是请教一下同学和老师,当终于把程序写出来的时候,内心里又有一种说不出来的激动,我感觉这很符合大学的教育观念,是对个人自主学习能力的一个锻炼。在接下来就是调试,虽然出了很多的错误,虽然自己也被搞的焦头烂额,但我还是很兴奋,我感觉自己就像是个侦探,一点点找线索,找到问题,再解决,每次成功都带给自己一次激动。现在程序终于能较好的运行出来了,当然,还存在一些瑕疵,但通过这近两周的实践学习,我收获的不仅仅是这一个程序,我的自学能力,以及寻找问题解决问题的能力也得到了很好的锻炼。

更多相关推荐:
中南大学 课程设计实践报告

中南大学本科生课程设计实践任务书设计报告大学计算机基础题目理想世界学生姓名李杰指导教师邵自然学院湘雅医学院临床医学与医学技术专业班级1105班学生学号2211110512计算机基础教学实验中心年月日1课程设计实...

中南大学网页设计课程设计报告

中南大学本科生课程设计实践任务书设计报告大学计算机基础题目可爱的安庆美丽的太湖学生姓名戴恒洋指导教师李小兰学院公共管理学院社会学专业班级1201班学生学号4301120xx6计算机基础教学实验中心年月日网页课程...

中南大学C语言课程设计报告

C语言程序设计实践报告中南大学C语言程序设计实践报告题目校际运动会管理系统学生姓名XXXX学号XXXXXXXXXX指导教师XXXXXX学院信息科学与工程学院专业班级XXXXXXXXXXXX完成时间20xx年06...

中南大学计算机课程设计报告

中南大学本科生课程设计实践设计报告大学计算机基础题目学生姓名指导老师学院专业班级计算机基础教学实验中心20xx年12月15日1计算机网页制作实验报告一任务内容通过对大学计算机基础和大学计算机基础学习与实验指导这...

中南大学GIS课程设计实验报告

GIS课程设计实验报告小组组员钟蕾邢磊张成乃古色拉司宝元班级测绘试验班1101指导老师李光强赵玲1一课程设计数据中南大学校本部CASS数字地形图数据文件csudwg中南大学校本部遥感地图二实验所使用的平台Arc...

中南大学单片机课程设计报告

中南大学单片机课程设计报告单片机课程设计报告题目智能电风扇控制器专业班级电子信息1101班学号姓名指导老师课设时间中南大学信息科学与工程学院中南大学单片机课程设计报告摘要单片机已经在家电领域中得到了广泛的应用本...

中南大学计算机基础本科生课程设计(实践)设计报告

大学计算机基础本科生课程设计(实践)设计报告1.任务内容《灌篮高手》是一部日本漫画,原名《SLAMDUNK》在英文中为大力扣篮的意思。灌篮高手也有多个译名,如“篮球飞人”(这是九十年代初台版漫画的译名,大陆这边…

中南大学单片机课设报告

中南大学信息科学与工程学院单片机课程设计实验报告中南大学课程设计报告题目带音乐的电子密码锁班级电子信息姓名学号指导老师陈科文张金焕中南大学信息科学与工程学院单片机课程设计实验报告日期中南大学信息科学与工程学院单...

20xx中南大学测绘程序课程设计报告(含代码界面设计数据格式)

中南大学测绘程序课程设计报告姓名:XXXXX学号:XXXXXX指导老师:XXX专业班级:XXXX1系统设计1、实现功能1.1优化设计:根据控制网的观测精度与网形,全面评定网的精度1.2数据输入:使用外部数据倒入…

中南大学通信原理matlab课程设计报告

通信1005班通信原理课程设计报告实验目的通信原理实验是针对通信工程专业学生的实践教学环节通过这一环节可使学生巩固相关课程知识增强动手能力提高学生对通信系统的仿真技能在强调基本原理的同时更突出设计过程的锻炼强化...

中南大学 计算机原理与汇编课程设计报告

计算机原理与汇编课程设计报告姓名学号班级指导老师贺建飚汇编语言课程设计一设计目的课程设计是计算机原理与汇编语言教学过程中的重要环节本课程设计主要目的是使计算机专业学生深入学习计算机原理与汇编语言知识进一步提高学...

中南大学自动化微机课程设计报告

第一章绪论11概述近年来随着科技的飞速发展单片机的应用正在不断地走向深入同时带动传统控制检测日新月益更新在实时检测和自动控制的单片机应用系统中单片机往往是作为一个核心部件来使用仅单片机方面知识是不够的还应根据具...

中南大学课程设计报告(19篇)