数据结构_c语言_图书管理系统
图书借阅管理是图书馆一个最基本的工作,这里用 C 语言的知识设计开发一个简单的图书借阅管理系统,系统主要实现图书信息和学生信息的管理,图书查询及图书借阅管理。系统设计要求 系统主要实现以下六个功能:① 用户登录。系统用户分为管理员和学生。管理员登录时必须输入密码,密码正确才能进入系统;学生登录时无需密码,输入学号即可。② 图书信息管理。图书信息包括:书号、书名、作者、图书分类、出版社、出版时间、单价、总量和库存量。图书信息管理包括:输入图书信息(从键盘或从文件)、保存图书信息、修改图书信息、增加图书信息、删除图书信息和输出图书信息。③ 学生信息管理。学生信息包括:学号、姓名、借书卡(借阅标记、书号、借阅时间)。学生信息管理包括:输入学生信息(从键盘或从文件)、保存学生信息、修改学生信息、增加学生信息、删除学生信息和输出学生信息。④ 图书查询功能。图书查询分为:按书名查询、按作者查询、按图书分类查询、按出版社查询和按出版时间查询。⑤ 借书功能。借书时,先判断学生是否有空闲的借书卡,若没有则应输出提示信息;若有空闲的借书卡,则要求学生输入所借图书的书号,若该书库存量不为 0,则将该书借出,同时在借书卡上记录该书的书号和借阅时间,并修改该书的库存量。⑥ 还书功能。还书时,先检查学生的借书卡,若借书卡都为空,则不能进行还书操作,若有借书卡不为空,则可以还书,此时要求学生输入所还图书的书号,将对应借书卡上的记录清零,并修改该书的库存量。 数据结构设计系统共定义了四个结构体类型,包括日期类型、借书卡类型、图书类型和学生类型,其中在图书类型中要使用日期类型,而在学生类型中要使用日期和借书卡类型,定义如下:typedef struct date //日期类型{ short year; //年short month; //月short day; //日 }SDATE;typedef struct library_card //借书卡类型{ Short flag; //是否借阅标记Char ISBN[20]; //所借图书的书号SDATE bor_time; //借阅时间}SLCARD;typedef struct student //学生类型{ char num[15]; //学号char name[20]; //姓名SLCARD card[5]; //借书卡(规定每人最多有 5 张)}SSTUD;typedef struct book //图书类型{ char ISBN[20]; //书号char bookname[40]; //书名char author[20]; //作者 char publisher[30]; //出版社char bookclass[20]; //图书分类short total_num, stock_num; //总量,库存量float price; //单价SDATE publish_time; //出版时间}SBOOK;系统定义了两个全局变量数组,分别存放图书信息和学生信息,因数组大小是固定的,为使用方便在系统中定义两个符号常量,具体定义如下:#define BOOKNUM 1000 // BOOKNUM 为系统允许的最大图书数量#define STUDNUM 100 // STUDNUM 为系统允许的最多学生人数SSTUD student[STUDNUM]={0}; //学生数组,初始化为 0SBOOK book[BOOKNUM]={0}; //图书数组,初始化为 03. 功能模块设计(1) main 函数的设计:由于图书信息和学生信息都保存在文件中,系统运行的第一个工作是从文件中将图书信息和学生信息读入到内存数组 book 和数组 student 中,在读入信息的过程中同时统计出目前图书的数量和学生的人数,并将数据分别存放在整型变量 bn 和 sn 中,bn 为图书数量,sn 为学生人数。如果bn=0 或 sn=0,系统会输出提示信息,让管理员输入图书信息和学生信息。然后系统会显示主菜单,用户必须登录后才能使用系统提供的各种服务。(2) 用户登录管理模块包括 2 个函数:ManagerLogin()和 StudentLogin(),该模块由 main 函数调用。函数 ManagerLogin()用来完成管理员登录工作,首先要求管理员用户输入密码,若密码错误,则直接返回主菜单界面;密码正确时将显示管理员用户的功能菜单,输入数字可执行相应的功能。函数 StudentLogin()用来完成学生登录工作,要求学生输入学号,若学号错误则要求学生重新输入学号;输入学号正确则显示学生用户的功能菜单,输入数字可执行相应的功能。(3) 图书信息管理模块包括 11 个函数:Onebook()、LoadBooks() 、SaveOnebook()、SaveAllbooks()、OriginalBook()、ModifyBook()、AddBook()、DelBook()、 OutputOnebook()、OutputAllbooks()和 OutputBrief ()。只有管理员用户可以调用图书信息管理模块。函数 Onebook()用来实现从键盘输入一本图书的全部信息。函数 LoadBooks()用来实现从文件“book.dat”中输入全部图书的信息,并将这些数据存放到内存数组book 中。函数 SaveOnebook()用来实现将一本图书的信息保存到文件“book.dat”中。函数 SaveAllbooks()用来实现将全部图书的信息保存到文件 “book.dat”中。函数 OriginalBook()用来实现图书信息的初始化,在程序第 1 次运行时必须调用该函数,输入若干本图书的信息,并将这些信息保存在文件中。该函数是通过循环多次调用 Onebook()函数实现多本图书信息的输入,然后调用 SaveAllbooks()函数将已输入的所有图书的信息保存在文件 “book.dat”中。函数 ModifyBook()用来实现对图书信息的修改,用户首先输入书号,书号错误则输出提示信息,要求用户重新输入;书号正确则用户可以选择要修改的数据项对图书信息进行修改(用 switch 结构实现) ,一本图书的信息修改完毕后,调用 SaveOnebook()函数,将修改后的信息保存到文件中。然后询问用户是否继续修改其他图书的信息,用户选择‘y’,则重复上述的修改过程;用户选择 ‘n’,则结束函数,返回到管理员菜单界面。函数 AddBook()用来实现添加图书信息,通过调用 Onebook()函数,从键盘输入一本图书的信息,然后将该信息写入文件。然后询问用户是否继续添加其他图书的信息,用户选择‘y’,则重复上述过程;用户选择‘n’,则结束函数,返回到管理员菜单界面。函数 DelBook()用来实现删除图书信息,用户首先输入