软件课程设计 实验报告总陈开武.docx
《软件课程设计 实验报告总陈开武.docx》由会员分享,可在线阅读,更多相关《软件课程设计 实验报告总陈开武.docx(57页珍藏版)》请在冰豆网上搜索。
软件课程设计实验报告总陈开武
编号:
()字号
《软件课程设计》报告
班级:
信息安全12-3
姓名:
陈开武
学号:
08123634
指导老师:
李政伟
中国矿业大学计算机科学与技术学院
2013年4月
软件课程设计任务书
专业年级:
信息安全12-3
学生姓名:
陈开武
任务下达日期:
2013年5月20日
课程设计日期:
2013年5月20日至2013年7月1日
课程设计题目:
软件课程设计
类别
题目序号
成绩
面向过程
1.用迭代法求a的立方根
4.输入一个人民币钱数,使用最少张数的人民币纸币,凑成上述的钱数,并输出求取结果
面向对象
1.复数的加法以及对复数的输出以及在类中添加对复数进行其他基本运算
5.自定义CStudent类的对象数据进行存储与读写处理
图形界面
1.通过MFCAPPWIZARD创建一个计算器
数据结构
1.用链表和数组两种方式分别实现栈的出栈、入栈、取栈顶元素、判空、查找等操作;
3 .编程序,按如下方法求A矩阵的转置矩阵B:
输入两个正整数m和n,而后通过使用指针配合new运算符生成一个m行n列的二维动态数组A以及另一个n行m列的二维动态数组B,之后为A输入数据(A矩阵数据),进而求出其转置矩阵B(数据放动态数组B中)并输出结果。
.
软件课程设计指导教师评阅书
指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题等):
成绩:
指导教师签字:
年月日
一、面向过程设计题1--------用迭代法求a的立方根
1.1需求分析……………………………………………………………………….…4
1.2概要设计……………………………………………………………………..…...4
1.3详细设计与编码………………………………………………………………...5
1.4调试分析……………………………………………………………………..…...6
1.5用户使用说明………………………………………………………….……….7
1.6设计心得…………………………………………………………………..……...7
二、面向过程设计题4-------用最少张数的人民币纸币,凑成输入的钱数
2.1需求分析…………………………………………………………………………7
2.2概要设计………………………………………………………………….……...7
2.3详细设计与编码………………………………………………………...……...7
2.4调试分析………………………………………………………………………...10
2.5用户使用说明………………………………………………………...……….10
2.6设计心得………………………………………………………………………...10
三、面向对象设计题1-----对复数的基本运算
3.1需求分析…………………………………………………………………………8
3.2概要设计…………………………………………………………….…………...9
3.3详细设计与编码……………………………………………………….……….9
3.4调试分析……………………………………………………………….………...9
3.5用户使用说明……………………………………………………..…………10
3.6设计心得……………………………………………………………...………...10
四、面向对象设计题5----设计类CStudent并对文件输入和检索学生信息
4.1需求分析………………………………………………………………….……..10
4.2概要设计…………………………………………………………………….…..11
4.3详细设计与编码……………………………………………………...….…….11
4.4调试分析…………………………………………………………………....…...11
4.5用户使用说明…………………………………………………………...…….12
4.6设计心得………………………………………………………………………...12
五、图形界面1---------计算器(计算器.rar)
5.1需求分析……………………………………………………………………….26
5.2概要设计………………………………………………………………………..26
5.3详细设计与编码………………………………………………………..……..28
5.4调试分析………………………………………………………………………...28
5.5用户使用说明………………………………………………………………….29
5.6设计心得………………………………………………………………………...29
六、数据结构1------用链表和数组两种方式分别实现栈的基本操作
6.1需求分析…………………………………………………………………………30
6.2概要设计…………………………………………….…………………………...30
6.3详细设计与编码…………………………………...…………………………...34
6.4调试分析………………………………………………………………….……...35
6.5用户使用说明………………………………………………………………….35
6.6设计心得……………………………………………………….………………...35
七、数据结构3--------求A矩阵的转置矩阵B
7.1需求分析……………………………………………………..…….……36
7.2概要设计………………………………………………………………...37
7.3详细设计与编码………………………………………………………...39
7.4调试分析………………………………………………………………...41
7.5用户使用说明………………………………………………………….41
7.6设计心得………………………………………………………………...41
八、课程设计总结……………………………………………………42
1、面向过程程序设计1
1.1需求分析:
编程序用迭代法求a的立方根,求立方根的迭代公式为:
:
Xi+1=(2*Xi)/3+a/(3*Xi*Xi)假定X的初值为a,迭代到|Xi+1-Xi|<10的-5次方为止.显示a=3,27的值,并通过调用pow(a,1.0/3)函数加以验证.。
【输入数据】:
3
【输出数据】:
1.44225
【输入数据】:
27
【输入数据】:
3
1.2概要设计:
(1)声明程序要调用系统pow函数;
(2)定义5个double型的变量;
(3)用户输入一个正整数;
(4)判断当输入为负数或0时,输出出错提示;
(5)利用迭代法求a的立方根;
(6)调用pow函数来求a的立方;
(7)输出用迭代法和pow函数求得的a的立方根。
1.3详细设计与编码:
(1)流程图
(2)源程序
#include
usingnamespacestd;
#include//先声明程序要调用pow函数。
intmain()
{
doublea,b,X,Y,z;//定义5个double型的变量
while
(1)
{
cout<<"请输入一个数:
"<cin>>a;
if(a<=0){cout<<"错误!
"<X=a;
do
{
b=X*2/3+a/(3*X*X);//利用迭代法求a的立方根。
z=b-X;
X=b;
}
while((z<=-0.00001)||(z>=0.00001));//利用循环使a的立方根精确到小数点后五位。
Y=pow(a,1.0/3);//调用pow函数来求a的立方根。
cout<<"要开立方根的数是:
"<cout<<"用迭代法求得的结果为:
"<<<"用系统计算机求得的结果为:
"<}
return0;
}
1.4调试分析:
分析:
经过输入各类数值后,都取得了预期值,这说明了程序的正确性。
对于用户可能输入的各类数据都有相应的结果或是报错,体现了程序的健壮性。
1.5用户使用说明:
按提示操作。
1.6设计心得:
经过此次实验,首先熟悉了主函数对函数的调用。
而且进一步加深了对do-while循环的使用,之前无法将调试框保留,致使每次只能输入一次数据的问题被解决了。
二、面向过程设计题4
2.1需求分析:
编程序,输入正整数m,它代表一个人民币钱数(元数)。
求取这样一个方案,使用最少张数的人民币纸币,凑成上述的钱数m,并输出求取结果。
注意,现在共有7种元以上面值的人民币纸币,分别为:
100,50,20,10,5,2,1。
测试数据:
【输入数据】760和50
【输出数据】见调试分析
2.2概要设计:
(1)定义整形变量a为用户输入值(金额数);
(2)判断当a为负数或0时,输出出错提示;
(3)在a为正整数时,通过if语句分别计算出100、50、20、10、5、2、1元面额的钱的张数;
(4)输出各面值钱币共多少张;
(5)让用户选择是否继续输入金额数,重复程序。
2.3详细设计与编码:
(1)流程图:
(2)源程序
#include
usingnamespacestd;
intmain()
{inta,k1,k2,k3,k4,k5,k6,k7,n;//定义8个整型变量
do{//加入do-while循环,保证数据多次运算
cout<<"请输入金额数:
"<cin>>a;//输入总金额数
if(a<=0){cout<<"出错了!
!
!
"<else
{
k1=a/100;//通过if语句计算出100元面额的钱的张数
a=a-k1*100;
if(a>=50)k2=a/50;
else
k2=0;//通过if语句计算出50元面额的钱的张数
a=a-k2*50;
if(a>=20)k3=a/20;
elsek3=0;//通过if语句计算出20元面额的钱的张数
a=a-k3*20;
if(a>=10)k4=a/10;
elsek4=0;//通过if语句计算出10元面额的钱的张数
a=a-k4*10;
if(a>=5)k5=a/5;
elsek5=0;//通过if语句计算出5元面额的钱的张数
a=a-k5*5;
if(a>=2)k6=a/2;
elsek6=0;//通过if语句计算出2元面额的钱的张数
a=a-k6*2;
k7=a;//通过if语句计算出1元面额的钱的张数
cout<<"a元相当于"<cout<cout<cout<cout<cout<cout<}
cout<<"如要继续请输入1,退出请输入0"<cin>>n;
}while(n==1);
return0;
}
2.4调试分析:
分析:
经过输入各类预期数值后,都取得了预期值,这说明了程序的正确性。
但对于用户可能输入的各类数据还没有充分的考虑到,例如但用户输入的是一个字母时程序就会崩溃。
2.5用户使用说明:
按提示操作,输入金额数,如果输入的不是正整数,会有错误提示。
若输入正确,会得出各面值的张数。
然后选择是否继续,输入1或0,继续或终止程序。
2.6设计心得:
这次编程要比之前的更熟练一点,但还有很多地方需要继续学习,比如程序的健壮性,对用户可能的输入结果进行分析的能力都要加强培养,希望随着课程的开展,能够对以前的知识更加熟练、巩固,并提高自己的很多不足。
三、面向对象设计题1
3.1需求分析:
自定义一个示意性的复数类型complex,其中含有若干个成员函数,使用该类可以完成复数的加法以及对复数的输出。
请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。
classcomplex{
doublereal;//复数实部
doubleimag;//复数虚部
public:
complex();//无参构造函数
complex(doubler,doublei);//2参构造函数
complexaddCom(complexc2);//调用者对象与对象c2相加,返回complex类对象
voidoutCom();//输出调用者对象的有关数据(各分量)
};
进一步,在类中添加对复数进行其他基本运算(如,复数减、乘、除、取模等)的相应成员函数,并通过主函数处的调用来验证各函数的使用正确性。
测试数据:
【输入数据】12+3i和3+0i
【输出数据】见调试分析
3.2概要设计:
(1)定义一个complex类存放数据成员和成员函数;
(2)构造函数的初始化;
(3)对各种运算符进行重载;
(4)提示用户输入要计算的数;
(5)调用函数完成运算;
(6)输出运算结果;
3.3详细设计与编码:
(2)源程序:
#include
#include
usingnamespacestd;
classcomplex/*complex类的定义*/
{
private:
/*私有数据成员*/
doublereal;
doubleimag;
public:
complex(){real=0;imag=0.0;}/*构造函数的初始化*/
~complex(){};
complex(doubler,doublei)
{
real=r;
imag=i;
}
complexoperator+(complex&c2);/*重载运算符+,下面的同理*/
complexoperator-(complex&c2);
complexoperator*(complex&c2);
complexoperator/(complex&c2);
doublex(complex&c);
voiddisplay();/*输出函数*/
voidset();
};
doublecomplex:
:
x(complex&c)
{
returnsqrt(c.real*c.real+c.imag*c.imag);
}
inti;
voidcomplex:
:
set()
{
cout<<"请输入第"<
"<cin>>real>>imag;
}
voidcomplex:
:
display()/*下面各类运算函数*/
{
cout<<"("<}
complexcomplex:
:
operator+(complex&c2)
{
returncomplex(real+c2.real,imag+c2.imag);
}
complexcomplex:
:
operator-(complex&c2)
{
returncomplex(real-c2.real,imag-c2.imag);
}
complexcomplex:
:
operator*(complex&c2)
{
returncomplex((real*c2.real-imag*c2.imag),(real*c2.imag+imag*c2.real));
}
complexcomplex:
:
operator/(complex&c2)
{
returncomplex((real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));
}
intmain()
{
complexc1,c2,c7(0,0);
doublex1,x2;
i=1;
cout<<"";c1.set();
i=2;
cout<<"";c2.set();
complexc3,c4,c5,c6;
c3=c1+c2;c4=c1-c2;c5=c1*c2;c6=c1/c2;
x1=c1.x(c1);
x2=c1.x(c2);
cout<<"相加得"<cout<<"相减得"<cout<<"相乘得"<cout<<"相除得"<cout<<"第一个数的模"<cout<<"第二个数的模"<return0;
}
3.4调试分析:
分析:
输出结果与预设值完全一致,证实了程序的正确性。
3.5用户使用说明:
按提示操作,输入两个要计算的复数即可完成程序的运行。
3.6设计心得:
通过这次试验加深了对类的认识,包括类的定义,构造函数,虚构函数和类对象的定义,除此之外还复习了私有成员和公有成员的其别以及函数运算符的重载,总之收获挺大。
4、面向对象设计题5
4.1需求分析:
设计一个类CStudent,类中包含一个学生的基本数据如下:
编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。
并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。
如:
1LiPingm18899894
请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具有连续编码的编号num为“序”来对文件中的各对象数据进行随机读写处理)。
并设计该类的成员函数,而且对输出运算符“<<”进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。
要求成员函数完成以下功能:
(1)从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。
(2)按编号对学生信息进行检索并将检索结果显示在屏幕上。
(3)按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4)计算某编号学生的总成绩与平均成绩。
(5)列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)
【输入数据】1LiPingm18899894
【输出数据】编号姓名性别年龄数学成绩计算机成绩外语成绩总分平均成绩
1Lipingm1889989428193
4.2概要设计:
(1)建一个Cstudent类,定义类中的数据元素name[10]、sex[10]、age、math、com、eng、total、aver;
(2)定义类的成员函数:
输入函数set()、输出函数out();
(3)编写主函数,并打开磁盘,调用set()函数录入信息并存入文件;
(4)输入学生编号检索信息,从文件输入对应学生信息,并调用put()函数输出信息;
4.3详细设计与编码:
(1)流程图
(2)源程序
#include
#include
#include
usingnamespacestd;
classCStudent/*学生类的定义*/
{private:
charnum[10];
charname[10];
charsex[10];/*上面均于数组的形式存储*/
intage,math,com,eng,total;
doubleave;
public:
voidgetdata();
voidoutdate();
};
voidCStudent:
:
getdata()/*输入函数*/
{
cout<<"编号:
";
cin>>num;
cout<";
cin>>name;
cout<";
cin>>sex;
cout<";
cin>>age;
cout<";
cin>>math;
cout<";
cin>>com;
cout<";
cin>>eng;
cout<}
voidCStudent:
:
outdate()/*输出函数*/
{
total=math+com+eng;/*计算学生总分*/
ave=total/3;/*计算学生平均分*/
cout<<""<<