图书馆管理系统设计报告.doc

上传人:精*** 文档编号:828532 上传时间:2023-09-06 格式:DOC 页数:55 大小:608.95KB
下载 相关 举报
图书馆管理系统设计报告.doc_第1页
第1页 / 共55页
图书馆管理系统设计报告.doc_第2页
第2页 / 共55页
图书馆管理系统设计报告.doc_第3页
第3页 / 共55页
图书馆管理系统设计报告.doc_第4页
第4页 / 共55页
图书馆管理系统设计报告.doc_第5页
第5页 / 共55页
点击查看更多>>
资源描述

1、 目 录1、数据结构课程设计任务书1.1、题目1.2、要求2、总体设计2.1、功能模块设计2.2、所有功能模块的流程图3、详细设计3.1、程序中所采用的数据结构及存储结构的说明3.2、算法的设计思想3.3、对图书借阅时的选择与操作4、调试与测试:4.1、调试方法与步骤:4.2、测试结果的分析与讨论:4.3、测试过程中遇到的主要问题及采取的解决措施:5、时间复杂度的分析:6、源程序清单和执行结果7、C程序设计总结8、致谢9、参考文献1、数据结构课程设计任务书1.1、题目图书馆管理系统1.2、要求【设计要求】对图书进行管理,系统具有如下功能1图书入库:新购一种书,确定书号后,登记到图书目录表中,如

2、果表中已有,则只将库存量增加;图书数据包括图书书号,书名,作者,数量,单价等;2排序:以书号按升序进行排序(可以任选一种排序方法);3查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法);4删除:从表中删除指定的图书;5借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;6归还:注销对借阅者的登记,改变该书的现存量。2、总体设计2.1、功能模块设计根据课程设计题目的功能要求,各个功能模块的组成框图如下:功能选择界面0.退出7.更改字体颜色6.归还图书5.借阅图书4.删除图书信息3.查找信息2.图书排序1.新书入库输入新书信息按学号升序排序按书名查找按书

3、号查找按书名查找删除按书号查找删除输入书证号进入注册借阅者信息归还全部图书选择显示字体颜色归还其中一本图书2.2、所有功能模块的流程图3、详细设计模块功能说明:如函数功能、入口及出口参数说明,函数调用关系描述等;3.1、程序中所采用的数据结构及存储结构的说明typedef structint year; /年int month; /月int day; /日DATE;struct readbookchar studentTitle30; /借出的书名DATE loanDate; /借出日期DATE revertDate; /归还日期;union readStatechar Nobook20; /

4、定义没有借书struct readbook data; /存储已借图书信息;typedef struct borrower /借阅者char studentID10; /书证号char studentName10; /姓名union readState ReadBook5; /借书状况int bookcount; /已借图书数量struct borrower *next;Borrower, *LinkBorrower;typedef struct book /图书char number20; /书号char title30; /书名char author20; /作者char translat

5、or20; /译者int count; /现存量char price10; /价格DATE date; /入库日期struct book *next;Book, * LinkBook;3.2、算法的设计思想1图书入库新购一种书,确定书号后,登记到图书目录表中,如果表中已有,则只将库存量增加;图书数据包括图书书号,书名,作者,数量,单价等;2排序以书号按升序进行排序(可以任选一种排序方法);3查找能按书名、书号进行查找(分别用顺序查找和折半查找方法);4删除从表中删除指定的图书;5借阅如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;6归还注销对借阅者的登记,改变该

6、书的现存量。3.3、对图书借阅时的选择与操作a)注册定义一个共用体,没有借书和借书共用一个内存,注册时自动在共用体中赋值没有借书b)借阅输入书证号,若正确,进行借阅,共用体对借阅的书籍进行赋值,覆盖没有借书4、调试与测试:4.1、调试方法与步骤:第一步:测试新书入库:输入书名:1. 若书名存在:2. 若书名不存在,输入相关信息第二步:测试图书排序:图书按书号升序排序第三步:测试查找信息功能:第四步:测试删除图书信息功能:第五步:测试借阅图书功能1. 注册:2. 借阅:第六步:测试归还图书功能第七步:测试更改字体颜色功能4.3、测试过程中遇到的主要问题及采取的解决措施:在测试过程中我们遇到的主要

7、问题就是发现在借阅图书功能模块出现了问题,无法准确地录入和读取图书信息。于是我们仔细的读了该功能模块的代码。但是,我们发现代码是正确的,完全找不到错误(也有可能是我们的水平有限,发现不了错误)。)。于是我们把目光投注到了定义共用体上,在仔细检查和查阅资料后我们发现,原来是因为我们为了可以在借书时可以借阅不止一体而将数组定义在了共用体内部变量的结构体上了,后来我们将数组改定义到了共用体上,一切问题就迎刃而解了。经过这件事我们发现我们的基础还不扎实,了解的知识范围还太狭隘,以后还要多加认真学习5、时间复杂度的分析:1图书入库输入图书,图书指针顺序查找,时间复杂度是O(n)2排序定义了两个图书指针变

8、量,时间复杂度是O(n*n)3查找查找图书时是顺序查找,时间复杂度是O(n)4删除删除图书时是顺序查找删除,时间复杂度是O(n)5借阅写入借阅者信息时定义了两个借阅者指针,时间复杂度是O(n*n)6归还:归还图书时是顺序查找归还,时间复杂度是O(n)6、源程序清单和执行结果#include #include #include #include #include /#include function.h/*定义结构体*/typedef structint year; /年int month; /月int day; /日DATE;struct readbookchar studentTitle30

9、; /借出的书名DATE loanDate; /借出日期DATE revertDate; /归还日期;union readStatechar Nobook20; /定义没有借书struct readbook data; /存储已借图书信息;typedef struct borrower /借阅者char studentID10; /书证号char studentName10; /姓名union readState ReadBook5; /借书状况int bookcount; /已借图书数量struct borrower *next;Borrower, *LinkBorrower;typedef

10、 struct book /图书char number20; /书号char title30; /书名char author20; /作者char translator20; /译者int count; /现存量char price10; /价格DATE date; /入库日期struct book *next;Book, * LinkBook;LinkBook Head;LinkBorrower Read;/*函数声明*/int Meun();/系统功能【1】void show();void Input();LinkBook CreatBook();void WritetoFile();Li

11、nkBook ReadfromFile();/系统功能【2】void Find();LinkBook sort();void Traverse();/系统功能【3】void Sort();void SortTitle();void SortNumber();/系统功能【4】void Delete();LinkBook DeleteTitle();LinkBook DeleteNumber();/系统功能【5】void Loan();LinkBorrower login();LinkBorrower CreatBorrower();LinkBorrower readReader();void w

12、riteReader();void loan();/系统功能【6】void Rever();/系统功能【7】void Changecolor();/*主函数*/int main(void)int choice;while(1)system(cls);fflush(stdin);choice=Meun(); /调用主菜单switch(choice)case 1:Input();break;case 2:Find();break;case 3:Sort();break;case 4:Delete();break;case 5:Loan();break;case 6:Rever();break;ca

13、se 7:Changecolor();break;case 0:show();printf(欢迎再次光临,再见!n);return 0;default :show();printf(输入错误,程序终止!n);exit(0);return 0;/*主菜单*/int Meun(void)int choice;printf(=n);printf(欢迎进入图书馆管理系统n);printf(=nn);printf(【1】 新书入库n);printf(-n);printf(【2】 图书排序n);printf(-n);printf(【3】 查找信息n);printf(-n);printf(【4】 删除图书信

14、息n);printf(-n);printf(【5】 借阅图书n);printf(-n);printf(【6】 归还图书n);printf(-n);printf(【7】 更改字体颜色n);printf(-n);printf(【0】 退出图书管理系统n);printf(n);printf(请选择:);fflush(stdin);scanf(%d,&choice);return choice;void show()system(cls);printf(=n);printf(欢迎进入图书馆管理系统n);printf(=nn);/*系统功能【1】 新书入库*/函数功能:图书入库:新购一种书,确定书号后,

15、登记到图书目录表中,如果表中已有,则只将库存量增加;void Input()show();printf(系统功能【1】 新书入库n);char ch=y;char Newtitle20;Head=ReadfromFile(); /读取图书数据while(ch=y|ch=Y)fflush(stdin);LinkBook p=Head;int flay=0; /判断,书名不存在,flay=0; 书名存在,flay=1;printf(-n);printf(请输入书名:);scanf(%s,&Newtitle);while(p-next!=NULL)p=p-next;if(!strcmp(p-titl

16、e,Newtitle)printf(书名存在,将其数量加一n);p-count+;flay=1;if(p-next=NULL&flay=0)printf(n);LinkBook q=(LinkBook)malloc(sizeof(Book);q-next=NULL;q-count=1;strcpy(q-title,Newtitle);printf(书名不存在,请继续输入:n);printf(书号:); scanf(%s,&q-number);printf(作者:);scanf(%s,q-author);printf(译者:);scanf(%s,q-translator);printf(价格:)

17、;scanf(%s,q-price);printf(入库日期:);scanf(%d%d%d,&q-date.year,&q-date.month,&q-date.day);p-next=q;printf(n输入 y 键继续n);printf(输入其它键,返回主菜单nt);fflush(stdin);scanf(%c,&ch);WritetoFile(); /写入文件/函数功能:创建一个新书链表LinkBook CreatBook()LinkBook head;head=(LinkBook)malloc(sizeof(Book); /生成链表头结点head-next=NULL;return he

18、ad;/函数功能:输出新书信息到文件book.txt中void WritetoFile()FILE *fp;LinkBook p=Head-next;if(fp=fopen(book.txt,w)=NULL)printf(文件打开失败,程序终止!n);exit(0);for(; p!=NULL; p=p-next)fprintf(fp,%15s%25s%20s%15s%7d%15s%15d/%02d/%02dn,p-number,p-title,p-author,p-translator,p-count,p-price,p-date.year,p-date.month,p-date.day);

19、fclose(fp);/system(PAUSE);/函数功能:从文件中读取图书信息到结构体指针中LinkBook ReadfromFile()FILE *fp;if(fp=fopen(book.txt,r)=NULL)printf(文件打开失败,程序终止!n);exit(0);LinkBook head,h;head=CreatBook();h=CreatBook();LinkBook p=head;LinkBook s=h;for(LinkBook q; !feof(fp); q=q-next)q=(LinkBook)malloc(sizeof(Book);q-next=NULL;fsca

20、nf(fp,%15s%25s%20s%15s%7d%15s%15d/%02d/%02d,&q-number,&q-title,&q-author,&q-translator,&q-count,&q-price,&q-date.year,&q-date.month,&q-date.day);s-next=q;s=q;s=h;if(s-next!=NULL)while(s-next-next!=NULL)s=s-next;p-next=s;p=s;p-next=NULL;fclose(fp);return head;/*系统功能【2】 图书排序*/void Find()show();printf(

21、系统功能【2】 图书排序nn);Head=sort(); /插入方法排序Traverse(); /遍历printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();/函数功能:以书号按升序进行排序/参考书本数据结构 课程设计P147页:按直接选择排序算法思想,每次选择到最小的结点后,将其脱链并加入到一个新链表中,/ 这们可避免结点域值交换,最后将新多边表的头指针返回。LinkBook sort()/找最小的结点作为新表的第一个结点,/找次小的作为第二个结点,依次类推LinkBook head;head=ReadfromFile(); /读取图书数据L

22、inkBook head1;head1=NULL; /置空新表LinkBook p,q,u,s,t;while(head-next!=NULL)s=head-next; /先假设s 指向关键字最小的结点 p=head-next;q=NULL; /q指向p的前趋结点u=NULL; /u指向s的前趋结点while(p!=NULL)if(strcmp(p-number,s-number)next; /指向后继结点if(s=head-next) /循环前的假设成立head-next=head-next-next; /指向后继结点elseu-next=s-next; /删除最小结点if(head1=NU

23、LL)head1=s;t=s;elset-next=s; /插入新结点(尾插法,升序)t=s; head-next=head1; /带回新表头指针return head;void Traverse()LinkBook p=Head-next;while(p!=NULL)printf( *n);printf( 书号 书名 作者 译者n);printf( -n);printf(%15s%25s%20s%15sn,p-number,p-title,p-author,p-translator);printf(n 价格 数量 入库日期n);printf( -n);printf(%7d%15s%15d/%

24、02d/%02dnn,p-count,p-price,p-date.year,p-date.month,p-date.day);p=p-next;/*系统功能【3】 查找信息*/3查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法);void Sort()while(1)show();printf(系统功能【3】 查找信息nn);char choice;printf(【1】 按书名查找n);printf(-n);printf(【2】 按书号查找n);printf(n);printf(输入对应数字键进入操作页面n);printf(输入其它键,返回主菜单n);printf(请选择:);ff

25、lush(stdin);scanf(%c,&choice);switch(choice)case 1:SortTitle();break;case 2:SortNumber();break;default :return;/函数功能:按书名进行查找void SortTitle()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;int flat=0;char NewTitle30;printf(请输入书名:);scanf(%s,&NewTitle);while(p!=NULL)if(!strcmp(p-title,

26、NewTitle)flat=1;printf( *n);printf( 书号 书名 作者 译者n);printf( -n);printf(%15s%25s%20s%15sn,p-number,p-title,p-author,p-translator);printf(n 价格 数量 入库日期n);printf( -n);printf(%7d%15s%15d/%02d/%02dnn,p-count,p-price,p-date.year,p-date.month,p-date.day);break;p=p-next;if(flat=0)printf(图书查找失败!n);printf(*n);pr

27、intf(*输入任意键,返回上一层*n);printf(*n);getch();/函数功能:按书号进行查找void SortNumber()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;char NewNumber20;int flat=0;printf(请输入书号:);scanf(%s,&NewNumber);while(p!=NULL)if(!strcmp(p-number,NewNumber)flat=1;printf( *n);printf( 书号 书名 作者 译者n);printf( -n);prin

28、tf(%15s%25s%20s%15sn,p-number,p-title,p-author,p-translator);printf(n 价格 数量 入库日期n);printf( -n);printf(%7d%15s%15d/%02d/%02dnn,p-count,p-price,p-date.year,p-date.month,p-date.day);break;p=p-next;if(flat=0)printf(图书查找失败!n);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();/*系统功能【4】 删除图书信息*/函数功能:从表中

29、删除指定的图书void Delete()while(1)show();printf(系统功能【4】 删除图书信息nn);char choice;printf(【1】 按书名查找删除n);printf(-n);printf(【2】 按书号查找删除n);printf(n);printf(输入对应数字键进入操作页面n);printf(输入其它键,返回主菜单n);printf(请选择:);fflush(stdin);scanf(%c,&choice);switch(choice)case 1:Head=DeleteTitle(); /按书名查找删除WritetoFile(); /重新写入文件break

30、;case 2:Head=DeleteNumber(); /按书号查找删除WritetoFile(); /重新写入文件break;default :return;/函数功能:按书名查找删除LinkBook DeleteTitle()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;LinkBook q=head;Book s;int flat=0;char NewTitle30;printf(请输入书名:);scanf(%s,&NewTitle);while(p!=NULL)if(!strcmp(p-title,NewTitle)flat=1;s=*p;q-next=q-next-next;free(p);break;p=p-next;q=q-next;if(flat=1)printf(n图书删除成功!nn);elseprintf(n图书删除失败!nn);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();return head;/函数功能:按书号查找删除LinkBook DeleteNumber()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;Link

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 研究报告

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922