软件毕业课程设计总结报告1

更新时间:2024-05-23 10:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

(此文档为word格式,下载后您可任意编辑修改!)

编号:( )字 号

《软件课程设计》报告

班级:信科09-3班 姓名:张晴刚 学号: 讲师:谢红侠

中国矿业大学计算机科学与技术学院

2011年 1 月

软件课程设计任务书

专业年级:电子信息科学与技术2009级 学生姓名: 张晴刚

任务下达日期:2010年10月16日

课程设计日期:2010年10月16日至2011年1月2日

课程设计题目:

类别 面向过程 面向对象 图形界面 数据结构

题目序号 1,2,3,4,5,6,7 1,2,3,4,5,6,7,8 3 1,2,3,4, 6, 9

软件课程设计指导教师评阅书

指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的

能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题等):

成 绩: 指导教师签字:

年 月 日

目 录

==============================

第一部分 基础题

第一题1面向过程

5. 编程序,使 用户任意输入一个年份以及该年的1月1日是星期几,而后任意指定某一天(再输入该年的任意一个月份日期),由程序计算出这一天是星期几。注意,2月份闰年为29天,非闰年为28天;可被4整除而不可被100整除的年份、或者可被400整除的年份均为闰年。

思考:利用元年元月元日(即1年1月1日)是星期一的已知事实,可对程序进行改造,让用户仅输入一个表示日期的年月日,则程序就应计算出那一天是星期几。……………..………………....................................7

1.1 需求分析…………………………………………………………………………1 1.2 概要设计………………………………………………………………………...1 1.3 详细设计与编码………………………………………………………………...1 1.4 调试分析………………………………………………………………………...2 1.5 用户使用说明 ………………………………………………………………….3 1.6 设计心得………………………………………………………………………...3

第二题

7.将输入的罗马数据化为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。

…………………………………………………………………………3

2.1需求分析………………………………………………………………………….3 2.2 概要设计………………………………………………………………………..3 2.3 详细设计与编码………………………………………………………………...4 2.4 调试分析………………………………………………………………………...4 2.5 用户使用说明 ………………………………………………………………….5 2.6 设计心得………………………………………………………………………...5

2面向对象 第三题

1. 第一题 自定义一个示意性的复数类型complex,其中含有若干个成员函数,使

用该类可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。 class complex{ double real; 复数实部 double imag; 复数虚部 public: complex(); 无参构造函数 complex(double r, double i); 2参构造函数 complex addCom(complex c2); 调用者对象与对象c2相加,返回complex类对象

void outCom (); 输出调用者对象的有关数据(各分量) };

进一步,在类中添加对复数进行其他基本运算(如,复数减、乘、除、取模等)的相应成员函数,并通过主函数处的调用来验证各函数的使用正确性。 ………………………………..………………….5

3.1需求分析…………………………………………………………………………..5 3.2 概要设计………………………………………………………………………...5 3.3 详细设计与编码………………………………………………………………...6 3.4 调试分析………………………………………………………………………..6 3.5 用户使用说明 ………………………………………………………………….7 3.6 设计心得………………………………………………………………………..7

第四题

6 编写一个具有如下样式的类模板tmplt,用于实现所谓的反序输出问题,其中使用了类型参数T(使所处理的元素类型可变化)以及普通参数n(元素个数也可变化): template class tmplt { T arr[n]; n个T类型的数据存放于数组arr之中 public: void dataIn(); 从键盘输入n个T类型数据放入arr数组中 void reverseOut(); 将arr数组中的数据按输入的相反顺序输出 };

………………………………………………………………….……………………..7 4.1需求分析…………………………………………………………………………..7 4.2 概要设计………………………………………………………………………...7 4.3 详细设计与编码………………………………………………………………...8 4.4 调试分析………………………………………………………………………...8 4.5 用户使用说明 ………………………………………………………………….9 4.6 设计心得………………………………………………………………………...10

第五题 可视化编程

用你熟悉的一种可视化编程语言实现以下汉诺塔演示程序(可以参考附件中的程序代码)。

5.1需求分析…………………………………………………………………………..11 5.2 概要设计………………………………………………………………………...12 5.3 详细设计与编码………………………………………………………………...13 5.4 调试分析………………………………………………………………………...14 5.5 用户使用说明 ………………………………………………………………….15 5.6 设计心得………………………………………………………………………...15

数据结构 第六题

2假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知p为指向链表中某结点的指针,试编写算法在链表中删除结点p 的前趋结点。

6.1需求分析…………………………………………………………………………..17 6.2 概要设计………………………………………………………………………...17 6.3 详细设计与编码………………………………………………………………...17 6.4 调试分析………………………………………………………………………...18

6.5 用户使用说明 …………………………………………………………………18 6.6 设计心得………………………………………………………………………...18

第七题编程序,按如下方法求A矩阵的转置矩阵B:输入两个正整数m和n,而

后通过使用指针配合new运算符生成一个m行n列的二维动态数组A以及另一个n行m列的二维动态数组B,之后为A输入数据(A矩阵数据),进而求出其转置矩阵B(数据放动态数组B中)并输出结果。

7.1需求分析…………………………………………………………………………..19 7.2 概要设计………………………………………………………………………...19 7.3 详细设计与编码………………………………………………………………...19 7.4 调试分析………………………………………………………………………...19 7.5 用户使用说明 ………………………………………………………………….19 7.6 设计心得………………………………………………………………………...20

1面向过程 第5题5.

编程序,使 用户任意输入一个年份以及该

年的1月1日是星期几,而后任意指定某一天(再输入该年的任意一个月份日期),由程序计算出这一天是星期几。注意,2月份闰年为29天,非闰年为28天;可被4整除而不可被100整除的年份、或者可被400整除的年份均为闰年。 思考:利用元年元月元日(即1年1月1日)是星期一的已知事实,可对程序进行改造,让用户仅输入一个表示日期的年月日,则程序就应计算出那一天是星期几。

需求分析:

当我们处理查找具体年份月日是周几的问题,往往会遇到闰年平年的问题,还有七天一循环的问题。因此实现此类算法是很有必要的。 1.2 概要设计:

对于指定具体年月日所在本年的第多少天,有如下算法。

int sum_day(int month,int day) { int i; int day_tab[12]={ }; for(i=0;i

求解平年还是闰年的算法如下: int leap(int year) {

int leap;

leap=((year%4==0&&year0!=0)||(year@0==0)); return (leap); }

求解指定日期是周几的算法如下: days=sum_day(month,day); if(leap(year)&&month>=3) days=days+1; s=s+(days-1)%7; if(s>7) s=s%7;

cout<

1.3详细设计与编码: #include using namespace std; int main() {

int sum_day(int,int); int leap(int);

int year,month,day,days,s; cout<<\年,1月1日星期:\cin>>year>>s;

cout<<\指定月日:\cin>>month>>day;

days=sum_day(month,day); if(leap(year)&&month>=3) days=days+1; s=s+(days-1)%7; if(s>7) s=s%7;

cout<

int sum_day(int month,int day) { int i; int day_tab[12]={ }; for(i=0;i

day+=day_tab[i]; return (day); }

int leap(int year) {

int leap;

leap=((year%4==0&&year0!=0)||(year@0==0)); return (leap); }

no

yes

1.4调试分析

1. year,month,day,days,s的类型是int型的。

2.对于平年闰年的分析,要分别对待,加以区分。 3. 注意体会尝试程序的健壮性。 4.尝试用其他方法完成该程序 1.5用户说明

用户可直接通过键盘向界面输入你指定年份1月1日是星期几,然后输入本年的月日,即可在屏幕上得到本年指定年月日是周几了。 1.6 设计心得:

在这个程序设计中,所用的都是最基本的知识,对于最基本的知识一定要达到熟练的程度,才能熟中生巧,设计出高质量的程序。

2.面向过程 第7题将输入的罗马数据化为10进制数。假设罗马

数据中只使用如下7个“基值”字母:M、D、C、L、X、V、I,分别用来表示1000、500、100、50、10、5、1。

2.1需求分析:

我们在生活中常会遇见用罗马数字表示的代码或者数学、物理等学习过程中,往往会遇到将罗马数字转化为十进制数的计算,设计一个简单的转换程序是很有意义的 2.2概要设计

将输入的10进制正整数转换为罗马数据。假设罗马数据中只使用“基值”字母:M、D、C、L、X、V、I,分别用来表示1000、500、100、50、10、5、1。显然是一个翻译程序,肯定是将一种表达形式换算成另一种表达形式。该题是把罗马数字转换成十进制数,初步设想:对于每个输入的字母,用一个算法返回一个指定的数值,算法如下:

case 'M':return 1000;break; case 'D':return 500;break; case 'C':return 100;break; case 'L':return 50;break; case 'X':return 10;break; case 'V':return 5;break; case 'I':return 1;break;

对于罗马数据中每个字母对应数据累加过程,我们有如下算法: while((y=getchar())!='\\n') { if(f(x)

m=m+f(x);

cout<

2.3详细设计与编码:

#include using namespace std; int main() { int f(char); int m=0; char x,y; cout<<\输入罗马数字:\ cin>>x; while((y=getchar())!='\\n') { if(f(x)

int f(char c) { switch(c) { case 'M':return 1000;break; case 'D':return 500;break; case 'C':return 100;break; case 'L':return 50;break; case 'X':return 10;break; case 'V':return 5;break; case 'I':return 1;break; } }

运行结果如下:

2.4调试分析

1程序开始不可少语句 int f(char); int m=0; char x,y;设“基值”并作零初始化,若不做初始化,字母输出任意值。 2.将对应的字母返回对应的值,然后把数值累加起来,除了对应之外没有其他难点

3.尝试着用其他方法编写 2.5用户使用说明:

用户直接从键盘输入罗马数字,按回车键可以方便得到输出的阿拉伯数字。

2.6设计心得:

此程序在设计之前,一定要分析好设计思路,分析每个罗马字母中返回的数值,做好相应的处理。

第三题 1. 自定义一个示意性的复数类型complex,其中含有若干个成员函数,使用该类可以完成复数的加法以及对复数的输出。

请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。

3.1需求分析

运用对象实现该算法,说明complex类对象,对定义的各成员函数进行调用,是很有必要的。 3.2概要设计 class Complex {

public:

Complex(){real=0;imag=0;} 无参构造函数

Complex(double r,double i){real=r;imag=i;} 2参构造函数 Complex addCom(Complex &c2);实现加法运算; Complex addCom2(Complex &d2); 实现减法运算; Complex addCom3(Complex &e2); 实现乘法运算; Complex addCom4(Complex &f2); 实现除法运算; void outCom();输出结果运算 private: double real; 复数实部 double imag; 复数虚部 };

3.3详细设计与编码 #include using namespace std; class Complex {

public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;} Complex addCom(Complex &c2); Complex addCom2(Complex &d2); Complex addCom3(Complex &e2); Complex addCom4(Complex &f2); void outCom(); private: double real; double imag;

};

Complex Complex::addCom(Complex &c2) {Complex c;

c.real=real+c2.real; c.imag=imag+c2.imag; return c; }

Complex Complex::addCom2(Complex &d2) {Complex d;

d.real=real-d2.real; d.imag=imag-d2.imag; return d; }

Complex Complex::addCom3(Complex &e2) {Complex e;

e.real=real*e2.real-imag*e2.imag; e.imag=real*e2.imag+e2.real*imag; return e; }

Complex Complex::addCom4(Complex &f2) {Complex f;

f.real=(real*f2.real+imag*f2.imag)(f2.real*f2.real+f2.imag*f2.imag); f.imag=(f2.real*imag-real*f2.imag)(f2.real*f2.real+f2.imag*f2.imag); return f; }

void Complex::outCom()

{cout<<\int main() {

Complex c1(5,4),c2(3,4),c3,d1,e1,f1; c3=c1.addCom(c2); d1=c1.addCom2(c2); e1=c1.addCom3(c2); f1=c1.addCom4(c2); c3.outCom(); d1.outCom(); e1.outCom(); f1.outCom();

return 0; }

运行结果如下:

3.4调试分析

1. 定义Complex类很重要。

2.在Complex类中实现对两复数的加减乘除运算。

3. 写程序时的位置对应,以便查错。 3.5用户使用说明: 屏幕直接显示。 3.6设计心得:

通过此题,我对上学期所学类的定义以及复数运算达到了复习的效果,熟悉了在类中调用个复数进行加减乘除运算的基本操作。对于期原理有一定的掌握,所以这个程序设计倒是不难。

第四题*6.

编写一个具有如下样式的类模板tmplt,用于实现所谓的反序

输出问题,

其中使用了类型参数T(使所处理的元素类型可变化)以及普通参数n(元素个

数也可变化):

template class tmplt { T arr[n]; n个T类型的数据存放于数组arr之中 public: void dataIn(); 从键盘输入n个T类型数据放入arr数组中 void reverseOut(); 将arr数组中的数据按输入的相反顺序输出 }; 而后编制主函数,将类模板实例化为某个具体的类并说明类对象,之后通 过对象调用其负责输入数据的成员函数,再通过对象调用另一成员函数按反序输出那些输入数据。*

4.1需求分析

应用类模板tmplt,用于实现所谓的反序输出问题,使用了类型参数T以及普通参数n。 4.2概要设计

template class tmplt { T arr[n]; n个T类型的数据存放于数组arr之中 public: void dataIn(); 从键盘输入n个T类型数据放入arr数组中 void reverseOut(); 将arr数组中的数据按输入的相反顺序输出 };

4.3详细设计与编码 #include #include using namespace std; template class tmplt {T arr[n]; public: void dateIn(){ int i; for(i=0;i>arr[i];}; void reverseOut(){ int i; for(i=n-1;i>=0;i--) cout<

int main()

{tmpltt1; t1.dateIn(); t1.reverseOut(); tmpltt2; t2.dateIn(); t2.reverseOut(); tmpltt3; t3.dateIn(); t3.reverseOut(); tmpltt4; t4.dateIn(); t4.reverseOut(); return 0; }

运行结果如下:

4.4调试分析

1编程前一定要在整体考虑其结构和实现功能方面做足功夫

3对于数据的输入和输出,要首先在定义中先把它定义好,以便调用是直

接调用。

4.函数对应的调用顺序要正确,不但容易阅读而且容易查错。

4.5用户使用说明:

用户可以输入若干组不同大小的数据,然后按回车键,程序系统会自动在屏幕上生成用户想要得到的结果。 4.6设计心得:

通过该程序的设计,更体会到在大规模的信息调用类以及生成类会更好,更进一步培养自己的编程风格,先整体规划,然后一步一步实现;出错处理的能力。

第五题.可视化编程

用你熟悉的一种可视化编程语言实现以下汉诺塔演示程序(可以参考附件中的程序代码)。

5.1需求分析

实现汉诺塔从第一个位置移到第三个位置

实5.2概要设计

实现 实程序是用MFC制作,在进入MFC时选择基本对话框来建立工程,

然后根据题目图形的需求,在工作区的Resourceview中的Dialog进行框架的设计,跟着视频思路往下走。 5.3详细设计与编码 实现过程

本文来源:https://www.bwwdw.com/article/d557.html

Top