软件课程设计第二阶段 实验报告.docx
- 文档编号:11927013
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:29
- 大小:250.22KB
软件课程设计第二阶段 实验报告.docx
《软件课程设计第二阶段 实验报告.docx》由会员分享,可在线阅读,更多相关《软件课程设计第二阶段 实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
软件课程设计第二阶段实验报告
编号:
()字号
《软件课程设计》报告
中国矿业大学计算机科学与技术学院
年月
软件课程设计任务书
专业年级:
学生姓名:
任务下达日期:
200年月日
课程设计日期:
200年月日至200年月日
课程设计题目:
面向过程
类别
题目序号
成绩
面向对象
1复数运算问题
5学习与成绩管理
软件课程设计指导教师评阅书
指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题等):
成绩:
指导教师签字:
年月日
目录
三、面向对象设计题1------复数运算问题(第二阶段第一题.cpp)
3.1需求分析……………………………………………………………………….…4
3.2概要设计………………………………………………………………………...5
3.3详细设计与编码………………………………………………………………...5
3.4调试分析………………………………………………………………………...9
3.5用户使用说明………………………………………………………………….10
3.6设计心得………………………………………………………………………...10
四、面向对象设计题5-----学习与成绩管理(第二阶段第五题学习与成绩管理.cpp)
4.1需求分析……………………………………………………………………….…11
4.2概要设计………………………………………………………………………...12
4.3详细设计与编码………………………………………………………………...12
4.4调试分析………………………………………………………………………...21
4.5用户使用说明…………………………………………………………………23
4.6设计心得………………………………………………………………………...23
3.1需求分析
本程序通过编写“复数”这个类以及相关的成员函数以实现附属的相关运算(加减乘除及取模)。
输入的形式:
复数:
double型数据(包含整数和小数部分),分别输入复数的实部和虚部
输入的值的范围:
实数集(在double型可以表示的范围内)
操作的选择:
整型数(1到6)
输出的形式:
double型数据(包含整数和小数部分),以复数的实部和虚部呈现
输出的值的范围:
实数集(在double型可以表示的范围内)
程序达到的功能:
实现复数的加减乘除和取模操作(由于输入输出形式的限制有些运算只显示近似值)
测试的数据:
输入的数据:
1.21.2
1(加法)
1.77.9
输出结果:
2.9+9.1i
2(减法)
1.00.3
输出结果:
0.2+0.9i
3(乘法)
5.01
输出结:
4.8+10.8i
4(除法)
30
输出结果:
0.4+0.4i
5(取模)
1.69706
6(退出)
3.2概要设计
定义了一个复数类,包括两个私有数据:
复数实部和复数虚部;类中包括加减乘除以及求模的成员函数(还包括求共轭复数、输出函数等)。
主函数中首先输入参数调用复数类的构造函数对类的私有数据进行初始化,然后通过do~while语句进行操作的选择(同时判断操作的选择中输入参数是否符合规定);
然后使用switch~case语句调用操作函数(加减乘除以及取模)
在操作函数中输入需要进行运算的参数并在操作函数中输出结果。
注意在除法中需要调用求共轭函数以及求分母函数(gongemo)。
3.3详细设计与编码
Main函数流程图:
(因操作函数简单在这里不再画流程图)
#include
#include
#include
#include
doublepow(double,double);
usingnamespacestd;
classcomplex{
private:
doublereal;//复数实部
doubleimag;//复数虚部
public:
complex();//无参构造函数
complex(doubler,doublei);//2参构造函数
complexaddCom(complexc2);//调用者对象与对象c2相加,返回complex类对象
complexremove(complexc2);//复数减法
complexcheng(complexc2);//复数乘法
complexchu(complexc2);//复数除法
complexgonge();//求共轭复数
doublegongemo();
doublequmo();//复数取模
voidoutCom();//输出调用者对象的有关数据(各分量)
};
complex:
:
complex()//无参构造函数
{
real=0;
imag=0;
}
complex:
:
complex(doubler,doublei)//2参构造函数
{
real=r;
imag=i;
}
doublecomplex:
:
gongemo()//用于复数除法求分母
{
doublea=real*real+imag*imag;
returna;
}
complexcomplex:
:
gonge()//用于复数除法求共轭复数
{
imag=-imag;
return*this;
}
complexcomplex:
:
addCom(complexc2)//复数加法
{
real=c2.real+real;
imag=c2.imag+imag;
return*this;
}
complexcomplex:
:
remove(complexc2)//复数减法
{
real=real-c2.real;
imag=imag-c2.imag;
return*this;
}
complexcomplex:
:
cheng(complexc2)//复数乘法
{
real=real*c2.real-imag*c2.imag;
imag=imag*c2.real+real*c2.imag;
return*this;
}
complexcomplex:
:
chu(complexc2)//复数除法
{
doublefenmu=c2.gongemo();//定义一个double型分母
c2.gonge();
real=real*c2.real-imag*c2.imag;
imag=imag*c2.real+real*c2.imag;
real=real/fenmu;
imag=imag/fenmu;
return*this;
}
doublecomplex:
:
qumo()//复数取模
{
doublea;
a=pow((real*real+imag*imag),0.5);
returna;
}
voidcomplex:
:
outCom()//输出复数
{
cout<<"该复数为:
"< } voidmain() { doublea,b; intnum; doublec,d; cout<<"请输入复数的实部和虚部: "< cin>>a>>b; complexfu(a,b); do{ do{ cout<<"请选择您要进行的操作: "< cout<<"1.加法。 2.减法。 3.乘法。 4.除法。 5.取模6.退出"< cin>>num; if((num>0)&&(num<7))break; }while (1);//考虑输入的操作不合法的情况 complexfu(a,b); if(num==6)break; if(num==5) { cout<<"该复数的模为: "< cout< } if(num! =5) { cout<<"请输入要加上/减去/乘取/除以的复数的实部和虚部"< cin>>c>>d; complexyunsuan(c,d); switch(num) { case1: fu.addCom(yunsuan); fu.outCom();break; case2: fu.remove(yunsuan); fu.outCom();break; case3: fu.cheng(yunsuan); fu.outCom();break; case4: fu.chu(yunsuan); fu.outCom();break; } } } while(num! =6); } 3.4调试分析 输入的数据: 1.21.2 1(加法) 1.77.9 输出结果: 2.9+9.1i 2(减法) 1.00.3 输出结果: 0.2+0.9i 3(乘法) 5.01 输出结: 4.8+10.8i 4(除法) 30 输出结果: 0.4+0.4i 5(取模) 1.69706 6(退出) 正确的输出结果: (因调试中并未出现程序的错误在此不再呈现错误的程序截图) 遇到的问题: 对复数的除法了解不够熟悉,无法正确编写复数除法的函数。 解决方法: 对复数的除法进行思考探究,找出正确的编写方法。 3.5用户使用说明 按照提示输入: 先输入要进行运算的初始数据(实部和虚部),两个数据间以TAB键或回车或空格间隔,而后程序会提示进行什么样的操作,请按照操作前的数字输入(数字1—6) 若不选择退出则程序会一直运行下去,选择退出(数字6)程序会停止运行。 (注意: 在运算中输入的数据同样以TAB键或回车或空格间隔) 3.6设计心得 1.通过本程序的编写复习了类的编写以及使用 2.增强了对用户输入数据思考的全面性 3.复习了this指针的使用 4.复习了类的编写中的构造函数的编写方式 5.通过本程序的编写对类有了更深刻的理解 4.1需求分析 本程序用于简易的学习与成绩管理,输入学生的相关信息及学习成绩,通过输入命令(对编号、姓名、以及总分和性别的要求)对信息进行检索。 输入形式: 姓名、性别为char型,分数、年龄为int型。 分数为0~100,年龄>0;性别f女m男 程序能够实现的主要功能: (1)从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。 (2)按编号对学生信息进行检索并将检索结果显示在屏幕上。 (3)按姓名对学生信息进行检索并将检索结果显示在屏幕上。 (4)计算某编号学生的总成绩与平均成绩。 (5)列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。 输出的形式及范围同输入形式 测试数据: (输入几个学生)2 编号1 姓名LiPing 性别m 年龄18 数学成绩89 计算机成绩98 外语成绩94 姓名MingSha 性别f 年龄19 数学成绩99 计算机成绩91 外语成绩89 1.按编号检索 输入2 输出: 2MingShaf19889189 2.按姓名检索 输入MingSha 输出: 2MingShaf19889189 3.计算编号为n的同学的平均分和总分 输入要计算总分的学生的编号: 1 输出: 281 输入要计算平均分的学生的编号: 1 输出: 93 4.列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。 输入: (请输入总成绩)200 (请输入性别)f 输出: 2MingShaf19889189 4.2概要设计 定义一个学生类,包括编号,姓名,年龄,性别,数学成绩,计算机成绩,外语成绩。 类中包括返回函数(返回各类私有数据)以及检索编号函数,检索姓名函数,求总分、平均分函数以及根据总分和性别检索的函数,重载输出流函数。 主函数调用流程: 定义一个学生类对象,以二进制的方式打开一个文件,使用循环输入的方式(采用for循环方式,以输入的学生个数n为退出循环的条件),将数据输入到文件中。 然后使用switch~case语句选择命令 : 1.调用编号检索函数: 打开文件,使用open函数打开文件,读入数据到类的数组中,在该函数中根据输入的编号直接输出类的数组相关数据(输出流函数已重载)。 2.调用检索姓名函数,读入数据过程类似1,输入姓名(存入字符型数组中),使用strcmp函数进行比较,使用for循环进行遍历,输出结果。 3.计算平均分和总分函数: 读入数据过程类似1,根据输入的编号,调用类的相关数据进行计算,在函数中直接输出结果 4.根据总分和性别检索: 读入数据过程类似1,调用定义好的另一个求总分函数返回总分,利用for循环将所有数据遍历一遍,使用strcmp函数以及大小比较选择出符合条件的数据输出,否则输出无数据。 在do~while语句中,根据输入的命令(整数0到4)判断是否继续进行,如果不输入0,则会一直询问命令,如果输入0(退出),则程序终止退出。 4.3详细设计与编码 主函数流程图: 检索编号voidsearchnum()函数流程图 检索姓名voidsearchname()函数流程图 Voidshaixuan()函数流程图 程序源代码: #include #include #include #include intstrcmp(constcharst1[],constcharstr2[]); intstrcpy(constcharstr1[],constcharstr2[]); usingnamespacestd; intnnn=0;//用来表示有几个学生//全局变量 classCStudent { private: intnum,age,math,computer,english; charsex[3];//性别f女m男 charname[10]; public: voidoutput()//输出函数 { cout< cout< } intrenum(){returnnum;}//以下均为返回函数用于程序中调用 char*rename(){returnname;} char*resex(){returnsex;} intreage(){returnage;} intremath(){returnmath;} intrecomputer(){returncomputer;} intreenglish(){returnenglish;} voidinput()//输入函数 { cout<<"编号"< cin>>num; cout<<"姓名"< cin>>name; cout<<"性别(f女m男)"< cin>>sex; cout<<"年龄"< cin>>age; cout<<"数学成绩"< cin>>math; cout<<"计算机成绩"< cin>>computer; cout<<"外语成绩"< cin>>english; } friendostream&operator<<(ostream&output,CStudent&a);//输出流重载函数 friendvoidsearchnum();//搜索编号函数 friendvoidsearchname();//搜索姓名函数 friendvoidaverage();//求平均值函数 friendvoidsum();//求总分函数 friendintsum2(CStudenta[],intn);//求总分函数用于筛选函数中调用 friendvoidshaixuan(intjishu);//出所有总成绩超过n分的性别为s同学的有关信息 }; ostream&operator<<(ostream&output,CStudent&a)//重载输出流函数 { output< output< returnoutput; } voidsearchnum()//按编号搜索 { inti=0; CStudentb[50]; ifstreamf; f.open("stud.dat",ios: : in|ios: : binary);//从文件中读入 while(f.read((char*)(b+i),sizeof(CStudent))) i++; f.close(); cout<<"请输入要检索的序号"< intn; cin>>n; if(i>=n) { cout< } else{cout<<"输入错误";}//考虑输入不符合的情况 } voidsearchname()//按姓名查找 { inti=0;boolzhuangtai=1; CStudentb[20]; charstr1[10]; cout<<"请输入你要查找的姓名"< cin>>str1; ifstreamf; f.open("stud.dat",ios: : in|ios: : binary);//从文件中读入 while(f.read((char*)(b+i),sizeof(CStudent))) i++; f.close(); for(intp=0;p { if(! strcmp(str1,b[p].rename()))//使用strcmp函数进行比较 { cout< zhuangtai=0; break; } } if(zhuangtai)cout<<"查无此人"< } voidaverage()//求平均分 { inti=0; CStudentb[50]; ifstreamf; f.open("stud.dat",ios: : in|ios: : binary);//从文件中读入 while(f.read((char*)(b+i),sizeof(CStudent))) i++; f.close(); cout<<"请输入你要进行计算平均数学生的编号"< intn; cin>>n; doubleave; if(i>=n){ ave=(b[n-1].math+b[n-1].computer+b[n-1].english)/3; cout<<"平均分为"< } else{cout<<"输入错误"< } voidsum()//求总分 { inti=0; CStudentb[50]; ifstreamf; f.open("stud.dat",ios: : in|ios: : binary);//从文件中读入 while(f.read((char*)(b+i),sizeof(CStudent))) i++; f.close(); cout<<"请输入你要进行计算总分学生的编号"< intn; cin>>n; if(i>=n) { doublesum; sum=b[n-1].math+b[n-1].computer+b[n-1].english; cout<<"总分为"< } else{cout<<"输入错误"< } intsum2(CStudenta[],intn)//用于shaixuan函数中调用 { intsumm; summ=a[n-1].remath()+a[n-1].reenglish()+a[n-1].recomputer(); returnsumm; } voidshaixuan(intjishu) { inti=0;boolzt=1; CStudentb[50]; ifstreamf; f.open("stud.dat",ios: : in|ios: : binary);//从文件中读入 while(f.read((char*)(b+i),sizeof(CStudent))) {i++;} f.close(); intnn; charsexx[5]; cout<<"请输入总成绩"< cin>>nn; cout<<"请输入性别"< cin>>sexx; for(intii=0;ii { if(strcmp(sexx,b[ii].resex())==0&&sum2(b,ii+1)>=nn)//使用strcmp函数进行性别上的比较并判断总分是否符合要求 { cout< } } if(zt)cout<<"无该数据"< } voidmain() { cout<<"请输入学生相关信息: "< CStudentaa; intn; cout<<"请选择输入几个学生: "< cin>>n; fstreamf("stud.dat",ios: : out|ios: : binary); for(inti=0;i { aa.input(); f.write((char*)&aa,sizeof(classCStudent)); nnn++; } f.close();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件课程设计第二阶段 实验报告 软件 课程设计 第二阶段 实验 报告