《软件课程设计》实验报告.doc

上传人:文库蛋蛋多 文档编号:2884626 上传时间:2023-03-01 格式:DOC 页数:40 大小:620KB
返回 下载 相关 举报
《软件课程设计》实验报告.doc_第1页
第1页 / 共40页
《软件课程设计》实验报告.doc_第2页
第2页 / 共40页
《软件课程设计》实验报告.doc_第3页
第3页 / 共40页
《软件课程设计》实验报告.doc_第4页
第4页 / 共40页
《软件课程设计》实验报告.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《《软件课程设计》实验报告.doc》由会员分享,可在线阅读,更多相关《《软件课程设计》实验报告.doc(40页珍藏版)》请在三一办公上搜索。

1、 软件课程设计报告班 级: 姓 名: 学 号: 指导老师: 中国矿业大学计算机科学与技术学院 第一阶段 面向过程第二题:1. 题目: 编程序,从键盘输入正整数n,求出n与其反序数之和并输出。例如,输入2038,输出应为 2038+8302=10340。2.需求分析:设计一个程序可以实现求其与其反序数之和。根据题目要求,规定如下:测试数据:输入数据:2038输出数据:10340输入数据:1046输出数据:74473.设计概要: (1)定义正型变量a为用户输入值;(2)求a的反序数;(3)定义整型变量s并求和;(4)输出s的值;(5)主程序流程:Step1:让用户输入一个整数a;Step2:用do

2、-while循环求其反序数;Step3:求和并输出;4详细设计与编码:(1) 流程图:用户输入a进入do-while循环Yes判断条件no输出反序数 输出结果s(2)源程序:#include#includeusing namespace std;int main()int a,b,c,t,s=0;couta;t=a;c=log(a)/log(10)+1; /求整数a的位数c=c-1;do /求a的反序数b=a%10;a=a/10;s+=b*pow(10,c);c-;while(a!=0);coutt的反序数为:sendl;s=s+t; /求a与其反序数之和coutt和其反序数之和为:sendl

3、;return 0; 5用户使用说明:Step1:打开程序;Step2:输入要求的整数;Step3:得出结果6测试分析: 输入2038输入1046分析:经过多次输入测试试验后得到了预期值,说明程序的正确性。7.设计体会:通过实验体会了设计程序的方法与步骤,加深了对do-while循环使用方法的的了解。第四题:1.题目: 编程序,输入正整数m,它代表一个人民币钱数(元数)。求取这样一个方案,使用最少张数的人民币纸币,凑成上述的钱数m,并输出求取结果。注意,现在共有7种元以上面值的人民币纸币,分别为:100,50,20,10,5,2,1。2.需求分析:设计一个程序,可以实现输入一个人民币钱数输出使

4、用最少的人民币纸币的张数。根据题目要求,规定如下:测试数据:输入数据:150输出数据:2输入数据:176输出数据:53.设计概要: (1)定义正型变量n为用户输入值;(2)定义数组a存放人民币纸币的不同面值;(3)定义整型变量s并求和;(4)输出s的值;(5)主程序流程:Step1:让用户输入一个钱数n;Step2:用for循环求和;Step3:输出s的值;4详细设计与编码:(1)流程图:用户输入n进入for循环Yes判断条件no输出结果s(2)源程序:#include using namespace std; int a8=0,100,50,20,10,5,2,1;/定义数组a存放7种不同人

5、民币纸币的面值int main() int n,i,s=0; coutn; /输入要求的钱数afor (i=1;i=7;i+) /求使用最少的人民币纸币的张数s s+=n/ai; n%=ai; coutsendl; return 0; 5用户使用说明:Step1:打开程序;Step2:输入要求的钱数;Step3:得出结果6测试分析:输入数据:150输入数据:176分析:经过多次输入测试试验后得到了预期值,说明程序的正确性。7.设计体会:通过实验锻炼了编辑程序的思维过程,熟悉了for循环的使用方法。第二阶段 面向对象第一题:1.题目:自定义一个示意性的复数类型complex,其中含有若干个成员函

6、数,使用该类可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。进一步,在类中添加对复数进行其他基本运算(如,复数减、乘、除、取模等)的相应成员函数,并通过主函数处的调用来验证各函数的使用正确性。2.需求分析:设计一个程序,可以实现对复数进行加、减、乘、除、取模等基本运算。根据题目要求,规定如下:测试数据:输入数据:c1=(3,4i),c2=(5,-10i)输出数据:|c1|=5|c2|=11.1803c1+c2=(8,-6i)c1-c2=(-2,14i)c1*c2=(55,-10i)c1/c2=(-0.2,0.4i)3.设计概

7、要: (1)定义一个complex类作为复数类型;(2)定义成员函数addCom(),minCom(),multCom(),diviCom(),outCom ()来分别实现加、减、乘、除、取模等基本运算以及复数的输出操作;(3)定义成员变量real和image作为复数的实部和虚部;(4)在主函数中通过complex类来定义对象并调用相关成员函数完成相应操作;(5)主程序流程:Step1:让用户输入一个钱数n;Step2:用for循环求和;Step3:输出s的值;4详细设计与编码:(1)流程图:定义complex类进入主函数定义对象并调用成员函数输出结果(2)源程序:#include #incl

8、ude using namespace std;class complexpublic: complex(); /无参构造函数 complex(double r, double i):real(r),image(i) /2参构造函数 complex addCom(complex &c2); /调用者对象与对象c2相加,返回complex类对象 complex minCom(complex &c3); /调用者对象与对象c2相减,返回complex类对象 complex multCom(complex &c4); /调用者对象与对象c2相乘,返回complex类对象 complex diviCo

9、m(complex &c5); /调用者对象与对象c2相除,返回complex类对象 double lenCom(); /对调用者对象进行取模运算,返回double类型 void outCom (); /输出调用者对象的有关数据(各分量) private: double real; /复数实部 double image; /复数虚部;complex:complex()real=0;image=0;complex complex:addCom(complex &c2)complex c;c.real=real+c2.real;c.image=image+c2.image;return c;com

10、plex complex:minCom(complex &c3)complex c;c.real=real-c3.real;c.image=image-c3.image;return c;complex complex:multCom(complex &c4)complex c;c.real=real*c4.real-image*c4.image;c.image=image*c4.real+real*c4.image;return c;complex complex:diviCom(complex &c5)complex c;c.real=(real*c5.real+image*c5.imag

11、e)/(c5.real*c5.real+c5.image*c5.image);c.image=(image*c5.real-real*c5.image)/(c5.real*c5.real+c5.image*c5.image);return c;double complex:lenCom()double l;l=sqrt(real*real+image*image);return l;void complex:outCom () cout(real,imagei)endl;int main() complex c1(3,4),c2(5,-10),c3,c4,c5,c6;coutc1=;c1.ou

12、tCom(); coutc2=;c2.outCom(); cout|c1|=c1.lenCom()endl; cout|c2|=c2.lenCom()endl; c3=c1.addCom(c2);c4=c1.minCom(c2);c5=c1.multCom(c2);c6=c1.diviCom(c2);coutc1+c2=;c3.outCom();coutc1-c2=;c4.outCom();coutc1*c2=;c5.outCom();coutc1/c2=;c6.outCom();return 0;5用户使用说明:Step1:打开程序;Step2:输入测试数据;Step3:得出结果6测试分析:

13、输入数据:c1=(3,4i),c2=(5,-10i)分析:测试试验后得到了预期值,说明程序的正确性。7.设计体会:通过此题的编写加深了对面向对象中类的了解,熟练了类的构造过程以及对类成员函数的调用。第六题:1.题目:编写一个具有如下样式的类模板tmplt,用于实现所谓的反序输出问题,其中使用了类型参数T(使所处理的元素类型可变化)以及普通参数n(元素个数也可变化):template class tmplt T arrn; / n个T类型的数据存放于数组arr之中public: void dataIn(); /从键盘输入n个T类型数据放入arr数组中 void reverseOut(); /将a

14、rr数组中的数据按输入的相反顺序输出; 而后编制主函数,将类模板实例化为某个具体的类并说明类对象,之后通过对象调用其负责输入数据的成员函数,再通过对象调用另一成员函数按反序输出那些输入数据。2.需求分析:设计一个程序,可以实现将类模板实例化为某个具体的类并通过对象调用其负责输入数据的成员函数,再通过对象调用另一成员函数按反序输出那些输入数据。根据题目要求,规定如下:测试数据:输入数据:0 1 2 3 4 5 6 7 8 9输出数据:9 8 7 6 5 4 3 2 1 0输入数据:1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.0输出数据:1 1.9 1.8 1.7

15、1.6 1.5 1.4 1.3 1.2 1.1输入数据:a b c d e f g h i j输出数据:j i h g f e d c b a3.设计概要: (1)定义一个类模板tmplt;(2)定义成员函数dataIn()和reverseOut()来实现n个T类型数据的输入与输出;(3)定义成员变量arr数组来存放 n个T类型的数据;(4)在主函数中通过tmplt类模板的实例化来调用相关成员函数完成相关操作;(5)主程序流程:Step1:输入十个数据;Step2: 在主函数中调用成员函数;Step3:输出十个数据的反序;4详细设计与编码:(1)流程图:定义complex类进入主函数输入数据并

16、调用成员函数输出结果(2)源程序:#include using namespace std;template class tmplt public: void dataIn() /从键盘输入n个T类型数据放入arr数组中 for(int i=0;iarri; void reverseOut() /将arr数组中的数据按输入的相反顺序输出for(int i=n-1;i=0;i-)coutarri ;coutendl; private:numtype arrn; / n个T类型的数据存放于数组arr之中;int main()tmplttmp1;coutplease enter 10 int num

17、bers:endl;tmp1.dataIn();coutthe opposite order of the 10 numbers is:endl;tmp1.reverseOut();tmplttmp2;coutplease enter 10 float numbers:endl;tmp2.dataIn();coutthe opposite order of the 10 numbers is:endl;tmp2.reverseOut();tmplttmp3;coutplease enter 10 char numbers:endl;tmp3.dataIn();coutthe opposite

18、order of the 10 numbers is:endl;tmp3.reverseOut();return 0;5用户使用说明:Step1:打开程序;Step2:输入测试数据;Step3:得出结果6测试分析:输入数据:0 1 2 3 4 5 6 7 8 91.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.0a b c d e f g h i j分析:测试试验后得到了预期的结果,说明程序的正确性。7.设计体会:通过熟悉了对类模板的使用,进一步熟练了如何通过类模板的实例化来定义对象以及对类成员函数的调用等。第三阶段 可视化编程可视化实现面向过程中的第五题:1.题目:

19、编程序,使 用户任意输入一个年份以及该年的1月1日是星期几,而后任意指定某一天(再输入该年的任意一个月份日期),由程序计算出这一天是星期几。注意,2月份闰年为29天,非闰年为28天;可被4整除而不可被100整除的年份、或者可被400整除的年份均为闰年。2.需求分析:设计一个程序,实现一个年份以及该年的1月1日是星期几,然后再输入该年的任意一个月份日期由程序计算出这一天是星期几。根据题目要求,规定如下:测试数据:输入数据:2011 星期六 2011/1/4输出数据:您要查询的日期是星期二输入数据:2011 星期六 2011/1/15输出数据:您要查询的日期是星期六3.设计概要:(1) 设计如下对

20、话框:(2) 给相应编辑框分别关联变量为year1,string,year,month,day,str;(3) 给“查询”按钮添加函数OnSearch();(4) 在SEARDlg.cpp源文件中的void CSEARDlg:OnSearch()添加代码。4.详细设计与编码:(1)根据概要设计中描述的进行设计:在上图中一次添加编辑框和按钮并关联变量,完成后如下:在void CSEARDlg:OnSearch()中添加如下代码:int a13=0,31,28,31,30,31,30,31,31,30,31,30,31; int i,s=7,n; UpdateData(TRUE);if(strin

21、g=星期一)n=1;if(string=星期二)n=2;if(string=星期三)n=3;if(string=星期四)n=4;if(string=星期五)n=5;if(string=星期六)n=6;if(string=星期日)n=7;if (year%4=0&year%100!=0)|year%400=0)a2=29; for(i=1;iLoadIcon(IDR_MAINFRAME);void CSEARDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CSEARDlg)DDX_Te

22、xt(pDX, IDC_YEAR1, year1);DDX_Text(pDX, IDC_YEAR, year);DDX_Text(pDX, IDC_MONTH, month);DDV_MinMaxInt(pDX, month, 1, 12);DDX_Text(pDX, IDC_DAY, day);DDV_MinMaxInt(pDX, day, 1, 31);DDX_Text(pDX, IDC_RESULT, str);DDX_CBString(pDX, IDC_COMBO1, string);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CSEARDlg, CDialog)/A

23、FX_MSG_MAP(CSEARDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_SEARCH, OnSearch)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CSEARDlg message handlersBOOL CSEARDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command ran

24、ge.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Se

25、t big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CSEARDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nI

26、D, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CSEARDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSen

27、dMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icon

28、dc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CSEARDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CSEARDlg:OnSearch() / TODO: Add your control notification handler code here int a13=0,31

29、,28,31,30,31,30,31,31,30,31,30,31; int i,s=7,n; UpdateData(TRUE);if(string=星期一)n=1;if(string=星期二)n=2;if(string=星期三)n=3;if(string=星期四)n=4;if(string=星期五)n=5;if(string=星期六)n=6;if(string=星期日)n=7;if (year%4=0&year%100!=0)|year%400=0)a2=29; for(i=1;imonth;i+) s+=ai; s+=day; s%=7; s+=n; s%=7;if(s=0|s=1)s+=

30、6;else s=s-1; switch(s) case 1: str=您要查询的日期是星期一;UpdateData(FALSE); break;case 2: str=您要查询的日期是星期二; UpdateData(FALSE);break;case 3: str=您要查询的日期是星期三; UpdateData(FALSE);break;case 4: str=您要查询的日期是星期四; UpdateData(FALSE);break;case 5: str=您要查询的日期是星期五; UpdateData(FALSE);break;case 6: str=您要查询的日期是星期六;UpdateD

31、ata(FALSE); break;case 7: str=您要查询的日期是星期日; UpdateData(FALSE);break;default:str=errorn;UpdateData(FALSE);break;5用户使用说明:Step1:打开程序;Step2:输入要查询的日期;Step3:得出结果6测试分析:输入数据:输出数据:输入数据:输出数据:分析:经过多次输入数据进行测试后得到了预期的结果,说明程序了程序是正确的。7.设计体会:此次实验设计步骤较多,设计过程中出想的问题也较多,实验中通过了多次的修改与调试后才得到了最终的预期结果。通过这次实验,收获很多,积累了经验;初步了解并学

32、会了MFC的基础编程。第四阶段 数据结构第一题:1.题目:用链表和数组两种方式分别实现栈的出栈、入栈、取栈顶元素、判空、查找等操作。2.需求分析:用链表和数组两种方式来实现栈的一系列操作,包括栈的出栈、入栈、取栈顶元素、判空、查找等操作。定义栈中数据为整型,程序中所用到的数据全为整型。打开程序后用户可根据提示选择不同的操作包括以上提到的所有操作!测试数据:(1)链表实现:请输入您要建立的栈的大小:5请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出1请输入进栈值:1 2 3 4 5插入元素成功!请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出25出栈请

33、选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出3栈顶值为:4请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出4清空完毕!(2)数组实现:请输入您要建立的栈的大小:5请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出1请输入进栈值:0 1 2 3 4插入元素成功!请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出2删除成功!4出栈请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出3栈顶值为:3取值结束!请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出4清空完毕!3.设计概要: (1)链表实现:建一个结构体Stack来表示栈,它包括栈顶指针top和栈大小length,top是Slink类型的指针,Slink是指向LNode结构类型指针,包括一个数据域dada和一个指针域next; 数组实现:建一个结构体Stack来表示栈,包括base基址指针,top栈顶指针和存储空间大小stacksize三部

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号