C语言程序课程设计报告资管理.docx

上传人:b****5 文档编号:6477542 上传时间:2023-01-06 格式:DOCX 页数:17 大小:44.91KB
下载 相关 举报
C语言程序课程设计报告资管理.docx_第1页
第1页 / 共17页
C语言程序课程设计报告资管理.docx_第2页
第2页 / 共17页
C语言程序课程设计报告资管理.docx_第3页
第3页 / 共17页
C语言程序课程设计报告资管理.docx_第4页
第4页 / 共17页
C语言程序课程设计报告资管理.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言程序课程设计报告资管理.docx

《C语言程序课程设计报告资管理.docx》由会员分享,可在线阅读,更多相关《C语言程序课程设计报告资管理.docx(17页珍藏版)》请在冰豆网上搜索。

C语言程序课程设计报告资管理.docx

C语言程序课程设计报告资管理

学院

信息科学与工程学院

专业

电子信息工程

姓名

李尾冬

学号

题目

小型特殊计算器

内容及要求:

1、内容与功能要求

题目

(1)运算符重载实现专用运算器:

参考提供资料中相应内容,以成员函数的形式重载运算符,实现

2、软件开发环境

WindowsXp,VisualC++6.0

进度安排:

第15周

星期一:

设计任务分析和总体设计

星期二:

软件算法和流程设计

星期三、四、五:

软件编码实现

第16周

周一:

软件总体调试

周二:

软件运行分析

周三:

答辩、验收程序

周四:

答辩、验收程序

周五:

书写课程设计报告,提交

指导教师(签字):

年月日

学院院长(签字):

 

年月日

课程设计任务书

目录

1.题目内容---------------------------------------------2

2.程序特点及功能------------------------------------3

3.总体思路---------------------------------------------3

4.详细设计---------------------------------------------4

5.程序清单---------------------------------------------5

6.运行结果与分析------------------------------------17

7.参考文献---------------------------------------------22

 

课程设计名称:

小型特殊计算器

1.设计内容:

实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊计算。

程序可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现集合的求交集、并集、子集的运算。

2.设计目的与要求:

2.1设计目的

达到熟练掌握C++语言的基本知识和技能;

基本掌握面向对象程序设计的基本思路和方法;

能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2.2设计要求

要求利用面向对象的方法以及C++的编程思想来完成系统的设计;

要求在设计的过程中,建立清晰的类层次;

在系统的设计中,至少要用到面向对象的一种机制。

3.系统分析与设计

3.1主要知识点

运算符重载增加了C++语言的可扩充性。

运算符的重载实际上就是一种函数调用的形式,可以用成员函数重载运算符,就是将运算符重载定义为一个类的成员函数的形式;也可以用友元函数重载。

用友元重载运算符的友元函数是独立于类以外的一般函数。

3.2关键技术

程序中每一种数据类型用一个类来实现,共设计了4个类。

复数类complex,矩阵类matrix,有理数类rational以及集合类set。

每一种类都定义了相应的运算符重载函数。

具体定义如下所示:

(1)类complex

类complex中,成员变量image表示虚部,real表示实部。

成员函数print()用来显示数据。

运算符重载函数都是用友元函数来实现的。

分别重载+、-、*、/运算符。

(2)类matrix

类matrix中,成员变量elems用来存放矩阵的所有元素,rows表示矩阵的行,cols表示矩阵的列。

成员函数SetElems()用来给矩阵中的每一个元素赋值,Disp()用来显示矩阵中的所有元素。

其它友元函数分别重载+、-、*、/运算符。

(3)类rational

类rational中,有两个成员变量:

denominator用来表示有理数的分母,numerator表示有理数的分子。

有理数成员函数print()用来显示有理数,optimization()用来优化有理数函数。

友元函数real()用来将有理数转换为实数,其它友元函数分别重载+、-、*、/运算符。

(4)类set

类set中,有两个成员变量:

elems用来存储集合中的元素,card表示集合中元素的个数。

成员函数print()用来输出集合中的元素,additem()用来给集合增加元素。

友元函数分别重载了&、==、!

=、+、*、<、<=运算符。

程序中的运算符重载函数都用友元函数来实现。

①    类complex的友元函数

复数的表达形式为a+bi,对复数进行运算符重载不像对一般书进行运算那样简单,它的运输方法如下:

加法:

(a+bi)+(c+di)=(a+c)+(b+d)i

减法:

(a+bi)-(c+di)=(a-c)+(b-d)i

乘法:

(a+bi)*(c-di)=(ac-bd)+(ad+bc)i

除法:

(a+bi)/(c+di)=((a+bi)*(c-di))/(c2+d2)

重载函数将以上算法用在了函数中。

②    类matrix的友元函数

矩阵类的赋值,实质上是给二维数组赋值;矩阵相加减就是两个行数列数相同的二维数组相加减;二维数组相乘,其实就是两个二维数组,其中一个的行数等于另一个的列数,按矩阵相乘的法则进行计算。

③    类rational的友元函数

对有理数类进行的操作有下面几种:

有理数相加:

当两个有理数a/b和c/d相加时,可得到这样的算式:

a/b+c/d=(a*d+b*c)/(b*d)

有理数相减:

当两个有理数a/b和c/d相减时,得到的结果是:

分子:

a*d-b*c

分母:

b*d

有理数相乘:

当两个有理数a/b和c/d相乘时,得到的结果是:

分子:

a*c

分母:

b*d

有理数相除:

当两个有理数a/b和c/d相除时,得到的结果是:

分子:

a*d

分母:

b*c

每次得到结果时,都需要对有理数进行优化。

④    类set的友元函数

集合类的运算符重载操作主要有以下几种:

判定某一元素是否属于集合:

此操作用重载运算符函数&实现,返回值只有两种情况true或者false,取bool类型。

判断两个集合是否相等:

判定两个集合是否相等,需要看两个集合中所包含的元素是否相同,并且不管顺序如何。

用重载运算符==来实现。

判断两个集合是否不等:

是相等操作的取反,用!

=来实现

两个集合的交集:

即求出两个集合中的公共元素,用运算符*实现。

两个个集合的并集:

即两个集合相合并,合并以后去掉重复的元素,用运算符+来实现。

判定一个集合是否是另一个集合的子集:

用运算符<=来实现

判定一个集合是否是另一个集合的纯子集:

用运算符<实现

3.3基本功能要求

(1)功能选择可以用菜单来实现

例如:

请选择您的计算内容:

1.      复数计算

2.      有理数计算

3.      矩阵计算

4.      集合计算

0.      退出

用户通过输入不同的数字进入不同的菜单。

次级菜单主要显示本程序的功能,主要的功能有加法、减法、乘法和除法以及集合的求交集、求并集、求子集。

(2)运行时给出明确的提示信息。

比如,输入一个什么类型的数据。

根据用户的输入计算输出结果。

由于数据类型比较多,可以一次输入第一个复数的实部,第一个复数的虚部,再输入第二个复数的实部、虚部。

矩阵运算需要先输入矩阵的行数和列数,然后依次输出矩阵的第一行第一列的元素、第一行第二列的元素等等,依次类推。

有理数运算需要一次输入有理数的分子、分母。

集合运算需要输入集合的元素个数,然后依次输入集合中的每一个元素。

4.系统总体设计(确定程序功能模块)

 

5.程序清单

◆程序代码实现

#include

#include

/*****************************************************************************/

//矩阵类的声明

classmatrix

{

public:

voidDisp();//显示矩阵所有元素

intmatrix:

:

operator()(shortrow,shortcol);//重载运算符成员函数()

voidSetElem(shortrow,shortcol,intval);//将元素(row,col)设置为val

matrix();

matrix(shortr,shortc)

{

rows=r;

cols=c;

elems=newint[rows*cols];

}

virtual~matrix();

friendmatrixoperator+(matrixp,matrixq);//重载运算符+

friendmatrixoperator-(matrixp,matrixq);//重载运算符-

friendmatrixoperator*(matrixp,matrixq);//重载运算符×

private:

int*elems;//存放矩阵的所有元素

shortcols;//矩阵的列

shortrows;//矩阵的行

};

/*****************************************************************************/

//矩阵类的各个成员函数的具体定义

matrix:

:

matrix()

{

}

matrix:

:

~matrix()

{

}

/*****************************************************************************/

/*

函数名称:

matrix:

:

operator()(shortrow,shortcol)

功能描述:

重载运算符成员函数

修改记录:

*/

intmatrix:

:

operator()(shortrow,shortcol)

{

if(row>=1&&row<=rows&&col>=1&&col<=cols)

returnelems[(row-1)*cols+(col-1)];

else

return0;

}

/*****************************************************************************/

/*

函数名称:

matrix:

:

SetElem(shortrow,shortcol,intval)

功能描述:

将元素(row,col)设置为val

修改记录:

*/

voidmatrix:

:

SetElem(shortrow,shortcol,intval)

{

if(row>=1&&row<=rows&&col>=1&&col<=cols)

elems[(row-1)*cols+(col-1)]=val;

}

/*****************************************************************************/

/*

函数名称:

matrix:

:

Disp()

功能描述:

显示矩阵元素

修改记录:

*/

voidmatrix:

:

Disp()

{

for(introw=1;row<=rows;row++)

{

for(intcol=1;col<=cols;col++)

cout<

(2)<<(*this)(row,col)<<"";

cout<

}

}

/*****************************************************************************/

/*

函数名称:

operator+(matrixp,matrixq)

功能描述:

重载运算符+

修改记录:

*/

matrixoperator+(matrixp,matrixq)

{

matrixm(p.rows,p.cols);

if(p.rows!

=q.rows||p.cols!

=q.cols)

returnm;

for(intr=1;r<=p.rows;r++)

for(intc=1;c<=p.cols;c++)

m.SetElem(r,c,p(r,c)+q(r,c));

returnm;

}

/*****************************************************************************/

/*

函数名称:

operator-(matrixp,matrixq)

功能描述:

重载运算符-

修改记录:

*/

matrixoperator-(matrixp,matrixq)

{

matrixm(p.rows,p.cols);

if(p.rows!

=q.rows||p.cols!

=q.cols)

returnm;

for(intr=1;r<=p.rows;r++)

for(intc=1;c<=p.cols;c++)

m.SetElem(r,c,p(r,c)-q(r,c));

returnm;

}

/*****************************************************************************/

/*

函数名称:

operator*(matrixp,matrixq)

功能描述:

重载运算符*

修改记录:

*/

matrixoperator*(matrixp,matrixq)

{

matrixm(p.rows,p.cols);

if(p.cols!

=q.rows)

returnm;

for(intr=1;r<=p.rows;r++)

for(intc=1;c<=p.cols;c++)

{

ints=0;

for(inti=1;i<=p.cols;i++)

s+=p(r,i)*q(i,c);

m.SetElem(r,c,s);

}

returnm;

}

/*****************************************************************************/

voidjiemian();

voidtuichu();

voidmatrixcompute();

/************************************************************************/

/*main函数*/

/************************************************************************/

intmain()

{

jiemian();

return0;

}

/************************************************************************/

/*主界面函数,实现了界面及函数调用*/

/************************************************************************/

voidjiemian()

{

inti;

cout<

cout<<"---------------------------------------------------------------"<

cout<<"**"<

cout<<"欢迎进入用运算符重载实现特殊计算器程序"<

cout<<"**"<

cout<<"----------------------------------------------------------------"<

while(i)

{

cout<

cout<<"请选择您要进行的操作:

"<

cout<<"1.矩阵计算;"<

cout<<"0.退出;"<

cout<<"请选择按键(0或1):

";

cin>>i;

cout<

//判断输入,0退出

if(i==0||i==1)

{

switch(i)

{

case1:

matrixcompute();

break;

case0:

tuichu();

break;

}

}

else

{

cout<<"输入错误!

";

cout<<"重新输入"<

}

}

}

/************************************************************************/

/*退出函数*/

/************************************************************************/

voidtuichu()

{

cout<<"---------------------------------------------------------------"<

cout<<"**"<

cout<<"谢谢使用运算符重载实现特殊计算器程序,再见!

"<

cout<<"**"<

cout<<"----------------------------------------------------------------"<

}

/************************************************************************/

/*矩阵计算函数*/

/************************************************************************/

voidmatrixcompute()

{

intj;

cout<<"请选择您的矩阵计算内容:

"<

cout<<"1.两个矩阵相加;"<

cout<<"2.两个矩阵相减;"<

cout<<"3.两个矩阵相乘;"<

cout<<"0.返回主界面;"<

cout<<"请选择按键(0-3):

";

cin>>j;

cout<

while(j)

{

//判断输入,0退出

if(j>=0&&j<=3)

{

intr1,j1,r2,j2,val;

cout<<"请输入第一个矩阵的行数:

";

cin>>r1;

cout<<"请输入第一个矩阵的列数:

";

cin>>j1;

cout<<"请输入第二个矩阵的行数:

";

cin>>r2;

cout<<"请输入第二个矩阵的列数:

";

cin>>j2;

matrixc1(r1,j1);

matrixc2(r2,j2);

matrixc3;

cout<<"请输入第一个矩阵的元素:

"<

for(intm=1;m<=r1;m++)

for(intn=1;n<=j1;n++)

{

cout<<"第"<

";

cin>>val;

c1.SetElem(m,n,val);

}

c1.Disp();

cout<<"请输入二个矩阵的元素:

"<

for(inth=1;h<=r2;h++)

for(intk=1;k<=j2;k++)

{

cout<<"第"<

";

cin>>val;

c2.SetElem(h,k,val);

}

c2.Disp();

switch(j)

{

//case1:

矩阵相加

case1:

c3=c1+c2;

cout<<"第一个矩阵为:

"<

c1.Disp();

cout<<"第二个矩阵为:

"<

c2.Disp();

cout<<"第三个矩阵为:

"<

c3.Disp();

break;

case2:

c3=c1-c2;

cout<<"第一个矩阵为:

"<

c1.Disp();

cout<<"第二个矩阵为:

"<

c2.Disp();

cout<<"第三个矩阵为:

"<

c3.Disp();

break;

case3:

c3=c1*c2;

cout<<"第一个矩阵为:

"<

c1.Disp();

cout<<"第二个矩阵为:

"<

c2.Disp();

cout<<"第三个矩阵为:

"<

c3.Disp();

break;

}

}

else

cout<<"按键错误,请重新选择!

"<

cout<

cout<<"请选择您的矩阵计算内容:

"<

cout<<"1.两个矩阵相加;"<

cout<<"2.两个矩阵相减;"<

cout<<"3.两个矩阵相乘;"<

cout<<"0.返回主界面;"<

cout<<"请选择按键(0-3):

";

cin>>j;

cout<

}

}

 

6.运行结果与分析

◆课程设计总结

1、通过程序设计,达到理论与实际应用相结合,提高对信息管理系统的分析能力,能够根据实际应用,初步实现系统功能模块及算法的设计,通过编程基本实现信息管理系统。

2、实现系统功能:

各种基本信息数据的录入;各种基本数据的修改;各种基本数据的插入;各种基本数据的删除;基于各种数据的查询;基于各种数据的计算。

三、调试错误:

显示出的数据中出现乱码。

错误原因:

打印了程序头部没有记录的空链表节点。

解决方法:

head=head->next将链表头部连到

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1