数据结构c语言图书管理系统 .pdf
数 据 结 构c 语言图书管理 系 统名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品1 课程设计任务书题目:图书管理系统学号 200912220280 姓名张志涛专业计算机应用技术课程数据结构指导教师曾德藩职称完成时间:20 年月-20 年月枣庄学院计算机科学系制名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品1 说明一、课程设计写作框架(仅供参考)摘要目录正文1、基本设计任务及要求、所用仪器设备;2、总体设计方案及主要设计原理;3、实现技术及源程序代码;4、测试及分析5、结束语(心得体会、改进方向)参考文献二、写作要求:课程设计写作要求论点明确、论据充分、说明透彻,语言准确恰当,书面整洁,字迹工整。课程设计的篇幅本科一般为4000 字左右,专科一般为3000 字左右。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品2 程设计任务书及成绩评定课程设计的任务和具体要求目的要求:本课程设计任务的目地是要求学生按照分析、设计、编码、调试和测试的软件开发过程完成管理系统设计,以及c语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学到以前调试短程序没有的经验。具体要求:1、为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过选择希望运行的操作项目;2、要求以上功能分别用函数实现。并要求c语言的文件操作语句将以上所有结果保存在文件 xx.out。指导教师签字:日期:指导教师评语成绩:指导教师签字:日期:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品3 课程设计所需软件、硬件等:Win-tc 软件 计算机 鼠标 键盘课程设计进度计划起至日期工作内容备注1、选择合适的数据结构2、结点结构的设计3、算法设计与分析4、程序设计、实现、调试课程设计说明书参考文献、资料索引序号文献、资料名称编著者出版单位1、c 语言设计(第三版)谭浩强清华大学出版社2、数据结构(C 语言版)严蔚敏、吴伟民清华大学出版社3、数据库系统基础姚世斌名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品4 图书借阅管理是图书馆一个最基本的工作,这里用C语言的知识设计开发一个简单的图书借阅管理系统,系统主要实现图书信息和学生信息的管理,图书查询及图书借阅管理。系统设计要求系统主要实现以下六个功能:用户登录。系统用户分为管理员和学生。管理员登录时必须输入密码,密码正确才能进入系统;学生登录时无需密码,输入学号即可。图书信息管理。图书信息包括:书号、书名、作者、图书分类、出版社、出版时间、单价、总量和库存量。图书信息管理包括:输入图书信息(从键盘或从文件)、保存图书信息、修改图书信息、增加图书信息、删除图书信息和输出图书信息。学生信息管理。学生信息包括:学号、姓名、借书卡(借阅标记、书号、借阅时间)。学生信息管理包括:输入学生信息(从键盘或从文件)、保存学生信息、修改学生信息、增加学生信息、删除学生信息和输出学生信息。图书查询功能。图书查询分为:按书名查询、按作者查询、按图书分类查询、按出版社查询和按出版时间查询。借书功能。借书时,先判断学生是否有空闲的借书卡,若没有则应输出提示信息;若有空闲的借书卡,则要求学生输入所借图书的书号,若该书库存量不为0,则将该书借出,同时在借书卡上记录该书的书号和借阅时间,并修改该书的库存量。还书功能。还书时,先检查学生的借书卡,若借书卡都为空,则不能进行还书操作,若有借书卡不为空,则可以还书,此时要求学生输入所还图书的书号,将对应借书卡上的记录清零,并修改该书的库存量。数据结构设计系统共定义了四个结构体类型,包括日期类型、借书卡类型、图书类型和学生类型,其中在图书类型中要使用日期类型,而在学生类型中要使用日期和借书卡类型,定义如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品5 typedef struct date /日期类型 short year;/年 short month;/月 short day;/日SDATE;typedef struct library_card /借书卡类型 Short flag;/是否借阅标记 Char ISBN20;/所借图书的书号 SDATE bor_time;/借阅时间SLCARD;typedef struct student /学生类型 char num15;/学号 char name20;/姓名 SLCARD card5;/借书卡(规定每人最多有5张)SSTUD;typedef struct book /图书类型 char ISBN20;/书号 char bookname40;/书名 char author20;/作者 char publisher30;/出版社 char bookclass20;/图书分类 short total_num,stock_num;/总量,库存量 float price;/单价名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品6 SDATE publish_time;/出版时间SBOOK;系统定义了两个全局变量数组,分别存放图书信息和学生信息,因数组大小是固定的,为使用方便在系统中定义两个符号常量,具体定义如下:#define BOOKNUM 1000 /BOOKNUM 为系统允许的最大图书数量#define STUDNUM 100 /STUDNUM 为系统允许的最多学生人数SSTUD studentSTUDNUM=0;/学生数组,初始化为0 SBOOK bookBOOKNUM=0;/图书数组,初始化为0 3.功能模块设计(1)main 函数的设计:由于图书信息和学生信息都保存在文件中,系统运行的第一个工作是从文件中将图书信息和学生信息读入到内存数组book 和数组 student中,在读入信息的过程中同时统计出目前图书的数量和学生的人数,并将数据分别存放在整型变量bn和 sn中,bn为图书数量,sn为学生人数。如果bn=0或 sn=0,系统会输出提示信息,让管理员输入图书信息和学生信息。然后系统会显示主菜单,用户必须登录后才能使用系统提供的各种服务。(2)用户登录管理模块包括2 个函数:ManagerLogin()和 StudentLogin(),该模块由 main函数调用。函数 ManagerLogin()用来完成管理员登录工作,首先要求管理员用户输入密码,若密码错误,则直接返回主菜单界面;密码正确时将显示管理员用户的功能菜单,输入数字可执行相应的功能。函数 StudentLogin()用来完成学生登录工作,要求学生输入学号,若学号错误则要求学生重新输入学号;输入学号正确则显示学生用户的功能菜单,输入数字可执行相应的功能。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品7(3)图书信息管理模块包括11 个函数:InputOnebook()、LoadBooks()、SaveOnebook()、SaveAllbooks()、OriginalBook()、ModifyBook()、AddBook()、DelBook()、OutputOnebook()、OutputAllbooks()和 OutputBrief()。只有管理员用户可以调用图书信息管理模块。函数 InputOnebook()用来实现从键盘输入一本图书的全部信息。函数 LoadBooks()用来实现从文件“book.dat”中输入全部图书的信息,并将这些数据存放到内存数组 book 中。函数 SaveOnebook()用来实现将一本图书的信息保存到文件“book.dat”中。函数 SaveAllbooks()用来实现将全部图书的信息保存到文件“book.dat”中。函数 OriginalBook()用来实现图书信息的初始化,在程序第1 次运行时必须调用该函数,输入若干本图书的信息,并将这些信息保存在文件中。该函数是通过循环多次调用InputOnebook()函数实现多本图书信息的输入,然后调用SaveAllbooks()函数将已输入的所有图书的信息保存在文件“book.dat”中。函数 ModifyBook()用来实现对图书信息的修改,用户首先输入书号,书号错误则输出提示信息,要求用户重新输入;书号正确则用户可以选择要修改的数据项对图书信息进行修改(用 switch 结构实现),一本图书的信息修改完毕后,调用SaveOnebook()函数,将修改后的信息保存到文件中。然后询问用户是否继续修改其他图书的信息,用户选择y,则重复上述的修改过程;用户选择n,则结束函数,返回到管理员菜单界面。函数 AddBook()用来实现添加图书信息,通过调用InputOnebook()函数,从键盘输入一本图书的信息,然后将该信息写入文件。然后询问用户是否继续添加其他图书的信息,用户选择y,则重复上述过程;用户选择n,则结束函数,返回到管理员菜单界面。函数 DelBook()用来实现删除图书信息,用户首先输入书号,书号错误则输出提示信息,要求用户重新输入;书号正确则会先输出该书号对应图书的信息,然后询问用户是否确定要名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品8 删除该书的信息,用户选择y才能真正删除该书信息。最后询问用户是否继续删除其他图书的信息,用户选择 y,则重复上述过程;用户选择n,则结束函数,返回到管理员菜单界面。函数 OutputOnebook()用来实现输出一本图书的全部信息。函数 OutputAllbooks()通过多次调用 OutputOnebook()函数来实现输出全部图书的信息。函数 OutputBrief()用来实现以列表方式输出全部图书的简要信息,简要信息包括:书号、书名、作者和总量。(4)学生信息管理模块包括10 个函数:InputOnestud()、LoadStuds()、SaveOnestud()、SaveAllstuds()、OriginalStud()、ModifyStud()、AddStud()、DelStud()、OutputOnestud()和OutputAllstuds()。管理员用户可以使用学生信息管理模块的全部功能,学生用户只能使用该模块中的一个功能,即OutputOnestud()函数(输出一个学生的信息)。学生信息管理模块中函数的实现方法与图书信息管理中的类似,以下仅作简单说明。函数 InputOnestud()用来实现从键盘输入一个学生的信息。函数 LoadStuds()用来实现从文件“stud.dat”中输入全部学生的信息,并将这些数据存放到内存数组 student中。函数 SaveOnestud()用来实现将一各学生的信息保存到文件“stud.dat”中。函数 SaveAllstuds()用来实现将全部学生的信息保存到文件“stud.dat”中。函数 OriginalStud()用来实现学生信息的初始化,在程序第1 次运行时必须调用该函数。该函数是通过循环多次调用InputOnestud()函数实现多个学生信息的输入,然后调用SaveAllstuds()函数将已输入的所有学生的信息保存在文件“stud.dat”中。函数 ModifyStud()用来实现学生信息的修改。函数 AddStud()用来实现添加学生信息。名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品9 函数 DelStud()用来实现删除学生信息。函数 OutputOnestud()用来实现输出一个学生的全部信息。函数 OutputAllstuds()用来实现输出全部学生的基本信息(即学号和姓名)。(5)图书信息查询模块包括6 个函数:SearchMenu()、SearcBname()、SearchAuthor()、SearchBclass()、SearchPublisher()、SearchPubtime()。管理员和学生都可以使用图书信息查询模块。函数 SearchMenu()用来显示图书查询服务菜单,用户输入数字可执行相应的查询服务。函数 SearcBname()用来实现按书名进行图书信息的查询。用户可以输入完整的书名进行精确查询(如输入“C语言程序设计”),精确查询是使用字符串比较函数strcmp(),将输入的书名与已有图书的书名逐一进行比较,当该函数的返回值等于0,表示这两个书名完全相同,即找到要查询的图书。另外,用户也可以输入书名中的几个字进行模糊查询(如输入“C语言”,或输入“程序设计”),模糊查询是使用求子串函数strstr(),在已有图书的书名中寻找输入的字符串,如果该函数的返回值不为空,则说明该书名中包含这个字符串,那么就应该输出这本图书的信息。通常,模糊查询会列出多个查询结果。函数 SearchAuthor()用来实现按作者姓名进行图书信息的查询。用户可以输入完整的姓名进行精确查询(如输入“谭浩强”),也可以只输入姓氏进行模糊查询(如只输入“张”),具体方法与按书名查询类似。函数 SearchBclass()用来实现按图书分类进行图书信息的查询。考虑到用户可能不能输入完全正确的图书分类名称,所以在该函数中只采用模糊查询方式。函数 SearchPublisher()用来实现按出版社名称进行图书信息的查询。用户在输入出版社名称时,一般不会输入“出版社”这三个字(如想查询清华大学出版社的图书,通常用户会输入“清华大学”),所以在该函数中也是只采用模糊查询方式。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品10 函数 SearchPubtime()用来实现按出版日期进行图书信息的查询。使用该函数必须注意要按系统规定的格式输入日期,若想查询2004年 5月份出版的图书,则应输入“2004.5”;若想查询 2004年出版的图书,则应输入“2004”。假设输入日期为“2004.5”,进行查询时,先判断输入的年份与出版日期中的年份是否相等,若不相等则结束本次循环,若相等则用变量k 记录其下标,然后再判断月份是否相等,月份若不相等则用continue结束本次循环,月份若相等则可输出这本书(即第k 本书)的信息,然后再继续判断下一本图书。(6)图书借阅管理模块包括2 个函数:BorrowBook()和 ReturnBook()函数。函数 BorrowBook()用来实现借书管理。由学生类型定义可知,每个学生有5 张借书卡,借书卡的信息包括:借阅标记flag、所借图书的书号ISBN 和借阅时间 bor_time。借书时,首先查找学生是否有空闲的借书卡(即判断该生借书卡的借阅标记flag 是否为 0),若 flag 为0,则可以借书,这时要求学生输入要借图书的书号,然后在图书数组book 中查找该书,若在数组 book 中没找到该书,则提示“输入的书号有误,请重新输入!”;若找到该书,则先判断该书的库存量是否为0,若库存量为 0 则提示 抱歉!该书库存量为0,无法借阅!”。若库存量大于 0,则将该书借给学生,此时需要进行以下6 步操作:step1 将该书的库存量减1;step2 学生借书卡的借阅标记flag 置 1;step3 学生借书卡的书号填写上该书的书号;step4 学生借书卡的借阅时间赋值为系统时间;为了提取系统时间,首先定义一个结构体变量 d:struct tm d;结构体类型 struct tm定义在文件“time.h”中,具体定义如下:struct tm int tm_sec;/seconds after the minute-0,59 int tm_min;/minutes after the hour-0,59 int tm_hour;/hours since midnight-0,23 int tm_mday;/day of the month-1,31 int tm_mon;/months since January-0,11 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品11 int tm_year;/years since 1900 int tm_wday;/days since Sunday-0,6 int tm_yday;/days since January 1-0,365 int tm_isdst;/daylight savings time flag ;这里我们需要使用其中的3个成员:tm_year、tm_mon 和 tm_mday。通过调用函数_getsystime(&d);可以得到系统时间,假设用下面语句输出日期:printf(%d.%d.%d,d.tm_year,d.tm_mon,d.tm_mday);若借书日期是 1998.5.12,则会输出 98.4.12,若借书日期为 2005.5.12,则会输出105.4.12,这样的输出结果显然不好,为了正确输出1998.5.12或 2005.5.12,必须对成员tm_year和 tm_mon 进行处理,对于 tm_mon的处理比较简单,直接加1 即可(d.tm_mon+1),对于 tm_year按下面方法处理:如果年份整除100等于 0(即年份=2000),则年份=2000+d.tm_year%100。step5 保存修改过的图书信息和学生信息;step6 提示用户借书成功。最后询问学生是否 继续借书吗?(y/n),若学生输入 y,则重复上面的借书过程;若输入n,则返回到学生功能选择菜单界面。函数 ReturnBook()用来实现还书管理。还书时,首先统计该生有几张已使用的借书卡,将数据存放在变量t 中,若 t 为 0,说明该生目前根本没有借阅的图书,无法进行还书操作;若 t 大于 0,则可进行还书操作,先输入书号,在学生的借书卡中寻找,若没找到该书号,则提示输入的书号有误,请重新输入!;若找到该书号,则通过以下6 个步骤进行还书:step1 学生借书卡的借阅标记flag 置 0;step2 学生借书卡的书号置空;step3 学生借书卡的借阅时间清0;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品12 step4 变量 t 减 1;step5 在数组 book中寻找该书号,找到后其库存量加1;step6保存修改过的图书信息和学生信息。最后询问学生是否 继续还书吗?(y/n),若学生输入 y,则重复上面的还书过程;若输入n,则返回到学生功能选择菜单界面。部分源程序代码#include#include#include#include#include/结构体类型的定义typedef struct date /日期类型 short year;/年 short month;/月 short day;/日SDATE;typedef struct library_card /借书卡类型 short flag;/是否借阅标记 char ISBN20;/所借图书的书号 SDATE bor_time;/借阅时间SLCARD;typedef struct stud /学生类型 char num15;/学号名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品13 char name20;/姓名 SLCARD card5;/借书卡SSTUD;typedef struct book /图书类型 char ISBN20;/书号 char bookname40;/书名 char author20;/作者 char publisher30;/出版社 char bookclass20;/图书分类 short total_num,stock_num;/总量,库存量 float price;/单价 SDATE publish_time;/出版时间SBOOK;#define SDATE_LEN sizeof(SDATE)/SDATE_LEN 为日期类型占用存储空间的大小#define SLCARD_LEN sizeof(SLCARD)/SLCARD_LEN为借书卡类型占用存储空间的大小#define SSTUD_LEN sizeof(SSTUD)/SSTUD_LEN 为学生类型占用存储空间的大小#define SBOOK_LEN sizeof(SBOOK)/SBOOK_LEN 为图书类型占用存储空间的大小#define BOOKNUM 1000 /图书总数,可按需要更改其数值#define STUDNUM 100 /学生总数,可按需要更改其数值SSTUD studentSTUDNUM=0;/学生数组(全局变量)SBOOK bookBOOKNUM=0;/图书数组(全局变量)/函数声明名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品14 void ManagerLogin(int*pbn,int*psn);/管理员登录函数void StudentLogin(int bn,int sn);/学生登录函数void InputOnebook(int i);/输入一本图书信息的函数int LoadBooks(void);/从文件载入全部图书信息的函数void SaveOnebook(int i);/保存一本图书信息的函数void SaveAllbooks(int bn);/保存全部图书信息的函数int OriginalBook(void);/图书信息初始化的函数void ModifyBook(int bn);/修改图书信息的函数int AddBook(int bn);/添加图书信息的函数int DelBook(int bn);/删除图书信息的函数void OutputOnebook(int i);/输出一本图书信息的函数void OutputAllbooks(int bn);/输出全部图书详细信息的函数void OutputBrief(int bn);/输出全部图书简要信息的函数void InputOnestud(int i);/输入一个学生信息的函数int LoadStuds(void);/从文件载入全部学生信息的函数void SaveOnestud(int i);/保存一个学生信息的函数void SaveAllstuds(int sn);/保存全部学生信息的函数int OriginalStud(void);/学生信息初始化的函数void ModifyStud(int sn);/修改学生信息的函数int AddStud(int sn);/添加学生信息的函数int DelStud(int sn);/删除学生信息的函数void OutputOnestud(int i);/输出一个学生信息的函数名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品15 void OutputAllstuds(int sn);/输出全部学生信息的函数void SearchMenu(int bn);/图书查询函数void SearcBname(int bn);/按书名查询函数void SearchAuthor(int bn);/按作者查询函数void SearchBclass(int bn);/按图书分类查询函数void SearchPublisher(int bn);/按出版社查询函数void SearchPubtime(int bn);/按出版时间查询函数void BorrowBook(int bn,int m);/借书函数void ReturnBook(int bn,int m);/还书函数void main(void)/main 函数定义 int select,bn,sn;bn=LoadBooks();/调用 LoadBooks(),返回值为图书数量,将其赋值给bn if(bn=0)printf(图书信息为空!nn);sn=LoadStuds();/调用 LoadStuds(),返回值为学生人数,将其赋值给sn if(sn=0)printf(学生信息为空!nn);while(1)printf(n);printf(t-n);printf(t*n);printf(t*图书借阅管理系统 *n);printf(t*n);printf(t-nn);printf(t 1.管理员 n);printf(t 2.学生n);名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品16 printf(t 0.退出系统 nn);printf(t 请选择用户:);scanf(%d,&select);getchar();/该函数用于读取回车符,消除对以后数据输入的影响 switch(select)case 1:ManagerLogin(&bn,&sn);break;case 2:StudentLogin(bn,sn);break;case 0:printf(n 谢谢使用!再见 n);exit(1);default:printf(n 按键错误,请重新选择!n);/end switch /end while /用户登录模块的函数定义/=/功能:实现管理员登录,显示管理员用户的菜单,进行功能选择/参数:pbn、psn分别为 main函数中变量 bn、sn的地址/返回:无/主要思路:用 strcmp函数实现密码验证,用switch 结构实现菜单功能选择/=/void ManagerLogin(int*pbn,int*psn)int select,flag=0;char password11;/密码最多为 10 位 printf(n 请输入密码:);gets(password);if(strcmp(password,123)!=0)/密码按需要事先设置好,这里假设为“123”printf(n 密码错误!n);return;/若密码错误,返回主菜单名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品17 while(1)printf(n);printf(管理员,您好!n);printf(-n);printf(1.图书信息初始化 7.学生信息初始化 n);printf(2.修改图书信息 8.修改学生信息 n);printf(3.增加图书信息 9.增加学生信息 n);printf(4.删除图书信息 10.删除学生信息 n);printf(5.输出图书信息 11.输出学生信息 n);printf(6.图书信息查询 0.返回主菜单 n);printf(n 请选择您需要的服务(0-11):);scanf(%d,&select);getchar();switch(select)case 1:*pbn=OriginalBook();break;case 2:ModifyBook(*pbn);break;case 3:*pbn=AddBook(*pbn);break;case 4:*pbn=DelBook(*pbn);break;case 5:printf(输出详细信息请按 1,输出简要信息请按 2:);scanf(%d,&flag);getchar();if(flag=1)OutputAllbooks(*pbn);if(flag=2)OutputBrief(*pbn);break;case 6:SearchMenu(*pbn);break;case 7:*psn=OriginalStud();break;case 8:ModifyStud(*psn);break;case 9:*psn=AddStud(*psn);break;case 10:*psn=DelStud(*psn);break;case 11:OutputAllstuds(*psn);break;case 0:return;default:printf(n 按键错误,请重新选择!n);/end switch 名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品18 /end while /=/功能:实现学生登录,显示学生用户菜单,进行功能选择/参数:bn表示图书数量,sn表示学生人数/返回:无/主要思路:用 strcmp函数实现学号验证,用switch 结构实现菜单功能选择/=/void StudentLogin(int bn,int sn)int select,j,m=-1;char snum15;/数组 snum用来存放登录学生的学号 if(sn=0)printf(n 学生信息为空,无法执行操作!n);return;while(1)printf(n 请输入你的学号:);gets(snum);for(j=0;jsn;j+)/在学生数组中查找输入的学号 if(strcmp(studentj.num,snum)=0)m=j;/找到该学号后记录其下标 break;if(m0)/m 小于 0 表示数组中没有找到输入的学号printf(n 学号错误,请重新输入!n);else /m大于等于 0,表示存在这个学生的信息while(1)printf(n);名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品19 printf(同学,你好!n);printf(-n);printf(1.输出个人借书信息 n);printf(2.图书信息查询 n);printf(3.借书n);printf(4.还书n);printf(0.返回主菜单 n);printf(n 请选择你需要的服务(0-4):);scanf(%d,&select);getchar();switch(select)case 1:OutputOnestud(m);break;case 2:SearchMenu(bn);break;case 3:BorrowBook(bn,m);break;case 4:ReturnBook(bn,m);break;case 0:return;default:printf(n 按键错误,请重新选择!n);/end switch /图书信息管理模块的函数定义/=/功能:从键盘输入一本图书的全部信息/参数:i 表示对第 i 本图书进行输入操作/返回:无/主要思路:按提示信息用scanf输入图书的各项信息,存放到数组book 中/=/void InputOnebook(int i)名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品20 printf(书号:);gets(booki.ISBN);printf(书名:);gets(booki.bookname);printf(作者:);gets(booki.author);略/=/功能:从文件“book.dat”中载入全部图书的信息/参数:无/返回:返回文件中图书的数量/主要思路:用 while 循环从文件中读取图书信息到数组book,同时统计图书数量/=/int LoadBooks(void)FILE*fb;int bn=0;/变量 bn用来记录图书的数量 if(fb=fopen(book.dat,rb+)=NULL)/以二进制读、写方式打开文件 printf(cant open file book.datn);return(bn);/文件打开失败时,返回值为0 while(!feof(fb)/文件没有结束时进行读数据操作 if(fread(&bookbn,SBOOK_LEN,1,fb)bn+;/从文件中每读一本图书,图书数量加1 fclose(fb);/关闭文件 return(bn);/返回图书数量,即bn的值 名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品21/=/功能:将一本图书的信息保存到文件“book.dat”中/参数:i 表示将第 i 本图书的信息保存到文件中/返回:无/主要思路:先用 fseek函数定位,再用 fwrite 函数写入第 i 本图书的信息/=/void SaveOnebook(int i)略/=/功能:将全部图书的信息保存到文件“book.dat”中/参数:bn表示图书的数量/返回:无/主要思路:用 fwrite 函数将数组 book中的数据一次性写入文件/=/void SaveAllbooks(int bn)略/=/功能:实现图书信息的初始化/参数:无/返回:输入图书的数量/主要思路:用 for 循环实现输入多本图书信息,并写入文件/=/名师资料总结-精品资料欢迎下载-名师精心整理-第 23 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品22 int OriginalBook(void)int n;char c=y;for(n=0;c=y|c=Y;n+)printf(n 输入图书%d的信息:n,n+1);InputOnebook(n);/调用函数,输入第n本图书 printf(n 继续输入请按 y,停止请按 n:);c=getchar();getchar();SaveAllbooks(n);/将输入的 n 本图书的数据保存至文件 return(n);/返回 n 的值,即输入图书的数量/=/功能:修改图书信息/参数:bn表示图书的数量/返回:无/主要思路:通过 switch 实现修改图书的任意信息项,并将修改后的信息写入文件/=/void ModifyBook(int bn)int select,k=-1;char isbn20,c1=y,c2;if(bn=0)printf(n 图书信息为空,无法执行操作!n);return;/返回到管理员功能选择菜单 while(c1=y|c1=Y)c2=y;printf(n 请输入要修改的图书的书号:);名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 43 页 -用心整理的精品word 文档,下载即可编辑!精心整理,用心做精品23 gets(isbn);for(int i=0;ibn;i+)if(strcmp(booki.ISBN,isbn)=0)k=i;break;if(kbookk.total_num)bookk.stock_num=bookk.total_num;break;case 8:printf(单价:);scanf(%f,&bookk.price);getchar();break;case 9:printf(出版时间(年.月):);scanf(%d.%d,&bo