软件课程设计实验报告.docx
- 文档编号:7111232
- 上传时间:2023-01-18
- 格式:DOCX
- 页数:56
- 大小:232.90KB
软件课程设计实验报告.docx
《软件课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《软件课程设计实验报告.docx(56页珍藏版)》请在冰豆网上搜索。
软件课程设计实验报告软件课程设计实验报告编号:
()字号软件课程设计报告班级:
姓名:
学号:
指导老师:
职称:
中国矿业大学计算机科学与技术学院二八年月软件课程设计任务书专业年级:
学生姓名:
任务下达日期:
20年月日课程设计日期:
20年月日至20年月日课程设计题目:
类别题目序号面向过程1、2、3、4、5、7面向对象1、2、4、5、6、9图形界面1数据结构1软件课程设计指导教师评阅书指导教师评语(基础理论及基本技能的掌握;独立解决实际问题的能力;研究内容的理论依据和技术方法;取得的主要成果及创新点;工作态度及工作量;总体评价及建议成绩;存在问题等):
成绩:
指导教师签字:
年月日一、面向过程第二题:
1.题目:
编程序,从键盘输入正整数n,求出n与其反序数之和并输出。
例如,输入2038,输出应为2038+8302=10340。
2.需求分析:
设计一个程序可以实现求其与其反序数之和。
根据题目要求,规定如下:
测试数据:
【输入数据】:
2038【输出数据】:
10340【输入数据】:
1153【输出数据】:
46643.设计概要:
(1)定义整形变量n为用户输入值;
(2)输出反序数;(3)定义整形变量sum求和;(4)输出sum的值。
(5)主程序流程:
step1:
让用户输入一个整数n;step2:
进入for循环计算其反序数;step3:
求和并输出。
3.详细设计与编码
(1)流程图:
进入for循环yes判断条件no
(2)源程序#includeusingnamespacestd;intmain()intn,a,b,c,sum;coutn;a=n;coutendl;for(c=0;n!
=0;)/求n的反序数b=n%10;c=c*10+b;n=n/10;cout其反序数为:
cendl;sum=a+c;/求n与其反序数之和coutn和它的反序数之和为:
sumendl;return0;5.用户使用说明;step1:
打开程序;step2:
输入要求的数;step3:
得出结果;6.测试分析step1:
输入2038step2:
输入1153分析:
经过输入多次实验后,都取得了预期值,这说明了程分析:
经过输入多次实验后,都取得了预期值,这说明了程序的正确性。
序的正确性。
7.设计体会通过此次试验加深了对通过此次试验加深了对for循环的使用方法!
从小程序开循环的使用方法!
从小程序开始逐渐把以前遗忘的内容捡起。
始逐渐把以前遗忘的内容捡起。
第七题:
1.题目:
将输入的罗马数据化为10进制数。
假设罗马数据中只使用如下7个基值字母:
M、D、C、L、X、V、I,分别用来表示1000、500、100、50、10、5、1。
如,罗马数据LXXXVII表示10进制的87。
将输入的10进制正整数转换为罗马数据。
假设罗马数据中只使用基值字母:
M、D、C、L、X、V、I,分别用来表示1000、500、100、50、10、5、1。
2.需求分析:
实现罗马数据与10进制数之间的相互转换根据实验要求,规定如下:
测试数据【输入数据】LXXXVII【输出结果】87【输入数据】87【输出结果】LXXXVII【输入不存在的数据】GHGF【输出结果】03.设计概要
(1)定义整形数组变量ROME_DATA7=1000,500,100,50,10,5,1;
(2)定义字符串ROME=MDCLXVI;(3)定义“罗马数据转换为十进制数据”函数voidROME_INT();(4)定义“十进制数据转换为罗马数据”函数voidINT_ROME();(5)主函数调用ROME_INT()、INT_ROME()。
4.详细设计与编码
(1)流程图主函数调用ROME_INT()函数调用INT_ROME()函数输入罗马数据输入10进制数进入for循环进入for循环输出10进制数输出罗马数据
(2)源程序#include#includeusingnamespacestd;charc50,d50;inti,j,a,NUMBER;stringROME=MDCLXVI;intROME_DATA7=1000,500,100,50,10,5,1;voidROME_INT();voidINT_ROME();intmain()ROME_INT();INT_ROME();return0;/将罗马数据转换为十进制数据voidROME_INT()coutc;for(a=0,i=0;ci!
=0;i+)switch(ci)caseM:
a=a+1000;break;caseD:
a=a+500;break;caseC:
a=a+100;break;caseL:
a=a+50;break;caseX:
a=a+10;break;caseV:
a=a+5;break;caseI:
a=a+1;break;default:
break;cout转换成十进制为:
aendl;/将十进制数据转换为罗马数据voidINT_ROME()coutNUMBER;cout转换成的罗马数据为:
;for(i=0;i7;i+)di=NUMBER/ROME_DATAi;NUMBER=NUMBER%ROME_DATAi;for(j=0;jdi;j+)coutROMEi;coutendl;5.调试分析最初编译时无错误,但运行结果却不对,之后经过仔细检查发现错误出在for循环中的switch语句,由于不注意case语句结束是没有加break,这说明在程序设计时,要谨慎要时时刻刻警惕以避免小错误。
6.用户使用说明
(1)打开程序
(2)输入罗马数据(即得相应的10进制数据)(3)输入10进制数据(即得相应的罗马数据)7.测试分析输入罗马数据:
LXXXVII输入十进制数据:
87输入不存在的罗马数据:
GHGF分析:
输出结果与预想值完全吻合,说明了程序的正确性!
8.试验体会经过此次试验进一步加深了对for循环和switch语句的使用,而且熟悉了主函数对函数的调用。
在实验过程中要仔细谨慎,避免发生低级错误,错误发生后要能迅速的找到错误起源地。
这方面我还得加强练习!
二、面向对象第二题:
1.题目:
自定义一个简单的日期类DateType,它具有数据成员y、m、d,用来表示当前日期的年、月、日。
而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。
例如,下面给出的雏形可用来实现对天的增加,比较两个日期是否相等,以及对日期的输出等操作。
请完成各类成员函数,并编制主函数,说明DateType类对象,对定义的各成员函数进行调用,以验证它们的正确性。
classDateType/自定义的日期类DateTypeinty,m,d;/数据成员,表示当前日期的年、月、日public:
DateType(inty0=1,intm0=1,intd0=1);/构造函数,设定年、月、日;并设置参数默认值voidincrementDay();/增加1天boolequal(DateTypedt2);/判断二日期是否相等voidprintDate();/屏幕输出日期对象的有关数据(年、月、日);注意,当对日期增加1天后,也会涉及所谓的进位问题:
首先算出本日所在的月份具有的天数N,若加1之后的日数值超过所在的月份具有的天数N时,进位到月,而月份若超过12时还要进位到年。
2.需求分析本题目要求编写类成员函数,来实现日期的增加、日期的比较、日期的输入、日期的输出。
根据实验要求输入一组测试数据,规定如下:
【输入数据】200811其余数据采用程序中默认的函数;【输出】dt1的日期为:
1年1月1日dt2的日期为:
2008年12月31日dt3的日期为:
2008年12月31日dt1的日期为:
2008年1月1日dt2的日期增加一天为:
2009年1月1日dt2与dt3的日期相同!
dt2与dt4的日期不同!
3.设计概要
(1)完成类的各成员函数的编码;
(2)编写主函数,首先由用户输入一组日期;(3)然后主函数调用默认的构造函数,再进行一系列的调用类的成员函数;3.详细设计与编码
(1)流程图主函数调用一系列的构造函数输入dt4的数据元素调用一系列的输出函数调用日期比较函数比较dt2与dt3、dt2与dt4
(2)源程序:
#includeusingnamespacestd;classDateType/自定义的日期类DateTypeinty,m,d;/数据成员,表示当前日期的年、月、日public:
DateType(inty0=1,intm0=1,intd0=1);/构造函数,设定年、月、日;并设置参数默认值voidset_DateType()cinymd;voidincrementDay();/增加1天boolequal(DateTypedt2);/判断二日期是否相等voidprintDate();/屏幕输出日期对象的有关数据(年、月、日);DateType:
DateType(inty0,intm0,intd0)/构造函数y=y0;m=m0;d=d0;voidDateType:
incrementDay()/增加一天inta=31,28,31,30,31,30,31,31,30,31,30,31;if(y%4=0&y%100!
=0)|y%400=0)a1=29;if(d=31&m=12)y+;m=1;d=1;elseif(d=am-1)m+;d=1;elseif(dam-1)d+;couty年m月d日endl;boolDateType:
equal(DateTypedt2)/比较日期if(y=dt2.y&m=dt2.m&d=dt2.d)returntrue;elsereturnfalse;voidDateType:
printDate()/输出日期couty年m月d日endl;intmain()DateTypedt1,dt2(2008,12,31),dt3(2008,12,31),dt4;dt4.set_DateType();coutdt1的日期为:
;dt1.printDate();coutdt2的日期为:
;dt2.printDate();coutdt3的日期为:
;dt3.printDate();coutdt4的日期为:
;dt4.printDate();coutdt2增加一天为:
;dt2.incrementDay();if(dt2.equal(dt3)coutdt2与dt3日期相同!
endl;elsecoutdt2与dt3日期不同!
endl;if(dt2.equal(dt4)coutdt2与dt4日期相同!
endl;elsecoutdt2与dt4日期不同!
endl;return0;5.调试分析编写此程序时类的数据元素以及成员函数已给出,编写程序较为简单主要就是编写函数体以及主函数。
编写过程中也遇到了一些困难,在incrementDay()函数中瑞年的判断就出现了问题,把可被400整除的年份给漏了,还有在月末、年末时增加时需要注意到月份及年份的增加这里用了if语句判断,解决了此问题。
总的来说此题较为容易,但对基本算法要熟悉,以免发生非语法错误,这种错误一般较难发现,编程时要特别小心谨慎!
6.用户使用说明【step1】打开源程序【step2】输入一个日期7.测试分析输入一个年份:
200811输出结果:
分析:
输出结果与预设值完全一致,证实了程序的正确性!
8.实验体会通过此题的编写加深了对类的了解以及对类成员函数的调用,对瑞年的判断的算法也更为熟悉。
第五题1.题目:
设计一个类CStudent,类中包含一个学生的基本数据如下:
编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。
并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。
如:
1LiPingm18899894请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具有连续编码的编号num为序来对文件中的各对象数据进行随机读写处理)。
并设计该类的成员函数,而且对输出运算符进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。
要求成员函数完成以下功能:
(1)从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。
(2)按编号对学生信息信息进行检索并将检索结果显示在屏幕上。
(3)计算某编号学生的总成绩。
2.需求分析本题目要设计一个Cstudent类,类中包含学生的基本信息,而且要采用binary文件形式,使用随机读写处理方式对类的对象数据进行存储与读写处理。
而且要有输入函数、输出函数,而且还可以计算总成绩!
根据实验要求,设置一组测试数据如下:
【输入数据】1001张华男20898592002李宁女1988769523【输出数据】编号姓名性别年龄数学成绩计算机成绩外语成绩总分1张华男208985922662李宁女198876952593概要设计
(1)建一个Cstudent类,定义类中的数据元素Num、Name10、Sex10、Age、Math、Com、Eng、Total;
(2)设置类的成员函数:
输入类元素getdata()、输出类元素outdate()、把数据输入到磁盘中get()、把数据从磁盘中输出put();(3)编写类的成员函数的代码;(4)编写主函数,并调用get()、put()函数;4.详细设计与编码
(1)流程图主函数do语句switch语句case1case2yes调用get()函数调用put()函数判断语句no主函数结束get()函数打开磁盘调用getdata()函数输入数据关闭磁盘put()函数打开磁盘调用putdata()函数输出数据关闭磁盘
(2)源程序#include#include#includeusingnamespacestd;classCStudentintNum;charName10;charSex10;intAge;intMath,Com,Eng,Total;public:
voidgetdata()/输入类元素coutNum;coutendlName;coutendlSex;coutendlAge;coutendlMath;coutendlCom;coutendlEng;coutendl;voidoutdate()/输出类元素Total=Math+Com+Eng;coutsetw(5)Numsetw(5)Namesetw(5)Sexsetw(5)Agesetw(8)Mathsetw(10)Comsetw(8)Engsetw(8)Totalendl;voidget()/把类数据输入到磁盘中ofstreamoutfile(stud.dat);CStudents;intn;cout输入数据:
endl;coutn;for(inti=0;in;i+)cout第i+1个学生:
endl;s.getdata();outfile.write(char*)&s,sizeof(s);outfile.close();voidput()/把类数据从磁盘中输出ifstreaminfile(stud.dat);CStudents;cout输出数据:
endl;cout编号姓名性别年龄数学成绩计算机成绩外语成绩总分endl;infile.read(char*)&s,sizeof(s);while(infile)s.outdate();infile.read(char*)&s,sizeof(s);infile.close();intmain()inta;do/选择应执行程序couta;switch(a)case1:
get();break;/输入数据case2:
put();break;/输出数据default:
couterrorendl;break;while(a=1|a=2);return0;5.调试分析自身感觉此程序的难点在于要采用文件形式的随机存储方式,还要写入磁盘当中,再C+语言学习当中,此会内容本身就学的不扎实,在编写过程中磁盘的打开存储总是写不对,经过查C+书及请教同学得知在存入数据时,打开磁盘要用ofstreamoutfile(stud.dat)语句,把数据写入磁盘要用outfile.write(char*)&s,sizeof(s)语句,程序结束还得关闭磁盘outfile.close();类似的在put()函数中也有类似的语句。
最后编译时却通不过,最后发现是由于少了个头文件#include。
其实题目中还有有关检索的要求,但因为精力有限、知识有限没有编写,请指导老师见谅!
经过此次调试过程熟悉了采用binary文件形式,并使用随机读写的处理方式,磁盘的写入读出也更加熟练,还得到了经验教训,在使用不同的处理方式时要加入相应的头文件。
6.用户使用说明【step1】打开程序;【step2】选择操作类型;【step3】若选择输入数据,则选择要输入的人数,然后再输入相关数据;【step4】继续选择相关的操作,若想停止则输入出1、2之外的数据。
7.测试分析输入一组验证数据:
1001张华男20898592002李宁女1988769523输出结果:
分析:
经过比较可以发现输出结果与程序设计之初预想的结果完全吻合,这表明已达到先前的设计要求,而且整个操作过程都有操作提示,显示出此程序的健壮性!
8.实验体会经过此次试验对binary文件及随机读写的处理方式有了更加深刻的认识,从实验过程中也得到的了不少经验教训,比如:
应该随程序的使用函数、操作不同要增加相应的头文件;程序在操作过程中要有相应的操作提示,这样才更有益与用户更好的使用!
三、可视化编程第一题:
计算器的基本设计1题目1.用你熟悉的一种可视化编程语言实现如下图所示的计算器。
该计算器需要实现基础的数学运算,如加,减,乘,除。
2需求分析设计一个简单的计算器可以进行简单的数学运算,比如加减乘除。
利用C+中的MFC来编写实现。
输出形式要与题目中给的样板相同或类似。
输入数据和输出数据均以double型数据表示测试数据:
【输入数据】9-15【输出结果】-6【输入数据】2.4*0.2【输出结果】0.48【输入数据】4.8/3【输出结果】1.63.概要设计
(1)设置如图说是的按钮;
(2)点击每一个按钮,起一个函数名,进入Dlg.cpp中编写相应的函数体;(3)设置一些全局变量:
double型m1、m2、m3、m4分别再加减乘除函数体的编写时使用;int型变量m、n、I,m取1、2、3、4时分别表示加减乘除的使用,n=1时则代表着小数点的使用,I则表示输入的时小数点后的第几位;(4)编写等号的函数,根据m的不同取值选取不同的操作。
4.详细设计与编码
(1)根据概要设计中描述的进行编码:
数符的编码流程图:
数符的函数体if判断语句n=1n=0执行小数点的处理语句执行整数的处理语句等号的编码流程图:
等号的函数if判断语句判断m的值m=1m=2m=3m=4执行加法操作语句执行减法操作语句执行乘法操作语句执行除法操作语句
(2)源程序:
/计算器张明涛Dlg.cpp/计算器张明涛Dlg.cpp:
implementationfile/#includestdafx.h#include计算器张明涛.h#include计算器张明涛Dlg.h#includedoublem1,m2,m3,m4;inti=1,m=0,n=0;#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/CAboutDlgdialogusedforAppAboutclassCAboutDlg:
publicCDialogpublic:
CAboutDlg();/DialogData/AFX_DATA(CAboutDlg)enumIDD=IDD_ABOUTBOX;/AFX_DATA/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CAboutDlg)protected:
virtualvoidDoDataExchange(CDataExchange*pDX);/DDX/DDVsupport/AFX_VIRTUAL/Implementationprotected:
/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:
CAboutDlg():
CDialog(CAboutDlg:
IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoidCAboutDlg:
DoDataExchange(CDataExchange*pDX)CDialog:
DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg,CDialog)/AFX_MSG_MAP(CAboutDlg)/Nomessagehandlers/AFX_MSG_MAPEND_MESSAGE_MAP()/CMyDlgdialogCMyDlg:
CMyDlg(CWnd*pParent/*=NULL*/):
CDialog(CMyDlg:
IDD,pParent)/AFX_DATA_INIT(CMyDlg)m_t=0.0;/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);voidCMyDlg:
DoDataExchange(CDataExchange*pDX)CDialog:
DoDataExchange(pDX);/AFX_DATA_MAP(CMyDlg)DDX_Text(pDX,IDC_EDIT1,m_t);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMyDlg,CDialog)/AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_1,On1)ON_BN_CLICKED(IDC_2,On2)ON_BN_CLICKED(IDC_cheng,Oncheng)ON_BN_CLICKED(IDC_deng,Ondeng)ON_BN_CLICKED(IDC_3,On3)ON_BN_CLICKED(IDC_4,On4)ON_BN_CLICKED(IDC_5,On5)ON_BN_CLICKED(IDC_6,On6)ON_BN_CLICKED(IDC_7,On7)ON_BN_CLICKED(IDC_8,On8)ON_BN_CLICKED(IDC_9,On9)ON_BN_CLICKED(IDC_0,On0)ON_BN_CLICKED(IDC_dian,Ondian)ON_BN_CLICKED(IDC_ji
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 课程设计 实验 报告