收藏 分销(赏)

图书馆管理系统-数据结构大作业.doc

上传人:w****g 文档编号:3898758 上传时间:2024-07-23 格式:DOC 页数:31 大小:165.50KB
下载 相关 举报
图书馆管理系统-数据结构大作业.doc_第1页
第1页 / 共31页
图书馆管理系统-数据结构大作业.doc_第2页
第2页 / 共31页
图书馆管理系统-数据结构大作业.doc_第3页
第3页 / 共31页
图书馆管理系统-数据结构大作业.doc_第4页
第4页 / 共31页
图书馆管理系统-数据结构大作业.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、封面数据结构课程设计报告图书管理信息系统二一三年十二月本程序是图书管理信息系统的实现,具体功能包括读者注册、登录、新书增添、图书查询、图书搜索、借还书、读存盘等。程序流程如下:图书管理信息系统注册登陆读者注册管理员注册读者登录管理员登录入库退出系统个人信息查询还书借书任务分析:1新书入库:新到书籍入库包含几方面的操作:首先查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和总库存量,若不存在,则新增加概述信息,从界面输入书籍的编号(0999999的长整型)、书名(字符串类型)、作者名(字符串类型)、出版社信息(字符串类型)、出版日期(整型)、该书的现存量(整型)、该书的总量(整

2、型)。输入该信息之后,将该节点插入到书籍信息链表中去。该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。2读者注册:没有账号和密码读者和管理员都不能登录系统,系统默认第一个注册系统的是系统管理员,借阅号为1000,权限是1,并输入密码000000及基本信息,并将所借书信息区全部置零。不是第一个注册的读者,借阅号从1000往后顺延,自己设置密码,权限为0,其余信息与管理员相同,因此登陆之后,管理员可以看到“入库”菜单选项,普通读者不能看到该选项。3借书:书籍借阅主要涉及存书库和读者信息库的更新。用户首先登陆系统,通过3种查询方式查询该书是否存在,并判断该书的

3、剩余数量是否大于零,最后查询该读者是否已经借满书籍。若以上条件都满足,则将该书编号存入该读者的借阅信息区,将该读者的可借书数量减1,该存书的可借数量减1。4还书:读者登录后按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,则从读者的借书区删除该书籍,读者的可借书数量加1,将该书的可借数量增加1,然后返回。5信息查询:信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可借书本数以及所借书的信息),还可查询书籍信息,可根据书籍的编号来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。查询到该书籍后显示是否借阅该书籍。算法

4、设计:1、 查找查找分按书名查找、按作者查找和按书号查找。按书名查找是采用遍历线性链表的方式,从首元结点开始向下遍历,检查输入的书名和已存的书名是否匹配,如果匹配,则将该书籍的指针返回,然后查找结束。若直到最后也没找到,则返回空。按作者查找则根据输入的作者名,从书籍链表的首元结点开始遍历,检查记录中的读者信息和输入的是否匹配,若找到匹配的,则输出该书籍信息,然后继续向下遍历,直到链表尾部,查找结束。按书号查找则是根据建立的索引表来查找记录。2、 读者信息存储读者信息采用线性单链表存储,设置头结点,头结点不存储数据,初始化时头结点-next设置为空,然后每从文件中读取一组数据,则将该数据存入新开

5、辟的空间,链接到读者信息链表中,再将该数据的next置空。3、图书信息存储书籍信息存储采用单链表存储,设置头结点,头结点不存储数据,头结点的next为空,初始化时,从文件中读取一个格式化的数据,则将该数据存入新开辟的空间,并将该节点链接到链表中去,将next置空。程序主要函数:1. 增加图书:void insert(book *bhead);输入书号,判断是否合法,然后输入图书信息。流程图如下进入输入书号N书号合法输入书籍信息YY结束输入N继续输入2. 借书:void borrow(reader *temp, book *Bhead);通过书号、书名、作者三种查找方式查询借书,借书成功后,该书

6、的可借书量减1,读者借书量减1。流程图如下:N进入查找按书名查找按书号查找按作者查找进入输入书名继续借书退出输入书号输入作者未找到找到借书找到借书成功YNYYN3. 还书:void return book(book *bhead,reader *temp);输入书号,查询是否存在,然后还书,该书的可借书量加1,读者借书量加1。流程图如下:进入还书输入书号存在还书还书成功退出YNYN详细程序模块1、头文件定义头文件library.h定义了3个结构体:书籍结构体、读者结构体和索引表结构体,书籍结构体的定义如下: typedef struct READERlong number;/借阅号char n

7、ame15;/读者姓名char sex;/读者性别char password16;/读者的密码int residue;/读者的剩余可借书籍数量long borrowed10;/读者已经借阅的书籍编号int limit;/读者权限struct READER *next; reader;读者结构体的定义如下:typedef struct BOOKlong number;/书籍编号char name30;/书名char author30;/作者char press30;/出版社信息long presstime;/出版日期int exist;/在库数量int total;/总数量struct BOOK

8、 *next; book;索引表结构体的定义如下:typedef struct KEY long key;book *adress;struct KEY *next;keynode;头文件还包含一些系统头文件的声明:#includestdio.h#includestring.h#includeconio.h#includewindows.h还有一些函数的声明,用#ifndef、#endif来包含,以免重复包含。2、插入模块插入模块分为书籍入库、注册、登陆3大块,分3个函数,声明如下:void insert(book*bhead);/入库void reg(reader*head);/注册read

9、er* login(reader*rhead,book*bhead);/登陆这3个函数分别实现新书入库、读者注册、登陆等功能,入库功能只有管理员才能调用,其余函数均可以调用。3、读写模块此模块主要实现向文件写入、读取数,主要是2个文件:reader.txt、book.txt,分为4个函数:读者读写函数,书籍读写函数。定义如下:book* Bload();/书籍链表读取reader*Rload();/读者链表读入void Bsave(book*Bhead);/书籍链表写入void Rsave(reader*Rhead,book*bhead);/读者链表写入读者和书籍链表的初始化就由读取函数完成,

10、若文件为空则返回空指针,若不为空,则将文件里面的信息写入到链表中,每读出一个数据,分配一个空间,将该信息输入。4、查找模块查找模块分书籍查找模块、读者查找模块,书籍查找模块分线性链表查询、遍历查询、索引表查询,读者查询直接遍历读者链表,查找该读者,若存在,返回指针,不存在则返回NULL。查找模块的定义如下:book*S_name(book*head,char name);/按书籍名查找函数void S_author(book*head);/按作者查找keynode*initindex(book*head);/初始化建立索引表book*S_number(long num,book*bhead);

11、/按书号查找reader*S_reader(reader*rhead,long num);/查找读者5、显示模块根据给出的节点指针,显示该节点所包含的信息,显示分为读者显示和书籍信息显示,读者信息显示包含书籍信息显示,以便显示读者所借书的信息。这两个函数的声明如下:void showR(reader*tr,book*bhead);/显示读者信息函数void showB(book*p);/显示书籍信息函数这个模块还有2个小函数,用于将存入的性别F、M转化成汉字,将存的权限“1”、“0”转化成“管理员”、“读者”输出,这两个函数的定义如下:char*sc(char p)if(p=F|p=f)ret

12、urn 女;elsereturn 男;char*lc(int i)if(i=1)return 管理员;elsereturn 读者;程序运行结果1.登录界面:2.入库界面:3.借书界面:4.还书界面:5.个人信息查询界面:体会这次的大作业让我复习并实际运用本学期学的数据结构的有关知识,例如数据的存储、排序、调用、查找等,加深了对数据结构和C语言的理解,总的来说,收获颇丰。代码头文件library.h#ifndef LIBRARY_INCLUDE#define LIBRARY_INCLUDE#include#include#include#include#include#includetypede

13、f struct BOOKlong number;char name30;char author30;char press30;long presstime;int exist;int total;struct BOOK *next;book;typedef struct KEYlong key;book *adress;struct KEY *next;keynode;typedef struct READERlong number;char name15;char sex;char password16;int residue;long borrowed102;int limit;stru

14、ct READER *next;reader;char *lc(int i);char *sc(char p);void showR(reader *tr,book *bhead);void showB(book *p);book *S_name(book *head,char name);void S_author(book *head);keynode *initindex(book *head);void delkey(keynode *keyhead);book *S_number(long num,book *bhead);reader *S_reader(reader *rhead

15、,long num);book *Bload();reader *Rload();void Bsave(book *Bhead);void Rsave(reader *Rhead,book *bhead);void insert(book *bhead);void reg(reader *head);reader *login(reader *rhead,book *bhead);void borrow(reader *temp,book *Bhead);void returnbook(book *bhead,reader *temp);void style();void intpsd(cha

16、r *psd);void menu(struct BOOK *Bhead,reader *Rhead);void menu2(reader *temp,reader *rhead,book *bhead);long backtime();#endif借还书文件borrow_return.cpp#includelibrary.hvoid borrow(reader *temp,book *Bhead)style();long num;int i;char t,k,name30;book *Bbook;getch();system(cls);while(1)printf(n );printf(n

17、借书 );printf(n );printf(n请输入您要查找借阅书籍的方式:);printf(n 1、按书号查找n);printf(n 2、按作者查找n);printf(n 3、按书名查找n);printf(n 4、返回主菜单n);t=getch();switch(t)case 1:printf(n请输入您要查找的书籍编号:);scanf(%d,&num);if(Bbook=S_number(num,Bhead)!=NULL)showB(Bbook);printf(n请问你是否要借阅该书籍?Y/N);k=getch();if(k=Y|k=y)goto borrow;elsebreak;els

18、ebreak;case 2:S_author(Bhead);break;case 3:printf(n请输如您要查找的书籍名:);scanf(%s,name);if(Bbook=S_name(Bhead,name)!=NULL)showB(Bbook);printf(n请问你是否要借阅该书籍?Y/N);k=getch();if(k=Y|k=y)goto borrow;elsebreak;elsecontinue;break;default:return;borrow:if(Bbook!=NULL&temp-residue0&Bbook-exist0)temp-residue-;Bbook-ex

19、ist-;for(i=0;iborrowedi0=0)temp-borrowedi0=Bbook-number;temp-borrowedi1=backtime();break;printf(n 借阅成功!);elseif(!(temp-residue0)printf(n您只能借阅10本书籍!);elseif(!(Bbook-exist0)printf(n该书没有库存,请借阅其他书籍!);printf(n您要继续借阅书籍吗?Y/N);t=getch();if(t=y|t=Y)continue;elsebreak;void returnbook(book *bhead,reader *temp)

20、long num;int i,j=0;char t;book *p;printf(n );printf(n 还书 );printf(n );printf(nn请输入您所还书的编号:);scanf(%d,&num);for(i=0;iborrowedi0)j=1;p=S_number(num,bhead);if(p!=NULL&j=1)printf(n);printf(n书本编号 书籍名称 出版社名称 出版时间 作者 );printf(n);printf(n%8d%12s%14s%8d%14s,p-number,p-name,p-press,p-presstime,p-author);print

21、f(nn);printf(n确认归还该书籍?Y/N);t=getch();if(t=Y|t=y)p-exist+;temp-residue+;for(i=0;iborrowedi0=num)temp-borrowedi0=0;temp-borrowedi1=0;break;else return;elseprintf(n编号有误,请仔细检查!);新书入库insert.cpp#include library.hvoid insert(book *bhead)style();long t;book *temp1,*temp,*temp2;temp1=bhead-next;printf(n );pr

22、intf(n 入库 );printf(n );while(1)printf(n请输入您给定书的编号(6位以内的正整数):);scanf(%d,&t);if(t999999)printf(n您的编号不在处理范围(1999999)之内!);fflush(stdin);continue;elsetemp2=S_number(t,bhead);if(temp2=NULL)break;elsetemp2-total+;temp2-exist+;printf(n编号为%d的书已存在,入库成功!,t);return;temp=(book*)malloc(sizeof(book);temp-number=t;

23、printf(n请输入书名:);scanf(%s,temp-name);printf(n请输入本书作者:);scanf(%s,temp-author);printf(n请输入本书出版社:);scanf(%s,temp-press);printf(n请输入本书出版时间:);scanf(%d,&temp-presstime);temp-next=NULL;temp-total=1;temp-exist=1;if(bhead-next=NULL)bhead-next=temp;elsewhile(temp1-next!=NULL&temp1-numbernumber)temp1=temp1-next

24、;temp-next=temp1-next;temp1-next=temp;printf(n );printf(n 入库成功 );printf(n );void reg(reader *head)style();long i=1000;int j;char t116,t216;reader *temp=head-next;reader *p;p=new(reader);printf(n );printf(n 注册 );printf(n );printf(n 请输入姓名:);scanf(%s,p-name);fflush(stdin);while(1)printf(n 请输入性别:n M:男性:

25、n F:女性:);p-sex=getchar();if(p-sex=F|p-sex=f|p-sex=M|p-sex=m)break;elseprintf(n 阁下既非男,又非女,莫非来自泰国?);while(1)while(1)printf(n 请输入您的密码:);intpsd(t1);if(strlen(t1)password,t1);break;elseprintf(n 您两次输入的密码不一致!);p-residue=10;p-next=NULL;for(j=0;jborrowedj0=0;p-borrowedj1=0;if(temp=NULL)p-number=i;head-next=p

26、;p-limit=1;else+i;while(temp-next!=NULL)+i;temp=temp-next;p-number=i;p-limit=0;temp-next=p;showR(p,NULL);reader *login(reader *rhead,book *bhead)long num;char pass16;int i=5;reader *reader;style();printf(n );printf(n 登录 );printf(n );while(1)printf(n 请输入您的借阅证号:);scanf(%d,&num);if(reader=S_reader(rhea

27、d,num)=NULL)printf(n 没有找到您所在编号的读者.);getch();return NULL;elsebreak;while(i0)printf(n 请输入密码:);intpsd(pass);if(strcmp(pass,reader-password)=0)return reader;elseprintf(n 密码错误);return NULL;文件读、写load_save.cpp#include library.hbook *Bload()FILE *p;book *Bhead=(book*)malloc(sizeof(book);book *temp,*temp1;Bh

28、ead-next=NULL;if(p=fopen(book.txt,r)=NULL)printf(n打开文件book.txt失败,请检查.);return Bhead;elsefgetc(p);if(!feof(p)printf(n非空);rewind(p);temp=(book*)malloc(sizeof(book);fscanf(p,%14d%12s%18s%8d%14s%4d%4dn,&temp-number,temp-name,temp-press,&temp-presstime,temp-author,&temp-total,&temp-exist);temp-next=NULL;

29、Bhead-next=temp;while(!feof(p)temp1=(book*)malloc(sizeof(book);fscanf(p,%14d%12s%18s%8d%14s%4d%4dn,&temp1-number,temp1-name,temp1-press,&temp1-presstime,temp1-author,&temp1-total,&temp1-exist);temp1-next=NULL;temp-next=temp1;temp=temp-next;printf(n书籍信息读取成功.);return Bhead;reader *Rload()FILE *p;int i

30、;reader *temp,*temp1;reader *Rhead=(reader*)malloc(sizeof(reader);Rhead-next=NULL;if(p=fopen(reader.txt,r)=NULL)printf(n打开文件reader.txt失败,请检查);return Rhead;elsefgetc(p);if(!feof(p)rewind(p);temp=(reader*)malloc(sizeof(reader);fscanf(p,%12d%10s%3c%8d%2d%12s,&temp-number,temp-name,&temp-sex,&temp-resid

31、ue,&temp-limit,temp-password);for(i=0;iborrowedi0);fscanf(p,%10d,&temp-borrowedi1);temp-next=NULL;Rhead-next=temp;while(!feof(p)printf(a);temp1=(reader*)malloc(sizeof(reader);fread(temp1,sizeof(reader),1,p);temp1-next=NULL;temp-next=temp1;temp=temp-next;printf(n读者信息读取成功.);return Rhead;void Bsave(boo

32、k *Bhead)FILE *p;book *temp=Bhead-next;if(temp=NULL)return;elseif(p=fopen(book.txt,w)=NULL)printf(n打开book.txt失败.);while(temp!=NULL)showB(temp);fprintf(p,%14d%12s%14s%8d%14s%4d%4dn,temp-number,temp-name,temp-press,temp-presstime,temp-author,temp-total,temp-exist);temp=temp-next;printf(n存储书籍成功.);void

33、Rsave(reader *Rhead,book *Bhead)FILE *p;int i;reader *temp=Rhead-next;if(temp=NULL)return;elseif(p=fopen(reader.txt,w)=NULL)printf(n打开reader.txt失败.);while(temp!=NULL)Sleep(1000);showR(temp,Bhead);fprintf(p,%12d%10s%3c%8d%2d%12s,temp-number,temp-name,temp-sex,temp-residue,temp-limit,temp-password);for(i=0;iborrowedi0);fprintf(p,%10d,temp-borrowedi1);temp=temp-next;printf(n存储读者成功.);图书搜索search.cpp#includelibrary.hbook *S_name(b

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服