地大高级语言课程设计报告

更新时间:2023-11-09 06:02:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机高级语言课程设计报告

姓名: **** 学号:************* 学院:******************* 专业**********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 \#include \排序.h\#include \排序Doc.h\#include \排序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;k<=6;k++){ if(i!=j&&i!=k&&j!=k){ m=100*i+10*j+k; CString str1; str1.Format((\

pDC->TextOut((num )*32+50,(num/20)*32+50,str1); num++; CString str2; str2.Format((\将结果在文本框里整齐的输出 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 \

#include \文本输出.h\#include \文本输出Dlg.h\#include \

///////////////////////////////////////////////////////////////////////////// //

void CMy5_Dlg::OnButton1() {

ifstream infile; infile.open(\ ofstream outfile; outfile.open(\ int a=1; char s;

infile.get(s);

while(!infile.eof()) { if(s==' '||s=='\\n') {

a++; } infile.get(s); }

infile.close();

infile.open(\ int*p=new int[a]; for(int i=0;i>p[i]; }

for(int m=1;m

int j=m; int k=p[m];

while(j>0&&k

p[j]=p[j-1]; j--; }

p[j]=k; }

for(int n=0;n

outfile<

MessageBox(\已经排序并输出了!\}

void CMy5_Dlg::OnButton2() {

ShellExecute(NULL,\ }

void CMy5_Dlg::OnButton3() {

ShellExecute(NULL,\ }

运行结果:

实习题目三

【需求规格说明】

6、计算正方体、球体和圆柱体的表面积和体积(要求使用虚函数)。 问题描述及分析:此题利用虚函数,然后再用MFC解决。

【算法设计】

(1)设计思想:

此题主要就是考察MFC的熟练应用,至于代码则是很简单的函数。利用虚函数及类的继承写出代码,然后再用MFC做出对话框。

(2)设计表示:

Shape

int a,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;//标准数 int list1[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;//猜的数 int list2[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); }

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):Point class Point {

public: double getX(); //获取坐标x double getY(); //获取坐标y Point(){}; 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(); Point A(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(); Point A(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();

Point A(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(); Point A(m_x1,m_y1),C; C=-A; m_x3=C.getX(); m_y3=C.getY(); UpdateData(false); }

void CMyDlg::OnButton5() //实现距离按钮 { UpdateData(); Point A(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、 记帐功能:记录某个帐户中的资金变化的明细。写入到磁盘文件。 2、 统计功能:本月总支出; 3、 帐单查看:各个帐号的查看;(直接调用文件显示)

基类CMyAccount

类CBC int balance 类CICBC int balance 图4-2 银行类结构图

类CCash int balance

图4-3 记账功能菜单设计

图4-4 帐单查看菜单设计

图4-5 记账功能界面设计

(2)基类CMyAccount的定义如下: class CMyAccount {

public: // 参数说明:ptSourceA[in]-转帐源方; // ptDestA[in] - 转帐目的方; // sum[in] - 转帐金额 // ptNote[in] - 备注

// 功能举例:从银行取钱时,就需要执行转帐操作:从某个银行帐号转入到现金帐号中。

virtual long transfer(CMyAccount *ptSourceA, CMyAccount *ptDestA, double sum, char *ptNote=NULL);

// 参数说明:inType[in]-收入类型:例如奖学金、勤工俭学、父母支助等。可根据实际情况添加。

virtual long income(CMyAccount *ptSourceA, short inType, double sum, char *ptNote=NULL);

// 参数说明:conType[in]-支出类型:食物、衣物、学费、书籍等。可根据实际情况添加。

virtual long consume(CMyAccount *ptSourceA, short conType, double sum, char *ptNote=NULL);

// 参数说明:conType[in]-支出类型:食物、衣物、学费、书籍等。可根据实际情况添加。

// 功能说明:统计某个时间段内的收支情况,结果有收支总体情况和各种子类的具体数据。

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 CCash CBC ICCBC #include #include #include #include #include #include using namespace std; class CMyAccount {

public: CMyAccount();

// 参数说明:ptSourceA[in]-转帐源方; // ptDestA[in] - 转帐目的方; // sum[in] - 转帐金额 // ptNote[in] - 备注

// 功能举例:从银行取钱时,就需要执行转帐操作:从某个银行帐号转入到现金帐号中。

virtual long transfer(CString ptSourceA, CString ptDestA, double sum, CString ptNote)

{ time_t tm; time(&tm); if(ptSourceA==\我的现金账号\

{ ofstream out1(\我的现金帐号.txt\

out1<<\转出\\\ \

if(ptDestA==\工商银行账号\ { ofstream out2(\工商银行帐号.txt\ out2<<\转入\\\ \

} if(ptDestA==\中国银行账号\ { ofstream out2(\中国银行帐号.txt\ out2<<\转入\\\ \

} }

if(ptSourceA==\工商银行账号\ { ofstream out1(\工商银行帐号.txt\

out1<<\转出\\\ \

if(ptDestA==\我的现金账号\ { ofstream out2(\我的现金帐号.txt\ out2<<\转入\\\ \

} if(ptDestA==\中国银行账号\ {

ofstream out2(\中国银行帐号.txt\ out2<<\转入\\\ \

} } if(ptSourceA==\中国银行账号\ { ofstream out1(\中国银行帐号.txt\

out1<<\转出\\\ \

if(ptDestA==\工商银行账号\ {

ofstream out2(\工商银行帐号.txt\ out2<<\转入\\\ \

} if(ptDestA==\我的现金账号\ {

ofstream out2(\我的现金帐号.txt\ out2<<\转入\\\ \

} } return 1; } // 参数说明:inType[in]-收入类型:例如奖学金、勤工俭学、父母支助等。可根据实际情况添加。

virtual long income(CString ptSourceA, CString inType, double sum, CString ptNote) { time_t tm; time(&tm); ofstream out; if(ptSourceA==\我的现金账号\ { out.open(\我的现金帐号.txt\ out<<\收入\\\\ \

} if(ptSourceA==\工商银行账号\ { out.open(\工商银行帐号.txt\ out<<\收入\\\\ \

} if(ptSourceA==\中国银行账号\ { out.open(\中国银行帐号.txt\ out<<\收入\\\\ \

} out.close(); return 1;

本文来源:https://www.bwwdw.com/article/rryv.html

Top