




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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;/借阅号ch
7、ar name15;/读者姓名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
8、BOOK *next; book;索引表结构体的定义如下:typedef struct KEY long key;book *adress;struct KEY *next;keynode;头文件还包含一些系统头文件的声明:#include"stdio.h"#include"string.h"#include"conio.h"#include"windows.h"还有一些函数的声明,用#ifndef、#endif来包含,以免重复包含。2、插入模块插入模块分为书籍入库、注册、登陆3大块,分3个函数,声明如下:void
9、 insert(book*bhead);/入库void reg(reader*head);/注册reader* login(reader*rhead,book*bhead);/登陆这3个函数分别实现新书入库、读者注册、登陆等功能,入库功能只有管理员才能调用,其余函数均可以调用。3、读写模块此模块主要实现向文件写入、读取数,主要是2个文件:reader.txt、book.txt,分为4个函数:读者读写函数,书籍读写函数。定义如下:book* Bload();/书籍链表读取reader*Rload();/读者链表读入void Bsave(book*Bhead);/书籍链表写入void Rsave(
10、reader*Rhead,book*bhead);/读者链表写入读者和书籍链表的初始化就由读取函数完成,若文件为空则返回空指针,若不为空,则将文件里面的信息写入到链表中,每读出一个数据,分配一个空间,将该信息输入。4、查找模块查找模块分书籍查找模块、读者查找模块,书籍查找模块分线性链表查询、遍历查询、索引表查询,读者查询直接遍历读者链表,查找该读者,若存在,返回指针,不存在则返回NULL。查找模块的定义如下:book*S_name(book*head,char name);/按书籍名查找函数void S_author(book*head);/按作者查找keynode*initindex(boo
11、k*head);/初始化建立索引表book*S_number(long num,book*bhead);/按书号查找reader*S_reader(reader*rhead,long num);/查找读者5、显示模块根据给出的节点指针,显示该节点所包含的信息,显示分为读者显示和书籍信息显示,读者信息显示包含书籍信息显示,以便显示读者所借书的信息。这两个函数的声明如下:void showR(reader*tr,book*bhead);/显示读者信息函数void showB(book*p);/显示书籍信息函数这个模块还有2个小函数,用于将存入的性别F、M转化成汉字,将存的权限“1”、“0”转化成“
12、管理员”、“读者”输出,这两个函数的定义如下:char*sc(char p)if(p='F'|p='f')return "女"elsereturn "男"char*lc(int i)if(i=1)return "管理员"elsereturn "读者"程序运行结果1.登录界面:2.入库界面:3.借书界面:4.还书界面:5.个人信息查询界面:体会这次的大作业让我复习并实际运用本学期学的数据结构的有关知识,例如数据的存储、排序、调用、查找等,加深了对数据结构和C语言的理解,总的来说,收获颇
13、丰。代码头文件library.h#ifndef LIBRARY_INCLUDE#define LIBRARY_INCLUDE#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#include<windows.h>#include<time.h>typedef struct BOOKlong number;char name30;char author30;char press30;long presstime;int exist;in
14、t 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 READER *next;reader;char *lc(int i);char *sc(char p);void showR(reader *tr,book *bhead);
15、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 *Bload();reader *Rload();void Bsave(book *Bhead);void Rsave(reader *Rhead,b
16、ook *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,b
17、ook *bhead);long backtime();#endif借还书文件borrow_return.cpp#include"library.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请
18、输入您要查找借阅书籍的方式:");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);prin
19、tf("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)showB(Bbook);printf("n请问你是否要借阅该书籍?Y/N&
20、quot;);k=getch();if(k='Y'|k='y')goto borrow;elsebreak;elsecontinue;break;default:return;borrow:if(Bbook!=NULL&&temp->residue>0&&Bbook->exist>0)temp->residue-;Bbook->exist-;for(i=0;i<10;i+)if(temp->borrowedi0=0)temp->borrowedi0=Bbook->numb
21、er;temp->borrowedi1=backtime();break;printf("n 借阅成功!");elseif(!(temp->residue>0)printf("n您只能借阅10本书籍!");elseif(!(Bbook->exist>0)printf("n该书没有库存,请借阅其他书籍!");printf("n您要继续借阅书籍吗?Y/N");t=getch();if(t='y'|t='Y')continue;elsebreak;void r
22、eturnbook(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;i<10;i+)if(num=temp->borrowedi0)j=1;p=S_number(num,bhead);if(p!=NULL&&j=
23、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->
24、exist+;temp->residue+;for(i=0;i<10;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,*temp,*temp2;temp1=bhead->next;p
25、rintf("n ");printf("n 入库 ");printf("n ");while(1)printf("n请输入您给定书的编号(6位以内的正整数):");scanf("%d",&t);if(t<=0|t>999999)printf("n您的编号不在处理范围(1999999)之内!");fflush(stdin);continue;elsetemp2=S_number(t,bhead);if(temp2=NULL)break;elsetemp2-&
26、gt;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("%
27、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->number<temp->number)temp1=temp1->next;temp-
28、>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 &quo
29、t;);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)
30、while(1)printf("n 请输入您的密码:");intpsd(t1);if(strlen(t1)<=4)printf("n 您设置的密码过于简单,请重新设置:");elsebreak;printf("n 请确认您的密码:");intpsd(t2);if(strcmp(t1,t2)=0)strcpy(p->password,t1);break;elseprintf("n 您两次输入的密码不一致!");p->residue=10;p->next=NULL;for(j=0;j<10
31、;j+)p->borrowedj0=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)long num;char pass16;int i=5;reader *reader;st
32、yle();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(i>0)printf("n 请输入密码:");intpsd(
33、pass);if(strcmp(pass,reader->password)=0)return reader;elseprintf("n 密码错误");return NULL;文件读、写load_save.cpp#include "library.h"book *Bload()FILE *p;book *Bhead=(book*)malloc(sizeof(book);book *temp,*temp1;Bhead->next=NULL;if(p=fopen("book.txt","r")=NULL)p
34、rintf("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
35、,&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->author,&temp1->total,&temp1->exist);temp1-
36、>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失败,请检查&
37、quot;);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->residue,&temp->limit,temp->password);for(i=0;i<10;i+)fscanf(p,"%6d",&temp
38、->borrowedi0);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读者信息读取成功."
39、;);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%14s%8d%14s%4d%4dn",temp->number,temp->name,temp->
40、;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
41、.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;i<10;i+)fprintf(p,"%6d",temp->borrowedi0);fprintf(p,"%10d",temp-&g
42、t;borrowedi1);temp=temp->next;printf("n存储读者成功.");图书搜索search.cpp#include"library.h"book *S_name(book *head,char name)book *temp=head->next;if(temp=NULL)printf("n书库中还没有书籍,请入库!");elsewhile(temp!=NULL)if(strcmp(temp->name,name)=0)printf("n书名为<<%s>>
43、的书存在!",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(strcmp(author,temp->author)=0)showB(tem
44、p);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=te
45、mp->number;p->adress=temp;p->next=NULL;keyhead->next=p;tempkey=keyhead->next;while(temp!=NULL)for(i=0;i<5&&temp->next!=NULL;i+)temp=temp->next;if(i<4)return keyhead;elsep=(keynode*)malloc(sizeof(keynode);p->key=temp->number;p->adress=temp;p->next=NULL;t
46、empkey->next=p;tempkey=tempkey->next;getch();return keyhead;void delkey(keynode *keyhead)keynode *temp;if(keyhead->next=NULL)free(keyhead);elsewhile(keyhead!=NULL)temp=keyhead;keyhead=keyhead->next;free(temp);printf("n索引表清空!");book *S_number(long num,book *bhead)int i;book *p;k
47、eynode *keyhead=initindex(bhead);keynode *tempkey=keyhead->next;if(tempkey=NULL)printf("n书库无记录,请输入!");delkey(keyhead);return NULL;elsewhile(tempkey->next!=NULL)if(tempkey->key<num&&tempkey->next->key<num)tempkey=tempkey->next;else break;if(tempkey=NULL)print
48、f("没有找到编号为%d的书籍!",num);delkey(keyhead);return NULL;elsep=tempkey->adress;for(i=0;i<5&&p!=NULL;i+)if(p->number=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=NULL
49、)printf("n文件中没有数据导入,请检查修复系统!");return NULL;elsewhile(temp)if(temp->number=num)return temp;elsetemp=temp->next;return temp;显示图书及读者信息showing.cpp#include"library.h"void showR(reader *tr,book *bhead)int i;book *p;printf("n ");printf("n 读 者 信 息 ");printf("n "
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年身体健康及养生保健知识竞赛试题(附含答案)
- 2024国家工作人员学法用法试题库及参考答案(版)
- 兽医传染病学模拟试题与答案
- 呼吸机相关肺炎预防与控制指南试题(附答案)
- CRRT护理相关知识考核试题及答案
- 2025年医院临床主治医师《口腔颌面医学影像诊断学》专业知识考试题库与答案
- (2024)“铸牢中华民族共同体意识”应知应会网络知识竞赛题库及答案
- 2024年广东省公务员考试申论真题及答案(县级卷)
- 标准日本语课件pdf
- 凭祥市电梯安全管理人员月考模拟题库加答案
- 水质分析 题库及答案
- 2025-2030中国消费电子产业创新趋势及市场需求与投资回报分析报告
- 2025年广东省中考物理真题(含答案解析)
- 四川省自贡市2024-2025学年八年级下学期期末物理试题(含答案)
- 2025年土木工程建筑技能考试-工程造价技能大赛历年参考题库含答案解析(5套典型题)
- 2025年初中物理教师教材教法考试测试卷及参考答案(共三套)
- 2025届中兴通讯「未来领军」人才招聘正式启动笔试参考题库附带答案详解(10套)
- 卵巢囊肿个案护理
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
- GB/T 15622-2023液压缸试验方法
- 目标高三主题班会ppt课件
评论
0/150
提交评论