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

上传人:可****阿 文档编号:30862866 上传时间:2022-08-07 格式:DOC 页数:30 大小:161.04KB
返回 下载 相关 举报
图书馆管理系统-数据结构大作业.doc_第1页
第1页 / 共30页
图书馆管理系统-数据结构大作业.doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《图书馆管理系统-数据结构大作业.doc》由会员分享,可在线阅读,更多相关《图书馆管理系统-数据结构大作业.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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 nam

7、e15;/读者姓名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 ne

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

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

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

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

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

13、truct 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;struct RE

14、ADER 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,long num);book

15、 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(char psd);void menu(struct BOO

16、K Bhead,reader Rhead);void menu2(reader temp,reader rhead,book *bhead);long backtime();endif借还书文件borrow_return。cppincludelibrary。h”void 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 借书 ”);printf(”n );printf(”n请输入

17、您要查找借阅书籍的方式:”);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;elsebreak;case 2

18、: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=Yk=y)goto borrow;elsebreak;elsecontinue;break;default:return;borrow:if(Bbook!=NULLtempresidue0Bbook-exist0)temp-residue-;Bbookexist-;for(i=0;i

19、10;i+)if(tempborrowedi0=0)tempborrowedi0=Bbook-number;tempborrowedi1=backtime();break;printf(”n 借阅成功!”);elseif(!(tempresidue0)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 te

20、mp)long num;int i,j=0;char t;book p;printf(”n );printf(n 还书 );printf(”n );printf(nn请输入您所还书的编号:”);scanf(d”,&num);for(i=0;i10;i+)if(num=temp-borrowedi0)j=1;p=S_number(num,bhead);if(p!=NULL&j=1)printf(”n”);printf(”n书本编号 书籍名称 出版社名称 出版时间 作者 ”);printf(n”);printf(”n8d12s14s8d%14s,pnumber,pname,p-press,ppre

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

22、p,temp2;temp1=bheadnext;printf(”n ”);printf(n 入库 ”);printf(n ”);while(1)printf(”n请输入您给定书的编号(6位以内的正整数):”);scanf(”d”,t);if(t=0t999999)printf(n您的编号不在处理范围(1999999)之内!”);fflush(stdin);continue;elsetemp2=S_number(t,bhead);if(temp2=NULL)break;elsetemp2total+;temp2-exist+;printf(”n编号为d的书已存在,入库成功!”,t);return

23、;temp=(book)malloc(sizeof(book));temp-number=t;printf(”n请输入书名:);scanf(”s,tempname);printf(”n请输入本书作者:”);scanf(s,temp-author);printf(”n请输入本书出版社:”);scanf(s”,temp-press);printf(n请输入本书出版时间:”);scanf(d”,temppresstime);temp-next=NULL;temptotal=1;tempexist=1;if(bheadnext=NULL)bheadnext=temp;elsewhile(temp1ne

24、xt!=NULL&temp1numbertemp-number)temp1=temp1next;temp-next=temp1next;temp1next=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,pn

25、ame);fflush(stdin);while(1)printf(n 请输入性别:n M:男性:n F:女性:);psex=getchar();if(p-sex=Fpsex=f|psex=Mpsex=m)break;elseprintf(”n 阁下既非男,又非女,莫非来自泰国?);while(1)while(1)printf(”n 请输入您的密码:”);intpsd(t1);if(strlen(t1)=4)printf(n 您设置的密码过于简单,请重新设置:);elsebreak;printf(”n 请确认您的密码:);intpsd(t2);if(strcmp(t1,t2)=0)strcpy

26、(p-password,t1);break;elseprintf(”n 您两次输入的密码不一致!”);p-residue=10;p-next=NULL;for(j=0;j10;j+)p-borrowedj0=0;pborrowedj1=0;if(temp=NULL)pnumber=i;headnext=p;plimit=1;else+i;while(tempnext!=NULL)+i;temp=temp-next;pnumber=i;plimit=0;tempnext=p;showR(p,NULL);reader login(reader rhead,book bhead)long num;c

27、har pass16;int i=5;reader *reader;style();printf(n ”);printf(”n 登录 );printf(”n ”);while(1)printf(n 请输入您的借阅证号:);scanf(d”,&num);if(reader=S_reader(rhead,num)=NULL)printf(”n 没有找到您所在编号的读者。);getch();return NULL;elsebreak;while(i0)printf(”n 请输入密码:”);intpsd(pass);if(strcmp(pass,reader-password)=0)return re

28、ader;elseprintf(”n 密码错误);return NULL;文件读、写load_save。cppinclude library。h”book Bload()FILE p;book Bhead=(book*)malloc(sizeof(book);book *temp,temp1;Bheadnext=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*)ma

29、lloc(sizeof(book);fscanf(p,”%14d%12s18s%8d14s4d4dn”,tempnumber,temp-name,temppress,&temp-presstime,temp-author,&temptotal,tempexist);tempnext=NULL;Bhead-next=temp;while(!feof(p))temp1=(book)malloc(sizeof(book));fscanf(p,”14d%12s18s8d%14s%4d4dn”,&temp1-number,temp1name,temp1-press,&temp1-presstime,te

30、mp1-author,&temp1-total,&temp1exist);temp1next=NULL;temp-next=temp1;temp=temp-next;printf(”n书籍信息读取成功。);return Bhead;reader *Rload()FILE p;int i;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

31、;elsefgetc(p);if(!feof(p)rewind(p);temp=(reader)malloc(sizeof(reader);fscanf(p,12d%10s%3c%8d%2d12s,tempnumber,tempname,temp-sex,tempresidue,templimit,temppassword);for(i=0;i10;i+)fscanf(p,6d”,tempborrowedi0);fscanf(p,”10d”,temp-borrowedi1);tempnext=NULL;Rhead-next=temp;while(!feof(p))printf(a);temp1

32、=(reader)malloc(sizeof(reader));fread(temp1,sizeof(reader),1,p);temp1next=NULL;tempnext=temp1;temp=temp-next;printf(n读者信息读取成功.。.”);return Rhead;void Bsave(book *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

33、(temp);fprintf(p,”14d%12s14s8d14s4d4dn”,tempnumber,tempname,temp-press,temp-presstime,temp-author,temptotal,tempexist);temp=tempnext;printf(”n存储书籍成功。.。”);void 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打开read

34、er.txt失败。.。);while(temp!=NULL)Sleep(1000);showR(temp,Bhead);fprintf(p,12d10s3c%8d%2d12s,tempnumber,tempname,temp-sex,temp-residue,templimit,temp-password);for(i=0;i10;i+)fprintf(p,”6d”,temp-borrowedi0);fprintf(p,”%10d,tempborrowedi1);temp=tempnext;printf(n存储读者成功。.”);图书搜索search。cppincludelibrary.hbook S_name(b

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

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁