当前位置:文档之家› 软件课程设计总结报告1

软件课程设计总结报告1

编号:()字号《软件课程设计》报告班级:信科09-3班姓名:张晴刚学号:08093588讲师:谢红侠中国矿业大学计算机科学与技术学院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 T, int n> 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]={31,28,31,30,31,30,31,31,30,31,30,31};for(i=0;i<month-1;i++)day+=day_tab[i];return (day);}求解平年还是闰年的算法如下:int leap(int year){int leap;leap=((year%4==0&&year%100!=0)||(year%400==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<<s<<endl;1.3详细设计与编码:#include<iostream>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<<s<<endl; return 0; } int sum_day(int month,int day) {int i;int day_tab[12]={31,28,31,30,31,30,31,31,30,31,30,31}; for(i=0;i<month-1;i++) day+=day_tab[i]; return (day); } int leap(int year) { int leap;leap=((year%4==0&&year%100!=0)||(year%400==0)); return (leap); }noyesInt year,month,day,days,s; Cin>>year>>s; Cin>>month>>day ; 按平年计算出该月日在本年第多少天days=sum_day(month,day); leap=((year%4==0&&year%100!=0)||(year%400==0));判断是否为闰年 days=days+1; 求出该日月在本年是周几 s=s+(days-1)%7; 得出daysCout<<s;;终止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)<f(y))m=m-f(x);else m=m+f(x);x=y;}m=m+f(x);cout<<m<<endl;return 0;}2.3详细设计与编码:#include<iostream>using namespace std;int main(){int f(char);int m=0;char x,y;cout<<"输入罗马数字:"<<endl;cin>>x;while((y=getchar())!='\n'){if(f(x)<f(y))m=m-f(x);else m=m+f(x);x=y;}m=m+f(x);cout<<m<<endl;return 0;}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;开始int f(char);int m=0;char x,y;Cin>>x;执行由罗马数字转化为阿拉伯数字的转换;while((y=getchar())!='\n'){ if(f(x)<f(y))m=m-f(x);else m=m+f(x);x=y;}m=m+f(x);int f(char c){switch(c){case 'I':return 1;break;}}运行结果如下:Cout<<m;终止2.4调试分析1程序开始不可少语句 int f(char);int m=0;char x,y;//设“基值”并作零初始化,若不做初始化,字母输出任意值。

相关主题