图书馆管理系统程序.doc

上传人:jian****018 文档编号:8430026 上传时间:2020-03-29 格式:DOC 页数:19 大小:960.50KB
返回 下载 相关 举报
图书馆管理系统程序.doc_第1页
第1页 / 共19页
图书馆管理系统程序.doc_第2页
第2页 / 共19页
图书馆管理系统程序.doc_第3页
第3页 / 共19页
点击查看更多>>
资源描述
程序设计实践报告学号;题目来源及序号难度等级 一、题目说明:由教师给出题目13、图书管理系统(查找应用)问题描述图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。实现提示1、每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项。2、由于图书管理的基本业务活动都是通过书号(即关键字)进行的,所以要用对书号 索引,以获得高效率。3、系统应实现的基本功能有:4采编入库:新购入一种书,经分类和确定书号之后登记到图书帐目中去。如果这两种书在帐中已有,则只将总库存量增加。5清除库存:某种书已无保留价值,将它从图书帐目中注销。6借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。7归还:注销对借阅者的登记,改变该书的现存量。8显示:以凹入表的形式显示B树。这个操作是为了调试和维护的目的而设置的。二、问题分析及求解基本思路说明:给出题目的分析及初步的解题思路。要求简洁、易懂1、 概要设计主要实现系统的功能:a.图书初始化: 输入图书的一些信息,编号、作者、书名、数量,有一定的库存。b.新书入库: 新书采编入库,输入编号后有次数只需输入数量,没有则继续输入c.添加读者信息: 读者信息初始化,输入读书证号和姓名后才能进行借书还书d.借书模块: 读者输入读书证号,证号存在输入要借的图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。e.还书模块: 归还已借的图书,要先输入读者书证号,书证号存在继续输入要还的图书编号,图书编号存在并且借来此书,归还成功。f.查询图书信息g.查询读者信息: 可查询读者姓名书证号,借了几本书,都是什么书和还书日期, 还可以借几本书。 h.退出: 退出读书管理系统并保存读者和图书信息。 设计的的初步思路:主要采取定义结构体,定义两个结构体分别为图书结构体和阅读者的结构体,将其数据存储到字符串中,然后逐个构建单链表,将其数据存储到单链表结点的数据域中,然后进行图书文件的读取或者可以选择图书的初始化,输入图书的编号,作者,书名,数量和一定的库存和现存量。新书入库创造新结点,定义指针,此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量,通过字符串的比较来判定,同理阅读者的添加是增加阅读者的单链表的结点,同时一个读者规定只能借阅5本书存储到数据域的字符串中。分别定义还书和借书的函数,用字符串的比较功能判断读者借书不能同一种书借两次,同时采编新书要求如果书号相同只需要直接输入采编的本数和如果没有书时会返回等待新书到来,包括索书号以及读者的学号输入出现不存在会返回错误,还书函数也是通过字符串中存储的库存量和现存量增加,同时读者借书数量right减少。最后将图书的单链表和阅读者的单链表读写到文件中。三、问题求解的整体框架结构说明:围绕求解目标给出具体的模块。要求简洁、易懂首先定义图书,阅读者,借书结构体;typedef struct book;typedef struct borrow;typedef struct reader;定义菜单函数,包括图书借阅的各种功能,包括:1采编入库图书 void Init_book(); 2登记读者 void add_reader(); 3借阅登记图书 void Borrow_Book(); 4还书管理 void Return_Book(); 5查询读者信息 void Print_reader();通过读者文件读取读者信息单链表 6查询图书信息 void Print_book(); 通过 图书文件读取图书单链表的信息 0退出系统 void Print_book(); 读入读者文件数据输入读者信息,将图书信息存储到字符串中,并且标记读者借书情况建立读者单链表,输入数据文件关闭数据文件,保存是否完成读入图书文件数据输入图书信息,将图书信息存储到字符串中建立图书单链表,输入数据文件关闭数据文件,保存是否完成1图书录入流程图: 2登记读者程图: NN Y Y3增添图书录入流程图: 输入查询条件如果存在,直接输入书本数是否存在 继续? 返 回N Y执行录入流程图,录入图书 Y N 4还书管理流程图:输入借阅者信息while(p1-next!=NULL&strcmp(rea_num,p1-reader_num)!=0) ,读者是否存在? p1=p1-next; if(p1-next=NULL&strcmp(rea_num,p1-reader_num)!=0) N Y输入所要借阅的图书信息while(strcmp(bo_num,p0-book_num)!=0&p0-next!=NULL),图书是否存在? p0=p0-next;N Y读者借书数目是否已满?图书是否为空?采用strcmp判断strcpy(p1-borrowp1-right+.borrow_book_num,bo_num);strcpy(p1-borrowp1-right-1.limit_date,lim_date); p0-book_xy-;p0-book_kc-;通过读者结点存储借书结构体信息。请输入正确细信息,或图书已满或已空借阅完成打印读者图书信息:通过单链表结点的访问,将图书单链表的每个结点的信息都访问,p=p-next,p-book_num;p-book_name; p-book_writer,p-book_xy,p-book_kc;打印访问阅读者单链表结点的访问,p-reader_num,p-reader_name,以及借书数量p-borrowi.borrow_book_num,还书日期:p-borrowi.limit_dateSave();保存文件打印结束四、 主要算法说明:要求用自然语言描述算法。要求简洁、易懂(1)首先首先定义图书,阅读者,借书结构体;typedef struct book;typedef struct borrow;typedef struct reader;定义好各种说需要的数据:typedef struct book char book_num10;/图书编号 char book_name20;/图书名称 char book_writer10;/图书的作者 int book_xy;/现有量 int book_kc;/库存 struct book *next;BK;typedef struct borrowchar borrow_book_num10;/借书的总数char limit_date8;/还书日期BO;typedef struct readerchar reader_num10;char reader_name10;int right;/读者所借的书的本数BO borrowMax;struct reader *next;RD;(1) 定义实现功能所需要的函数,包括图书的登记,读者的登记,图书的录用,以及读者的借阅,图书,读者信息的保存和读音等功能。int Menu(); void Init();void Login(); void Init_book();void Insert_New_Book(); void Menu_select(); void Find_Book(); void add_reader();void Print_reader(); void Print_book(); void Borrow_Book(); void Return_Book(); void Save(); void Save_Book(); void Save_Reader(); void Load();void Load_Reader(); void Load_Book();void Login()(3)通过字符串存储读者和图书的信息,然后进行图书文件的读取或者可以选择图书的初始化,输入图书的编号,作者,书名,数量和一定的库存和现存量。新书入库创造新结点,定义指针,此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量,通过字符串的比较来判定,同理阅读者的添加是增加阅读者的单链表的结点,同时一个读者规定只能借阅5本书存储到数据域的字符串中。分别定义还书和借书的函数,用字符串的比较功能判断读者借书不能同一种书借两次,同时采编新书要求如果书号相同只需要直接输入采编的本数和如果没有书时会返回等待新书到来,包括索书号以及读者的学号输入出现不存在会返回错误,还书函数也是通过字符串中存储的库存量和现存量增加,同时读者借书数量right减少。最后将图书的单链表和阅读者的单链表读写到文件中。void Insert_New_Book()/*新书入库*/ BK *p,*p0,*p1; p=p1=h_book;printf(n新书入库模块.n);printf(n请输入图书信息.n包括书号.书名.数量.n);p0=(BK *)malloc(sizeof(BK); printf(图书编号:); scanf(%s,p0-book_num); while(strcmp(p0-book_num,p1-book_num)!=0&p1-next!=NULL) p1=p1-next; if(strcmp(p0-book_num,p1-book_num)=0) /*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/ printf(n此编号图书已存在!直接入库!n); printf(图书数量:); scanf(%d,&p0-book_kc); p1-book_kc+=p0-book_kc; p1-book_xy+=p0-book_kc; else printf(图书名称:); scanf(%s,p0-book_name); printf(图书作者:); scanf(%s,p0-book_writer); printf(图书数量:); scanf(%d,&p0-book_kc);/库存数量while(p-next) p=p-next; if(h_book=NULL) h_book=p0; else p-next=p0; p0-next=NULL; p0-book_xy=p0-book_kc; printf(n新书入库完毕!按任意键继续下一步操作.n); getch(); system(cls); void add_reader()/*添加读者*/ RD *p0; int i; printf(n读者初始化开始,请输入读者信息.n包括书证号.姓名.n);p0=(RD*)malloc(sizeof(RD); h_reader=p0;printf(n请输入读者的信息:n); printf(读者书证号:); scanf(%s,p0-reader_num); printf(读者姓名:); scanf(%s,p0-reader_name); p0-right=0; for(i=0;iborrowi.borrow_book_num,0); strcpy(p0-borrowi.limit_date,0); p0-next=NULL; printf(n读者信息初始化完毕!按任意键继续下一步操作.n); getch(); system(cls); void Borrow_Book() /*借书模块*/ BK *p0; RD *p1;char bo_num10,rea_num10,lim_date8;int i;p0=h_book; p1=h_reader;printf(n借书模块.n);printf(n请输入借书的读者书证号:); scanf(%s,rea_num);while(p1-next!=NULL&strcmp(rea_num,p1-reader_num)!=0) p1=p1-next; if(p1-next=NULL&strcmp(rea_num,p1-reader_num)!=0) printf(n此读者编号不存在!按任意键返回.n); goto END; printf(n请输入你要借的书的编号:); scanf(%s,bo_num); while(strcmp(bo_num,p0-book_num)!=0&p0-next!=NULL) p0=p0-next; if(p0-next=NULL&strcmp(bo_num,p0-book_num)!=0) printf(n此图书编号不存在!按任意键返回.n); goto END; else if(p0-book_xyrightMax|p1-right=Max) printf(n不好意思,借书数目已满!不能借书!n按任意键返回.); goto END; else if(strcmp(p1-borrow0.borrow_book_num,0)!=0) for(i=0;iborrowi.borrow_book_num,bo_num)=0) printf(n抱歉!同一读者不能同借两本相同的书!n按任意键返回.); goto END; else if(strcmp(p1-borrowi.borrow_book_num,0)=0) printf(n请输入你要归还图书的日期:); scanf(%s,lim_date); strcpy(p1-borrowp1-right+.borrow_book_num,bo_num); strcpy(p1-borrowp1-right-1.limit_date,lim_date); p0-book_xy-; p0-book_kc-; printf(n读者编号%s借书完毕!按任意键继续下步操作.,p1-reader_num); goto END; else printf(n请输入你要归还图书的日期:); scanf(%s,lim_date); strcpy(p1-borrowp1-right+.borrow_book_num,bo_num); strcpy(p1-borrowp1-right-1.limit_date ,lim_date ); p0-book_xy-; p0-book_kc-; printf(n读者编号%s借书完毕!按任意键继续下步操作.,p1-reader_num); END:getch(); system(cls); void Return_Book() /*还书模块*/ BK *p; RD *q;int i,j,find=0;char return_book_num10,return_reader_num10;p=h_book; q=h_reader;printf(n还书模块.n);printf(n请输入要还书的读者编号:); scanf(%s,return_reader_num); while(q-next!=NULL&strcmp(return_reader_num,q-reader_num)!=0) q=q-next;if(q-next=NULL&strcmp(return_reader_num,q-reader_num)!=0) find=2; printf(n此读者编号不存在!按任意键返回.n); goto end; printf(n请输入读者还书的编号:); scanf(%s,return_book_num); while(p-next!=NULL&strcmp(return_book_num,p-book_num)!=0) p=p-next; if(p-next=NULL&strcmp(return_book_num,p-book_num)!=0) find=2; printf(n错误!此图书编号不存在!按任意键返回.n); goto end; for(i=0;iborrowi.borrow_book_num)=0) /*如果此读者借了此书*/ find=1; for(j=i;jborrowj.borrow_book_num,q-borrowj+1.borrow_book_num); strcpy(q-borrowj.limit_date,q-borrowj+1.limit_date); strcpy(q-borrowMax-1.borrow_book_num,0); strcpy(q-borrowMax-1.limit_date,0); p-book_xy+; p-book_kc+; q-right-; printf(n编号%s的读者已完毕!按任意键继续下步操作.,return_reader_num); if(find=0) printf(n错误!此读者未借此书!按任意键返回.n); end: getch(); system(cls);void Print_book() /*查询图书信息*/BK *p;p=h_book;printf(n图书信息如下:nn);printf(图书编号t图书名称t图书作者t现有tt库存n); while(p!=NULL) printf(%stt%stt%stt%dtt%dn,p-book_num,p-book_name,p-book_writer,p-book_xy,p-book_kc); p=p-next;printf(n图书信息打印完毕!按任意键继续下一步操作.);getch();system(cls);void Print_reader() /*查询读者信息*/RD *p;int i;p=h_reader;printf(n读者信息如下:nn);printf(读者书证号tt读者姓名n); printf(n);while(p!=NULL) printf(t%stt%s,p-reader_num,p-reader_name); for(i=0;iborrowi.borrow_book_num); printf(tt%s,p-borrowi.limit_date); printf(n); p=p-next;printf(n读者信息打印完毕!按任意键继续下一步操作.);getch();system(cls);void Save() /*保存信息*/Save_Reader();Save_Book();void Save_Reader() /*保存读者信息*/(2) 通过创建文件将图书和读者的单链表和图书的单链表输入到文件里,再读取文件,关闭文件。FILE *fp_reader; RD *p,*p0;p=h_reader;if(fp_reader=fopen(Reader.txt,wb)=NULL) /*创建文件,进行保存*/ printf(n文件保存失败!n请重新启动本系统.n); exit(0);while(p!=NULL) if(fwrite(p,sizeof(RD),1,fp_reader)!=1) /*将链表中的信息写入文件中*/ printf(n写入文件失败!n请重新启动本系统!n); p0=p; p=p-next; free(p0); /*释放所有结点*/h_reader=NULL;fclose(fp_reader); void Save_Book() /*保存图书信息*/FILE *fp_book; /*创建文件型指针*/BK *p,*p0;p=h_book;if(fp_book=fopen(Book.txt,wb)=NULL) /*创建文件,进行保存*/ printf(n文件保存失败!n请重新启动本系统.n); exit(0);while(p!=NULL) if(fwrite(p,sizeof(BK),1,fp_book)!=1) /*将链表中的信息写入文件中*/ printf(n写入文件失败!n请重新启动本系统!n); p0=p; p=p-next; free(p0); h_book=NULL;fclose(fp_book); void Load() /*加载信息*/Load_Reader();Load_Book();void Load_Reader() /*加载读者信息*/ RD *p1,*p2,*p3; FILE *fp; /*创建文件型指针*/ fp=fopen(book.txt,rb); /*打开文件*/ p1=(RD *)malloc(sizeof(RD); fread(p1,sizeof(RD),1,fp); h_reader=p3=p2=p1; while(! feof(fp) /*读出信息,重新链入链表*/ p1=(RD *)malloc(sizeof(RD); fread(p1,sizeof(RD),1,fp); p2-next=p1;p3=p2; p2=p1; p3-next=NULL; free(p1); fclose(fp); void Load_Book() /*加载图书信息*/BK *p1,*p2,*p3;FILE *fp; /*创建文件型指针*/fp=fopen(Book.txt,rb); /*打开文件*/ p1=(BK *)malloc(sizeof(BK); fread(p1,sizeof(BK),1,fp); h_book=p3=p2=p1; while(! feof(fp) /*读出信息,重新链入链表*/ p1=(BK *)malloc(sizeof(BK); fread(p1,sizeof(BK),1,fp); p2-next=p1; p3=p2; p2=p1; p3-next=NULL; free(p1); fclose(fp); 5编写主函数,执行程序。void main() FILE *fp_book,*fp_reader;Login(); if(fp_book=fopen(Book.txt,rb)=NULL|(fp_reader=fopen(Reader.txt,rb)=NULL) Init(); else Load(); Menu_select(); 五、测试说明:细致测试。1)登入系统,进行文件初始化。2)进入主菜单,开始实现功能。3)选择功能1,输入采编图书信息。4)选择2,登记读者。5)执行3,开始借阅图书,输入借书编号,读者编号,以及还书日期。6)执行6,查询图书信息,发现图书的减少量,库存和预存。7)登记图书,采编新书,如果图书已存在,则直接输入数量。8)还书模块4,输入读者及图书的信息。9)执行5,查询读者信息。10)再查询图书信息,发现还书后,图书现有量改变。11)同一读者不能借同一种书两本。12)如果图书为零,则说明书库已经借完等待新书到来。13)执行0,退出系统,保存文件。六、总结说明:总结完成情况、存在的不足实现各种图书管理功能通过字符串存储,比较会出现一些语言上的小问题,进行修改后可以,同时编写时也会出现许多小问题,其次单链表建立后发现读取文件有一些问题,同时也进行相应的修改,应该采取文件方式读取。不断地改进,调试。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 模板表格


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

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


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