数据结构课程设计报告——图书管理系统
数据结构课程设计图书管理系统
数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。
作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。
一、需求分析一个完善的图书管理系统应具备以下基本功能:1、图书信息管理:包括图书的书名、作者、出版社、出版年份、ISBN 号、分类号、库存数量等信息的录入、修改、查询和删除。
2、读者信息管理:记录读者的姓名、性别、身份证号、联系电话、借阅证号、借阅记录等,同时支持读者信息的增删改查。
3、借阅管理:实现读者的借书、还书操作,能够记录借阅日期和应还日期,并自动计算逾期天数和罚款金额。
4、图书查询:提供多种查询方式,如按书名、作者、出版社、分类号等进行精确或模糊查询,以便读者快速找到所需图书。
5、统计分析:能够统计图书的借阅次数、热门图书排行、读者借阅情况等,为图书馆的管理决策提供数据支持。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理图书和读者的信息。
1、图书信息和读者信息可以使用结构体数组来存储。
结构体可以包含图书或读者的各项属性,数组则方便进行批量操作和遍历。
2、对于图书的分类和索引,可以使用二叉查找树或哈希表。
二叉查找树可以保证有序性,便于中序遍历获取排序后的图书信息;哈希表则能够快速定位特定的图书或读者,提高查询效率。
3、借阅记录可以使用链表来存储,便于动态地添加和删除借阅信息。
三、系统功能模块设计1、登录模块系统管理员和读者分别拥有不同的登录入口和权限。
管理员可以进行所有操作,读者只能进行查询和借阅相关操作。
2、图书管理模块图书录入:管理员输入图书的详细信息,将其添加到图书信息数组中。
图书修改:根据图书的 ISBN 号或其他唯一标识,修改图书的相关信息。
图书删除:按照指定条件删除图书记录。
图书查询:提供多种查询条件,快速检索图书信息。
图书管理系统数据结构课设报告
《数据结构》课程设计报告书题目:图书管理系统系别:计算机科学与应用学号:学生姓名:指导教师:完成日期:目录图书管理系统 (3)1:需求分析 (3)2:概要设计 (3)3:详细设计 (4)3.1:线性表 (4)3.2:初始化 (5)3.3:显示所有信息 (5)3.4:添加信息 (6)3.5:删除信息 (7)3.6:查询信息 (8)4:调试分析 (10)5:测试结果 (11)6:总结 (13)指导教师评语: (14)图书管理系统1:需求分析1)程序的输入:只需按系统提示输入整型数字或英文字母即可。
每次数据的输入均以回车符作为结束标志。
2)程序的输出:每一项数据输出均有汉字的提示,输出格式均为整型或字符串。
3)程序的系统功能:(1)图书库系统管理;(2)借阅者信息的管理;(3)根据需要提供对图书所需的查询方式。
2:概要设计本程序的流程图如下:开始输入r/b 读者管理图书管理显示所有读者信息输入1/2/3/4/5增加读者删除读者查询读者信息退出r 1 2534输入1/2/3/4/5增加图书删除图书查询图书信息退出124显示所有读者信息b结束继续吗ynn继续吗5y3图2-1 图书管理系统流程图3:详细设计采用microsoft visual c++作为开发工具,用结构体定义线性表,对所要处理的学生信息和图书信息进行存储,分别调用各个功能函数来处理。
3.1:线性表信息的存储用线性表实现,具体用结构体来定义,图书信息包含的变量有:图书编号,图书名,作者,出版社,出版时间,具体实现如下:struct book{char booknum[8];char bookname[15];char author[12];char PubHouse[15];char PubTime[11];}bookinfor[NUM];读者信息包含的变量有:读者编号,读者名,借书数量具体实现如下:struct reader{char readnum[8];char readname[15];char booknu[12];}readinfor[NUM1];3.2:初始化本函数用于初始化必须的图书管理数据,通过对1-5数字选择进行操作,分别执行不同的函数,具体实现如下:char Initialization1()/*界面初始化*/{char ch;printf(" ********Library Management System********\n1.Show all the book information\n2.Add book information\n3.Delete book information\n4.Search book information\n5.Exit\nPlease select:");do{ch=getchar();if(ch>='1'&&ch<='5'){printf("%c\n",ch);getchar();return ch;}}while(1);3.3:显示所有信息显示所有信息,打开bookinfo.txt文件,逐个读文件,关闭文件,具体实现如下:void showall()/*显示所有*/{int i=0;FILE *fp;system("cls");if((fp=fopen("C:\\bookinfo.txt","r"))==NULL){printf("ERROR:cannot open file\n");getchar();return;}printf("booknum bookname author PubHouse Pubtime\n");while(!feof(fp)){fread(&bookinfor[i],sizeof(struct book),1,fp);printf("%-8s %-15s %-12s %-15s %-11s\n",bookinfor[i].booknum,bookinfor[i].bookname, bookinfor[i].author,bookinfor[i].PubHouse,bookinfor[i].PubTime);i++;if(!(i%20)){printf("Press any key to continue...");getchar();}}fclose(fp);printf("Press any key to return");getchar();return;3.4:添加信息本函数可以将信息写到文件中,首先逐个输入记录中的数据项,然后打开文件,写进文件。
数据结构课程设计图书管理系统
数据结构课程设计图书管理系统Revised on November 25, 2020数据结构课程设计图书管理系统一需求分析该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。
此程序规定:(1) 管理员能够向系统中输入每种书的基本信息,包括书号、书名、作者、现存量和库存量、借阅记录,并保存记录;(2) 用户(读者)能够按书号、书名、作者查询图书信息;(3) 管理员能够实现图书采编入库(新购入一本书,经分类和确定书号之后登记到图书账目中去。
如果这种书在帐中已有,则只将总库存量增加)、借阅(如果书的现存量大于0,则借出一本,登记借阅者的图书证号和归还期限)、归还(删除对借阅者的登记,改变该书的现存量)、销毁(将图书从账目中删除)等操作。
二概要设计系统用到的抽象数据类型定义:1、ADT LinearList{数据元素:D={a i|a i∈D0,i=1,2,…,n,n≥0,D0为某一数据对象}关系:S={<a i,a i+1>|a i,a i+1∈D0,i=1,2,…,n-1}基本操作:(1)InitList(L)(2)DestroyList(L)(3)ClearList(L)(4)EmptyList(L)(5)ListLength(L)(6)Locate(L,e)(7)GetData(L,i)(8)InsList(L,i,e)(9)DelList(L,i,&e) }ADT LinearList2、ADT String{数据对象:D={ai |ai∈CharacterSet,i=1,2,…,n;n≧0}数据关系:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n;n≧0}基本操作:(1) StrAsign(S,chars)(2) StrInsert(S,pos,T)(3) StrDelete(S,pos,len)(4) StrCopy(S,T)(5) StrEmpty(S)(6) StrCompare(S,T)(7) StrLength(S)(8) StrClear(S)(9) StrCat(S,T)(10)SubString(Sub,S,pos,len)(11)StrIndex(S,pos,T)(12)StrReplace(S,T,V)(13)StrDestroy(S)}ADT String系统中的子程序和功能说明:InitBo(Book &boo);初始化图书信息InitRe(lend &Lin);初始化借阅者信息BinarySearch(Book boo,char SearchNum[]);二分法查找比较书号Buy(Book &boo, char BuyNum[]);新书采编入库系统Delete(Book &boo,char DeleteNum[]);清除图书信息系统Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[]);借阅图书处理系统Return(Book &boo,lend &Lin,char ReturnNum[],char BorrowerNum[]);归还图书系统SearchByNum(Book &boo,char SeaNum[]);按书号查找系统SearchByName(Book &boo);按书名查找系统SearchByAuth(Book &boo);按作者查询系统Menu();主菜单显示系统Search();查询系统子菜单main();主函数●系统程序功能结构图三详细设计●功能实现过程bool BinarySearch(Book boo,char SearchNum[]) ext=NULL;total++;/*总量加1*/}}void Delete(Book &boo,char DeleteNum[])/*清除图书信息*/{if(书库中没有此书)输出“无此书”;if(书库中有此书){strcpy(连续两本书的相关信息);现存量减1;库存量减1;}else 输出“此书已有借阅者,无法删除!”;}void Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[])/*借阅图书信息*/{if(没有找到此书) 输出“书库中无此书!”;if(书库中有此书){借出一本书后,该书的现存量减1;并在借阅记录链表中插入该条记录;再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者证号信息,申请新单链表存放借阅记录。
数据结构课程设计——图书管理信息系统
图书管理信息系统一、课程设计题目:图书管理信息系统二、课程设计内容:实现图书管理信息系统的设计。
这是一个数据结构的综合使用,涉及的知识比较全面,特别是对文件的使用更为全面。
进入系统后,操作员可进行系统维护、读者管理、图书管理、图书流通、退出系统等操作。
系统维护:有“初始化”和“读盘”两个重要操作。
第一次开始运行时,必须选择“初始化”,使有关文件指针、计数器等初始化为0;而在以后的每次操作开始时,选择“读盘”,将保存过的相关图书信息磁盘文件读入,以便进行各类操作。
读者管理:可实现读者信息的追加一项输入。
需要输入读者号、读者名、可借书数。
输入“y”可连续输入信息,若输入“n”则结束输入,退出读者管理。
图书管理:有“图书信息输入”和“图书信息查询”两个重要操作。
若选“图书信息输入”,就进入相关子模块,在输入信息的同时建立相应的索引及索引文件和索引链头文件,输入书号、书名、作者名、出版社、分类号、藏书量等信息,根据提示输入“y”实现连续输入,若输入“n”则结束输入,退出图书管理;有了图书信息数据之后,就可以进行图书信息的查询以及图书借阅等操作了。
若选“图书信息查询”,可根据提示按书号、书名、作者、出版社等进行查询,系统会将查询结果输出。
图书流通:有“借书处理”和“还书处理”两个重要操作。
当选择“借书处理”,系统接受输入信息后,首先查询读者文件。
若没查到,显示“非法读者!”,若查到,则再检查该读者书是否已借满,如果未借满,则继续检查图书文件;否则显示“书已借满!”。
检查图书文件如发现书号不存在或书已借出,都会提示读者“非法书号!”或“书已借出”,否则,进行借出处理,修改借阅文件、读者文件以及图书主文件的相关数据项,并显示“借书成功!”。
当选择“还书处理”,系统在接受输入信息之后,首先用书号查询借还书文件,若找到,则填入还书日期,然后再用书号查询图书主文件,修改借出数,用读者号查找读者文件,修改读者的借书数,而后显示“还书成功!”,否则显示“非法书号!”并返回主控菜单。
图书管理系统数据结构课程设计报告
图书管理系统数据结构课程设计报告目录1课题1——图书管理系统.................................. 错误!未定义书签。
1.1设计要求 (2)1.2创作的思路 (3)1.3创作和调试 (4)1.4心得体会 (9)附录 (10)1.设计要求小型图书购销管理系统2 / 171、需要处理的基础数据✧图书资料基本信息:图书编号、书名、作者、出版社、出版日期、定价等。
✧图书库存信息:图书编号、书名、作者、库存数量等。
✧图书采购信息:采购单号、图书编号、采购日期、采购数量、单价、采购金额等。
✧图书销售信息:销售单号、图书编号、销售日期、销售数量、单价、销售金额等。
2、系统的基本功能✧图书基本信息的录入和查询✧图书采购(1)输入要采购的图书编号,自动从图书基本资料中把相关信息提取出来。
(2)根据采购数量和单价,自动计算采购金额。
(3)根据采购数量,增加图书库存量。
✧图书销售(1)输入要采购的图书编号(或书名)、销售数量,从图书库存信息中查找是否合法,合法时进行销售,否则报错。
(2)根据采购数量和单价,自动计算销售金额。
(3)销售时,从库存中减去相应的数量。
✧利润计算:根据全部的采购金额和销售金额,计算书店的利润情况。
2.思路:3 / 171.基本模块:根据要求,应该有三个封装的类,包括:书籍信息,采购信息和销售信息。
其中以书籍信息为核心,在书籍信息中建立关于其它两类的友元函数,达到信息交流的目的。
2.功能实现:要求实现的功能有:对于书籍信息:录入,查询,采购和销售导致存量的改变对于采购信息:实施采购,查询采购对于销售信息:实施销售(需要判断是否合法),查询销售总利润的计算所以草图如下考虑到购买和销售时要输入书籍号,并且更改基本库存信息。
不如将销售和采购函数作为友元函数,或许能减少函数个数。
4 / 173.建立程序和调试改错因为是在模块的建设中边建设边调试,所以容易发现错误原因。
开始先建设基本类:Book,公有成员为:public:void set_book();录入功能函数void display_book();反馈功能函数void buy_book(Buy&);//此项在Buy类建立后再输入,为采购函数void sale_book(Sale&);//此项在Sale类建立后再输入,为销售函数int bianhao;书籍编号(设为公有是为了方便进行对比时调用,不然或许要一个公有函数来实现“查询是否有此书”的功能,if(i==b[i1].bianhao)可能比写函数更加简短。
数据结构课程设计---图书管理系统
《数据结构》课程设计报告(图书管理系统)目录一.需求分析 (3)二.概要设计 (3)三.详细设计 (4)四.调试分析 (6)五.用户使用说明 (6)六.测试结果 (7)七.附录:带注释的源代码 (8)一.需求分析大学的图书馆藏书是非常庞大的,原始的人工借书也是非常麻烦的,因此用一种自动系统来管理图书是非常有必要的,所以设计一个图书管理系统,要能够自如管理借书,还书,以及注册,注销书本,这样就能节省很多资源,提高效率。
明确规定:1.每种书的登记内容包括书号、书名、著作者、现存量和库存量;2.对书号建立索引表(线性表)以提高查找效率;3.系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
二.概要设计1.本题中用到了以下函数和结构体:本程序首先命名头文件:#include <stdio.h>#include <stdlib.h>#include <conio.h>以实现对各种函数的调用以及可能用到的各种循环。
用“struct BOOK”结构体,用来存放书籍以及借书信息;并用到“void page_title”的页头函数,通过“void book_out”,“void book_in”来实现对书本的借出以及还书,定义“search_book”来实现对书本各种信息的搜索任务,“void book_add”实现对书本的购进时的注册,用“void book_del”实现对书本的注销。
最后通过“goto menu”语句跳出整个循环语句,在各种操作做完后能够返回到主菜单。
用到goto语句原则上一般不符合结构化一些规定,但是此题中大大提高了效率,因此我采用了。
2. 主程序的流程及各程序模块之间的层次:本程序运用到的是用数组作为线性表的一种代替方式,实现各种查询,对各种数据的管理,运用线性表的话可能会更加简便,但是我在用了数组代替后发现其实这样更容易看懂。
数据结构课程设计——图书借阅管理系统
数据结构课程设计——图书借阅管理系统图书馆管理系统目录一、问题描述:二、系统需求分析:1 功能要求:2 技术要求:3 方案分析:三、概要设计:四、详细设计与程序代码:五、运行结果与测试:六、设计体会与总结一、问题描述图书借阅管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。
编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加会员、查询会员、删除会员、借书信息、到期书催还等智能化管理过程。
图书管理者只需略懂电脑知识就可以简易的操作该图书借阅管理系统。
二、系统需求分析图书借阅管理系统主要分为两大功能:(1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书到期书催还);(2)会员管理(增加会员、查询会员、删除会员、借书信息);要完成这个题目,主要是建立解决图书和会员的信息的存储,解决的方法是建立两个带头结点的单链表,分别用于存储图书和会员。
解决了这个问题后就是如何建立这两个链表的联系了,解决的方法是在图书结点中设一个借书人编号,在会员结点中设一个数组用于存会员借的书。
解决了这两个问题,剩下的工作就简单了。
只需按链表的操作就可以了。
1功能要求在图书借阅管理程序中须实现以下功能:(1)图书修改功能:能对图书借阅系统存储的信息进行修改。
提供两种修改方式,如按照图书编号修改、按照书名修改。
图书编号是图书记录的自然顺序编号。
(2)图书删除功能:能对图书借阅系统的图书信息进行删除。
删除时以记录为单位,能一次删除一条记录。
(3)借书功能:能对借出的图书作记录信息,能一次借出一本图书。
(4)还书功能:能将被借出的图书信息还原,能一次借出一本图书。
(5)保存功能:能将记录保存在任何自定义的文件中,如保存在:c:\\books 、c:\\lenders。
(6)通信录管理结束后,能够正常退出图书借阅管理程序。
数据结构课程设计报告图书馆管理系统
createtableuserCate
(cateNamevarchar(10)notnullprimarykey,
borrNumintnotnull,
borrTimeintnotnull
)
创建书籍类别表
createtablebookCateGory
(bkCateIdvarchar(6)primarykeynotnull,
否
出版日期(pubTime)
date
入库时间(checkIn)
date
否
可借复本(bkNum)
varchar
6
否
价格(price)
money
书籍识别表
表名
属性名
数据类型
字段长
是否允许为空
约束条件
书籍识别(book category)
书名(bookName)
varchar
20
否
主键
图书序号(orderNum)
values('C程序设计','10','TP103')
insertbookName
values('微观经济学','12','EC101')
insertbookName
values('经济学概论','03','EC102')
insertbookName
values('西方经济学','17','EC103')
end
go
读者每超期未还书一次,读者表的超期未还次数+1
数据库课程设计--图书馆管理系统
目录1 前言 (1)2 需求分析 (1)2.1 课程设计目的 (1)2.2 课程设计任务 (1)2.3 设计环境 (2)2.4 开发语言 (2)3 分析和设计 (2)3.1 系统E-R模型 (5)3.2 表空间及表的设计 (6)3.3 视图设计 (14)3.4 存储过程、函数、包的设计 (15)3.5 触发器设计 (22)3.6 角色、用户、权限设计 (24)3.7 备份方案设计 (25)4 课程设计总结 (27)参考文献 (28)致谢 (28)1 前言一个简单的图书管理系统包括图书馆内书籍的信息、学校在校师生的信息以及师生的借阅信息。
此系统功能面向图书馆管理员,可以完成书籍和读者的增加、删除和修改,制定借阅规则,以及对读者借阅、续借、归还、预约的确认。
2 需求分析2.1 课程设计目的通过专业课程设计Ⅱ,即大型数据库系统课程设计,有助于培养学生综合运用数据库相关知识解决实际问题的能力。
本设计要求对实际问题进行需求分析,提炼实际问题中的数据,建立关系模型,并在大型数据库中得以实现。
同时要求对数据库的运营、管理及使用上进行必要的规划和实现。
2.2 课程设计任务(1)图书信息:包括图书编号、图书名称、所属类别等;(2)读者信息:包括读者编码、姓名、性别、专业等;(3)借还书信息:包括图书当前状态、被借还次数、借阅时间等。
基本要求:(1)根据需求,补充必要的数据库实体,建立ER模型,通过ER图表示。
(2)在Oracle中创建该系统的数据库,并在数据库中实现各表,写入一定的数据。
(3)从实际查询应用出发,为一些主要的应用模块设计至少3个参数化视图。
(4)从数据检验的角度出发,为相关的表建立至少1个触发器。
(5)从数据更新或修改的角度出发,设计至少1个存储过程。
(6)从安全的角度出发,规划系统的角色、用户、权限,并通过相关的SQL实现。
(7)预计每个表的大致容量和增长速度,指定备份的方案,写出相关的备份命令。
图书管理系统(含源代码)c语言_数据结构课程设计报告
数据结构大作业图书管理系统工程管理121279044 伍杨目录一、题目要求 (2)二、总体设计 (2)三、编码实现 (3)1) 定义图书结构体 (3)2) 登记操作 (3)3) 查看操作 (7)4) 删除操作 (10)5) Main函数 (18)四、调试与测试 (23)五、五心得体会 (25)六、用户手册 (25)一、题目要求1)目的要求本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验。
2)题目要求实现图书管理信息系统的设计。
要求实现图书添加、显示全部图书、查询、借阅和归还。
主要考查利用文件的操作!二、总体设计三、编码实现1)定义图书结构体struct book{char bookname[20]; //书名int NO; //书编号char type[20]; //类型int date; //到书日期};struct person{char name[10]; //姓名char classes[20]; //班级int number; //学号char telephone[12]; //联系电话int NO; //书编号char bookname[20]; //书名int borrowdate; //借书日期int returndate; //还书日期2)登记操作void new_book() //登记新书{FILE *fp;struct book b;int i,j;if((fp=fopen("shuku.txt","a"))==NULL){ printf("File open error!\n");exit(0);}printf("请朱老师输入此次收到的书本总数:"); scanf("%d",&i);for(j=0;j<i;j++){printf("请朱老师输入书名:");scanf("%s",b.bookname);fprintf(fp,"%s",b.bookname);printf("请朱老师输入书编号:");scanf("%d",&b.NO);fprintf(fp," %d",b.NO);printf("请朱老师输入类型:");scanf("%s",b.type);fprintf(fp," %s",b.type);printf("请朱老师输入到书日期:");scanf("%d",&b.date);fprintf(fp," %d",b.date);}if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}void new_person() //登记借书{FILE *fp;struct person p;char choice;if((fp=fopen("jieshujilu.txt","a"))==NULL){ printf("File open error!\n");exit(0);}printf("请朱老师输入借书人姓名:");scanf("%s",);fprintf(fp,"%s",);printf("请朱老师输入借书人班级:");scanf("%s",p.classes);fprintf(fp," %s",p.classes);printf("请朱老师输入借书人学号:");scanf("%d",&p.number);fprintf(fp," %d",p.number);printf("请朱老师输入借书人联系电话:");scanf("%s",p.telephone);fprintf(fp," %s",p.telephone);printf("请朱老师输入书编号:");scanf("%d",&p.NO);fprintf(fp," %d",p.NO);printf("请朱老师输入书名:");scanf("%s",p.bookname);fprintf(fp," %s",p.bookname);printf("请朱老师输入借书日期:");scanf("%d",&p.borrowdate);fprintf(fp," %d",p.borrowdate);printf("请朱老师输入还书日期:");scanf("%d",&p.returndate);fprintf(fp," %d",p.returndate);printf("\n\t您想继续吗?(y/n)");scanf(" %c",&choice);if(choice=='Y'||choice=='y'){system("cls");new_person();}if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}实现程序对文件的读取void Read(){int i=0;int j=0;ifstream in("Libra.txt",ios::out);in>>i;all=i;if(i>0&&i<=Max){for(j=1;j<=i;j++){in>>data[j].id>>data[j].name>>data[j].type>>data[j].status>>data[j].count;}}in.close();}3)查看操作v void see_book() //查看书库记录{FILE *fp;long NO;char bookname[20];char type[20];long date;if((fp=fopen("shuku.txt","r"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s%ld%s%ld",bookname,&NO,type,&date);printf("%-10s %-10ld %-10s %ld\n",bookname,NO,type,date);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}void see_person() //查看所有借书记录{FILE *fp;char name[10];char classes[20];int number;char telephone[20];int NO;char bookname[20];int borrowdate;int returndate;if((fp=fopen("jieshujilu.txt","r"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %ld %s %ld %s %ld %ld",name,classes,&number,telephone,&NO,bookn ame,&borrowdate,&returndate);printf("%-5s %-5s %ld %-5s %ld %-5s %ld %ld\n",name,classes,number,telephone,NO,b ookname,borrowdate,returndate);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}4)删除操作void delete_books() //删除旧书{FILE *fp;struct book b;int number;void deletebooks();printf("请输入您要删除的书编号:");scanf("%d",&number);if((fp=fopen("shuku.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %d %s %d",b.bookname,&b.NO,b.type,&b.date);if(b.NO==number){printf("\n\n\t***************图书信息*******************\n");printf("\n\t图书书名:%25s",b.bookname);printf("\n\t-----------------------------------------");printf("\n\t图书编号:%25d",b.NO);printf("\n\t-----------------------------------------");printf("\n\t图书类型:%23s",b.type);printf("\n\t-----------------------------------------");printf("\n\t到书日期:%25d",b.date);printf("\n\t-----------------------------------------");deletebooks();}}}void deletebooks(){FILE *fp,*fp1,*fp2,*fp3;int number;struct book b;printf("\n\n确认删除?请再次输入书编号:");scanf("%d",&number);if((fp=fopen("shuku.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}if((fp1=fopen("tempshuku.txt","w"))==NULL){ //建立一个临时文件printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %d %s %d",b.bookname,&b.NO,b.type,&b.date);if(b.NO==number)continue;elsefprintf(fp1,"%s %d %s %d",b.bookname,b.NO,b.type,b.date); }fclose(fp);fclose(fp1);if((fp2=fopen("tempshuku.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}if((fp3=fopen("shuku.txt","w"))==NULL){ //清空书库printf("不能打开此文件!\n");exit(0);}while(!feof(fp2)){ //将临时文件的内容写人源文件fscanf(fp2,"%s %d %s %d",b.bookname,&b.NO,b.type,&b.date);fprintf(fp3,"%s %d %s %d",b.bookname,b.NO,b.type,b.date);}fclose(fp2);fclose(fp3);printf("\n 删除成功!\n");}void delete_returnbook() //删除借书记录{FILE *fp;int numbers;struct person p;void deletereturnbook();char choice;printf("\n请输入所还书本的书编号:");scanf("%d",&numbers);if((fp=fopen("jieshujilu.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %ld %s %ld %s %ld %ld",,p.classes,&p.number,p.telephone,&p.NO,p. bookname,&p.borrowdate,&p.returndate);if(p.NO==numbers){printf("\n\t***************图书信息*******************\n");printf("\n\t借书人姓名:%20s",);printf("\n\t-----------------------------------------");printf("\n\t借书人班级:%20s",p.classes);printf("\n\t-----------------------------------------");printf("\n\t借书人学号:%20d",p.number);printf("\n\t-----------------------------------------");printf("\n\t借书人联系电话:%20s",p.telephone);printf("\n\t-----------------------------------------");printf("\n\t图书编号:%24d",p.NO);printf("\n\t-----------------------------------------");printf("\n\t图书名称:%23s",p.bookname);printf("\n\t-----------------------------------------");printf("\n\t借书日期:%25d",p.borrowdate);printf("\n\t-----------------------------------------");printf("\n\t还书日期:%25d",p.returndate);printf("\n\t-----------------------------------------");deletereturnbook();printf("\n\t您想继续吗?(y/n)");scanf(" %c",&choice);if(choice=='Y'||choice=='y'){system("cls");delete_returnbook();}}}fclose(fp);}void deletereturnbook(){FILE *fp,*fp1,*fp2,*fp3;struct person p;int numbers;printf("\n\n确认删除?请再次输入书编号:");scanf("%d",&numbers);if((fp=fopen("jieshujilu.txt","r"))==NULL){ printf("不能打开此文件!\n");exit(0);}if((fp1=fopen("tempbook.txt","w"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %d %s %d %s %d %d",,p.classes,&p.number,p.t elephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);if(p.NO==numbers)continue;elsefprintf(fp1,"%s %s %d %s %d %s %d %d",,p.classes,p.num ber,p.telephone,p.NO,p.bookname,p.borrowdate,p.returndate);}fclose(fp);fclose(fp1);if((fp2=fopen("tempbook.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}if((fp3=fopen("jieshujilu.txt","w"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp2)){ //将临时文件写人源文件fscanf(fp2,"%s %s %d %s %d %s %d %d",,p.classes,&p.number,p .telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);fprintf(fp3,"%s %s %d %s %d %s %d %d",,p.classes,p.num ber,p.telephone,p.NO,p.bookname,p.borrowdate,p.returndate);}fclose(fp2);fclose(fp3);printf("\n 删除成功!\n");}5)Main函数int main(void){int choice;char choice2;struct book;struct person;do{printf("\n\n\n 图书馆管理系统\n\a");printf(" *******************************************************\n");printf(" ***朱老师您好吖********功能选项:登记******请按1,******\n");printf(" ******************************* 查看/查询*请按2 ******\n");printf(" ******************************* 删除***** 请按3 ******\n");printf(" ******************************* 退出***** 请按0 ******\n");printf(" *******************************************************\n\n\n");printf(" 请选择功能:");scanf("%d",&choice);switch(choice){case 1:printf(" 登记选项:新书登记请按1,借书登记请按2,返回请按3\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:system("cls"); //清屏printf("新书资料登记:\n\n");new_book(); //新书登记printf("登记完毕!\n");printf("\n");scanf(" %c",&choice2);system("cls");break;case 2:system("cls");printf("借书资料登记:\n\n");new_person(); //借书登记printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 3:system("cls");break;}break;case 2:printf(" 查看/查询选项:书库查看请按1,总借书记录查看请按2,到期记录查询请按3,返回请按4\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:system("cls");printf("欢迎朱老师进入书库!\n\n");printf("书名书编号类型到书日期\n");printf("------------------------------------------\n");see_book(); //书库显示printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 2:system("cls");printf("欢迎朱老师进入借书记录!\n\n");printf("姓名班级学号联系电话书编号书名借书日期到书日期\n");printf("--------------------------------------------------------\n");see_person(); //借书记录显示printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 3:system("cls");search_person(); //显示符合记录printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 4:system("cls");break;}break;case 3:printf(" 删除选项:旧书删除请按1,借书记录删除请按2,返回请按3\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:system("cls");delete_books(); //删除ingprintf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 2:system("cls");delete_returnbook(); //删除ingprintf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 3:system("cls");break;}break;case 0:system("cls");}}while(choice != 0);return 0;}四、调试与测试主菜单登记查看删除生成的文件内信息五、五心得体会经过这次大作业,我觉得代码的编写,最主要的的是编程思想,语言其实不是太重要,思路最重要!六、用户手册程序执行文件为lib sys.exe,打开执行文件后按提示操作即可。
数据结构课程设计报告-图书馆管理系统
广东某某学院《数据结构课程设计》题目:图书馆管理系统学号:姓名:年级:学院:专业:指导教师:目录一、问题描述与基本要求1.1问题描述1.2基本要求二、数据结构的设计2.1数据结构的选择三、软件模块结构图3.1大体模块关系图3.2各模块具体分析四、程序流程图五、源程序六、调试分析6.1程序错误修改及完善的过程6.2最终程序所有功能运行结果6.3测试数据七、用户使用手册八、心得体会一、问题描述与基本要求1.1问题描述设计一个计算机管理系统完成图书管理基本业务。
1.2基本要求1、每种书的登记内容包括书的编号、书名、著作者、现存量、库存量、书证号和归还日期。
2、建立空链表,以提高查找效率3、系统功能如下:图书入库:新购一种书,确定书号后,登记到图书账目表中,如果表中已有,则只将库存量增加;借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;归还:注销对借阅者的登记,改变该书的现存量。
二、数据结构设计2.1数据结构的选择用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能。
2.2单链表的定义先定义单链表结点的数据域,数据域包括书的编号、书名、作者、现存量、库存量、书证号和归还日期;链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
以下为单链表的相关定义:typedef struct bookdata//定义结点数据域{int id;//书的编号char title[15];//书名char author[6];//作者int count;//现存量int stock;//库存量char figure[20];//书证号char deadline[10];//归还时期}bookdata;typedef struct node//定义链表结点{bookdata Data;//结点数据域struct node *next;//结点链域}booknode;typedef booknode *booklist;//指向链表结点的指针2.3重要函数的定义及说明1、void initlist(booklist &l)//建立空链表2、void insertlist(booklist &l)//插入链表结点,实现登陆功能(需要输入书的编号,以确定登陆书名)3、void deletelist(linklist &l)//删除链表结点,实现删除功能(需要输入书的编号,以确定删除的书名)4、void find(booklist l)//查找书的编码,实现查找功能(需要输入书的编号,以确定查找的书名)5、void lend(booklist l)//借阅图书,实现借阅功能(需要输入书的编号,以确定借阅的书名)6、void dele(booklist l)//删除录入借书的信息,实现删除录入借书的功能(需要输入书的编号,以确定删除录入的书名)7、void add(booklist l)//查找有没有相同的书籍8、void begin()//开始进入图书管理系统9、void Introduction()//介绍图书管理系统的功能10、void About()//图书管理系统的相关开发内容11、void welcome()//欢迎进入图书管理系统以下为重要函数的定义;void initlist(booknode *&l)//建立空链表{l=new booknode;l->next=NULL;}void insert(booknode *&l)//图书馆添加书籍(定刚开始图书馆零本书){booknode *q;booknode *p=l;int k=1;for(;p->next!=NULL;p->next){}//移动指针找到最后一个节点while(k==1){q=new booknode;cout<<"请输入书的编号(书号为0结束):"<<endl;cin>>q->id;if(p->id!=0){cout<<"请输入书名"<<endl;cin>>q->title;cout<<"请输入作者"<<endl;cin>>q->author;cout<<"请输入图书数量"<<endl;cin>>q->stock;q->next=p->next;p->next=q;}cout<<"请输入是否继续(1.继续/0.退出)"<<endl;cin>>k;}}void find(booknode *&l)//查找书的编码{int x,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>x;for(;p!=NULL;p=p->next){if(p->id==x){cout<<"查找成功!"<<endl;cout<<"此书的名称为:"<<p->title<<endl;cout<<"此书的作者是:"<<p->author<<endl;cout<<"此书的数量为:"<<p->stock<<endl;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void lend(booknode *&l)//借阅图书{booknode *p=l;booknode *p2;p2=new booknode;int num,mark=0;char bookname[10];cout<<"请输入要查找书的名称"<<endl;cin>>bookname;for(;p!=NULL;p=p->next){if(strcmp(p->title,bookname)==0){cout<<"查找成功"<<endl;cout<<"请输入书证号"<<endl;cin>>p2->figure;cout<<"请输入归还日期"<<endl;cin>>p2->deadline;num=p->count;num=num-1;p->count=num;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void dele(booknode *&l)//删除录入借书的信息{booknode *p=l,*q;char stuname[15];cout<<"请输入书证号"<<endl;cin>>stuname[15];while(p!=NULL){if(strcmp(p->figure,stuname)==0){q->next=p->next;delete p;p=q->next;//p=p->next;}}//q=p->next;//p->next=q->next;cout<<"注销成功"<<endl;}/*void add(booknode *&l)//查找有没有相同的书籍,{int r,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>r;while(p!=NULL){if(p->id=r)//表示有同种书就只增加库存量{int number=0,o;number=p->stock;cout<<"请输入添加书的数量"<<endl;cin>>o;number=number+o;p->stock=number;cout<<"该书的库存量为:"<<endl;cout<<p->stock;p=p->next;mark=1;}else//表示没有同种书就开辟空间存入信息{booknode *p1;p1=new booknode;cout<<"请输入书的编号"<<endl;cin>>p1->id;cout<<"请输入作者"<<endl;cin>>p1->author;cout<<"请输入书的数量"<<endl;cin>>p1->count;p1->next=p->next;p->next=p1;}}}*/三、软件模块结构图3.2各模块具体分析链表插入模块具体分析如下:链表删除模块具体分析如下:主函数链表插入模块链表删除模块 链表查找、借阅、模块链表显示模块InsertList(L) scanf( )p ->book.nodeP ->P ->book.authorP ->book.stockDeleteList(L)scanf( )s,stuname链表查找、借阅模块链表输出模块具体分析如下:Search(L) scanf( )i,booknodem,nP ->book.stockp -> P ->book.authoP2->figure P2->deadline Booknode(L)scanf( )p ->book.node,P -> P ->book.author,P ->book.count四、程序流程图输入5,谢谢使用输入4,删除借阅图书信息输入3,借阅图书输入2,查找图书信息输入6,退出管理系统输入1,录入图书信息结束D4C3BA 21输入数字,选择功能功能表与编号选择1-6InitList(B)主函数main( )开始1—>A4—>D五源程序#include<iostream>#include<string>#include<string.h>using namespace std;typedef struct node//定义链表节点{int id;//书的编号char title[10];//书名char author[10];//作者int count;//现存量int stock;//库存量char figure[20];//书证号char deadline[10];//归还时期struct node *next;}booknode;//typedef booknode *booklist;void initlist(booknode *&l)//建立空链表{l=new booknode;l->next=NULL;}void insert(booknode *&l)//图书馆添加书籍(定刚开始图书馆零本书){booknode *q;booknode *p=l;int k=1;for(;p->next!=NULL;p->next){}//移动指针找到最后一个节点while(k==1){q=new booknode;cout<<"请输入书的编号(书号为0结束):"<<endl;cin>>q->id;if(p->id!=0){cout<<"请输入书名"<<endl;cin>>q->title;cout<<"请输入作者"<<endl;cin>>q->author;cout<<"请输入图书数量"<<endl;cin>>q->stock;q->next=p->next;p->next=q;}cout<<"请输入是否继续(1.继续/0.退出)"<<endl;cin>>k;}}void find(booknode *&l)//查找书的编码{int x,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>x;for(;p!=NULL;p=p->next){if(p->id==x){cout<<"查找成功!"<<endl;cout<<"此书的名称为:"<<p->title<<endl;cout<<"此书的作者是:"<<p->author<<endl;cout<<"此书的数量为:"<<p->stock<<endl;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void lend(booknode *&l)//借阅图书{booknode *p=l;booknode *p2;p2=new booknode;int num,mark=0;char bookname[10];cout<<"请输入要查找书的名称"<<endl;cin>>bookname;for(;p!=NULL;p=p->next){if(strcmp(p->title,bookname)==0){cout<<"查找成功"<<endl;cout<<"请输入书证号"<<endl;cin>>p2->figure;cout<<"请输入归还日期"<<endl;cin>>p2->deadline;num=p->count;num=num-1;p->count=num;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void dele(booknode *&l)//删除录入借书的信息{booknode *p=l,*q;char stuname[15];cout<<"请输入书证号"<<endl;cin>>stuname[15];while(p!=NULL){if(strcmp(p->figure,stuname)==0){q->next=p->next;delete p;p=q->next;//p=p->next;}}//q=p->next;//p->next=q->next;cout<<"注销成功"<<endl;}/*void add(booknode *&l)//查找有没有相同的书籍,{int r,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>r;while(p!=NULL){if(p->id=r)//表示有同种书就只增加库存量{int number=0,o;number=p->stock;cout<<"请输入添加书的数量"<<endl;cin>>o;number=number+o;p->stock=number;cout<<"该书的库存量为:"<<endl;cout<<p->stock;p=p->next;mark=1;}else//表示没有同种书就开辟空间存入信息{booknode *p1;p1=new booknode;cout<<"请输入书的编号"<<endl;cin>>p1->id;cout<<"请输入作者"<<endl;cin>>p1->author;cout<<"请输入书的数量"<<endl;cin>>p1->count;p1->next=p->next;p->next=p1;}}}*/void begin(){booknode *l;initlist(l);int k;do{cout<<"******************************************"<<endl;cout<<" 欢迎您使用图书管理系统"<<endl;cout<<" 请选择"<<endl;cout<<"1. 添加图书信息"<<endl;cout<<"2. 查找图书信息"<<endl;cout<<"3. 借阅图书"<<endl;cout<<"4. 删除借阅图书信息"<<endl;cout<<"5. 增加图书"<<endl;cout<<"6. 退出系统"<<endl;cout<<"请选择"<<endl;cin>>k;switch(k){case 1:insert(l);break;case 2:find(l);break;case 3:lend(l);break;case 4:dele(l);break;case 5://add(l);//break;case 0:cout<<"******谢谢使用,再见******"<<endl;exit(0);default:cout<<"输入有误!!"<<endl;break;}}while(k!=0);}void Introduction(){cout<<" 系统介绍"<<endl;cout<<"****************************"<<endl;cout<<" 本系统主要实现图书信息"<<endl;cout<<" 增加添加查找借阅显示"<<endl;cout<<"****************************"<<endl;}void About(){cout<<" 开发人员"<<endl;cout<<"****************************"<<endl;cout<<"********** 冯翔**********"<<endl;cout<<"********** 李建超**********"<<endl;cout<<"********** 陈宥君**********"<<endl;cout<<"********** 袁美琪**********"<<endl;cout<<"****************************"<<endl;}void welcome(){while(1){int y;cout<<"************************************************"<<endl;cout<<" 欢迎使用图书管理系统"<<endl;cout<<"1. 管理系统"<<endl;cout<<"2. 开发人员"<<endl;cout<<"3. 系统简介"<<endl;cout<<"4. 退出"<<endl;cout<<"************************************************"<<endl;cin>>y;switch(y){case 1:begin();break;case 2:About();break;case 3:Introduction();break;case 4:exit(0);default:cout<<"输入有误"<<endl;system("pause");}}}int main(){welcome();return 0;}6.1程序错误修改及完善的过程我这次的课程设计题目是根据我们小组选择的,当看到这个题目时,我觉得还算比较简单,因为我之前数据结构实验就做过单链表的插入、删除、查找、输出,而这次活期图书管理系统要求的录入、查找、借阅、归还、库存量信息等功能,即可用单链表的相关功能函数来实现,于是我修改了之前写过的单链表的一些函数,以满足这次题目的要求,但在实验过程中仍出现了一些错误。
数据结构课程设计-图书管理系统
用C++语言实现图书管理系统摘要图书管理系统主要是对图书的录入、读者借阅、读者归还等功能进行实现。
本课程设计的系统开发平台为Windows XP,程序设计语言为C++,程序运行平台为Windws98/2000/XP/Seven。
在程序设计中采用了B-树方法提高书籍的查找速度。
关键词程序设计;图书管理系统;C++;数据结构;B-树1 索引1.1课程设计目的设计一个小型的图书管理系统,可以实现新增图书,读者借阅,读者归还等功能。
1.2.系统性能要求能较快的查到所要查找的图书;能准确统计当前每种书的库存,以确定此书是否可以外借;并且对外借的图书进行管理,记录借出时间、应还时间等。
1.3.功能的实现1) 新书入库:确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;2) 借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;3)归还:注销对借阅者的登记,改变该书的现存量。
2 系统详细设计及实现1.所用的知识体系在整个程序的设计过程当中,用到了C++的一些基础知识,面向对象的思想和结构化的程序设计思想。
数据结构的B-树建立索引,用索引提高查找的效率等。
2.系统功能组成框图3 . 系统功能模块划分摸块保称 功能说明1 系统管理 显示库存,借阅,归还2 图书管理 图书的添加,查询等操作3借还书管理对每次借书信息的添加,删除等操作主程序输入 显示 借阅 添加查找退出图2.1 系统功能组成框图显示库存借出图书新书入库书号查找归还归还图书4.流程图4.1录入图书信息4.2借阅图书输入要借阅的图书信息判断图书是否存在输出提示信息告诉读者图书不存在N处理借阅功能,将该图书数量减一Y判断图书数目是否大于0提示读者该图书都已借出NY录入图书信息判断是否已经存在该图书在原有的记录上加上现有的图书数量Y向系统中加入新纪录N4.3归还图书输入图书和读者信息处理归还图书功能,清读者的借阅记录,将图书的在库数加一5 功能实现5.1 运行程序的主界面图5—1 操作界面5.2 新书入库功能的操作界面图5-2新书入库5.3 查询数据的界面图5-3查询书籍5.4 查询所有书籍的界面图 5-4显示库存5.5 图书借阅的界面图5-5借阅书籍5.6 还书的界面图5-6还书3 参考文献[1] 谭浩强 C语言设计(第三版)清华大学出版社[2] 严蔚敏吴伟民数据结构(C语言版) 清华大学出版社[3] 谭浩强 C++ 程序设计清华大学出版社[4]参考网址/manual/zh/function.fopen.php[5]参考网址/%B3%D5%B3%D5%B5%C4145/blog/item/48f2b1ed1d99d1d2b 21cb15c.html附录#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<time.h>//定义局变量#define N10000//表示状态的字段#define TRUE1#define FALSE0#define OK1#define ERROR0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef char *string ;#define m3//B-树的阶,设为// 借阅者的结构体typedef struct User{unsigned int number; //借书证号码int year;int month;int day; //借书时间int dyear; //截至日期的年int dmonth; //截至日期的月int dday; //截至日期的日struct User *next; //下一个借阅者}User; //定义用户的的信息//书的结构体struct Book{unsigned int key; //图书的书号char bname[20]; // 书名char writter[20]; // 著者unsigned int left; // 现存量unsigned int total; // 总存量User *user; //借阅该书的人}b[N]; //定义书的信息//B- 树的存储结构typedef Book KeyType;typedef struct BTNode{int keynum; //结点中关键字个数,即结点的大小struct BTNode *parent; //指向双亲结点KeyType key[m + 1]; //关键字向量,号单元未用struct BTNode *ptr[m + 1]; //子树指针向量}BTNode,*BTree;//查找结果的存储结构体typedef struct{BTNode *pt; //指向找到的结点int i; //1……m,在结点中的关键字序号int tag; //B- 树的查找结果类型}Result;BTree root = NULL; //树根//******************函数声明部分//输入书的具体信息void InBookMess(KeyType &book);//输入书的关键字void InBookKey(KeyType &book);//显示书的具体信息,如果书存在就显示void ShowBookMess(Book book);//显示一个结点中所包含的全部信息,显示单个结点void ShowBTNode(BTree p);//显示,以层次的方法显示树的结点void display(BTree T);//复制关键字的信息void KeyTypeCopy(KeyType &bak,KeyType k);//查找在某个结点中的位置int Search(BTree p, KeyType K);//查找Result SearchBTree(BTree T, KeyType K);//插入void Insert(BTree &q, int i, KeyType x, BTree ap);//分裂结点void split(BTree &q, int s, BTree &ap);//生成一个新的结点void NewRoot(BTree &T, BTree p, KeyType x, BTree ap);//将书的信息插入到B- 树中Status InsertBTree(BTree &T, KeyType K);//删除树结点Status DeleteBT(BTree &T,KeyType k);//与右最左结点交换void exchange(BTree &T,int i);//用户借阅Status BorrowBook(BTree T,KeyType k);//注销对借阅者的登记,改变该书的显存量Status ReturnBook(BTree T,KeyType k);void temp(BTree T);void save(BTree p);/*************************************************/void save(BTree p)//保存模块程序{FILE *fp;//定义文件指针if ((fp=fopen("book.txt","wb"))==NULL )//判断文件的存在,若非空,将fp 指向filename中记载的文件名的文件{printf("创建文件失败!\n\n"); //打印出错提示getchar();return;}for(int i = 1; i <= p->keynum; i++){fprintf(fp,"%d %s %s %d %d\n",p->key[i].key,p->key[i].bname,p->key[i].writter,p->key[i].left,p->key[i].total);}fclose(fp);//关闭文件}void temp(BTree T){int i;if(T) {save(T); //保存这个结点的全部值for(i=0; i<=T->keynum; i++){ //使用递归的方法显示每个结点if(T->ptr[i]){temp(T->ptr[i]);}}}}//读取文件void read(){FILE *fp,fp1;//定义文件指针if ((fp=fopen("book.txt","rb"))==NULL &&(fp=fopen("user.txt","rb"))==NULL)//判断文件的存在,若非空,将fp指向filename中记载的文件名的文件{printf("创建文件失败!\n\n");//打印出错提示getchar();return;}for(int i=1;;i++)//读取文件{if(fscanf(fp,"%d%s%s%d%d",&b[i].key,&b[i].bname,&b[i].writter,&b[ i].left,&b[i].total)==EOF){ break; }InsertBTree(root,b[i]);}fclose(fp);//关闭文件}/**********************************************************///复制结点,将某个结点的值复制到另外一个值上void KeyTypeCopy(KeyType &bak,KeyType k){bak.key = k.key;strcpy(bak.bname,k.bname);bak.left = k.left;bak.total = k.total;strcpy(bak.writter,k.writter);er = er;}//在一个结点中查找元素,返回结点的位置int Search(BTree p, KeyType K) {if(!p)return -1;int i=0;for(i = 0; i < p->keynum && p->key[i+1].key <= K.key; i++);return i;}// 在m阶B树T上查找关键字K,返回结果(pt,i,tag)Result SearchBTree(BTree T, KeyType K){BTree p, q;int found, i;Result R;//初始化变量p = T;q = NULL;found = FALSE;i = 0;// 初始化,p指向待查结点,q指向p的双亲while (p && !found) {i = Search(p, K);// 找到待查关键字if (i > 0 && p->key[i].key == K.key)found = TRUE;else {q = p;p = p->ptr[i]; //在另一个分支上查找}}if (found) { // 查找成功R.pt = p;R.i = i;R.tag = 1;}else { // 查找不成功R.pt = q;R.i = i;R.tag = 0;}// 返回结果信息: K的位置(或插入位置)return R;}//插入一条记录void Insert(BTree &q, int i, KeyType x, BTree ap) { int n = q->keynum;for (int j = n; j > i; j--) {KeyTypeCopy(q->key[j + 1],q->key[j]); //复制结点值q->ptr[j + 1] = q->ptr[j];}KeyTypeCopy(q->key[i + 1],x);q->ptr[i + 1] = ap;if (ap)ap->parent = q;q->keynum++;}//分离结点void split(BTree &q, int s, BTree &ap) {int i,j,n = q->keynum;ap = (BTree)malloc(sizeof(BTNode));ap->ptr[0] = q->ptr[s];for (i = s + 1,j = 1; i <= n; i++,j++) {KeyTypeCopy(ap->key[j],q->key[i]);ap->ptr[j] = q->ptr[i];}ap->keynum = n - s;ap->parent = q->parent;for (i = 0; i <= n - s; i++)if (ap->ptr[i])ap->ptr[i]->parent = ap;q->keynum = s-1;}//生成一个新的树结点void NewRoot(BTree &T, BTree p, KeyType x, BTree ap) {T = (BTree)malloc(sizeof(BTNode));T->keynum = 1; //设置当前结点的元素个数T->ptr[0] = p; //设置左边结点的树根T->ptr[1] = ap; //设置右边的树根KeyTypeCopy(T->key[1],x); //将x 元素的结点值复制到T 的第一个元素中//当孩子不空的时候就设置当前结点为孩子的双亲if (p)p->parent= T;if (ap)ap->parent = T;T->parent = NULL; //当前结点的双亲为空}//返回false 表示在原有结点上增加数量,返回true 表示创建了一个新的结点Status InsertBTree(BTree &T, KeyType K) {// 在m阶B树T上结点*q的key[i]与key[i+1]之间插入关键字K。
数据库课程设计报告图书管理系统
数据库原理课程设计报告书课题名图书信息管理系统指导教师日期目录一、前言 (2)二、概述 (2)2.1开发目的 (2)三、需求分析 (2)3.1可行性分析 (2)3.2系统目标 (3)3.3系统应该具备的功能 (3)3.4系统结构图 (4)四、概念设计 (5)五、逻辑设计 (9)六、物理设计 (9)5.1表命令 (9)5.2表结构图 (13)七、代码实现 (13)6.1数据库连接 (13)6.2增加一条图书记录 (14)6.3删除一条图书记录 (16)6.4修改一条图书记录 (17)6.5查询一条图书记录 (18)八、结束语 (22)前言近年来,随着我国市场经济的迅速发展和人们生活水平的不断提高,以及计算机的普及使用,图书馆藏书的数目逐渐增大,这也是挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的图书管理系统,提高了图书馆的工作效率,为想要借书和还书的人提供更好的服务。
1、概述1.1 开发目的图书信息管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。
我们小组开发图书管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校、社会服务。
2、需求分析2.1可行性分析2.1.1技术可行性就技术力量来说,我们小组可以完成此次开发工作。
开发过程中会出现许多问题,有我们预想之中的,也有一些没有在我们预想中,但我们有信心克服一切困难。
我们小组各成员已经学习了MySQL,SQL,对网络技术和操作系统也有系统的了解,熟悉计算机原理,能解决常见的硬件故障和硬件选择。
2.1.2经济可行性目标系统开发需求比较低,加上具有成熟的软硬件环境,所以在软硬件的支出上十分有限。
而且,目标系统并不是十分的复杂,开发的周期较短,人员有限。
当系统开发完实际运行后,将很大程度上提高计算机的功能,在为使用者带来便利的同时也为系统的进一步推广创造了条件。
图书管理系统(含源代码)c语言_数据结构课程设计报告-推荐下载
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
数据库课程设计报告图书管理系统
数据库原理课程设计报告书课题名图书信息管理系统指导教师日期目录一、前言 (2)二、概述 (2)2.1开发目的 (2)三、需求分析 (2)3.1可行性分析 (2)3.1.1技术可行性 (2)3.1.2经济可行性 (3)3.1.3管理可行性 (3)3.2系统目标 (3)3.3系统应该具备的功能 (3)3.4系统结构图 (4)四、概念设计 (5)五、逻辑设计 (9)六、物理设计 (9)5.1表命令 (9)5.2表结构图 (13)七、代码实现 (13)6.1数据库连接 (13)6.2增加一条图书记录 (14)6.3删除一条图书记录 (16)6.4修改一条图书记录 (17)6.5查询一条图书记录 (18)八、结束语 (22)前言近年来,随着我国市场经济的迅速发展和人们生活水平的不断提高,以及计算机的普及使用,图书馆藏书的数目逐渐增大,这也是挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的图书管理系统,提高了图书馆的工作效率,为想要借书和还书的人提供更好的服务。
1、概述1.1 开发目的图书信息管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。
我们小组开发图书管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校、社会服务。
2、需求分析2.1可行性分析2.1.1技术可行性就技术力量来说,我们小组可以完成此次开发工作。
开发过程中会出现许多问题,有我们预想之中的,也有一些没有在我们预想中,但我们有信心克服一切困难。
我们小组各成员已经学习了MySQL,SQL,对网络技术和操作系统也有系统的了解,熟悉计算机原理,能解决常见的硬件故障和硬件选择。
2.1.2经济可行性目标系统开发需求比较低,加上具有成熟的软硬件环境,所以在软硬件的支出上十分有限。
而且,目标系统并不是十分的复杂,开发的周期较短,人员有限。
数据结构课程设计:图书管理系统报告书
数据结构课程设计报告书班级学号专业姓名课题描述:本次数据结构课程设计内容是:设计一个计算机管理系统完成图书管理基本业务。
随着社会的发展,技术的进步,各种管理业务越来越趋于自动化。
而图书馆在日常运营中,面对大量书籍,读者信息以及两者间相互联系产生的借书还书信息,而人工记录的方法不仅效率低而且极容易出现错误,大大影响了图书馆的日常管理工作。
图书管理系统就是为了解决人工管理图书的问题,实现图书馆图书自动化的管理。
本系统需要实现图书基本信息管理的功能,具体涉及到新进图书基本信息的录入,图书基本信息的查询,借书人的基本信息的注册以及借书,还书等几项基本功能。
一、需求分析:图书管理系统将实现以下几个基本功能,基本要求为:1. 新进图书基本信息的录入:当图书馆新引进一批新书时,图书管理员需要将这些图书的基本信息录入管理系统中,具体包括图书书号,书名,著作者,现存量和库存量。
2. 图书基本信息的查询:读者可以根据自己的情况在本系统中查询图书的基本信息,从而便于自己借阅图书。
3. 借阅图书:在借阅图书之前没有在本图书馆进行注册的读者,是不能够借阅图书的,因而在读者在借阅图书之前需要登记借阅者的书证号,以及归还日期,然后系统再进行改变现存量等相关操作。
4. 归还图书:根据读者归还图书的日期,本系统会注销对借阅者的登记,然后进行改变该书的现存量操作。
5. 退出:当读者在图书馆中结束其业务时,则会在系统的提示下退出操作。
二、总体结构设计:1. 系统设计功能模块图图2.1系统设计功能模块图2. 系统模块说明:图书入库模块:图书名称,作者,入库数量;查询库存模块:显示当前库存书的编号,书名及作者;借阅图书模块:输入所借阅图书的编号,如果存在则会提示读者输入借书证号,提示借阅成功,如果图书不存在或者已借出,则提示借阅失败;查询借阅模块:显示所借书人的借书证号,借阅书的书名,编号以及归还日期;归还图书模块:输入借书证号和图书编号,进行还书操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课设课题:课程设计——图书管理系统学院:电子信息学院专业:网络工程姓名:班级学号:BX1213指导教师:张艳报告日期:2013.12.12目录一、需求分析1.1 系统开发背景和意义图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高图书管理的效率。
因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统,将是非常必要的,也是十分及时的。
图书管理系统需要满足来自图书馆工作人员、普通用户和借阅者三方面人员的需求。
图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时还可通过图书编号等查询相应的借阅情况;普通用户的需求是查询图书馆所存的图书的相关情况;图书借阅者的需求是查看自己的相关信息及查询自己的借阅情况。
1.2 设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。
【基本要求】1) 每种书的登记内容包括书号、书名、着作者、现存量和库存量;2) 对书号建立索引表(线性表)以提高查找效率;3) 系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
二、总体结构设计有八个模块1) 图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。
2) 新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。
3) 添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4) 借书模块读者输入读书证号,证号存在输入要借的图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。
5) 还书模块归还已借的图书,要先输入读者书证号,书证号存在继续输入要还的图书编号,图书编号存在并且借来此书,归还成功。
6) 查询图书信息7) 查询读者信息可查询读者姓名书证号,借了几本书,都是什么书和还书日期,还可以借几本书。
8) 退出退出读书管理系统并保存读者和图书信息。
进入系统后首先进行图书初始化,输入图书的信息。
3.2 系统主界面否是3.3 采编入库选择采编入库的功能后,先输入图书编号判断是否存在,若存在,则在原有记录上加上添加的图书数量;若不存在,则加入新的记录。
否3.4 输入读者信息选择读者登记后,输入读者编号跟姓名。
3.5 借阅图书选择借阅图书功能后,输入读者证号,判断该读者是否存在,若存在则输入借阅图书的编号,判断该图书编号是否存在,若存在,则判断读者借阅的图书数量是否满了和是否借阅了相同的书籍,判断成功后,则输入归还该图书的日期,该图书现有量减一,借阅成功;若读者不存在则返回。
否是判断读者是否存在3.6 归还图书实现归还图书功能时,首先输入读者编号,并判断是否存在,若不存在就按任意键返回,;若存在输入归还的图书编号并判断是否存在,若归还图书编号不存在,则返回。
存在后,将读者借阅该图书的信息清空,该图书的现有量加一。
最后按任意键返回是3.7 查询图书信息查询图书信息时,输入图书的编号,判断是否存在。
不存在则返回;存在则输出图书的编号,书名,作者,现有量,跟库存量。
是3.8 查询读者信息查询读者信息时,首先判断读者的编号是否存在,不存在就按任意键返回。
若存在,则输出读者的证号,姓名,和借阅的图书编码及其还书日期。
是结束图3-8 查询读者信息流程图四、程序设计调试情况分析在整个课程设计中,我们遇到了许多的问题。
有些问题吧,我们在苦思冥想的时候,突然我们的编译器显示出了正确的结果,当我们欣喜若狂的在运行下一次的时候又会出现相同的问题,在借阅的过程中,在一个读者借阅了两本书以上的时候,上一本书的归还日期上还有下一本书上的编号,最后一本书输出的才是正确的结果。
下图是借阅了两本书的截图:图4-1看到这里我们也知道是第一本书的还书日期的地址空间跟第二本书的编号连接在了一起导致输出的时候一直到第二本书编号的的字符串后面的‘/0’结束。
最后发现是我们在定义还书日期这个字符串的时候开辟的空间太小。
我们把char limit_date[8];改为char limit_date[10]就好了。
图4-2五、测试结果5.1 欢迎界面程序运行显示“欢迎使用图书管理系统”,按任意键进入到主菜单如图5-1所示。
图5-1 欢迎界面5.2 初始化图书信息在没有文件的时候会进入到初始化界面,需要输入一本图书的相关信息,如图5-2所示。
图5-2 初始化图书信息5.3 系统主界面接着进入的系统的主菜单,如图5-3所示。
图5-3 系统主界面5.4 采编入库实现采编入库功能按照系统提示输入信息。
如图5-4。
如果该图书已存在,则直接输入图书的数量如图5-5所示。
图5-4 采编入库(书不存在)图5-5 采编入库(书已存在)5.5 输入读者信息按照要求输入读者信息,如图5-6所示。
图5-6 输入读者信息5.6 借阅图书按照要求先输入读者证号,在输入借阅的图书编号如图5-7所示。
如果读者已经借阅了一本书之后不能借阅同一本图书如图5-8所示。
图5-7 借阅图书图5-8 同一个读者不能借阅同一本图书5.7 归还图书归还图书的要求按着图5-9输入即可。
图5-9 归还图书5.8 查询图书信息图5-10 是没有借阅之前的图书的相关信息,图5-11是读者借阅了图书之后的信息,只改变了现有量。
图5-10 借阅登记后图5-11 归还图书后5.9 查询读者信息查询读者的信息时,会输出相关借阅的图书编号以及还书日期如图5-12,5-13所示。
图5-12 查询读者信息(一)图5-13 查询读者信息(二)5.10 保存文件,退出在系统的主菜单后,按‘0 ’功能保存并退出系统。
图5-14 文件保存六、总结个人觉得课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程. 在生活中可以说得是无处不在。
因此作为新世纪的大学来说能够分析,并解决程序中出现的问题是十分重要的。
课程设计就能体现到这一方面。
能够将你所学到的理论跟实际结合在一起。
通过本次课程设计感慨良多。
从课堂上听到的到课后应用到的根本就不是一回事。
课堂上,老师在上面说,自己在下面听,到也能听懂。
可是到了应用上,自己倒也是知道要用到哪方面的内容,但是偏偏不知道从何处下手;好不容易写好的一小段代码,还要跟其他功能不相冲突,这又需要我们自己去想办法去兼容好他们。
通过本次课程设计试我懂得理论要跟实践相结合。
正所谓“台上十分钟,台下十年功”,别人在台上表演了十分钟,你觉得很容易,可那里知道别人在下面做的努力呢。
同样的,我们在课堂上听老师讲确实觉得是那么回事,但是真正做下去,也只有自己知道是何种滋味。
理论始终是理论,不能都熟练应用自己所学到的知识,到头来也是一场空。
在这次的课程设计过程中,我们也遇到了不能解决的难题,比如说在读者查询的时候,第二个读者始终会覆盖第一个读者的数据。
我们始终没有搞明白问题的所在,只知道不是在输出读者信息的问题,应该是添加读者过程中指针始终指在第一个地址,没有移动。
我们按照查询图书的函数重新编写了一次还是同样问题。
一直到答辩前一天晚上还没有解决,之后只能放弃。
还有在最开始的时候我们的程序功能并没有清屏功能,整个界面看起来并不是那么整洁。
于是我用用getch();system(“cls”);来进行清屏,最后会出先一个小问题,在我们查询了一些资料后,又再次基础上加上了goto end;这个函数来加以完善。
这次课程设计,我们也遇到了很多问题,比如说,我们再输入第二个读者的信息后会覆盖第一个读者的信息,想了半天没有弄懂是哪里错了,最后才看出来我们定义的结构体指针没有移动,导致我们输入的读者信息一直存放在同一个地址中。
也有些不懂需要在网上查询的代码,组员之间相互配合,不懂就询问其他同学或者查询资料亦或者自己去弄懂问题的根结,团结协作的精神在这次课程设计中表现的淋漓尽致。
我们不仅将以前的知识复习一遍;同时也弄懂了一些平常自己似懂非懂的;最后同学之间的友谊也慢慢变的深厚起来小组分工:孙泽铭:采编入库、查询图书信息、查询读者信息黄响:添加读者、借阅图书、归还图书七、参考文献[1]严蔚敏吴伟民编着《数据结构》清华大学出版社,2000[2]黄国瑜叶乃菁编着《数据结构》清华大学出版社,2001[3]胡学钢编着《数据结构算法设计指导》清华大学出版社,1999[4]王士元编着《数据结构与数据库系统》南开大学出版社,2000[5]李强根主编《数据结构(C++描述)》中国水利水电出版社,2001[6]杨正宏编着《数据结构》中国铁道出版社,2002[7]胡学钢编着《数据结构算法设计指导》清华大学出版社,1999[8]殷人昆徐孝凯编着《数据结构习题解析》清华大学出版社,2002[9]李春葆编着《数据结构习题与解析》清华大学出版社,2001[10] 咨讯教育小组编着《数据结构数据结构版》中国铁道出版社,2002八、附录(源代码)#include<stdio.h>#include <string.h>#include <stdlib.h>#include<conio.h>#define Max 4typedef struct book{char book_num[10];char book_name[20];char book_writer[10];int book_xy;int book_kc;int n;struct book *next;}BK;typedef struct borrow{char borrow_book_num[10];char limit_date[10];}BO;typedef struct reader{char reader_num[10];char reader_name[10];int right;int m;BO borrow[Max];struct reader *next;}RD;BK *h_book;RD *h_reader;int n=0;int m=0;void Login();int Menu();void Init();void Menu_select();void Insert_New_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(){system("cls");printf("\n\n\n\t\t***************************************\n");printf("\n\n\n\t\t** 欢迎使用图书管理系统**\n");printf("\n\n\n\t\t***************************************\n");printf("\n\n\n\t\t 按任意键进入系统...");getch();system("cls");}int Menu() /*主菜单*/{int dm;printf("\n\t\t图书管理系统主菜单\n");printf("=================================================\n");printf("*\t1----采编入库\n");printf("*\t2----登记读者\n");printf("*\t3----借阅登记\n");printf("*\t4----还书管理\n");printf("*\t5----查询图书信息\n");printf("*\t6----查询读者信息\n");printf("*\t0----退出系统\n");printf("=================================================\n");printf("请选择相应的代码:");for(;;){scanf("%d",&dm); //dm输入的数字if(dm<0||dm>6)printf("\n错误!请重新输入:");elsebreak;}return dm;}void Menu_select()/*主菜单选择函数*/{for(;;){switch(Menu()) /*功能选择*/{case 0:system("cls");Save();printf("\n\n\t文件保存成功!\n");printf("\n\n\t欢迎下次使用本系统!\n");getch();exit(0);case 1: Insert_New_Book();break;case 2: add_reader();break;case 3: Borrow_Book();break;case 4: Return_Book();break;case 5: Print_book();break;case 6: Print_reader();break;default:printf("\n错误!");exit(0);}}}void Init() /*初始化*/{BK *p0;printf("\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n");p0=(BK*)malloc(sizeof(BK));h_book=p0;printf("\n请输入图书信息:\n");printf("图书编号:"); /*输入图书编号(唯一)*/scanf("%s",p0->book_num);printf("图书名称:"); /*输入图书名称*/scanf("%s",p0->book_name);printf("图书作者:"); /*输入图书作者*/scanf("%s",p0->book_writer);printf("图书数量:"); /*输入图书数量*/scanf("%d",&p0->book_kc);p0->book_xy=p0->book_kc; /*开始时图书现有量和库存量相等*/ p0->next=NULL;p0->n=++n;printf("\n图书信息初始化完毕!按任意键继续下一步操作..\n");getch();system("cls");}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; /*此处分两种情况,链表中没有数据,head直接指向p0处*/ elsep->next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/p0->next=NULL;p0->book_xy=p0->book_kc;p0->n=++n;}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;i<Max;i++){strcpy(p0->borrow[i].borrow_book_num,"0"); /*所借图书直接置为(即没有借书)*/strcpy(p0->borrow[i].limit_date,"0");}p0->next=NULL;p0->m=++m;printf("\n读者信息初始化完毕!按任意键继续下一步操作..\n");getch();system("cls");}void Borrow_Book() /*借书模块*/{BK *p0; RD *p1;char bo_num[10],rea_num[10],lim_date[8];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_xy<=0){printf("\n抱歉,此书已借完!请等待新书的到来!!\n按任意键返回....");goto END;}else if(p1->right>Max||p1->right==Max){printf("\n不好意思,借书数目已满!不能借书!\n按任意键返回....");goto END;}else if(strcmp(p1->borrow[0].borrow_book_num,"0")!=0){for(i=0;i<Max;i++){if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0){printf("\n抱歉!同一个读者不能同借两本相同的书!\n按任意键返回....");goto END;}else if(strcmp(p1->borrow[i].borrow_book_num,"0")==0){printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date,lim_date);p0->book_xy--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);goto END;}}}else{printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date ,lim_date );p0->book_xy--;p0->book_kc--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);goto END;}END:getch(); system("cls");}void Return_Book() /*还书模块*/{BK *p; RD *q;int i,j,find=0;char return_book_num[10],return_reader_num[10];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;i<Max;i++)if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0) /*如果此读者借了此书*/{find=1;for(j=i;j<Max-1;j++){strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num);strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date);}strcpy(q->borrow[Max-1].borrow_book_num,"0");strcpy(q->borrow[Max-1].limit_date,"0");p->book_xy++;q->right--;printf("\n编号%s的读者还书完毕!按任意键继续下步操作..",return_reader_num);goto end;}if(find==0)printf("\n错误!此读者未借此书!按任意键返回..\n");end: getch(); system("cls");}void Print_book() /*查询图书信息*/{BK *p;int i;char e[10];p=h_book;printf("输入查询的图书编号:");scanf("%s", e);for(i=0;i<n;i++){if(strcmp(p->book_num,e)==0){printf("\n图书信息如下:\n\n");printf("图书编号\t图书名称\t图书作者\t现有\t库存\n");printf("%s\t\t%s\t\t%s\t\t%d\t%d\n",p->book_num,p->book_name,p->book_writer,p->book_ xy,p->book_kc);break;}elsep=p->next;}printf("\n图书信息打印完毕!按任意键继续下一步操作..");getch();system("cls");}void Print_reader() /*查询读者信息*/{RD *p;int i, j;char e[10];p=h_reader;printf("输入查询的读者编号:");scanf("%s", e);for(j=0;j<m;j++){if(strcmp(p->reader_num,e)==0){printf("\n读者信息如下:\n\n");printf("读者书证号\t读者姓名\n");printf("%s\t\t%s",p->reader_num,p->reader_name);for(i=0;i<Max;i++){printf("\n");printf("图书编号",i+1);printf("\t还书日期",i+1);printf("\n");printf("\t%s",p->borrow[i].borrow_book_num);printf("\t\t%s",p->borrow[i].limit_date);}printf("\n");break;}elsep=p->next;}printf("\n读者信息打印完毕!按任意键继续下一步操作..");getch();system("cls");}void Save() /*保存信息*/{Save_Reader();Save_Book();}void Save_Reader() /*保存读者信息*/{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("Reader.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); /*关闭文件*/}int main(){FILE *fp_book,*fp_reader; /*创建文件型指针*/Login();if((fp_book=fopen("Book.txt","rb"))==NULL||(fp_reader=fopen("Reader.txt","rb"))==NULL) Init();elseLoad();Menu_select(); /*调用主菜单*/}。