地大高级语言课程设计报告.doc_第1页
地大高级语言课程设计报告.doc_第2页
地大高级语言课程设计报告.doc_第3页
地大高级语言课程设计报告.doc_第4页
地大高级语言课程设计报告.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机高级语言课程设计报告姓名: * 学号:*学院:* 专业*8* 班级: * 实习题目一【需求规格说明】1、 有1、2、3、4、5、6六个数,能组成多少个互不相同且无重复数字的三位数?都是多少? 问题描述及分析:此题为数学中的排序问题可以利用循环来解决。【算法设计】(1)设计思想:利用for循环,将三位数的百位和十位确定,剩下的利用循环和if语句判断个位的数是否与前两位相同,而百位和十位同样需要利用for循环解决,最后输出显示可以将百位数乘以一百加上十位数乘以十加上个位数即可。然后再利用MFC工程,将结果输出来【调试报告】 开始不知道怎么用MFC在文本框中显示,就没有用MFC做,后来了解TextOut等函数就改用MFC。【附录】重要代码:/ 1_排序View.cpp : implementation of the CMy1_View class/#include stdafx.h#include 1_排序.h#include 1_排序Doc.h#include 1_排序View.h/void CMy1_View:OnDraw(CDC* pDC)CMy1_Doc* pDoc = GetDocument();ASSERT_VALID(pDoc); int i,j,k,m;int num=0;for(i=1;i=6;i+) /三位数无重复排序for(j=1;j=6;j+)for(k=1;kTextOut(num%20)*32+50,(num/20)*32+50,str1);num+;CString str2;str2.Format(%d),num);/将结果在文本框里整齐的输出 pDC-TextOut(100,30,str2);pDC-TextOut(50,30,一共有);pDC-TextOut(130,30,个数,分别是:);/运行结果:实习题目二【需求规格说明】5、 文本文件中有一组整数,以空格分隔,要求排序后输出到另一个文件中。问题描述及分析:此题利用到输入输出流的问题以及排序方法。【算法设计】(1)设计思想:用ofstream ifstream 建立对象,然后用这个对象调用open,close来打开和关闭文件。当打开文件后再用冒泡法排序文件里的整数,并输出到另一个文件中。再用MFC中的ShellExecute函数将文本文件打开。【调试报告】由于对MFC不是很熟练的应用,致使开始无法用MFC中的函数打开文本文件,只能手动打开。后来用ShellExecute 改进了。【附录】重要代码:/ 5_文本输出Dlg.cpp : implementation file/#include stdafx.h#include 5_文本输出.h#include 5_文本输出Dlg.h#include fstream.h/ void CMy5_Dlg:OnButton1() ifstream infile;infile.open(1.txt);ofstream outfile;outfile.open(2.txt);int a=1;char s;infile.get(s);while(!infile.eof()if(s= |s=n) a+;infile.get(s); infile.close();infile.open(1.txt);int*p=new inta;for(int i=0;ipi;for(int m=1;m0&kpj-1) pj=pj-1; j-;pj=k;for(int n=0;na;n+) outfilepn ; MessageBox(已经排序并输出了!);void CMy5_Dlg:OnButton2() ShellExecute(NULL,open,1.txt,NULL,NULL,SW_SHOWNORMAL); void CMy5_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( ) : double Sphere + GetArea( ) : double + GetVolume( ) : double Cube + GetArea( ) : double + GetVolume( ) : double【调试报告】开始用单文档形式觉得麻烦,后来直接用对话框形式,变得更简单了。【附录】重要代码:/ 6_计算体积和表面积Dlg.cpp : implementation file/#include stdafx.h#include 6_计算体积和表面积.h#include 6_计算体积和表面积Dlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifconst double PI=3.14;class Shapepublic:virtual double GetArea()=0;virtual double GetVolume()=0;class Cube: public Shape /正方体的类public:Cube(double a):l(a); double GetArea() return 6*l*l;double GetVolume() return l*l*l;private:double l;class Sphere:public Shape /球的类public:Sphere(double radius):r(radius);double GetArea() return 4*PI*r*r;double GetVolume() return 4*PI*r*r*r/3;private:double r;class Cylinder:public Shape /圆柱体的类public:Cylinder(double high,double radius):h(high),r(radius);double GetArea() return 2*PI*r*r+2*PI*r*h;double GetVolume()return PI*r*r*h;private:double h; double r;double fun1(Shape *str) /计算表面积 return str-GetArea();double fun2(Shape *str) /计算体积 return str-GetVolume();/ void CMy6_Dlg:OnButton1() UpdateData();Cube str1(m_2);m_6=fun1(&str1);m_9=fun2(&str1);Sphere str2(m_1); m_5=fun1(&str2);m_8=fun2(&str2); Cylinder str3(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) 设计表示:class CGamepublic: CGame (int num) n=num; voidSearch(int *list1,int *list2); int e,f;private:int n; void CGame:Search(int *list1,int *list2) int k=0 ,t=0; for(int i=0;i4;i+) for(int j=0;j7)MessageBox(机会用完了!); i+; m_i=8-i; /显示提示 m_t=num.e; m_k=num.f;UpdateData(false);void CMyDlg: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):Pointclass Point public:double getX(); /获取坐标xdouble getY(); /获取坐标yPoint();Point(double n1,double n2); /构造函数重载Point operator + (Point p2);Point operator - (Point p2);Point operator - ();double operator (Point p2);Point operator = (Point p2);virtual Point();private: /私有成员函数(x,y)坐标double x;double y;Point:Point(double n1,double n2)/Point类的实现:x=n1;y=n2;double Point:getX()return x;double Point:getY()return y;Point Point:operator + (Point p2)return Point(x+p2.x,y+p2.y);Point Point:operator - (Point p2)return Point(x-p2.x,y-p2.y); Point Point:operator - ()return Point(-x,-y);double Point:operator (Point p2)return sqrt(pow(x-p2.x,2)+pow(y-p2.y,2);Point Point:operator = (Point p2)if(x=p2.x&y=p2.y) /若相等则结果显示相等的坐标return Point(x,y);else return Point(0,0); /不等则显示坐标归0【调试报告】 开始每一个重载运算符都有一个对话框很乱,后来用一个对话框就解决了。【附录】/Copyright (c) 2011-2014, 中国地质大学/ All rights reserved./ / 文件名称:运算符重载.h/ 摘 要:点的运算符重载./ 当前版本:1.10/ 作 者:/ 完成日期:2012年6月10日重要程序代码:void CMyDlg: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);void CMyDlg: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);void CMyDlg: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);void CMyDlg:OnButton4() /实现取反按钮UpdateData();PointA(m_x1,m_y1),C;C=-A;m_x3=C.getX();m_y3=C.getY();UpdateData(false);void CMyDlg:OnButton5() /实现距离按钮UpdateData();PointA(m_x1,m_y1),B(m_x2,m_y2),C;m_dis=AB;UpdateData(false);运行结果:实习题目六【需求规格说明】14、设计一个程序用于管理自己的个人资金软件。其中有3个类,CBC、CICBC和CCash,分别为中国银行类、工商银行类和现金类。每个类都包含一个私有数据balance,用于存放自己在该类帐号中的余额数,每个类还有转帐(tranfer)、收入(income)、支出(consume)、统计(Statistic)等操作功能。类结构如图4-2所示。(1)界面的形式如图4-34-5所示。界面上需要实现的功能包括:1、 记帐功能:记录某个帐户中的资金变化的明细。写入到磁盘文件。2、 统计功能:本月总支出;3、 帐单查看:各个帐号的查看;(直接调用文件显示) 基类CMyAccount类CCashint balance类CICBCint balance类CBCint balance图4-2 银行类结构图图4-3 记账功能菜单设计 图4-4 帐单查看菜单设计 图4-5 记账功能界面设计(2)基类CMyAccount的定义如下:class CMyAccountpublic: / 参数说明:ptSourceAin-转帐源方; / ptDestAin - 转帐目的方; / sumin - 转帐金额 / ptNotein - 备注 / 功能举例:从银行取钱时,就需要执行转帐操作:从某个银行帐号转入到现金帐号中。 virtual long transfer(CMyAccount *ptSourceA, CMyAccount *ptDestA, double sum, char *ptNote=NULL); / 参数说明:inTypein-收入类型:例如奖学金、勤工俭学、父母支助等。可根据实际情况添加。 virtual long income(CMyAccount *ptSourceA, short inType, double sum, char *ptNote=NULL);/ 参数说明:conTypein-支出类型:食物、衣物、学费、书籍等。可根据实际情况添加。 virtual long consume(CMyAccount *ptSourceA, short conType, double sum, char *ptNote=NULL);/ 参数说明:conTypein-支出类型:食物、衣物、学费、书籍等。可根据实际情况添加。 / 功能说明:统计某个时间段内的收支情况,结果有收支总体情况和各种子类的具体数据。 virtual long statistic(TimeStamp_STRU &timeStart, TimeStamp_STRU &timeEnd);private:double balance;(3)其他说明:在实现的过程中可根据自己的实际情况增加软件的实用性。实用性强的软件可酌情加分。问题描述及分析:一个用于管理自己的个人资金的程序软件。根据CMyAccount基类的定义和其虚函数的声明编写三个派生类CBC、CICBC、CCash。再建立三个对话框分别映射添加消费记录、添加收入记录、添加转帐记录的不同类。然后再在对应类的函数中添加类相应的关系【算法设计】(1)设计思想:(,具体内容:主要的算法思想。)(2)设计表示: CMyAccount - balance:double+transfer(ptSourceA:CMyAccount *, ptDestA:CMyAccount *,sum:double,ptNote:char *=NULL):long+income(ptSourceA:CMyAccount *, inType:short,sum:double,ptNote:char *=NULL):long+consume(ptSourceA:CMyAccount*,conType:short ,sum:double,ptNote:char *=NULL):long ICCBC CBC CCash #include#include#include#include#include#includeusing namespace std;class CMyAccount public:CMyAccount(); / 参数说明:ptSourceAin-转帐源方; / ptDestAin - 转帐目的方; / sumin - 转帐金额 / ptNotein - 备注 / 功能举例:从银行取钱时,就需要执行转帐操作:从某个银行帐号转入到现金帐号中。 virtual long transfer(CString ptSourceA, CString ptDestA, double sum, CString ptNote) time_t tm; time(&tm); if(ptSourceA=我的现金账号) ofstream out1(我的现金帐号.txt,ios:app); out1转出 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptDestA=工商银行账号) ofstream out2(工商银行帐号.txt,ios:app); out2转入 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptDestA=中国银行账号) ofstream out2(中国银行帐号.txt,ios:app); out2转入 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptSourceA=工商银行账号) ofstream out1(工商银行帐号.txt,ios:app); out1转出 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptDestA=我的现金账号) ofstream out2(我的现金帐号.txt,ios:app); out2转入 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptDestA=中国银行账号) ofstream out2(中国银行帐号.txt,ios:app); out2转入 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptSourceA=中国银行账号) ofstream out1(中国银行帐号.txt,ios:app); out1转出 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptDestA=工商银行账号) ofstream out2(工商银行帐号.txt,ios:app); out2转入 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptDestA=我的现金账号) ofstream out2(我的现金帐号.txt,ios:app); out2转入 setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; return 1; / 参数说明:inTypein-收入类型:例如奖学金、勤工俭学、父母支助等。可根据实际情况添加。 virtual long income(CString ptSourceA, CString inType, double sum, CString ptNote) time_t tm; time(&tm); ofstream out; if(ptSourceA=我的现金账号) out.open(我的现金帐号.txt,ios:app); out收入 (LPCTSTR)inType setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptSourceA=工商银行账号) out.open(工商银行帐号.txt,ios:app); out收入 (LPCTSTR)inType setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptSourceA=中国银行账号) out.open(中国银行帐号.txt,ios:app); out收入 (LPCTSTR)inType setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; out.close(); return 1; / 参数说明:conTypein-支出类型:食物、衣物、学费、书籍等。可根据实际情况添加。 virtual long consume(CString ptSourceA, CString conType, double sum, CString ptNote) time_t tm; time(&tm); ofstream out; if(ptSourceA=我的现金账号) out.open(我的现金帐号.txt,ios:app); out消费 (LPCTSTR)conType setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptSourceA=工商银行账号) out.open(工商银行帐号.txt,ios:app); out消费 (LPCTSTR)conType setiosflags(ios_base:left)setw(5)sum (LPCTSTR)ptNote asctime(gmtime(&tm)endl; if(ptSourceA=中国银行账号) out.op

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论