软件架构设计范围及软件工程图书管理系统需求分析报告_第1页
软件架构设计范围及软件工程图书管理系统需求分析报告_第2页
软件架构设计范围及软件工程图书管理系统需求分析报告_第3页
软件架构设计范围及软件工程图书管理系统需求分析报告_第4页
软件架构设计范围及软件工程图书管理系统需求分析报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、什么是软件架构,谈谈你对软件架构的理解 某个软件或计算机系统的软件架构是该系统的一个或多个结构,每个结构均由软件元素、这些元素的外部可减属性、这些元素之间的关系组成。 我认为软件架构就是某个软件系统在规划设计时,需要预先设计好框架结构,保证软件的设计大方向的正确性,确保设计好的软件的质量、安全、可扩展等性能得到保障。2、什么是架构视图?为什么软件架构师需要提供多个不同的软件架构视图? 架构视图是一种设计架构、描述架构的核心手段,是对于从某一角度或某一点上看到的系统所作的简化描述,描述中涵盖了系统的某一特定方面,而省略了与此方面无关的实体。 由于软件团队和客户各自掌握的技术存在差异,为了完成各自的工作,他们需要了解整套软件架构决策的不同方面,所以软件架构师需要提供多个不同的软件架构视图,以便交流和传达设计思想。3、简述软件架构设计的3个原则 原则1:看透需求 这是基础,设计人员要找全需求,搞清楚需求项之间的矛盾关系、追溯关系。 原则2:架构大方向正确 这是一种策略,先设计概念架构,更重视“找对路子”。 原则3:设计好架构的各个方面, 运用多视图设计方法从多方面进行架构设计,把问题研究、表达清楚,否则会有掩盖问题及延误解决问题的风险。4、软件架构设计过程包含哪些步骤以及之间的关系? 1)需求分析 2)领域建模 3)确定关键需求 4)概念架构设计 5)细化架构设计 6)架构验证5、软件架构设计过程中,如何确定关键需求? 1)确定关键质量 着重提高软件认可度相关的质量属性要求;充分考虑这些质量属性的相互制约或促进的关系;同时必须满足各种约束性需求。 2)确定关键功能 核心功能,必做功能,高风险功能,独特功能6、在细化架构设计过程中,包括哪5个视图?每个视图分别包括哪些设计任务? 1)逻辑视图 模块划分、接口定义、领域模型2)开发视图 技术选型、文件划分、编译关系3)运行视图 技术选型、控制流划分、同步关系4)物理视图 硬件分布、软件部署、方案优化5)数据视图 技术选型、存储格式、数据分布7、请简述概念架构设计阶段的1个决定、4个选择 决定如何划分顶级子系统 选择架构风格,选择开发技术,选择集成技术,选择二次开发技术8、在软件架构设计中,如何进行架构验证? 1)原型法 用于项目型开发,借助专门工具营造出想要的场景,进行真实性测试,重点是质量属性测试,进行挑选原型实现的功能需求(用户最关心的,架构师最担心的那些)。 2)框架法 用于产品开发,将架构设计方案用框架的形式表现,并在此基础上进行评估验证。9、简述用例驱动的模块划分过程 两环节、四步骤 1)需求分析环节 2)架构设计环节 第一步回答“实现用例需要哪些类”的问题——运用鲁棒图、序列图 第二部回答“这些类应划归哪些模块”的问题——运用包图10、简述封装驱动设计方法(EDD方法)的步骤。 4步骤 1)研究需求 重点是上下文图和功能树,发现问题,第一时间提出。 2)粗粒度分层 根据功能树,粗粒度划分功能模块 3)细粒度划分模块 4)用例驱动的模块划分结构评审、优化软件工程报告图书管理系统需求性分析姓名:学号:班级:应数班引言1.1编写目的此规格说明书是为了对图书馆管理系统做一个概要的说明,是软件的大概的分析过程,对最终的软件加以说明。主要的读者为软件设计人员,程序编写员,以及老师。1.2项目背景该项目作为计算机学院05级的软件课程设计题目,学生应该在规定的时间之内完成,时间是第七周(4月7日)到第十二周(5月16日),学生应该在这个时间之内做好需求规格说明书,概要设计说明书,详细设计说明书,以及做好程序,并在最后加以用户操作手册等一系列详细的设计要求。1.3定义1.4参考资料《实用软件工程》第二版郑人杰殷人昆陶永雷等主编清华大学出版社《delphi程序员成长攻略》蒙祖强龚涛等编著中国水利水电出版社《delphi7开发实例完全剖析》王志强编著中国电力出版社《精通delphi数据库设计与实例开发》陈润编著中国青年出版社任务概述2.1目标通过该系统可以实现最基本的图书馆的一系列的操作流程,其中包括:图书的借阅,图书的查找,图书的退还,借书证的申请,图书的上架处理,图书的过期未还的处罚等等功能。这些功能要用delphi以及后台的数据库SQL来实现。2.2运行环境Windows98/2000/XP/2003操作系统下,安装并配置软件MicrosoftSQLServer2000数据库管理系统。作者用的是windowsXP操作系统,理论上可以在windows98/2000/2003下运行的。2.3条件与限制因现在配有windows98与windows2003的操作系统的电脑较少,不易找到,所以在这两种操作系统上实验比较困难。3、数据描述3.1静态数据图书:图书编码,书名,书号,图书类别,作者,出版社,出版时间,单价管理员:用户名,密码,权限,姓名读者:借书卡号,姓名,性别,读者类别,所属系部,部门或班级3.2动态数据输入数据:鼠标对按钮的点击,查询方式,查询关键字,新建图书项,新建读者项,图书项、读者项记录的修改,图书借还以及注销操作时的输入信息,受限操作所需的密码等。输出数据:查询关键字所确定的数据库子集,统计结果,操作成功或失败的消息,图书借还以及注销操作时的结果信息。3.3数据库描述数据库采用SQLServer数据库。3.4数据流图与数据字典1、数据流图(1)顶层数据流图(2)0层数据流图(3)1层数据流图1.读者信息管理2.图书信息管理3.图书借还管理ER图:3.4数据词典(DD)高级管理员(帐号,姓名)一般管理员(帐号,姓名)普通用户(帐号,姓名,班级,性别,组号)登录用户(帐号,密码,权限)图书类别(类别,类名)图书(图书编号,类别,书名,作者,出版日期,出版社,定价,总数量,剩下数量,备注)借阅(用户帐号,图书编号,借书日期,到期日期,数量,还书日期)3.5数据采集数据通过事先的录入,形成最基本的管理人员帐号,通过管理人员的管理,可以实现相应的数据的添加,删减。比如,管理员可以添加用户的相关信息(通过办理借书证)还可以添加图书(通过新书上架)来办理。功能需求4.1功能划分图书管理系统主要实现以下七方面的功能:a.查询b.图书借还c.图书入库d.图书维护e.图书超期提示f.环境管理4.2功能描述图书管理包括查询、借还、入库、维护、超期提示、环境管理七方面功能。图书入库,主要实现入库登记。图书借阅,用户需凭相应证件到图书馆进行借书,并由图书管理员进行相应的登记记录档案。查询,当用户要查询自己的借阅情况时,可以进行借阅查询。用户可以通过此系统进行图书的查询和读者查询(即用户自己的相关信息查询)。图书超期提示,当借阅者在已到借书期限时仍未归还图书,提示其尽快办理归还手续。并由系统计算相应的处罚。图书维护,图书管理员可以通过此系统进行相应的图书的维护计算。4.3数据流图(DFD) a.新书入库数据库1.3处理入库1.2更新书刊库存清单1.1接受事务图书管理员 D1 库存清单数据库1.3处理入库1.2更新书刊库存清单1.1接受事务图书管理员 D2b.图书借阅 D1 库存清单处理借阅数据库进行借阅登记处理借阅数据库进行借阅登记借阅者C.过期提示处理通知信息显示器进行日期处理图书管理员处理通知信息显示器进行日期处理图书管理员d.借阅查询显示器2产生汇总1.1操作事务借阅者显示器2产生汇总1.1操作事务借阅者1.21.2处理查询D1借阅查询清单e.还书处理数据库1.3处理归还1.2更新图书库存清单1.1接受事务图书管理员 D1库存清单数据库1.3处理归还1.2更新图书库存清单1.1接受事务图书管理员借书:还书:新书上架:4、4需求规定在图书管理系统中,管理员要为每个读者建立借阅账户,并給读者发放不同类别的借阅卡(借阅卡可提供卡号、读者姓名),账户内存储读者的个人信息和借阅记录信息。持有借阅卡的读者可以通过管理员(作为读者的代理人与系统交互)借阅、归还图书,不同类别的读者可借阅图书的范围、数量和期限不同,可通过互联网或图书馆内查询终端查询图书信息和个人借阅情况,以及续借图书(系统审核符合续借条件)。借阅图书时,先输入读者的借阅卡号,系统验证借阅卡的有效性和读者是否可继续借阅图书,无效则提示其原因,有效则显示读者的基本信息(包括照片),供管理员人工核对。然后输入要借阅的书号,系统查阅图书信息数据库,显示图书的基本信息,供管理员人工核对。最后提交借阅请求,若被系统接受则存储借阅纪录,并修改可借阅图书的数量。归还图书时,输入读者借阅卡号和图书号(或丢失标记号),系统验证是否有此借阅纪录以及是否超期借阅,无则提示,有则显示读者和图书的基本信息供管理员人工审核。如果有超期借阅或丢失情况,先转入过期罚款或图书丢失处理。然后提交还书请求,系统接受后删除借阅纪录,并登记并修改可借阅图书的数量。图书管理员定期或不定期对图书信息进行入库、修改、删除等图书信息管理以及注销(不外借),包括图书类别和出版社管理。为系统维护人员提供权限管理、数据备份等通用功能。4、5功能分类4、6具体需求系统的总体图见图 第一层图:(1):登陆子系统(2)管理子模块(3)查询模块第二层图:(1):处理新书购入规格说明输入新书的全部信息。2)引言为了输入新书的全部信息(包括:分类目录号,流水号书名,作者,内容摘要,价格和购书日期等)。3)输入新书的全部信息。4)处理通过图书管理系统写入图书目录文件。5)输出新书的全部信息。处理学生借书规格说明查询读者借书的相关信息。2)引言为了查询读者借书的相关信息。3)输入借书信息的关键字。4)处理利用关键字在借书文件中找到此流水号图书的相关信息。5)输出借书相关信息。(3):处理学生还书1)规格说明输入读者还书信息。引言为了把读者还书的相关信息(包括:图书分类号,流水号,读者号,借阅日期和还书日期等)写入还书文件中。输入读者还书信息。4)处理通过图书管理系统写入还书文件中。5)输出读者还书信息的全部内容。(4):处理图书注销规格说明注销图书的相关内容。引言为了注销图书的相关信息。输入图书信息的关键字(图书分类号或书名)。处理利用关键字在图书目录文件中找到此图书分类号或书名图书的相关信息。输出图书的注销信息。(5)处理学生信息查询1)规格说明读者登记,即读者的具体信息。2)引言为了把读者的具体信息(包括:读者编号,姓名,学院,专业,年级等)写入读者目录文件中。3)输入读者具体信息。4)处理通过图书管理系统写入读者目录文件中。5)输出读者具体信息。

(6)处理图书信息查询1)规格说明查询图书的相关内容。2)引言为了查找图书的相关信息。3)输入图书信息的关键字(图书分类号或书名)。4)处理利用关键字在图书目录文件中找到此图书分类号或书名图书的相关信息。5)输出图书的相关信息。4、7.数据结构的设计typedefstructBookList{charnum[10];charname[20];charauthor[20];inttotal;intleavings;structBookList*next;}Book;采用链表的结构来进行数据操作,一本书的数据包括:书号、书名、作者、库存总量、现存量以及指针区域。2.算法的设计(1)关键算法设计思路描述在构思图书馆管理系统的结构时,我将整个程序划分为五个模块,分别定义了五个函数来实现管理系统的功能,除此之外在对程序的界面设计上加入了一些动画效果。在数据结构上采用单链表的结构方式,这样在读取文件中数据的时候能够节省内存空间。设计主菜单时,用while(1)和switch()来实现功能的选择以及运行一项功能后返回主菜单。在整个程序中,统一采用了以输入0的方式返回或退出,并在模块有需要键盘输入地方加入了防错误输入的功能,防止输入错误导致程序错误运行,此功能采用判断输入值的ASCII码或字符串的比较。入库模块:首先判断数据文件是否存在,如存在以追加的方式打开,如不存在以写入的方式打开。输入图书的具体数据(在输入过程中,如输入的书号为0则返回主菜单)、存盘,判断存盘成功则打印“成功添加”,如存盘失败打印“添加失败”。最后返回入起始界面(入库模块)。清除模块:进入清除模块则将文件中的全部数据用单链表的结构读入内存,提示输入要删除的书号,在内存中寻找并删除,删除后可以马上存盘或是直到全部删除完成后再选择操作,在防止操作后忘记存盘,在程序中加入了自动判断操作过的数据是否己经进行过存盘的功能。查询模块:本模块分为三个子模块:以书号方式查询、以书名的方式查询、以作者的方式查询。前两个查询功能只要找到符合条件的数据时就停止,以作者方式因为考虑到一个作者不止一本作品,所以对全部的数据进行查找,并打印出所有符合条件的数据。如果未找到则打印“没有找到”,最后返回子功能模块起始,直到输入0返回上一级。借出、还书模块:这两个功能的思路完全一样,不同的是对数据中的现存量的运算。两个功能都是先建立一个图书类型的数据指针,逐条将文件中的数据读入内存,并与输入的数据进行比较,如果一致则先对内存中的数据进行操作,再将文件中的fp指针后退sizeof(Book)个字节,将内存中的经过修改过的数据写入文件。完成一条操作后,提示进行下一条操作,输入0时返回主菜单。(2)程序结构及模块名称描述主程序主程序界面初始化入库清除查询借出归还书号查询书名查询作者查询全部列表a)voidmain()//主程序b)voids(long)//时间延迟函数c)voidsta()//界面初始效果d)voidwel()//界面初始效果e)voidbookadd()//入库f)voidsa_ve(sqtype)//清除函数中保存文件函数g)voiddel()//清除h)voidr()//查询j)voids_1()//查询功能中以书号方式查询k)voids_2()//以书名方式查询l)voids_3()//以作者方式查询m)voidreadall()//列出全部图书n)voidborrow()//借出o)voidback()//归还p)voidbye()//退出效果(3)主要模块算法描述/*添加*/voidbookadd()/*添加图书*/{FILE*fp;Bookfinger;chartemp[10];fp=fopen("blist.db","rb");/*读方式打开文件*/if(fp==NULL)fp=fopen("blist.db","wb");/*写方式打开文件*/else/*如果有书就添加*/{fclose(fp);fp=fopen("blist.db","ab");/*追加方式打开文件*/}clrscr();while(1){printf("\n请输入数据:\n");/*逐个输入新图书的资料*/printf("请输入书号(输入0结束添加):");gets(temp);if(strcmp(temp,"0"))strcpy(finger.num,temp);elsebreak;printf("请输入书名:");scanf("%s",);printf("请输入书的作者:");scanf("%s",finger.author);printf("请输入书的总数:");scanf("%d",&finger.total);b=getchar();finger.leavings=finger.total;finger.next=NULL;if(fwrite(&finger,sizeof(Book),1,fp))/*块写*/{printf("-----------------------------------------------------------------------------\n");printf("己成功添加:\n书号:%s书名:%s作者:%s库存总量:%d现存量:%d\n",finger.num,,finger.author,finger.total,finger.leavings);printf("-----------------------------------------------------------------------------");}elseprintf("对不起,数据写入文件错误!");}fclose(fp);clrscr();}/*删除*/del()/*删除功能函数*/{FILE*fp;Book*head,*p,*q,*temp;chara[10],s;intflag=0,flag2,flag3=0;fp=fopen("blist.db","rb");head=p=q=(Book*)malloc(sizeof(Book));fread(p,sizeof(Book),1,fp);while(!feof(fp)){q=p;p=(Book*)malloc(sizeof(Book));fread(p,sizeof(Book),1,fp);q->next=p;}p->next=NULL;del_re:flag2=0;clrscr();gotoxy(1,3);textcolor(4);cprintf("提示:");textcolor(7);gotoxy(6,4);printf("您可以逐次操作后存盘,也可以完成全部");gotoxy(6,5);printf("操作后退出时存盘,不进行存盘您所有删");gotoxy(6,6);printf("除操作对文件无效!");gotoxy(1,23);printf("请输入要删除的书号(0退出,00存盘):");gets(a);if(!strcmp(a,"0"))gotodel_end;elseif(!strcmp(a,"00")){if(flag==0){gotoxy(50,24);textcolor(4);cprintf("您还未进行任何删除操作!");textcolor(7);getch();clreol();gotodel_re;}else{flag3+=sa_ve(head);gotodel_re;}}p=head;while(p!=q->next){if(!strcmp(a,p->num))if(p==head){head=p->next;flag++;flag2=1;gotoxy(35,13);printf("删除成功!");getch();gotodel_re;}else{temp->next=p->next;flag++;flag2=1;gotoxy(35,13);printf("删除成功!");getch();gotodel_re;}temp=p;p=p->next;}if(flag2==0){gotoxy(50,24);textcolor(4);cprintf("对不起没有找到你要删除的数据!");textcolor(7);getch();clreol();gotodel_re;}del_end:if(flag>flag3){gotoxy(22,13);clreol();printf("您还有删除操作未存盘,是否存盘(Y/N):");s=getchar();if(s==78||s==89||s==110||s==121){if(s==89||s==121){gotoxy(1,13);clreol();sa_ve(head);b=getchar();}elseb=getchar();gotodel_end2;}elsegotodel_end;}del_end2:fclose(fp);}/*查找(按书号查找)*/s_1()/*查找子函数中的按书号查询功能*/{chartemp_num[10];Bookfinger;intflag;FILE*fp;fp=fopen("blist.db","rb");s_1re:flag=0;gotoxy(1,25);printf("请输入书号(输入0返回):");scanf("%s",temp_num);if(!strcmp(temp_num,"0")){fclose(fp);gotos_1end;}while(!feof(fp)){fread(&finger,sizeof(Book),1,fp);if(!strcmp(finger.num,temp_num)){clrscr();textcolor(4);cprintf("书号");gotoxy(17,1);cprintf("书名");gotoxy(33,1);cprintf("作者");gotoxy(47,1);cprintf("总库存");gotoxy(63,1);cprintf("现存量\r\n");textcolor(7);printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",finger.num,,finger.author,finger.total,finger.leavings);flag=1;rewind(fp);break;}}if(flag==0){clrscr();gotoxy(28,12);printf("没有找到您要查询的书!");rewind(fp);getch();clrscr();}gotos_1re;s_1end:b=getchar();}/*借书功能*/borrow(){FILE*fp;chara[10];intflag;Bookn;fp=fopen("blist.db","rb+");clrscr();borrow_re:flag=0;gotoxy(1,13);clreol();gotoxy(1,24);clreol();gotoxy(1,23);printf("请输入要借的书号(输入0返回):");clreol();gets(a);if(!strcmp(a,"0"))gotoborrow_end;fread(&n,sizeof(Book),1,fp);while(!feof(fp)){if(!strcmp(a,n.num))/*一样的话*/{if(n.leavings==0)printf("对不起,此书全部借出.\n");else{--n.leavings;fseek(fp,-56L,1);fwrite(&n,sizeof(Book),1,fp);gotoxy(35,13);printf("借出成功!");flag=1;getch();}rewind(fp);break;}fread(&n,sizeof(Book),1,fp);}if(flag==0){gotoxy(35,13);printf("借书失败!");rewind(fp);getch();}gotoborrow_re;borrow_end:fclose(fp);}四、源程序清单:(见源程序文件名:____lib.c_____)五、测试数据及测试结果:(一)添加输入数据:书号书名作者库存1001h1li81002h2ki81003h3fd91004h4li101005h5sdfs111006h6ed91007h7tio7(二)清除输入清除的书号:1006提示删除成功,运行查询功能中的查询全部功能,确认1006己被删除(三)查询1.书号查询,输入:1005输出:1005h5sdfs112.书名查询,输入:h7输出:1007h7tio73.作者查询,输入:li输出:1001h1li81004h4li10(四)借出输入:1004输出:借出成功运行查询功能中的查询全部功能,显示:书号书名作者库存现存1004h4li109(五)归还输入:1004输出:归还成功运行查询功能中查询全部,显示:书号书名作者库存现存1004h4li1010六、心得体会:编写整个模拟图书馆管理程序历时五天,五个功能模块中的入库与查询模块由于定义函数名与C语言中自带函数名冲突,到发现原因并修改,期间耗时三天。在三天期间,在不知道冲突原因之前,我在几个论坛上发贴,有回贴的竟没人知道原因,后来偶然的灵机一动,将函数名更改,程序顺利运行。我还从网上下了一本C语言函数的电子书,经查确实是由于函数名冲突。所以,我们在定义函数的时候,在注意函数名是否与C语言自带的函数冲突。因为我比较喜欢有应用性的程序,所以挑选图书馆来做,但是在确定所用数据结构方面,构思时考虑不足,忽略了图书馆内书的数据量,一直到入库与查询两个模块完成,我还是采用顺序表的结构来进行数据操作,但是在编写清除模块的时候,突然间发现将文件数据全部读出时,如果采用顺序链表就必须欲先定制一个足够大的空间,所以我又将数据结构改成单链表以节省内存空间。在编写入库和查询模块时,用的知识都只是大一所学C语言老师教过的,如打开文件fopen命令,读取文件fread命令,写入文件fwrite命令等等。对文件的其它详细操作一无所知,如读取时文件fp指针的位置,如何让fp指针在文件中定位等等。但是我在编写借出,归还和清除三个模块时,恰恰得用到这些知识,所以借用ftell()命令,自己慢慢的摸索出一些门道。如:在借出和归还模块里,我采用的方法是,定义一个图书类型的结构体指针,一次从文件里只读取一个数据,将它的关键字符段与输入数据进行比较,如果一致则将文件指针fp往后移动sizeof(Listtype)个字节,然后将经过这个修改后的数据写入文件。之所以采用这个方法,我是考虑到它在内存中只占用了sizeof(Listtype)字节个空间,并且也只需向文件中写入一次。如果用链表全部读取、修改后再保存文件,一是占用了很大的内存空间,二是要向文件中写入全部的数据。但是,如果要进行多次借出操作的时候,用链表读取只需要全部操作完后一次对修改后的数据进行写入,期间的操作只需在内存中进行。而用我的方法,借一次就必需打开文件,逐条读取,修改写入。所以至于哪种方法更好,我自己具体也弄不清,还请老师

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论