1、软件工程图书管理系统需求分析报告软件工程报告图书管理系统需求性分析姓名:蒋维佳学号:20122018班级:应数01班1. 引言1.1编写目的 此规格说明书是为了对图书馆管理系统做一个概要的说明,是软件的大概的分析过程,对最终的软件加以说明。主要的读者为软件设计人员,程序编写员,以及老师。1.2项目背景 该项目作为计算机学院05级的软件课程设计题目,学生应该在规定的时间之内完成,时间是第七周(4月7日)到第十二周(5月16日),学生应该在这个时间之内做好需求规格说明书,概要设计说明书,详细设计说明书,以及做好程序,并在最后加以用户操作手册等一系列详细的设计要求。1.3定义 1.4参考资料实用软件
2、工程第二版 郑人杰 殷人昆 陶永雷等主编 清华大学出版社delphi程序员成长攻略蒙祖强 龚涛等编著 中国水利水电出版社delphi7开发实例完全剖析 王志强 编著 中国电力出版社精通delphi数据库设计与实例开发 陈润编著 中国青年出版社2. 任务概述2.1目标通过该系统可以实现最基本的图书馆的一系列的操作流程,其中包括:图书的借阅,图书的查找,图书的退还,借书证的申请,图书的上架处理,图书的过期未还的处罚等等功能。这些功能要用delphi以及后台的数据库SQL来实现。2.2运行环境 Windows 98/2000/XP/2003操作系统下,安装并配置软件Microsoft SQL Ser
3、ver 2000数据库管理系统。 作者用的是windows XP操作系统,理论上可以在windows 98/2000/2003下运行的。2.3条件与限制因现在配有windows98与windows2003的操作系统的电脑较少,不易找到,所以在这两种操作系统上实验比较困难。3、数据描述3.1静态数据图书:图书编码,书名,书号,图书类别,作者,出版社,出版时间,单价管理员:用户名,密码,权限,姓名读者:借书卡号,姓名,性别,读者类别,所属系部,部门或班级3.2动态数据输入数据:鼠标对按钮的点击,查询方式,查询关键字,新建图书项,新建读者项,图书项、读者项记录的修改,图书借还以及注销操作时的输入信息
4、,受限操作所需的密码等。输出数据:查询关键字所确定的数据库子集,统计结果,操作成功或失败的消息,图书借还以及注销操作时的结果信息。3.3数据库描述数据库采用SQL Server数据库。3.4数据流图与数据字典1、数据流图(1) 顶层数据流图(2)0层数据流图(3)1层数据流图 1.读者信息管理 2.图书信息管理 3.图书借还管理ER图:3.4数据词典(DD)高级管理员(帐号,姓名)一般管理员(帐号,姓名)普通用户(帐号,姓名,班级,性别,组号)登录用户(帐号,密码,权限) 图书类别(类别,类名)图书(图书编号,类别,书名,作者,出版日期,出版社,定价,总数量,剩下数量,备注)借阅(用户帐号,图
5、书编号,借书日期,到期日期,数量,还书日期)3.5数据采集数据通过事先的录入,形成最基本的管理人员帐号,通过管理人员的管理,可以实现相应的数据的添加,删减。比如,管理员可以添加用户的相关信息(通过办理借书证)还可以添加图书(通过新书上架)来办理。3. 功能需求4.1功能划分 图书管理系统主要实现以下七方面的功能:a.查询 b.图书借还 c.图书入库 d.图书维护 e.图书超期提示 f.环境管理 4.2功能描述图书管理包括查询、借还、入库、维护、超期提示、环境管理七方面功能。图书入库,主要实现入库登记。图书借阅,用户需凭相应证件到图书馆进行借书,并由图书管理员进行相应的登记记录档案。查询,当用户
6、要查询自己的借阅情况时,可以进行借阅查询。用户可以通过此系统进行图书的查询和读者查询(即用户自己的相关信息查询)。图书超期提示,当借阅者在已到借书期限时仍未归还图书,提示其尽快办理归还手续。并由系统计算相应的处罚。图书维护,图书管理员可以通过此系统进行相应的图书的维护计算。4.3数据流图(DFD) a新书入库 D1 库存清单 D2 b图书借阅 D1 库存清单 C过期提示d借阅查询 D1 借阅查询清单e.还书处理 D1 库存清单借书:还书:新书上架: 4、4 需求规定在图书管理系统中,管理员要为每个读者建立借阅账户,并給读者发放不同类别的借阅卡(借阅卡可提供卡号、读者姓名),账户内存储读者的个人
7、信息和借阅记录信息。持有借阅卡的读者可以通过管理员(作为读者的代理人与系统交互)借阅、归还图书,不同类别的读者可借阅图书的范围、数量和期限不同,可通过互联网或图书馆内查询终端查询图书信息和个人借阅情况,以及续借图书(系统审核符合续借条件)。借阅图书时,先输入读者的借阅卡号,系统验证借阅卡的有效性和读者是否可继续借阅图书,无效则提示其原因,有效则显示读者的基本信息(包括照片),供管理员人工核对。然后输入要借阅的书号,系统查阅图书信息数据库,显示图书的基本信息,供管理员人工核对。最后提交借阅请求,若被系统接受则存储借阅纪录,并修改可借阅图书的数量。归还图书时,输入读者借阅卡号和图书号(或丢失标记号
8、),系统验证是否有此借阅纪录以及是否超期借阅,无则提示,有则显示读者和图书的基本信息供管理员人工审核。如果有超期借阅或丢失情况,先转入过期罚款或图书丢失处理。然后提交还书请求,系统接受后删除借阅纪录,并登记并修改可借阅图书的数量。图书管理员定期或不定期对图书信息进行入库、修改、删除等图书信息管理以及注销(不外借),包括图书类别和出版社管理。为系统维护人员提供权限管理、数据备份等通用功能。4、5 功能分类4、6 具体需求系统的总体图见图 第一层图:(1):登陆子系统( 2)管理子模块(3)查询模块第二层图:(1):处理新书购入1) 规格说明输入新书的全部信息。 2) 引言为了输入新书的全部信息(
9、包括:分类目录号,流水号书名,作者,内容摘要,价格和购书日期等)。3)输入新书的全部信息。4)处理通过图书管理系统写入图书目录文件。5)输出新书的全部信息。(2) 处理学生借书1) 规格说明查询读者借书的相关信息。2)引言为了查询读者借书的相关信息。3)输入借书信息的关键字。4)处理利用关键字在借书文件中找到此流水号图书的相关信息。5)输出 借书相关信息。(3):处理学生还书1)规格说明输入读者还书信息。2) 引言为了把读者还书的相关信息(包括:图书分类号,流水号,读者号,借阅日期和还书日期等)写入还书文件中。3) 输入读者还书信息。4) 处理 通过图书管理系统写入还书文件中。5)输出 读者还
10、书信息的全部内容。(4):处理图书注销1) 规格说明注销图书的相关内容。2) 引言为了注销图书的相关信息。 3) 输入图书信息的关键字(图书分类号或书名)。4) 处理利用关键字在图书目录文件中找到此图书分类号或书名图书的相关信息。5) 输出图书的注销信息。(5)处理学生信息查询 1)规格说明读者登记,即读者的具体信息。2)引言为了把读者的具体信息(包括:读者编号,姓名,学院,专业,年级等)写入读者目录文件中。3)输入读者具体信息。4)处理通过图书管理系统写入读者目录文件中。5)输出读者具体信息。(6)处理图书信息查询1)规格说明查询图书的相关内容。2)引言为了查找图书的相关信息。 3)输入图书
11、信息的关键字(图书分类号或书名)。4)处理利用关键字在图书目录文件中找到此图书分类号或书名图书的相关信息。5)输出图书的相关信息。4、7数据结构的设计typedef struct BookList char num10; char name20; char author20; int total; int leavings; struct BookList *next;Book; 采用链表的结构来进行数据操作,一本书的数据包括:书号、书名、作者、库存总量、现存量以及指针区域。算法的设计()关键算法设计思路描述 在构思图书馆管理系统的结构时,我将整个程序划分为五个模块,分别定义了五个函数来实现管
12、理系统的功能,除此之外在对程序的界面设计上加入了一些动画效果。在数据结构上采用单链表的结构方式,这样在读取文件中数据的时候能够节省内存空间。设计主菜单时,用while(1)和switch()来实现功能的选择以及运行一项功能后返回主菜单。在整个程序中,统一采用了以输入的方式返回或退出,并在模块有需要键盘输入地方加入了防错误输入的功能,防止输入错误导致程序错误运行,此功能采用判断输入值的ASCII码或字符串的比较。入库模块:首先判断数据文件是否存在,如存在以追加的方式打开,如不存在以写入的方式打开。输入图书的具体数据(在输入过程中,如输入的书号为则返回主菜单)、存盘,判断存盘成功则打印“成功添加”
13、,如存盘失败打印“添加失败”。最后返回入起始界面(入库模块)。清除模块:进入清除模块则将文件中的全部数据用单链表的结构读入内存,提示输入要删除的书号,在内存中寻找并删除,删除后可以马上存盘或是直到全部删除完成后再选择操作,在防止操作后忘记存盘,在程序中加入了自动判断操作过的数据是否己经进行过存盘的功能。查询模块:本模块分为三个子模块:以书号方式查询、以书名的方式查询、以作者的方式查询。前两个查询功能只要找到符合条件的数据时就停止,以作者方式因为考虑到一个作者不止一本作品,所以对全部的数据进行查找,并打印出所有符合条件的数据。如果未找到则打印“没有找到”,最后返回子功能模块起始,直到输入返回上一
14、级。借出、还书模块:这两个功能的思路完全一样,不同的是对数据中的现存量的运算。两个功能都是先建立一个图书类型的数据指针,逐条将文件中的数据读入内存,并与输入的数据进行比较,如果一致则先对内存中的数据进行操作,再将文件中的fp指针后退sizeof(Book)个字节,将内存中的经过修改过的数据写入文件。完成一条操作后,提示进行下一条操作,输入时返回主菜单。()程序结构及模块名称描述a ) void main() /主程序b ) void s(long) /时间延迟函数c ) void sta() /界面初始效果d ) void wel() /界面初始效果e ) void bookadd()/入库f
15、 ) void sa_ve(sqtype) /清除函数中保存文件函数g ) void del() /清除h ) void r() /查询j ) void s_1() /查询功能中以书号方式查询k ) void s_2() /以书名方式查询l ) void s_3() /以作者方式查询m ) void readall() /列出全部图书n ) void borrow() /借出o ) void back() /归还p ) void bye() /退出效果()主要模块算法描述/*添加*/void bookadd() /*添加图书*/ FILE *fp; Book finger; char temp
16、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); else break; printf(请输
17、入书名: ); scanf(%s,finger.name); 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 现存量:%dn,finger.num,finger.
18、name,finger.author,finger.total,finger.leavings); printf(-); else printf(对不起,数据写入文件错误!); fclose(fp); clrscr();/*删除*/del() /*删除功能函数*/ FILE *fp;Book *head,*p,*q,*temp;char a10,s;int flag=0,flag2,flag3=0; fp=fopen(blist.db,rb); head=p=q=(Book*)malloc(sizeof(Book); fread(p,sizeof(Book),1,fp); while(!feo
19、f(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(
20、请输入要删除的书号(0退出,00存盘):);gets(a); if(!strcmp(a,0) goto del_end; else if(!strcmp(a,00) if(flag=0) gotoxy(50,24);textcolor(4);cprintf(您还未进行任何删除操作!);textcolor(7);getch();clreol();goto del_re; else flag3+=sa_ve(head);goto del_re; p=head; while(p!=q-next) if(!strcmp(a,p-num) if(p=head) head=p-next;flag+;fla
21、g2=1;gotoxy(35,13);printf(删除成功!);getch();goto del_re; else temp-next=p-next;flag+;flag2=1;gotoxy(35,13);printf(删除成功!);getch();goto del_re; temp=p; p=p-next; if(flag2=0) gotoxy(50,24);textcolor(4);cprintf(对不起没有找到你要删除的数据!);textcolor(7);getch();clreol();goto del_re;del_end: if(flagflag3) gotoxy(22,13);
22、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(); else b=getchar();goto del_end2; else goto del_end; del_end2: fclose(fp);/*查找(按书号查找)*/s_1() /*查找子函数中的按书号查询功能*/ char temp_num10; Book finger; int flag; FILE *fp;
23、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);goto s_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);cpri
24、ntf(作者);gotoxy(47,1);cprintf(总库存); gotoxy(63,1);cprintf(现存量rn);textcolor(7); printf( %stt%stt%stt%dtt%dn,finger.num,finger.name,finger.author,finger.total,finger.leavings); flag=1;rewind(fp);break; if(flag=0) clrscr();gotoxy(28,12);printf(没有找到您要查询的书!);rewind(fp);getch();clrscr(); goto s_1re;s_1end:
25、b=getchar();/*借书功能*/borrow() FILE *fp;char a10;int flag; Book n; 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) goto borrow_end; fread(&n,sizeof(Book),1,fp); while(!feof(fp) if(
26、!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(); goto borrow_re;borr
27、ow_end: fclose(fp); 四、源程序清单:(见源程序文件名:_lib.c_)五、测试数据及测试结果:(一)添加输入数据:书号 书名 作者 库存1001 h1 li 81002 h2 ki 81003 h3 fd 91004 h4 li 101005 h5 sdfs 111006 h6 ed 91007 h7 tio 7(二)清除输入清除的书号:1006提示删除成功,运行查询功能中的查询全部功能,确认1006己被删除(三)查询书号查询,输入:1005输出:1005 h5 sdfs 11书名查询,输入:h7输出:1007 h7 tio 7作者查询,输入:li输出:1001 h1 li
28、 8 1004 h4 li 10(四)借出输入:1004输出:借出成功运行查询功能中的查询全部功能,显示:书号书名作者库存现存1004 h4 li 10 9(五)归还输入:输出:归还成功运行查询功能中查询全部,显示:书号书名作者库存现存1004 h4 li 10 10六、心得体会:编写整个模拟图书馆管理程序历时五天,五个功能模块中的入库与查询模块由于定义函数名与语言中自带函数名冲突,到发现原因并修改,期间耗时三天。在三天期间,在不知道冲突原因之前,我在几个论坛上发贴,有回贴的竟没人知道原因,后来偶然的灵机一动,将函数名更改,程序顺利运行。我还从网上下了一本语言函数的电子书,经查确实是由于函数名冲突。所以,我们在定义函数的时候,在注意函数名是否与语言自带的函数冲突。因为我比较喜欢有应用性的程序,所以挑选图书馆来做,但是在确定所用数据结构方面,构思时考虑不足,忽略了图书馆内书的数据量,一直到入库与查询两个模块完成,我还是采用顺序表的结构来进行数据操作,但
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1