1、算法与数据结构课程设计综合设计报告课程设计报告设计项目编号 3 名称 图书借阅管理系统实验课时 5主要仪器设备 PC 机附属设备 优盘主要使用软件 WIN-TC实验时间 2009 年 3 月-5 月1 问题的描述和分析图书借阅管理系统主要功能包括:a.图书管理(增加图书、查询图书、删除图书、图书借阅、还书) ;b.会员管理(增加会员、查询会员、删除会员、借书信息) ;程序设计要求:1)建立数据文件,系统对数据文件进行自动排序(用冒泡法,以编号和学号为关键字)2)查询菜单,按图书的编号、名字、作者或者会员的学号、姓名进行查询(因为已经按编号和学号进行了排序,则可使用二分查找法;而因为名字、作者、
2、姓名都有可能不唯一,则只能使用顺序查找法进行查找。 )2 算法的设计1)建立原始数据文件记录形式如下:图书信息(编号,名字,作者,借阅状态)会员信息(学号,姓名,所借图书编号)其中编号和学号分别为主关键字。输入文件算法描述同教材:提示用户输入数据文件名;获取数据文件名 filename;fp=fileopen(filename,“a+“)算法与数据结构课程设计综合设计报告第 2 页 共 15 页if(fp=NULL)输出出错信息elsewhile(输入没有结束)让用户输入一条记录;写入文件中;设置输入状态;return(数据文件名)2)数据文件按关键字进行排序使用冒泡法,算法同教材,描述如下:
3、void BkSort(Books *Bk)/*code 待排序记录的关键字即书籍编号,sum 待排序记录的个数即书目总数*/int i,j,n;Books *temp;i=1;n=Bk-sum;for(i=0;ii;j-)if(strcmp(Bk-booksj.code,Bk-booksj-1.code)booksj和 Bk-booksj-1的内容进行交换/*共进行 sum 次冒泡,如果没有发生交换则结束*/3)用到的函数BkPrint(Books Bk,int n) /*输出书目信息表格*/MbPrint(Members Mb,int n) /*输出会员信息表格*/void Init(Bo
4、oks Bk,Members Mb) /*记录初始化*/BkSort(Books Bk) /*用冒泡法,系统自动给书籍按编号排序*/MbSort(Members Mb) /*用冒泡法,系统自动对会员按学号排序*/BSeqSearch(Books Bk,char name) /*按书名,对书籍进行顺序查找*/MSeqSearch(Members Mb,char name) /*按姓名,对会员进行顺序查找*/int BkSearch(Books Bk,char code) /*按编号,对书籍进行二分查找*/int MbSearch(Members Mb,char no) /*按学号,对会员进行二分
5、查找*/void BkAdd(Books Bk) /*添加书目信息*/void MbAdd(Members Mb) /*添加会员信息*/void BkDelete(Books Bk) /*删除书籍*/void MbDelete(Books Bk) /*删除会员*/Borrow(Books Bk,Members Mb) /*借书*/ Return(Books Bk,Members Mb) /*还书*/ 4)查询功能图书查询算法与数据结构课程设计综合设计报告第 3 页 共 15 页a.按编号查询b.按书名查询会员查询a.按学号查询b.按姓名查询数据结构的设计图书信息(编号,书名,作者,借阅状态)t
6、ypedef structchar code10;/*编号*/char name20;/*名字*/char writer10;/*作者*/int flag;/*借阅状态,flag=0 则为可借状态,flag=1 则为借出状态*/Book_info;会员信息(学号,姓名,借书信息)typedef structchar no10;/*学号*/char name20;/*姓名*/Book_info bbk5;/*所借书籍的编号,每个会员最多可借 5 本书*/int count;/*借书数目,0i;j-)if(strcmp(Bk.booksj.code,Bk.booksj-1.code)i;j-)fo
7、r(k=0;k0)if(strcmp(Bk.booksj.name,name)=0)BkPrint(Bk,j);j-;printf(“查无此人n“);void MSeqSearch(Members Mb,char name) /*按姓名,对会员进行顺序查找*/int j;j=Mb.sum;while(j0)if(strcmp(Mb.membersj.name,name)=0)MbPrint(Mb,j);j-;printf(“查无此人!n“);int BkSearch(Books Bk,char code) /*按编号,对书籍进行二分查找*/int low,high,mid;low=1;high
8、=Bk.sum;while(low0)high=mid-1;elselow=mid+1;return 0;int MbSearch(Members Mb,char no) /*按学号,对会员进行二分查找*/int low,high,mid;low=1;high=Mb.sum;while(low0)算法与数据结构课程设计综合设计报告第 10 页 共 15 页high=mid-1;elselow=mid+1;return 0;界面设计1.图书管理系统1.1 增加图书1.2 查询图书1.2.1 按书名查询1.2.2 按编号查询1.3 删除图书1.4 图书借阅1.5 还书1.6 返回主菜单2.会员管理
9、系统2.1 增加会员2.2 查询会员2.2.1 按名字查询2.2.2 按学号查询2.3 删除会员2.4 借书信息2.5 返回主菜单3.退出相关源程序:void main()Books Bk;Members Mb;FILE *fp;int select;int count1=1;int count2=1;/*保存文件中的记录条数*/Init(Bk,Mb);fp=fopen(“D:图书管理“,“a+“);/*以追加方式打开文本文件 D:图书管理,可读可写,若此文件不存在,会创建此文件*/算法与数据结构课程设计综合设计报告第 11 页 共 15 页if(fp=NULL)printf(“n 打开文件失
10、败!n“);exit(0);while(!feof(fp)if(fread(if(fread(fclose(fp);printf(“n 打开文件成功,书目记录数为:%d,会员记录数为:%dn“,count1,count2);while(1)printf(“n 主菜单nn“);printf(“1.图书管理系统nn“);printf(“2.会员管理系统nn“);printf(“0.退出nn“);printf(“输入选项(0-2):n“);scanf(“%d“,switch(select)case 1:Book_Ctr();break;case 2:Member_Ctr();break;case 0
11、:exit(0);default:printf(“输入有误,请重新输入:n“);getch();Book_Ctr() /*二级目录图书管理系统*/Books Bk;Members Mb;int select1,temp;char select2;char code10,name20;while(1)printf(“n 图书管理系统nn“);printf(“1.增加图书nn“);printf(“2.查询图书nn“);printf(“3.删除图书nn“);printf(“4.图书借阅nn“);printf(“5.还书nn“);printf(“0.返回主菜单nn“);printf(“输入选项(0-5
12、):n“);scanf(“%d“,算法与数据结构课程设计综合设计报告第 12 页 共 15 页switch(select1)case 1:BkAdd(Bk);break;case 2:printf(“a.按编号查询n“);printf(“b.按书名查询n“);printf(“请选择查询方式:n“);scanf(“%d“,switch(select2)case a:printf(“请输入要查询的图书编号:n“);scanf(“%s“,code);temp=BkSearch(Bk,code);if(!temp) printf(“查无此书!n“);else BkPrint(Bk,temp);brea
13、k;case b:printf(“请输入要查询的图书名称:n“);scanf(“%s“,name);BSeqSearch(Bk,name);break;break;case 3:BkDelete(Bk);break;case 4:Borrow(Bk,Mb);break;case 5:Return(Bk,Mb);break;case 0:return;default:printf(“输入有误,请重新输入:n“);Member_Ctr()/*二级目录会员管理系统*/Members Mb;Books Bk;int i,j,k;char no10;char name20;int select1,tem
14、p;char select2;while(1)printf(“n 会员管理系统nn“);printf(“1.增加会员nn“);printf(“2.查询会员nn“);printf(“3.删除会员nn“);printf(“4.借书信息nn“);printf(“0.返回主菜单nn“);printf(“输入选项(0-4):n“);算法与数据结构课程设计综合设计报告第 13 页 共 15 页scanf(“%d“,switch(select1)case 1:MbAdd(Mb);break;case 2:printf(“a.按学号查询n“);printf(“b.按姓名查询n“);printf(“请选择查询方
15、式:n“);scanf(“%d“,switch(select2)case a:printf(“请输入要查询的会员的学号:n“);scanf(“%s“,no);temp=MbSearch(Mb,no);if(!temp) printf(“查无此人!n“);else MbPrint(Mb,temp);break;case b:printf(“请输入要查询的会员的姓名:n“);scanf(“%s“,name);MSeqSearch(Mb,name);break;break;case 3:MbDelete(Mb);break;case 4:printf(“请输入要查询的会员的学号:n“);scanf(
16、“%s“,no);temp=MbSearch(Mb,no);if(!temp) printf(“查无此人!n“);else k=Mb.memberstemp.count;for(i=0;ik;i+)for(j=1;jBk.sum;j+)if(strcmp(Mb.memberstemp.bbki,Bk.booksj.code)=0)BkPrint(Bk,j);break;case 0:return;default:printf(“输入有误,请重新输入:n“);算法与数据结构课程设计综合设计报告第 14 页 共 15 页6 调试情况(1)主菜单 (2)图书管理系统二级目录(3)会员管理系统二级目录算法与数据结构课程设计综合设计报告第 15 页 共 15 页(5)添加图书(4)添加会员(6)查询会员(7)删除会员7 算法的分析和评价及评价本程序主要为数据库系统,用冒泡法实现数据的排序,用顺序查找法以及二分查找法对不同的关键字进行查找。冒泡排序其时间复杂度为 T(n)=O(n*n);按照名字进行顺序查找,其时间复杂度为 T(n)=O(n);按照名字进行二分查找,其时间复杂度为 T(n)=O(n)。8 实验心得