刘玉绘 软件工程课程设计总结报告
淮海工学院软件工程课程设计
报告书
题目名称:图书信息管理系统
班级组别:软件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课程设计总结:
通过多次软件课程设计学习,我已经基本熟练对面向过程,面向对象,可视化编程,数据结构的基本操作。并为以后进一步学习计算机编程奠定了良好的基础。相信在以后的学习中,我能更一步领悟到编程给我带来的快乐。
友情提示:本文中关于《刘玉绘 软件工程课程设计总结报告》给出的范例仅供您参考拓展思维使用,刘玉绘 软件工程课程设计总结报告:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。