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

上传人:无*** 文档编号:85686616 上传时间:2022-05-06 格式:DOC 页数:47 大小:134KB
收藏 版权申诉 举报 下载
图书馆管理系统 大数据结构大作业_第1页
第1页 / 共47页
图书馆管理系统 大数据结构大作业_第2页
第2页 / 共47页
图书馆管理系统 大数据结构大作业_第3页
第3页 / 共47页
资源描述:

《图书馆管理系统 大数据结构大作业》由会员分享,可在线阅读,更多相关《图书馆管理系统 大数据结构大作业(47页珍藏版)》请在装配图网上搜索。

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

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

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

4、、 查找查找分按书名查找、按作者查找和按书号查找。按书名查找是采用遍历线性链表的方式,从首元结点开始向下遍历,检查输入的书名和已存的书名是否匹配,如果匹配,如此将该书籍的指针返回,然后查找完毕。假如直到最后也没找到,如此返回空。按作者查找如此根据输入的作者名,从书籍链表的首元结点开始遍历,检查记录中的读者信息和输入的是否匹配,假如找到匹配的,如此输出该书籍信息,然后继续向下遍历,直到链表尾部,查找完毕。按书号查找如此是根据建立的索引表来查找记录。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。流程图如下:3. 还书:void return book(book *bhead,reader *temp);输入书号,查询是否存在,然后还书,该书的可借书量加1,读者借书量加1。流程图如下:详细程序模块1、头文件定义头文件library.h定义了3个结构体:书籍结构体、读者结构体和索引表结构体,书籍结构体的定义如下: typedef struct READERlong number;/借阅号char name15;/读者char sex;/读者性别char password16;/读者的密码int residue;/读者的剩余可借书籍数量long borrowe

7、d10;/读者已经借阅的书籍编号int limit;/读者权限struct READER *next; reader;读者结构体的定义如下:typedef struct BOOKlong number;/书籍编号char name30;/书名char author30;/作者char press30;/信息long presstime;/出版日期int exist;/在库数量int total;/总数量struct BOOK *next; book;索引表结构体的定义如下:typedef struct KEY long key;book *adress;struct KEY *next;key

8、node;头文件还包含一些系统头文件的声明:#includestdio.h#includestring.h#includeconio.h#includewindows.h还有一些函数的声明,用#ifndef、#endif来包含,以免重复包含。2、插入模块插入模块分为书籍入库、注册、登陆3大块,分3个函数,声明如下:void insert(book*bhead);/入库void reg(reader*head);/注册reader* login(reader*rhead,book*bhead);/登陆这3个函数分别实现新书入库、读者注册、登陆等功能,入库功能只有管理员才能调用,其余函数均可以调用

9、。3、读写模块此模块主要实现向文件写入、读取数,主要是2个文件:reader.txt、book.txt,分为4个函数:读者读写函数,书籍读写函数。定义如下:book* Bload();/书籍链表读取reader*Rload();/读者链表读入void Bsave(book*Bhead);/书籍链表写入void Rsave(reader*Rhead,book*bhead);/读者链表写入读者和书籍链表的初始化就由读取函数完成,假如文件为空如此返回空指针,假如不为空,如此将文件里面的信息写入到链表中,每读出一个数据,分配一个空间,将该信息输入。4、查找模块查找模块分书籍查找模块、读者查找模块,书籍

10、查找模块分线性链表查询、遍历查询、索引表查询,读者查询直接遍历读者链表,查找该读者,假如存在,返回指针,不存在如此返回NULL。查找模块的定义如下:book*S_name(book*head,char name);/按书籍名查找函数void S_author(book*head);/按作者查找keynode*initindex(book*head);/初始化建立索引表book*S_number(long num,book*bhead);/按书号查找reader*S_reader(reader*rhead,long num);/查找读者5、显示模块根据给出的节点指针,显示该节点所包含的信息,显示

11、分为读者显示和书籍信息显示,读者信息显示包含书籍信息显示,以便显示读者所借书的信息。这两个函数的声明如下:void showR(reader*tr,book*bhead);/显示读者信息函数void showB(book*p);/显示书籍信息函数这个模块还有2个小函数,用于将存入的性别F、M转化成汉字,将存的权限“1、“0转化成“管理员、“读者输出,这两个函数的定义如下:char*sc(char p)if(p=F|p=f)return 女;elsereturn 男;char*lc(int i)if(i=1)return 管理员;elsereturn 读者;程序运行结果1.登录界面:2.入库界面

12、:3.借书界面:4.还书界面:5.个人信息查询界面:体会这次的大作业让我复习并实际运用本学期学的数据结构的有关知识,例如数据的存储、排序、调用、查找等,加深了对数据结构和C语言的理解,总的来说,收获颇丰。代码#ifndef LIBRARY_INCLUDE#define LIBRARY_INCLUDE#include#include#include#include#include#includetypedef struct BOOKlong number;char name30;char author30;char press30;long presstime;int exist;int tot

13、al;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 READER *next;reader;char *lc(int i);char *sc(char p);void showR(reader *tr,book *bhead);void

14、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 *Bload();reader *Rload();void Bsave(book *Bhead);void Rsave(reader *Rhead,book *

15、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 BOOK *Bhead,reader *Rhead);void menu2(reader *temp,reader *rhead,book *

16、bhead);long backtime();#endif#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 借书 );printf(n );printf(n请输入您要查找借阅书籍的方式:);printf(n 1、按书号查找n);printf(n 2、按作者查找n);printf(n 3、按书名查找n);printf(n 4、返回主菜单n);t

17、=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:S_author(Bhead);break;case 3:printf(n请输如您要查找的书籍名:);scanf(%s,name);if(Bbook=S_name(Bhead,name)!=NULL)show

18、B(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-exist-;for(i=0;iborrowedi0=0)temp-borrowedi0=Bbook-number;temp-borrowedi1=backtime();break;printf(n 借阅成功!);elseif(!(temp

19、-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)long num;int i,j=0;char t;book *p;printf(n );printf(n 还书 );printf(n );printf(nn请输入您所还书的编号:);scanf(%d,&num);for(i=0;ibo

20、rrowedi0)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);printf(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-bor

21、rowedi1=0;break;else return;elseprintf(n编号有误,请仔细检查!);#include library.hvoid insert(book *bhead)style();long t;book *temp1,*temp,*temp2;temp1=bhead-next;printf(n );printf(n 入库 );printf(n );while(1)printf(n请输入您给定书的编号(6位以的正整数):);scanf(%d,&t);if(t999999)printf(n您的编号不在处理围(1999999)之!);fflush(stdin);contin

22、ue;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;printf(n请输入书名:);scanf(%s,temp-name);printf(n请输入本书);scanf(%s,temp-author);printf(n请输入本书:);scanf(%s,temp-press);printf(n请输入本书出版时间:);scanf(%d

23、,&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;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;reade

24、r *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:男性: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

25、(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;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)l

26、ong 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(rhead,num)=NULL)printf(n 没有找到您所在编号的读者.);getch();return NULL;elsebreak;while(i0)printf(n 请输入密码:);intpsd(pass);if(strcmp(pass,reader-password)=0)return

27、reader;elseprintf(n 密码错误);return NULL;#include library.hbook *Bload()FILE *p;book *Bhead=(book*)malloc(sizeof(book);book *temp,*temp1;Bhead-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);fs

28、canf(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;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-autho

29、r,&temp1-total,&temp1-exist);temp1-next=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;elsefgetc

30、(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-residue,&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(size

31、of(reader);fread(temp1,sizeof(reader),1,p);temp1-next=NULL;temp-next=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(temp);fprintf(p,%14d%12s%14

32、s%8d%14s%4d%4dn,temp-number,temp-name,temp-press,temp-presstime,temp-author,temp-total,temp-exist);temp=temp-next;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打开reader.txt失败.);while(temp!=NUL

33、L)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存储读者成功.);#includelibrary.hbook *S_name(book *head,char name)book *temp=head-next;if(temp=N

34、ULL)printf(n书库中还没有书籍,请入库!);elsewhile(temp!=NULL)if(strcmp(temp-name,name)=0)printf(n书名为的书存在!,name);break;elsetemp=temp-next;return temp;void S_author(book *head)char author30;book *temp=head-next;if(temp=NULL)printf(n书库中还没有书籍,请入库!);elseprintf(n请输入您要查找的作者名:);scanf(%s,author);while(temp!=NULL)if(strcm

35、p(author,temp-author)=0)showB(temp);temp=temp-next;getch();keynode *initindex(book *head)int i;book *temp=head-next;keynode *tempkey,*p;printf(n初始化索引表开始.);keynode *keyhead=(keynode*)malloc(sizeof(keynode);keyhead-next=NULL;tempkey=keyhead-next;if(temp!=NULL)p=(keynode*)malloc(sizeof(keynode);p-key=t

36、emp-number;p-adress=temp;p-next=NULL;keyhead-next=p;tempkey=keyhead-next;while(temp!=NULL)for(i=0;inext!=NULL;i+)temp=temp-next;if(ikey=temp-number;p-adress=temp;p-next=NULL;tempkey-next=p;tempkey=tempkey-next;getch();return keyhead;void delkey(keynode *keyhead)keynode *temp;if(keyhead-next=NULL)fre

37、e(keyhead);elsewhile(keyhead!=NULL)temp=keyhead;keyhead=keyhead-next;free(temp);printf(n索引表清空!);book *S_number(long num,book *bhead)int i;book *p;keynode *keyhead=initindex(bhead);keynode *tempkey=keyhead-next;if(tempkey=NULL)printf(n书库无记录,请输入!);delkey(keyhead);return NULL;elsewhile(tempkey-next!=NU

38、LL)if(tempkey-keynext-keynext;else break;if(tempkey=NULL)printf(没有找到编号为%d的书籍!,num);delkey(keyhead);return NULL;elsep=tempkey-adress;for(i=0;inumber=num)showB(p);delkey(keyhead);return p;elsep=p-next;delkey(keyhead);return NULL;reader *S_reader(reader *rhead,long num)reader *temp=rhead-next;if(temp=N

39、ULL)printf(n文件中没有数据导入,请检查修复系统!);return NULL;elsewhile(temp)if(temp-number=num)return temp;elsetemp=temp-next;return temp;#includelibrary.hvoid showR(reader *tr,book *bhead)int i;book *p;printf(n );printf(n 读 者 信 息 );printf(n);printf(n);printf(n 借阅证号 姓 名 性别 剩余可借已借本数 权限 );printf(n);printf(n%12d%10s%6s

40、%8d%8d%6s,tr-number,tr-name,sc(tr-sex),tr-residue,10-tr-residue,lc(tr-limit);printf(n);printf(n 以下为所借书籍信息:n);for(i=0;iborrowedi0=0)continue;elseprintf(n %d,tr-borrowedi0);p=S_number(tr-borrowedi0,bhead);printf(n);printf(n书本编号 书籍名称 名称 出版时间 作者 借书日期可借时间);printf(n);printf(n%8d%12s%14s%8d%14s%8d 2个月 ,p-n

41、umber,p-name,p-press,p-presstime,p-author,tr-borrowedi1);printf(nn);void showB(book *p)printf(n);printf(n书本编号 书籍名称 名称 出版时间 作者 共计可借);printf(n);printf(n%8d%12s%14s%8d%14s%4d%4d,p-number,p-name,p-press,p-presstime,p-author,p-total,p-exist);printf(nn);char *sc(char p)if(p=F|p=f)return 女;elsereturn 男;cha

42、r *lc(int i)if(i=1)return 管理员;elsereturn 读者;#include library.hvoid style()system(mode con cols=90 lines=30);system(color 0f);system(cls);void intpsd(char *psd)int i=0; char c;while(c=getch()!=13)if (c!=b&c!=t&i0)printf(b b);i-; psdi=0;return;void menu(book *Bhead,reader *Rhead)reader *tempr;style();char m;int i;while(1)printf(nt );printf(nt 长安大学图书馆 );printf(nt);printf(nt);printf(nt);printf(nt);printf(nt 1登陆 );printf(nt);printf(nt 2注册 );printf(nt);printf(nt);printf(nt);printf(nt按任意键退出);printf(ntn);f

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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