荟聚奇文、博采众长、见贤思齐
当前位置:公文素材库 > 计划总结 > 工作总结 > 刘玉绘 软件工程课程设计总结报告

刘玉绘 软件工程课程设计总结报告

网站:公文素材库 | 时间:2019-05-29 11:23:56 | 移动端:刘玉绘 软件工程课程设计总结报告

刘玉绘 软件工程课程设计总结报告

淮海工学院软件工程课程设计

报告书

题目名称:图书信息管理系统

班级组别:软件082班

组员姓名:刘玉绘,石岩,廖南,徐洪卫,徐浩然,杨晨磊

评语:组员成绩:刘玉绘:;石岩:;廖南:;徐洪卫:;徐浩然:杨晨磊:;指导教师:批阅时间:年月日软件工程课程设计文档目录序名称份数号12345678软件工程课程设计收获与体会班级:软件082组别:6姓名:刘玉绘学号110831227本次的软件工程设计针对具体的实际项目来进行需求分析,测试计划,概要设计,详细设计,测试分析等具体的步骤流程走下来,历时时间为3个星期。从这3个星期中,我收获很多,本次课程设计的选题是图书信息管理系统,组员为六个人。针对具体的实际流程,我们有了明确的分工。各个流程的都深有体会。在确立了项目之后,我们就开始拟定项目开发计划。在做项目开发的时候,对需求分析用时,开发用时,测试用时,维护等等都做了详细的分析。这样便于在实际的开发时随时跟踪计划任务的完成度,从而让开发人员将进度掌握在开发周期的范围内。其次更具要求相应的完成了其他的相关文档。在团队的开发项目中,团结协作是非常的重要,这个就体现在人与人之间的沟通。很好的沟通能够加快项目开发的进度。这就要求我们作为开发人员要学会和善于与合作者沟通。通过不断的交流和沟通来避免一些隐藏的问题,及时的发现问题,解决问题,从而能够按时的完成项目开发进度。在小组长合理的划分好各个时每个人的任务后,我们都按照要求在规定的时间里面完成并提交了符合要求的文档。对于文档在软件工程中的重要性在课程设计中体现的非常的明显。文档是必不可少的,它重要的也是为了帮助小组成员的沟通。但是文档也不能过多,过于的繁琐。我们是完全按照GB8567-88的标准来完成各个文档。不仅明确的阐述了开发图书信息管理系统的各个步骤及设计,同时也简洁明了。通过本次课程设计,加深了对软件开发流程的深入理解。这是第一次严格的按照软件工程开发的标准开发项目。在课程设计过程中,认真编写软件开发文档。代码编写完后,再认真测试,检查系统的不足之处。在设计过程中我们也认真的学习了Rational的一套软件,通过次工具我们完成了面向对象需求分析及后面的测试,相信这对我们将来工作都非常的有帮助。由于之前开发系统都没有编写软件开发文档的习惯,因此,在编写软件开发文档的过程中遇到了一些问题,但是通过查阅资料等途径解决了。其次,我学会了软件工设计的全部过程,知道文档的重要性,知道团队合作的重要性。同时,对系统的需求分析非常重要,需求的变成直接影响项目的开发进度。这次课程设计首先对系统的需求理解不透彻,走了一点弯路,浪费了一些时间。在以后的软件开发过程中尽量吸取本次课程设计的经验教训,提高项目开发效率。

扩展阅读:软件课程设计总结报告1

郑志安

编号:()字号

《软件课程设计》报告

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

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

201*年1月

郑志安

软件课程设计任务书

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

任务下达日期:201*年10月16日

课程设计日期:201*年10月16日至201*年1月2日

课程设计题目:

类别题目序号面向过程1,2,3,4,5,6,7面向对象1,2,3,4,5,6,7,8图形界面3数据结构1,2,3,4,6,9

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

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

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

成绩:

指导教师签字:年

月日3

目录

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

第一部分基础题

第一题1面向过程

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

1.1需求分析…………………………………………………………………………11.2概要设计………………………………………………………………………...11.3详细设计与编码………………………………………………………………...11.4调试分析………………………………………………………………………...21.5用户使用说明………………………………………………………………….31.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需求分析………………………………………………………………………….32.2概要设计………………………………………………………………………..32.3详细设计与编码………………………………………………………………...42.4调试分析………………………………………………………………………...42.5用户使用说明………………………………………………………………….52.6设计心得………………………………………………………………………...5

2面向对象

第三题

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

可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。classcomplex{doublereal;//复数实部doubleimag;//复数虚部public:complex();//无参构造函数complex(doubler,doublei);//2参构造函数complexaddCom(complexc2);//调用者对象与对象c2相加,返回complex类对象voidoutCom();//输出调用者对象的有关数据(各分量)};

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

3.1需求分析…………………………………………………………………………..53.2概要设计………………………………………………………………………...53.3详细设计与编码………………………………………………………………...63.4调试分析………………………………………………………………………..63.5用户使用说明………………………………………………………………….73.6设计心得………………………………………………………………………..7

第四题

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

………………………………………………………………….……………………..74.1需求分析…………………………………………………………………………..74.2概要设计………………………………………………………………………...74.3详细设计与编码………………………………………………………………...84.4调试分析………………………………………………………………………...84.5用户使用说明………………………………………………………………….94.6设计心得………………………………………………………………………...10

第五题可视化编程

用你熟悉的一种可视化编程语言实现以下汉诺塔演示程序(可以参考附件中的程序代码)。5.1需求分析…………………………………………………………………………..115.2概要设计………………………………………………………………………...125.3详细设计与编码………………………………………………………………...135.4调试分析………………………………………………………………………...145.5用户使用说明………………………………………………………………….155.6设计心得………………………………………………………………………...15

数据结构第六题

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

6.1需求分析…………………………………………………………………………..176.2概要设计………………………………………………………………………...176.3详细设计与编码………………………………………………………………...176.4调试分析………………………………………………………………………...186.5用户使用说明…………………………………………………………………186.6设计心得………………………………………………………………………...18

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

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

7.1需求分析…………………………………………………………………………..197.2概要设计………………………………………………………………………...197.3详细设计与编码………………………………………………………………...197.4调试分析………………………………………………………………………...197.5用户使用说明………………………………………………………………….197.6设计心得………………………………………………………………………...20

1面向过程第5题5.

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

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

需求分析:

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

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

intsum_day(intmonth,intday){inti;intday_tab[12]={31,28,31,30,31,30,31,31,30,31,30,31};for(i=0;i=3)days=days+1;s=s+(days-1)%7;if(s>7)s=s%7;

cout

intyear,month,day,days,s;coutyear>>s;Intyear,month,day,days,s;coutmonth>>day;

days=sum_day(month,day);if(leap(year)&&month>=3)

Cin>>year>>s;days=days+1;

Cin>>month>>days=s+(days-1)%7;

;if(s>7)

s=s%7;

cout

Cout

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":return1000;break;case"D":return500;break;case"C":return100;break;case"L":return50;break;case"X":return10;break;case"V":return5;break;case"I":return1;break;

对于罗马数据中每个字母对应数据累加过程,我们有如下算法:

while((y=getchar())!="\\n"){if(f(x)

case"I":return1;break;}}

运行结果如下:

Cout

2.4调试分析

1程序开始不可少语句intf(char);intm=0;

charx,y;//设“基值”并作零初始化,若不做初始化,字母输出任意值。2.将对应的字母返回对应的值,然后把数值累加起来,除了对应之外没有其他难点

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

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

2.6设计心得:

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

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

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

3.1需求分析

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

public:

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

Complex(doubler,doublei){real=r;imag=i;}//2参构造函数ComplexaddCom(Complex&c2);//实现加法运算;ComplexaddCom2(Complex&d2);//实现减法运算;ComplexaddCom3(Complex&e2);//实现乘法运算;ComplexaddCom4(Complex&f2);//实现除法运算;voidoutCom();//输出结果运算private:

doublereal;//复数实部doubleimag;//复数虚部};

3.3详细设计与编码#includeusingnamespacestd;classComplex{

public:

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

Complex(doubler,doublei){real=r;imag=i;}ComplexaddCom(Complex&c2);ComplexaddCom2(Complex&d2);ComplexaddCom3(Complex&e2);ComplexaddCom4(Complex&f2);voidoutCom();private:doublereal;doubleimag;};

ComplexComplex::addCom(Complex&c2){Complexc;

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

ComplexComplex::addCom2(Complex&d2){Complexd;

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

ComplexComplex::addCom3(Complex&e2){Complexe;

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

ComplexComplex::addCom4(Complex&f2){Complexf;

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);returnf;}

voidComplex::outCom()

{cout

开始声明一个Complex类,并定义doublereal、imag;声明类的函数,构造函数,加减乘除运算

c.real=real+c2.real;c.imag=imag+c2.imag;d.real=real-d2.real;d.imag=imag-d2.imag;e.real=real*e2.real-imag*e2.imag;e.imag=real*e2.imag+e2.real*imag;

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);输出其加减乘除的值终止

运行结果如下:

3.4调试分析

1.定义Complex类很重要。

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

3.写程序时的位置对应,以便查错。

3.5用户使用说明:屏幕直接显示。3.6设计心得:

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

第四题/*6.

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

题,

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

templateclasstmplt{

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

4.1需求分析

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

templateclasstmplt{Tarr[n];//n个T类型的数据存放于数组arr之中public:voiddataIn();//从键盘输入n个T类型数据放入arr数组中voidreverseOut();//将arr数组中的数据按输入的相反顺序输出};

4.3详细设计与编码#include#includeusingnamespacestd;templateclasstmplt{Tarr[n];public:

voiddateIn(){inti;

for(i=0;i>arr[i];};

voidreverseOut(){inti;

for(i=n-1;i>=0;i--)coutCout

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

4.6设计心得:

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

第五题.可视化编程

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

5.1需求分析

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

实5.2概要设计

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

后根据题目图形的需求,在工作区的Resourceview中的Dialog进行框架的设计,跟着视频思路往下走。

5.3详细设计与编码实现过程

可视

编程

5.4调试分析

移动过程中要细心,按指定程序移动。

5.5用户使用说明

本程序是汉诺塔程序使用很简单,直接点击按钮移动就能得到结果。5.6设计心得可视化编程编程由于以前没接触过所以较难,许多函数都

要查资料,或上网搜寻。

第六题

6数据结构第二题假设有一个循环链表的长度大于1,且表中既无

头结点也无头指针。已知p为指向链表中某结点的指针,试编写算法在链表中删除结点p的前趋结点。6.1需求分析

在数据结构的学习中,链表是最常见的存储方式,链表的插入,删除,改正也就是很常用的操作,对它的学习就显得很有必要而且很有意义。

6.2概要设计

1.对节点的删除,无疑先要定义一个结构体和指针,运来存放和查找要删除的节点structNode*next

2.设计一个类求前驱节点:node1*getPriorNode(node1*node)3.删除指向结点的前驱结点:delPriorNode(node1*node)4.输出原始链表:printList(node1*node)

5.主函数将操作后的链表输出。

6.3详细设计与编码#include#include

typedefstruct_node1{

struct_node1*next;intvalue;}node1;

node1*getPriorNode(node1*node){

node1*next;

if(!node){

returnNULL;}

next=node->next;

while(node!=next->next){

next=next->next;}

returnnext;}

voiddelPriorNode(node1*node){

node1*prior=getPriorNode(node);

if(prior){

getPriorNode(prior)->next=prior->next;}}

voidprintList(node1*node){

node1*next;

开始node1a,b,c,d,e,f,g;对每个节点的数值区赋值,以及说明其指针指向的地址printList(&a);delPriorNode(&c);printList(&a);结束

if(!node){

return;}

printf("%d",node->value);next=node->next;while(node!=next){

printf("-->%d",next->value);next=next->next;}

printf("\\n");}

voidmain(){

node1a,b,c,d,e,f,g;

a.value=1;b.value=2;c.value=3;d.value=4;e.value=5;f.value=6;g.value=7;

a.next=&b;b.next=&c;c.next=&d;d.next=&e;e.next=&f;f.next=&g;g.next=&a;

printf("Originallist:");printList(&a);delPriorNode(&c);

printf("Deletednode3"spriornode(node2):");printList(&a);}

运行结果:

6.4调试分析

编写过程要细心,缺分号,括号的现象也有时发生

6.5用户使用说明

程序中的数字是从编程时输入的,平心而论该程序还有很大的改编空间,是一个静态的检验程序

6.6设计心得

进一步掌握了链表的基本操作,前驱指针在查找节点时的作用,类的整体设计和个类之间的关系,弄懂这些编程的要点,无论是在今后的学习还是调试过程中都是很有意义的。

7据结构第三题

/*3.编程序,按如下方法求A矩阵的转置矩阵B:输入两个正整数m和n,而后通过使用指针配合new运算符生成一个m行n列的二维动态数组A以及另一个n行m列的二维动态数组B,之后为A输入数据(A矩阵数据),进而求出其转置矩阵B(数据放动态数组B中)并输出结果。*/

7..1需求分析

矩阵是物理数学中极其常见的数学工具,研究它的运算也是十分重要的,特别的在计算机程序中的应用是更重要的

7.2概要设计

输入两个正整数m和n,而后通过使用指针配合new运算符生成一个m行n列的二维动态数组A以及另一个n行m列的二维动态数组B,之后为A输入数据(A矩阵数据),进而求出其转置矩阵B(数据放动态数组B中)。既是要求又是提示,故有一下提纲:

1.A=newint*[m];B=newint*[n];建立动态数组分别存放行和列

2.for(a=0;a

7.3详细设计与编码

#includeusingnamespacestd;voidmain(){inta,b,m,n;int**A,**B;cin>>m>>n;A=newint*[m];for(a=0;a

结束删除动态数组A,B.在n行m列的二维数组中依次赋值。cout

7.4调试分析

本程序的编写,调试费了好大的力气,具体的:

1.int**A,**B指针的定义符号问题,即指向指针的指针

2.A=newint*[m],B=newint*[n]动态数组的定义问题

3.for(a=0;a

8

课程设计总结:

通过多次软件课程设计学习,我已经基本熟练对面向过程,面向对象,可视化编程,数据结构的基本操作。并为以后进一步学习计算机编程奠定了良好的基础。相信在以后的学习中,我能更一步领悟到编程给我带来的快乐。

友情提示:本文中关于《刘玉绘 软件工程课程设计总结报告》给出的范例仅供您参考拓展思维使用,刘玉绘 软件工程课程设计总结报告:该篇文章建议您自主创作。

来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


刘玉绘 软件工程课程设计总结报告》由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
链接地址:http://www.bsmz.net/gongwen/693809.html