地大高级语言课程设计报告.docx
《地大高级语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《地大高级语言课程设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
地大高级语言课程设计报告
计算机高级语言课程设计报告
姓名:
****
学号:
*************
学院:
*******************
专业**********8****
班级:
**********
实习题目一
【需求规格说明】
1、有1、2、3、4、5、6六个数,能组成多少个互不相同且无重复数字的三位数?
都是多少?
问题描述及分析:
此题为数学中的排序问题可以利用循环来解决。
【算法设计】
(1)设计思想:
利用for循环,将三位数的百位和十位确定,剩下的利用循环和if语句判断个位的数是否与前两位相同,而百位和十位同样需要利用for循环解决,最后输出显示可以将百位数乘以一百加上十位数乘以十加上个位数即可。
然后再利用MFC工程,将结果输出来
【调试报告】
开始不知道怎么用MFC在文本框中显示,就没有用MFC做,后来了解TextOut等函数就改用MFC。
【附录】
重要代码:
//1_排序View.cpp:
implementationoftheCMy1_Viewclass
//
#include"stdafx.h"
#include"1_排序.h"
#include"1_排序Doc.h"
#include"1_排序View.h"
////////////////////////////////////////////////
/////////////////////////////////////////////////
voidCMy1_View:
:
OnDraw(CDC*pDC)
{
CMy1_Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
inti,j,k,m;
intnum=0;
for(i=1;i<=6;i++){//三位数无重复排序
for(j=1;j<=6;j++){
for(k=1;k<=6;k++){
if(i!
=j&&i!
=k&&j!
=k){
m=100*i+10*j+k;
CStringstr1;
str1.Format(("%d"),m);
pDC->TextOut((num%20)*32+50,(num/20)*32+50,str1);
num++;
CStringstr2;
str2.Format(("%d"),num);//将结果在文本框里整齐的输出
pDC->TextOut(100,30,str2);
pDC->TextOut(50,30,"一共有");
pDC->TextOut(130,30,"个数,分别是:
");
}
/////////////////////////////////////////////////////////////////////////////
运行结果:
实习题目二
5、文本文件中有一组整数,以空格分隔,要求排序后输出到另一个文件中。
此题利用到输入输出流的问题以及排序方法。
用ofstreamifstream建立对象,然后用这个对象调用open,close来打开和关闭文件。
当打开文件后再用冒泡法排序文件里的整数,并输出到另一个文件中。
再用MFC中的ShellExecute函数将文本文件打开。
由于对MFC不是很熟练的应用,致使开始无法用MFC中的函数打开文本文件,只能手动打开。
后来用ShellExecute改进了。
//5_文本输出Dlg.cpp:
implementationfile
#include"5_文本输出.h"
#include"5_文本输出Dlg.h"
#include"fstream.h"
voidCMy5_Dlg:
OnButton1()
ifstreaminfile;
infile.open("1.txt");
ofstreamoutfile;
outfile.open("2.txt");
inta=1;
chars;
infile.get(s);
while(!
infile.eof())
if(s==''||s=='\n')
a++;
infile.close();
int*p=newint[a];
for(inti=0;i{infile>>p[i];}for(intm=1;m{intj=m;intk=p[m];while(j>0&&k{p[j]=p[j-1];j--;}p[j]=k;}for(intn=0;n{outfile<}MessageBox("已经排序并输出了!");}voidCMy5_Dlg::OnButton2(){ShellExecute(NULL,"open","1.txt",NULL,NULL,SW_SHOWNORMAL);}voidCMy5_Dlg::OnButton3(){ShellExecute(NULL,"open","2.txt",NULL,NULL,SW_SHOWNORMAL);}运行结果: 实习题目三【需求规格说明】6、计算正方体、球体和圆柱体的表面积和体积(要求使用虚函数)。问题描述及分析:此题利用虚函数,然后再用MFC解决。【算法设计】(1)设计思想:此题主要就是考察MFC的熟练应用,至于代码则是很简单的函数。利用虚函数及类的继承写出代码,然后再用MFC做出对话框。(2)设计表示:Shape<>+GetArea():double<>+GetVolume():double Cube+GetArea():double+GetVolume():doubleSphere+GetArea():double+GetVolume():double Cube+GetArea():double+GetVolume():double 【调试报告】开始用单文档形式觉得麻烦,后来直接用对话框形式,变得更简单了。【附录】重要代码://6_计算体积和表面积Dlg.cpp:implementationfile//#include"stdafx.h"#include"6_计算体积和表面积.h"#include"6_计算体积和表面积Dlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifconstdoublePI=3.14;classShape{public:virtualdoubleGetArea()=0;virtualdoubleGetVolume()=0;};classCube:publicShape//正方体的类{public:Cube(doublea):l(a){};doubleGetArea(){return6*l*l;}doubleGetVolume(){returnl*l*l;}private:doublel;};classSphere:publicShape//球的类{public:Sphere(doubleradius):r(radius){};doubleGetArea(){return4*PI*r*r;}doubleGetVolume(){return4*PI*r*r*r/3;}private:doubler;};classCylinder:publicShape//圆柱体的类{public:Cylinder(doublehigh,doubleradius):h(high),r(radius){};doubleGetArea(){return2*PI*r*r+2*PI*r*h;}doubleGetVolume(){returnPI*r*r*h;}private:doubleh;doubler;};doublefun1(Shape*str)//计算表面积{returnstr->GetArea();}doublefun2(Shape*str)//计算体积{returnstr->GetVolume();}///////////////////////////////////////////////////////////////////////////////voidCMy6_Dlg::OnButton1(){UpdateData();Cubestr1(m_2);m_6=fun1(&str1);m_9=fun2(&str1);Spherestr2(m_1);m_5=fun1(&str2);m_8=fun2(&str2);Cylinderstr3(m_3,m_4);m_7=fun1(&str3);m_10=fun2(&str3);UpdateData(false);}运行结果:实习题目四【需求规格说明】10、设计实现一个猜数字的小游戏。游戏开始时在程序内部随机生成一个4位数字(每一位上的值不同,例如3795),用户通过若干轮的尝试试图猜出该数字,猜测次数不能超过8次,第八次如果仍未猜对则提示用户下次继续努力,程序退出。每一轮猜测过程包括:(1)用户输入一个猜测的四位数字,每一位值不同,例如输入3456;(2)程序比较用户输入的数字和程序内部随机生成的数字,如果值对但位置不对则一个计数变量B累加,如果值对位置也对则计数变量A累加。(3)输出A和B的累加信息以提示用户后续的猜测,例如输入3456,则输出1A1B;输入1268,则输出0A0B;输入5973,则提示0A4B;输入3795,则提示猜测成功。要求用类来实现该小游戏。问题描述及分析:此题需要先产生随机数,然后用户来猜,也就是说要将一个四位数的每位数字都提出来,与产生的随机数进行比较。然后用MFC工程实现。【算法设计】(1)设计思想:首先要产生随机数就需要用到rand(),而rand()产生的是伪随机数,且会产生值相同或者并不是四位数的情况,所以需要定义函数来判断并加以修正。其次需要将四位数拆开,与产生的随机数进行比较,并提示玩家,最后用户输入8次四位数,则随机数需要在此次游戏对话框点击按钮时产生。当一次游戏结束时需要在主面板视图上产生对应信息提醒用户游戏输赢。(2)设计表示:classCGame{public:CGame(intnum){n=num;}voidSearch(int*list1,int*list2);inte,f;private:intn;};voidCGame::Search(int*list1,int*list2){intk=0,t=0;for(inti=0;i<4;i++){for(intj=0;j<4;j++){if(list2[j]==list1[i]){k++;if(j==i)t++;}}}if(t==4&&k==4)AfxMessageBox("猜测成功!!");e=t;f=k;}CCame-n:int+CGame(num:int):CGame+Search(list1:int*,list2:int*):void+e:int+f:int【调试报告】开始由于没有将产生的随机数传出来,致使没办法显示,后来定义一个全局变量就解决了。【附录】//Copyright(c)2011-2014,中国地质大学//Allrightsreserved.////文件名称:猜数游戏.h//摘要:猜数游戏//当前版本:1.10//完成日期:2012年6月10日重要程序代码:intg;voidCMyDlg::OnButton1()//随机生成一个4位数字且每一位上的值不同{srand(time(NULL));//以时间为种子UpdateData();inta,b,c,d,n;do{n=rand()%9000+1000;a=n/1000;b=(n-a*1000)/100;c=(n-a*1000-b*100)/10;d=n-a*1000-b*100-c*10;}while((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d));g=n;UpdateData(false);}inti=0;voidCMyDlg::OnButton2()//判断你输入的四位数与产生的随机数,并提示{UpdateData();CGamenum(g);inta,b,c,d,m,A,B,C,D;m=m_m;a=g/1000;b=(g-a*1000)/100;c=(g-a*1000-b*100)/10;d=g-a*1000-b*100-c*10;//标准数intlist1[4]={a,b,c,d};//标准数A=m/1000;B=(m-A*1000)/100;C=(m-A*1000-B*100)/10;D=m-A*1000-B*100-C*10;//猜的数intlist2[4]={A,B,C,D};//猜的数num.Search(list1,list2);if(i>7)MessageBox("机会用完了!!");i++;m_i=8-i;//显示提示m_t=num.e;m_k=num.f;UpdateData(false);}voidCMyDlg::OnButton3()//在对话框上显示产生的随机数{UpdateData();m_n=g;UpdateData(false);}运行结果:实习题目五【需求规格说明】11、使用类成员函数方式重载运算符:自定义如下形式的Point类,其对象表示平面上的一个点(x,y),并通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。各运算符的运算结果如下所示:(1.2,-3.5)只与它本身即(1.2,-3.5)相等;(1.2,-3.5)+(-1,2.8)=(0.2,-0.7);//和(1.2,-3.5)-(-1,2.8)=(2.2,-6.3);//差(-1,2.8)^(6,6)=7.69675;//距离-(1.2,-3.5)=(-1.2,3.5)。//取反并编制主函数,说明类对象,而后通过类对象进行所定义的各种相关运算(以验证其正确性)。问题描述及分析:类成员函数方式重载运算符的运用。通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,分别用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。(1)设计思想:运算符重载函数在Point类里定义,首先在Point类中搭建好重载函数,再在对话框所映射的CMyDlg类中声明Point的对象,并通过对话框中的数据参数传输到每个按钮映射的函数中。(2)设计表示:Point-x:double-y:double+getX():double+getY():double+Point():Point+Point(n1:double,n2:double):Point+operator+(p2:Point):Point+operator-(p2:Point):Point+operator-():Point+operator^(p2:Point):double+operator==(p2:Point):PointclassPoint{public:doublegetX();//获取坐标xdoublegetY();//获取坐标yPoint(){};Point(doublen1,doublen2);//构造函数重载Pointoperator+(Pointp2);Pointoperator-(Pointp2);Pointoperator-();doubleoperator^(Pointp2);Pointoperator==(Pointp2);virtual~Point(){};private://私有成员函数(x,y)坐标doublex;doubley;};Point::Point(doublen1,doublen2)//Point类的实现:{x=n1;y=n2;}doublePoint::getX(){returnx;}doublePoint::getY(){returny;}PointPoint::operator+(Pointp2){returnPoint(x+p2.x,y+p2.y);}PointPoint::operator-(Pointp2){returnPoint(x-p2.x,y-p2.y);}PointPoint::operator-(){returnPoint(-x,-y);}doublePoint::operator^(Pointp2){returnsqrt(pow(x-p2.x,2)+pow(y-p2.y,2));}PointPoint::operator==(Pointp2){if(x==p2.x&&y==p2.y)//若相等则结果显示相等的坐标returnPoint(x,y);elsereturnPoint(0,0);//不等则显示坐标归0}【调试报告】开始每一个重载运算符都有一个对话框很乱,后来用一个对话框就解决了。【附录】//Copyright(c)2011-2014,中国地质大学//Allrightsreserved.////文件名称:运算符重载.h//摘要:点的运算符重载.//当前版本:1.10//作者://完成日期:2012年6月10日重要程序代码:voidCMyDlg::OnButton1()//实现判断相等按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=(A==B);m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton2()//实现加法按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=A+B;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton3()//实现减法按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=A-B;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton4()//实现取反按钮{UpdateData();PointA(m_x1,m_y1),C;C=-A;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton5()//实现距离按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;m_dis=A^B;UpdateData(false);}运行结果:实习题目六【需求规格说明】14、设计一个程序用于管理自己的个人资金软件。其中有3个类,CBC、CICBC和CCash,分别为中国银行类、工商银行类和现金类。每个类都包含一个私有数据balance,用于存放自己在该类帐号中的余额数,每个类还有转帐(tranfer)、收入(income)、支出(consume)、统计(Statistic)等操作功能。类结构如图4-2所示。(1)界面的形式如图4-3~4-5所示。界面上需要实现的功能包括:1、记帐功能:记录某个帐户中的资金变
infile>>p[i];
for(intm=1;m{intj=m;intk=p[m];while(j>0&&k{p[j]=p[j-1];j--;}p[j]=k;}for(intn=0;n{outfile<}MessageBox("已经排序并输出了!");}voidCMy5_Dlg::OnButton2(){ShellExecute(NULL,"open","1.txt",NULL,NULL,SW_SHOWNORMAL);}voidCMy5_Dlg::OnButton3(){ShellExecute(NULL,"open","2.txt",NULL,NULL,SW_SHOWNORMAL);}运行结果: 实习题目三【需求规格说明】6、计算正方体、球体和圆柱体的表面积和体积(要求使用虚函数)。问题描述及分析:此题利用虚函数,然后再用MFC解决。【算法设计】(1)设计思想:此题主要就是考察MFC的熟练应用,至于代码则是很简单的函数。利用虚函数及类的继承写出代码,然后再用MFC做出对话框。(2)设计表示:Shape<>+GetArea():double<>+GetVolume():double Cube+GetArea():double+GetVolume():doubleSphere+GetArea():double+GetVolume():double Cube+GetArea():double+GetVolume():double 【调试报告】开始用单文档形式觉得麻烦,后来直接用对话框形式,变得更简单了。【附录】重要代码://6_计算体积和表面积Dlg.cpp:implementationfile//#include"stdafx.h"#include"6_计算体积和表面积.h"#include"6_计算体积和表面积Dlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifconstdoublePI=3.14;classShape{public:virtualdoubleGetArea()=0;virtualdoubleGetVolume()=0;};classCube:publicShape//正方体的类{public:Cube(doublea):l(a){};doubleGetArea(){return6*l*l;}doubleGetVolume(){returnl*l*l;}private:doublel;};classSphere:publicShape//球的类{public:Sphere(doubleradius):r(radius){};doubleGetArea(){return4*PI*r*r;}doubleGetVolume(){return4*PI*r*r*r/3;}private:doubler;};classCylinder:publicShape//圆柱体的类{public:Cylinder(doublehigh,doubleradius):h(high),r(radius){};doubleGetArea(){return2*PI*r*r+2*PI*r*h;}doubleGetVolume(){returnPI*r*r*h;}private:doubleh;doubler;};doublefun1(Shape*str)//计算表面积{returnstr->GetArea();}doublefun2(Shape*str)//计算体积{returnstr->GetVolume();}///////////////////////////////////////////////////////////////////////////////voidCMy6_Dlg::OnButton1(){UpdateData();Cubestr1(m_2);m_6=fun1(&str1);m_9=fun2(&str1);Spherestr2(m_1);m_5=fun1(&str2);m_8=fun2(&str2);Cylinderstr3(m_3,m_4);m_7=fun1(&str3);m_10=fun2(&str3);UpdateData(false);}运行结果:实习题目四【需求规格说明】10、设计实现一个猜数字的小游戏。游戏开始时在程序内部随机生成一个4位数字(每一位上的值不同,例如3795),用户通过若干轮的尝试试图猜出该数字,猜测次数不能超过8次,第八次如果仍未猜对则提示用户下次继续努力,程序退出。每一轮猜测过程包括:(1)用户输入一个猜测的四位数字,每一位值不同,例如输入3456;(2)程序比较用户输入的数字和程序内部随机生成的数字,如果值对但位置不对则一个计数变量B累加,如果值对位置也对则计数变量A累加。(3)输出A和B的累加信息以提示用户后续的猜测,例如输入3456,则输出1A1B;输入1268,则输出0A0B;输入5973,则提示0A4B;输入3795,则提示猜测成功。要求用类来实现该小游戏。问题描述及分析:此题需要先产生随机数,然后用户来猜,也就是说要将一个四位数的每位数字都提出来,与产生的随机数进行比较。然后用MFC工程实现。【算法设计】(1)设计思想:首先要产生随机数就需要用到rand(),而rand()产生的是伪随机数,且会产生值相同或者并不是四位数的情况,所以需要定义函数来判断并加以修正。其次需要将四位数拆开,与产生的随机数进行比较,并提示玩家,最后用户输入8次四位数,则随机数需要在此次游戏对话框点击按钮时产生。当一次游戏结束时需要在主面板视图上产生对应信息提醒用户游戏输赢。(2)设计表示:classCGame{public:CGame(intnum){n=num;}voidSearch(int*list1,int*list2);inte,f;private:intn;};voidCGame::Search(int*list1,int*list2){intk=0,t=0;for(inti=0;i<4;i++){for(intj=0;j<4;j++){if(list2[j]==list1[i]){k++;if(j==i)t++;}}}if(t==4&&k==4)AfxMessageBox("猜测成功!!");e=t;f=k;}CCame-n:int+CGame(num:int):CGame+Search(list1:int*,list2:int*):void+e:int+f:int【调试报告】开始由于没有将产生的随机数传出来,致使没办法显示,后来定义一个全局变量就解决了。【附录】//Copyright(c)2011-2014,中国地质大学//Allrightsreserved.////文件名称:猜数游戏.h//摘要:猜数游戏//当前版本:1.10//完成日期:2012年6月10日重要程序代码:intg;voidCMyDlg::OnButton1()//随机生成一个4位数字且每一位上的值不同{srand(time(NULL));//以时间为种子UpdateData();inta,b,c,d,n;do{n=rand()%9000+1000;a=n/1000;b=(n-a*1000)/100;c=(n-a*1000-b*100)/10;d=n-a*1000-b*100-c*10;}while((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d));g=n;UpdateData(false);}inti=0;voidCMyDlg::OnButton2()//判断你输入的四位数与产生的随机数,并提示{UpdateData();CGamenum(g);inta,b,c,d,m,A,B,C,D;m=m_m;a=g/1000;b=(g-a*1000)/100;c=(g-a*1000-b*100)/10;d=g-a*1000-b*100-c*10;//标准数intlist1[4]={a,b,c,d};//标准数A=m/1000;B=(m-A*1000)/100;C=(m-A*1000-B*100)/10;D=m-A*1000-B*100-C*10;//猜的数intlist2[4]={A,B,C,D};//猜的数num.Search(list1,list2);if(i>7)MessageBox("机会用完了!!");i++;m_i=8-i;//显示提示m_t=num.e;m_k=num.f;UpdateData(false);}voidCMyDlg::OnButton3()//在对话框上显示产生的随机数{UpdateData();m_n=g;UpdateData(false);}运行结果:实习题目五【需求规格说明】11、使用类成员函数方式重载运算符:自定义如下形式的Point类,其对象表示平面上的一个点(x,y),并通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。各运算符的运算结果如下所示:(1.2,-3.5)只与它本身即(1.2,-3.5)相等;(1.2,-3.5)+(-1,2.8)=(0.2,-0.7);//和(1.2,-3.5)-(-1,2.8)=(2.2,-6.3);//差(-1,2.8)^(6,6)=7.69675;//距离-(1.2,-3.5)=(-1.2,3.5)。//取反并编制主函数,说明类对象,而后通过类对象进行所定义的各种相关运算(以验证其正确性)。问题描述及分析:类成员函数方式重载运算符的运用。通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,分别用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。(1)设计思想:运算符重载函数在Point类里定义,首先在Point类中搭建好重载函数,再在对话框所映射的CMyDlg类中声明Point的对象,并通过对话框中的数据参数传输到每个按钮映射的函数中。(2)设计表示:Point-x:double-y:double+getX():double+getY():double+Point():Point+Point(n1:double,n2:double):Point+operator+(p2:Point):Point+operator-(p2:Point):Point+operator-():Point+operator^(p2:Point):double+operator==(p2:Point):PointclassPoint{public:doublegetX();//获取坐标xdoublegetY();//获取坐标yPoint(){};Point(doublen1,doublen2);//构造函数重载Pointoperator+(Pointp2);Pointoperator-(Pointp2);Pointoperator-();doubleoperator^(Pointp2);Pointoperator==(Pointp2);virtual~Point(){};private://私有成员函数(x,y)坐标doublex;doubley;};Point::Point(doublen1,doublen2)//Point类的实现:{x=n1;y=n2;}doublePoint::getX(){returnx;}doublePoint::getY(){returny;}PointPoint::operator+(Pointp2){returnPoint(x+p2.x,y+p2.y);}PointPoint::operator-(Pointp2){returnPoint(x-p2.x,y-p2.y);}PointPoint::operator-(){returnPoint(-x,-y);}doublePoint::operator^(Pointp2){returnsqrt(pow(x-p2.x,2)+pow(y-p2.y,2));}PointPoint::operator==(Pointp2){if(x==p2.x&&y==p2.y)//若相等则结果显示相等的坐标returnPoint(x,y);elsereturnPoint(0,0);//不等则显示坐标归0}【调试报告】开始每一个重载运算符都有一个对话框很乱,后来用一个对话框就解决了。【附录】//Copyright(c)2011-2014,中国地质大学//Allrightsreserved.////文件名称:运算符重载.h//摘要:点的运算符重载.//当前版本:1.10//作者://完成日期:2012年6月10日重要程序代码:voidCMyDlg::OnButton1()//实现判断相等按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=(A==B);m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton2()//实现加法按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=A+B;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton3()//实现减法按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=A-B;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton4()//实现取反按钮{UpdateData();PointA(m_x1,m_y1),C;C=-A;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton5()//实现距离按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;m_dis=A^B;UpdateData(false);}运行结果:实习题目六【需求规格说明】14、设计一个程序用于管理自己的个人资金软件。其中有3个类,CBC、CICBC和CCash,分别为中国银行类、工商银行类和现金类。每个类都包含一个私有数据balance,用于存放自己在该类帐号中的余额数,每个类还有转帐(tranfer)、收入(income)、支出(consume)、统计(Statistic)等操作功能。类结构如图4-2所示。(1)界面的形式如图4-3~4-5所示。界面上需要实现的功能包括:1、记帐功能:记录某个帐户中的资金变
intj=m;
intk=p[m];
while(j>0&&k
p[j]=p[j-1];
j--;
p[j]=k;
for(intn=0;n{outfile<}MessageBox("已经排序并输出了!");}voidCMy5_Dlg::OnButton2(){ShellExecute(NULL,"open","1.txt",NULL,NULL,SW_SHOWNORMAL);}voidCMy5_Dlg::OnButton3(){ShellExecute(NULL,"open","2.txt",NULL,NULL,SW_SHOWNORMAL);}运行结果: 实习题目三【需求规格说明】6、计算正方体、球体和圆柱体的表面积和体积(要求使用虚函数)。问题描述及分析:此题利用虚函数,然后再用MFC解决。【算法设计】(1)设计思想:此题主要就是考察MFC的熟练应用,至于代码则是很简单的函数。利用虚函数及类的继承写出代码,然后再用MFC做出对话框。(2)设计表示:Shape<>+GetArea():double<>+GetVolume():double Cube+GetArea():double+GetVolume():doubleSphere+GetArea():double+GetVolume():double Cube+GetArea():double+GetVolume():double 【调试报告】开始用单文档形式觉得麻烦,后来直接用对话框形式,变得更简单了。【附录】重要代码://6_计算体积和表面积Dlg.cpp:implementationfile//#include"stdafx.h"#include"6_计算体积和表面积.h"#include"6_计算体积和表面积Dlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifconstdoublePI=3.14;classShape{public:virtualdoubleGetArea()=0;virtualdoubleGetVolume()=0;};classCube:publicShape//正方体的类{public:Cube(doublea):l(a){};doubleGetArea(){return6*l*l;}doubleGetVolume(){returnl*l*l;}private:doublel;};classSphere:publicShape//球的类{public:Sphere(doubleradius):r(radius){};doubleGetArea(){return4*PI*r*r;}doubleGetVolume(){return4*PI*r*r*r/3;}private:doubler;};classCylinder:publicShape//圆柱体的类{public:Cylinder(doublehigh,doubleradius):h(high),r(radius){};doubleGetArea(){return2*PI*r*r+2*PI*r*h;}doubleGetVolume(){returnPI*r*r*h;}private:doubleh;doubler;};doublefun1(Shape*str)//计算表面积{returnstr->GetArea();}doublefun2(Shape*str)//计算体积{returnstr->GetVolume();}///////////////////////////////////////////////////////////////////////////////voidCMy6_Dlg::OnButton1(){UpdateData();Cubestr1(m_2);m_6=fun1(&str1);m_9=fun2(&str1);Spherestr2(m_1);m_5=fun1(&str2);m_8=fun2(&str2);Cylinderstr3(m_3,m_4);m_7=fun1(&str3);m_10=fun2(&str3);UpdateData(false);}运行结果:实习题目四【需求规格说明】10、设计实现一个猜数字的小游戏。游戏开始时在程序内部随机生成一个4位数字(每一位上的值不同,例如3795),用户通过若干轮的尝试试图猜出该数字,猜测次数不能超过8次,第八次如果仍未猜对则提示用户下次继续努力,程序退出。每一轮猜测过程包括:(1)用户输入一个猜测的四位数字,每一位值不同,例如输入3456;(2)程序比较用户输入的数字和程序内部随机生成的数字,如果值对但位置不对则一个计数变量B累加,如果值对位置也对则计数变量A累加。(3)输出A和B的累加信息以提示用户后续的猜测,例如输入3456,则输出1A1B;输入1268,则输出0A0B;输入5973,则提示0A4B;输入3795,则提示猜测成功。要求用类来实现该小游戏。问题描述及分析:此题需要先产生随机数,然后用户来猜,也就是说要将一个四位数的每位数字都提出来,与产生的随机数进行比较。然后用MFC工程实现。【算法设计】(1)设计思想:首先要产生随机数就需要用到rand(),而rand()产生的是伪随机数,且会产生值相同或者并不是四位数的情况,所以需要定义函数来判断并加以修正。其次需要将四位数拆开,与产生的随机数进行比较,并提示玩家,最后用户输入8次四位数,则随机数需要在此次游戏对话框点击按钮时产生。当一次游戏结束时需要在主面板视图上产生对应信息提醒用户游戏输赢。(2)设计表示:classCGame{public:CGame(intnum){n=num;}voidSearch(int*list1,int*list2);inte,f;private:intn;};voidCGame::Search(int*list1,int*list2){intk=0,t=0;for(inti=0;i<4;i++){for(intj=0;j<4;j++){if(list2[j]==list1[i]){k++;if(j==i)t++;}}}if(t==4&&k==4)AfxMessageBox("猜测成功!!");e=t;f=k;}CCame-n:int+CGame(num:int):CGame+Search(list1:int*,list2:int*):void+e:int+f:int【调试报告】开始由于没有将产生的随机数传出来,致使没办法显示,后来定义一个全局变量就解决了。【附录】//Copyright(c)2011-2014,中国地质大学//Allrightsreserved.////文件名称:猜数游戏.h//摘要:猜数游戏//当前版本:1.10//完成日期:2012年6月10日重要程序代码:intg;voidCMyDlg::OnButton1()//随机生成一个4位数字且每一位上的值不同{srand(time(NULL));//以时间为种子UpdateData();inta,b,c,d,n;do{n=rand()%9000+1000;a=n/1000;b=(n-a*1000)/100;c=(n-a*1000-b*100)/10;d=n-a*1000-b*100-c*10;}while((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d));g=n;UpdateData(false);}inti=0;voidCMyDlg::OnButton2()//判断你输入的四位数与产生的随机数,并提示{UpdateData();CGamenum(g);inta,b,c,d,m,A,B,C,D;m=m_m;a=g/1000;b=(g-a*1000)/100;c=(g-a*1000-b*100)/10;d=g-a*1000-b*100-c*10;//标准数intlist1[4]={a,b,c,d};//标准数A=m/1000;B=(m-A*1000)/100;C=(m-A*1000-B*100)/10;D=m-A*1000-B*100-C*10;//猜的数intlist2[4]={A,B,C,D};//猜的数num.Search(list1,list2);if(i>7)MessageBox("机会用完了!!");i++;m_i=8-i;//显示提示m_t=num.e;m_k=num.f;UpdateData(false);}voidCMyDlg::OnButton3()//在对话框上显示产生的随机数{UpdateData();m_n=g;UpdateData(false);}运行结果:实习题目五【需求规格说明】11、使用类成员函数方式重载运算符:自定义如下形式的Point类,其对象表示平面上的一个点(x,y),并通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。各运算符的运算结果如下所示:(1.2,-3.5)只与它本身即(1.2,-3.5)相等;(1.2,-3.5)+(-1,2.8)=(0.2,-0.7);//和(1.2,-3.5)-(-1,2.8)=(2.2,-6.3);//差(-1,2.8)^(6,6)=7.69675;//距离-(1.2,-3.5)=(-1.2,3.5)。//取反并编制主函数,说明类对象,而后通过类对象进行所定义的各种相关运算(以验证其正确性)。问题描述及分析:类成员函数方式重载运算符的运用。通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,分别用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。(1)设计思想:运算符重载函数在Point类里定义,首先在Point类中搭建好重载函数,再在对话框所映射的CMyDlg类中声明Point的对象,并通过对话框中的数据参数传输到每个按钮映射的函数中。(2)设计表示:Point-x:double-y:double+getX():double+getY():double+Point():Point+Point(n1:double,n2:double):Point+operator+(p2:Point):Point+operator-(p2:Point):Point+operator-():Point+operator^(p2:Point):double+operator==(p2:Point):PointclassPoint{public:doublegetX();//获取坐标xdoublegetY();//获取坐标yPoint(){};Point(doublen1,doublen2);//构造函数重载Pointoperator+(Pointp2);Pointoperator-(Pointp2);Pointoperator-();doubleoperator^(Pointp2);Pointoperator==(Pointp2);virtual~Point(){};private://私有成员函数(x,y)坐标doublex;doubley;};Point::Point(doublen1,doublen2)//Point类的实现:{x=n1;y=n2;}doublePoint::getX(){returnx;}doublePoint::getY(){returny;}PointPoint::operator+(Pointp2){returnPoint(x+p2.x,y+p2.y);}PointPoint::operator-(Pointp2){returnPoint(x-p2.x,y-p2.y);}PointPoint::operator-(){returnPoint(-x,-y);}doublePoint::operator^(Pointp2){returnsqrt(pow(x-p2.x,2)+pow(y-p2.y,2));}PointPoint::operator==(Pointp2){if(x==p2.x&&y==p2.y)//若相等则结果显示相等的坐标returnPoint(x,y);elsereturnPoint(0,0);//不等则显示坐标归0}【调试报告】开始每一个重载运算符都有一个对话框很乱,后来用一个对话框就解决了。【附录】//Copyright(c)2011-2014,中国地质大学//Allrightsreserved.////文件名称:运算符重载.h//摘要:点的运算符重载.//当前版本:1.10//作者://完成日期:2012年6月10日重要程序代码:voidCMyDlg::OnButton1()//实现判断相等按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=(A==B);m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton2()//实现加法按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=A+B;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton3()//实现减法按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;C=A-B;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton4()//实现取反按钮{UpdateData();PointA(m_x1,m_y1),C;C=-A;m_x3=C.getX();m_y3=C.getY();UpdateData(false);}voidCMyDlg::OnButton5()//实现距离按钮{UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;m_dis=A^B;UpdateData(false);}运行结果:实习题目六【需求规格说明】14、设计一个程序用于管理自己的个人资金软件。其中有3个类,CBC、CICBC和CCash,分别为中国银行类、工商银行类和现金类。每个类都包含一个私有数据balance,用于存放自己在该类帐号中的余额数,每个类还有转帐(tranfer)、收入(income)、支出(consume)、统计(Statistic)等操作功能。类结构如图4-2所示。(1)界面的形式如图4-3~4-5所示。界面上需要实现的功能包括:1、记帐功能:记录某个帐户中的资金变
outfile<
MessageBox("已经排序并输出了!
OnButton2()
ShellExecute(NULL,"open","1.txt",NULL,NULL,SW_SHOWNORMAL);
OnButton3()
ShellExecute(NULL,"open","2.txt",NULL,NULL,SW_SHOWNORMAL);
实习题目三
6、计算正方体、球体和圆柱体的表面积和体积(要求使用虚函数)。
此题利用虚函数,然后再用MFC解决。
此题主要就是考察MFC的熟练应用,至于代码则是很简单的函数。
利用虚函数及类的继承写出代码,然后再用MFC做出对话框。
(2)设计表示:
Shape
<>+GetArea():
double
<>+GetVolume():
Cube
+GetArea():
+GetVolume():
Sphere
开始用单文档形式觉得麻烦,后来直接用对话框形式,变得更简单了。
//6_计算体积和表面积Dlg.cpp:
#include"6_计算体积和表面积.h"
#include"6_计算体积和表面积Dlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
constdoublePI=3.14;
classShape
public:
virtualdoubleGetArea()=0;
virtualdoubleGetVolume()=0;
};
classCube:
publicShape//正方体的类
Cube(doublea):
l(a){};
doubleGetArea()
return6*l*l;
doubleGetVolume()
returnl*l*l;
private:
doublel;
classSphere:
publicShape//球的类
Sphere(doubleradius):
r(radius){};
return4*PI*r*r;
return4*PI*r*r*r/3;
doubler;
classCylinder:
publicShape//圆柱体的类
Cylinder(doublehigh,doubleradius):
h(high),r(radius){};
return2*PI*r*r+2*PI*r*h;
returnPI*r*r*h;
doubleh;
doublefun1(Shape*str)//计算表面积
returnstr->GetArea();
doublefun2(Shape*str)//计算体积
returnstr->GetVolume();
voidCMy6_Dlg:
UpdateData();
Cubestr1(m_2);
m_6=fun1(&str1);
m_9=fun2(&str1);
Spherestr2(m_1);
m_5=fun1(&str2);
m_8=fun2(&str2);
Cylinderstr3(m_3,m_4);
m_7=fun1(&str3);
m_10=fun2(&str3);
UpdateData(false);
实习题目四
10、设计实现一个猜数字的小游戏。
游戏开始时在程序内部随机生成一个4位数字(每一位上的值不同,例如3795),用户通过若干轮的尝试试图猜出该数字,猜测次数不能超过8次,第八次如果仍未猜对则提示用户下次继续努力,程序退出。
每一轮猜测过程包括:
(1)用户输入一个猜测的四位数字,每一位值不同,例如输入3456;
(2)程序比较用户输入的数字和程序内部随机生成的数字,如果值对但位置不对则一个计数变量B累加,如果值对位置也对则计数变量A累加。
(3)输出A和B的累加信息以提示用户后续的猜测,例如输入3456,则输出1A1B;输入1268,则输出0A0B;输入5973,则提示0A4B;输入3795,则提示猜测成功。
要求用类来实现该小游戏。
此题需要先产生随机数,然后用户来猜,也就是说要将一个四位数的每位数字都提出来,与产生的随机数进行比较。
然后用MFC工程实现。
首先要产生随机数就需要用到rand(),而rand()产生的是伪随机数,且会产生值相同或者并不是四位数的情况,所以需要定义函数来判断并加以修正。
其次需要将四位数拆开,与产生的随机数进行比较,并提示玩家,
最后用户输入8次四位数,则随机数需要在此次游戏对话框点击按钮时产生。
当一次游戏结束时需要在主面板视图上产生对应信息提醒用户游戏输赢。
classCGame{
CGame(intnum)
n=num;
voidSearch(int*list1,int*list2);
inte,f;
intn;
voidCGame:
Search(int*list1,int*list2)
intk=0,t=0;
for(inti=0;i<4;i++)
for(intj=0;j<4;j++)
if(list2[j]==list1[i])
k++;
if(j==i)
t++;
if(t==4&&k==4)
AfxMessageBox("猜测成功!
!
e=t;
f=k;
CCame
-n:
int
+CGame(num:
int):
CGame
+Search(list1:
int*,list2:
int*):
void
+e:
+f:
开始由于没有将产生的随机数传出来,致使没办法显示,后来定义一个全局变量就解决了。
//Copyright(c)2011-2014,中国地质大学
//Allrightsreserved.
//文件名称:
猜数游戏.h
//摘要:
猜数游戏
//当前版本:
1.10
//完成日期:
2012年6月10日
重要程序代码:
intg;
voidCMyDlg:
OnButton1()//随机生成一个4位数字且每一位上的值不同
srand(time(NULL));//以时间为种子
inta,b,c,d,n;
do{
n=rand()%9000+1000;
a=n/1000;
b=(n-a*1000)/100;
c=(n-a*1000-b*100)/10;
d=n-a*1000-b*100-c*10;
}while((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d));
g=n;
inti=0;
OnButton2()//判断你输入的四位数与产生的随机数,并提示
CGamenum(g);
inta,b,c,d,m,A,B,C,D;
m=m_m;
a=g/1000;
b=(g-a*1000)/100;
c=(g-a*1000-b*100)/10;
d=g-a*1000-b*100-c*10;//标准数
intlist1[4]={a,b,c,d};//标准数
A=m/1000;
B=(m-A*1000)/100;
C=(m-A*1000-B*100)/10;
D=m-A*1000-B*100-C*10;//猜的数
intlist2[4]={A,B,C,D};//猜的数
num.Search(list1,list2);
if(i>7)
MessageBox("机会用完了!
!
i++;
m_i=8-i;//显示提示
m_t=num.e;
m_k=num.f;
OnButton3()//在对话框上显示产生的随机数
m_n=g;
实习题目五
11、使用类成员函数方式重载运算符:
自定义如下形式的Point类,其对象表示平面上的一个点(x,y),并通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。
各运算符的运算结果如下所示:
(1.2,-3.5)只与它本身即(1.2,-3.5)相等;
(1.2,-3.5)+(-1,2.8)=(0.2,-0.7);//和
(1.2,-3.5)-(-1,2.8)=(2.2,-6.3);//差
(-1,2.8)^(6,6)=7.69675;//距离
-(1.2,-3.5)=(-1.2,3.5)。
//取反
并编制主函数,说明类对象,而后通过类对象进行所定义的各种相关运算(以验证其正确性)。
类成员函数方式重载运算符的运用。
通过类成员方式对该类重载双目运算符==、+、-、^和单目运算符-,分别用来判断两个对象是否相等,并求出两个对象的和、差、距离,以及将组成一个对象的数值取反。
运算符重载函数在Point类里定义,首先在Point类中搭建好重载函数,再在对话框所映射的CMyDlg类中声明Point的对象,并通过对话框中的数据参数传输到每个按钮映射的函数中。
Point
-x:
-y:
+getX():
+getY():
+Point():
+Point(n1:
double,n2:
double):
+operator+(p2:
Point):
+operator-(p2:
+operator-():
+operator^(p2:
+operator==(p2:
classPoint
doublegetX();//获取坐标x
doublegetY();//获取坐标y
Point(){};
Point(doublen1,doublen2);//构造函数重载
Pointoperator+(Pointp2);
Pointoperator-(Pointp2);
Pointoperator-();
doubleoperator^(Pointp2);
Pointoperator==(Pointp2);
virtual~Point(){};
//私有成员函数(x,y)坐标
doublex;
doubley;
Point:
Point(doublen1,doublen2)//Point类的实现:
{x=n1;
y=n2;
doublePoint:
getX()
returnx;
getY()
returny;
PointPoint:
operator+(Pointp2)
returnPoint(x+p2.x,y+p2.y);
operator-(Pointp2)
returnPoint(x-p2.x,y-p2.y);
operator-()
returnPoint(-x,-y);
operator^(Pointp2)
returnsqrt(pow(x-p2.x,2)+pow(y-p2.y,2));
operator==(Pointp2)
if(x==p2.x&&y==p2.y)//若相等则结果显示相等的坐标
returnPoint(x,y);
else
returnPoint(0,0);//不等则显示坐标归0
开始每一个重载运算符都有一个对话框很乱,后来用一个对话框就解决了。
运算符重载.h
点的运算符重载.
//作者:
OnButton1()//实现判断相等按钮
PointA(m_x1,m_y1),B(m_x2,m_y2),C;
C=(A==B);
m_x3=C.getX();
m_y3=C.getY();
OnButton2()//实现加法按钮
C=A+B;
OnButton3()//实现减法按钮
C=A-B;
OnButton4()//实现取反按钮
PointA(m_x1,m_y1),C;
C=-A;
OnButton5()//实现距离按钮
m_dis=A^B;
实习题目六
14、设计一个程序用于管理自己的个人资金软件。
其中有3个类,CBC、CICBC和CCash,分别为中国银行类、工商银行类和现金类。
每个类都包含一个私有数据balance,用于存放自己在该类帐号中的余额数,每个类还有转帐(tranfer)、收入(income)、支出(consume)、统计(Statistic)等操作功能。
类结构如图4-2所示。
(1)界面的形式如图4-3~4-5所示。
界面上需要实现的功能包括:
1、记帐功能:
记录某个帐户中的资金变
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1