C课程报告(图书管理系统)

上传人:1666****666 文档编号:38885381 上传时间:2021-11-09 格式:DOC 页数:26 大小:445KB
返回 下载 相关 举报
C课程报告(图书管理系统)_第1页
第1页 / 共26页
C课程报告(图书管理系统)_第2页
第2页 / 共26页
C课程报告(图书管理系统)_第3页
第3页 / 共26页
点击查看更多>>
资源描述
图书管理系统图书管理系统图书管理系统目录目录1绪论绪论.12. 系统分析系统分析.22.1 数据需求.22.2 功能需求.22.3 性能需求.23. 总体设计总体设计.23.1 功能模块设计.23.2 系统设计方案.44. 详细设计详细设计.54.1 页面设计模块.54.2 主要功能模块.64.3 保存模块.85. 调试与测试调试与测试.95.1 调试.95.2 测试.9参考文献参考文献.10附录附录 1用户手册用户手册.11附录附录 2源程序源程序.15 图书管理系统1摘摘 要要图书馆管理系统对于图书馆来说是不可或缺的。它方便快捷的管理图书的库存量、类别、查阅,借阅等环节。 本系统使用 C 语言作为程序开发的语言,开发图书馆管理系统,实现图书的查询、书名查询、编号查询,可以对图书信息进行添加,查询和读者信息的查询。本文从分析课题的题目背景、题目意义、题目要求等出发,分别从系统需求,总体设计、详细设计、调试测试等方面介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。关键词:图书查询;借书登记;还书管理; 1绪论绪论图书馆管理系统是一个图书馆不可或缺的部分,它的内容对于学校图书馆的管理非常重要,所以图书管理系统不但要为图书管理者提供充足的信息和快捷的查询手段。而且要为学生提供必要快捷的查询手段。随着计算机技术的日益成熟,强大的功能已为人们深刻认识。使用计算机对图书管理具有快速、准确、方便、保密好、寿命长、成本低等特点。这些优点能够极大的提高图书管理的效率、也是图书馆科学化、正规化管理的重要条件。这也是编写本系统的目的所在,现在的图书馆都在使用类似的能够用计算机辅助管理员完成对图书信息的管理,本系统可以大大提高管理员的工作效率,节省工作时间,使他们能够用更多的时间为读者提供一些其它的服务。根据课程设计任务书要求,本系统开发主要完成以下功能和性能。 (1) 新书入库系统:包括存储图书基本信息:书名, 书号, 库存量, 现存量。(2) 图书信息查询系统:可以按书号查询图书的基本信息。(3) 借书登记系统:可以输入读者编号和所借书号来借书。(4) 还书管理系统:可以输入读者编号和所借书号来还书。(5) 输出信息系统:输出全部图书信息和全部读者信息。 图书管理系统22. 系统分析系统分析2.1 数据需数据需求求本系统主要是图书馆的图书信息管理的系统。一、 新书入库: 图书信息包括书名, 书号, 库存量, 现存量共 4 项. 首先输入3 本书的信息, 并将其存入文件 ”book.dat” 中. 当有新书入库时, 先判断文件中是否有此书( 即比较书名 ), 若有则修改库存量, 现存量的信息; 若无此书, 则将该书的信息添加到文件中. 二、图书查询: 输入一个书号, 在文件中查找此书, 若找到则输出此书的全部信息; 若找不到则输出查找失败的信息. 三、借阅管理(1)每个读者的信息包括姓名, 编号, 1 张借书卡( 限借一本书 ), 输入 3 个读者的信息存入文件 “reader . dat” 中. (2)借书登记: 输入读者的编号, 所借图书的书号, 先判断姓名是否在文件”reader.dat” 中, 若有则将书号存入一张借书卡上( 注: 初始时借书卡的信息都为零, 借书后借书卡的信息改为所借书的书号), 并修改文件”reader.dat”的相应内容, 同时修改文件”book.dat”中此书的现存量. 若”reader.dat”无此姓名, 则应提示错误(3)还书管理: 输入读者的编号, 所还图书的书号, 将借书卡的信息置为零, 并修改文件”reader.dat”的相应内容, 同时修改文件”book.dat”中此书的现存量. 四、输出全部图书信息和全部读者信息五、退出系统.2.2 功能需求功能需求本系统有新书入库,查询,借书管理,还书管理,保存信息功能,显示读者信息和图书信息,可以按书号实现图书查询。2.3 性能需求性能需求在运行本程序时只要按照正确的操作方法就能正常运行,系统稳定性好,安全,可靠。3. 总体设计总体设计3.1 功能模块设计功能模块设计根据分析整个系统主要划分为 6 个功能模块,分别执行要求中的功能。该系统新书入库,图书查询,借阅管理,输出图书信息,输出读者信息,退出系 图书管理系统3 仔细阅读系统要求,首先将此系统化分为如下模块1) 新书入库模块:可用一个函数 insert_new_book(char book_num,char book_name,int number)来实现。形参分别为:书名, 书号,以及有多少本书要入库,再根据要求将信息写入文件 boot.dat 中。又由于最开始要输入三本新书,故可以加一个初始化函数 init_book(),但是初始化函数只执行一次,也就是在系统第一次运行的时候执行,此时可以根据判断是否存在 boot.dat 这个文件来决定是否执行初始化函数.2) 查询模块:可用一个函数 void find_book(char book_num)来实现。找到就输出此书全部信息,找不到就输出查找失败信息。3) 借阅管理模块:(1) 三个读者的信息可以在系统初始化时完成.即可用初始化函数init_reader()来实现对读者的初始化。因为读者初始化函数也只是在系统第一次运行的时候执行一次,故也可以根据是否存在 reader.dat 文件来确定是否执行此函数。 (到现在可以发现在系统初始化函数里,至少已经需要调用两个初始化函数了)(2) 借书登记模块:可用一个函数 borrow_book(char reader_num,char book_num)来实现。在函数中要分别判断A 该读者的编号是否已经存在,如果不存在,则提示错误。B 该读者的借阅书是否已满(即最多只能借 1 本书)如果是,则提醒该用户先去还书C 输出的书号对应的书是否存在,如果不存在,则提醒读者不存在此书。借书过程完成后,则对读者信息里的借书信息写上所借书号,并修改库存量。(3) 还书管理模块:可用一个函数 return_book(char reader_num,char book_num)来实现。在实现此函数时要判断:A 该读者的姓名是否已经存在,如果不存在,则提示错误。B 该读者是否已经借阅此书。如果没有,则提示错误。C 还书过程完成后,则对读者信息里的借书信息清零,并修改库存量。(4)输出图书和读者信息:可分别用模块 print_book()和 print_reader()新书入库图书查询借书登记还书登记输出图书信息输出读者信息退出系统图书管理系统 图书管理系统4来实现直接从 book.dat 文件和 reader.dat 文件中读取信息并输出。(5)退出系统:可用一个函数 exit()来实现。首先将信息保存到文件,释放动态创建的内存空间,再退出此程序。3.2 系统设计方案系统设计方案(1) 菜单设计一个总菜单,1、新书入库 2、图书查询 3、借书登记、4 还书登记 5 、输出图书信息 6、输出读者信息。(2) 数据结构建立结构体如下:图书类型:typedef struct bkchar book_num11; /* 书号采用 10 位编码最后 1 位为字符串结束标志(下同). */char book_name41; /* 书名规定不超过 40 个字母(20 个汉字) */ unsigned book_kc,book_xc; /* book_kc 代表库存量,book_xc 代表现存量 */struct bk *next; book;读者类型:typedef struct rdchar reader_num11; /* 读者编号采用 10 位编码 */char reader_name11; /* 读者姓名 */ char reader_book_num11; /*表示所借书号,初始值为“0”*/struct rk *next; reader;(3) 函数定义了 15 个函数,都实现以下功能:void Form_Insert_New_Book(); /*新书入库菜单*/void Form_Find_Book(); /*查询图书菜单 */void Form_Borrow_Book(); /*借书菜单*/void Form_Return_Book(); /*还书菜单*/void Find_Book(char *); /*查询图书*/void Insert_New_Book(char *,char * ,int ); /*新书入库,即在链表中插入一个新节点*/void Borrow_Book(char *,char *);/*借书,修改读者借阅信息和图书的现存信息*/void Return_Book(char *,char *);/*还书,修改读者借阅信息和图书的现存信息*/void print_book(struct bk *);/*输出全部图书信息*/ 图书管理系统5void print_reader(struct rd *);/*输出全部读者信息*/void load_data();/*从文件中读取数据,链表头指针指向第一个节点*/void init_reader();/*第一次运行程序时对三个读者的初始化*/void init_book();/*第一次运行程序时对三本图书的初始化*/void save();/*将链表中的信息保存到文件中*/void M_Form()/*主菜单*/4. 详细设计详细设计4.1 页面设计模块页面设计模块此系统界面采用图形和数字化菜单设计。主界面设计如下:主界面设计如下: 图书管理系统主系统请选择相应的数字执行相应的功能:0:退出此系统1:新书入库2:图书查询3:借书登记4:还书管理5:输出全部图书信息和读者信息各子界面如下:各子界面如下:1 1新书入库界面:新书入库界面:请选择相应的数字执行相应的功能:10:返回主菜单11:新书入库请输入新书名:请输入新书号:请输入新书数量: (注:新书入库成功后,程序返回到子界面 1)2 2图书查询界面界面:图书查询界面界面: 请选择相应的数字执行相应的功能:20:返回主菜单21:图书查询请输入需要查询的书号: (注:图书查询完成后,返回到子界面 2) 3 3、借书登记界面:、借书登记界面:请选择相应的数字执行相应的功能:30:返回主菜单31:借书登记 请输入读者编号: 图书管理系统6 请输入所借书号: (注:借书过程完成后,返回到子界面 3) 4 4、还书管理:、还书管理: 请选择相应的数字执行相应的功能:40:返回主菜单41:还书登记 请输入读者编号: 请输入所借书号: (注:还书过程完成后,返回到子界面 4) 5 5、输出全部图书和读者信息:、输出全部图书和读者信息: 请选择相应的数字执行相应的功能:50:返回主菜单51:输出全部图书信息: 书号 书名: 库存量 现存量 52:输出全部读者信息: 读者编号 读者姓名 所借书号(注:输出图书和读者信息后,返回到子界面 5) 4.2 主要功能模块主要功能模块2、新书入库流程图 Y 根据数量修改库存 Y N N book.dat 中增加此新书,根据数量设置库存输入新书名、新书号和新书数量已存在此新书if(还有新书)开始结束 图书管理系统73、图书查询程序结构图: N Y N Y 4、借书登记程序结构流程图: Y N N Y Y N N Y N Y N借书登记,修改 book.dat 中的现存信息,reader.dat 中的借书卡信息 Y输入要查询的书号是否存在此书输入此书的全部信息输入信息:此书不存在是否继续查询输入读者编号是否存在编号输出出错信息提示不能借书借书卡是否满是否还书进入还书模块输入需要借的书号书号存在否还有读者借书是否重输否满开始结束开始结束结束 图书管理系统85、还书登记程序结构流程图: Y N Y N 错误正确还书将读者信息借书卡清 0修改 book.dat 现存信息N Y 6、输出读者和图书信息 图书图书 输入读者编号是否存在编号输出出错信息核对书号是否重输进入查询模块输入还书的书的编号还有读者还书是否重输否满选择输出图书还是读者信息输出全部图书信息输出全部读者信息开始结束开始结束 图书管理系统94.3保存模块保存模块可执行文件 book.dat、reader.dat,都存储在 c:文件夹下。5. 调试调试与测试与测试5.1 调试调试调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。调试的任务是及时改正测试过程中发现的软件错误。具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。然后仔细研究推断代码以确定问题的原因,并设法改正。调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到问题、原因和解决方法如下面介绍。(1)程序在储存图书信息时只能一次存入,并且读取。再次添加新的程序时将会把原来添加的图书信息覆盖。原因时存储函数只能只写 2 进制文件不能追加填写 2 进制文件。(2)运行完程序一次有错误提醒原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:将上一次运行时的操作界面关闭。(3) 程序不能运行程序运行到添加新图书时自动提示错误需要调试,其原因是指针指向的位置出现错误导致程序传参错乱无法运行,解决办法:使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不是就加以修正。5.2 测试测试软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程” 。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果) ,并利用这些测试用例去运行程序,以发现程序 图书管理系统10错误或缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。问题:借书管理模块中,当正确输入存在的读者编号和所借的书的编号,系统进行判断时,提示不存在此读者。解决办法及步骤:1、一个个输出所有的读者的编号,检查文件中是否有此读者,发现有。 2、既然有此读者,那么检查循环判断是否有此读者的语句发现没有错3、输出用于循环检查语句中的读者信息,发现乱码 4、仔细分析乱码的原因,最后发现是变量的类型错误,错将读者类型的结构体指针变量定义为了图书类型的指针变量。6. 结论结论课程设计顺利完成,任务书中所提出的要求全部实现,可以对图书信息进行查询、借阅及各种信息查找,并且将各种信息保存到文本文件中。不过这个程序还有些不够完善,例如:没有删除、修改功能。结束语结束语通过这次课程设计,我对复杂程序的开发有了一个深刻的认识,使我进一步明白了模块化思想在程序开发中的重要性。两个星期的 C 语言综合课程设计实习终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些 C 语言的编程思路,能够熟练的运用学到的函数,意识到编程并不是一件很简单的事情,知道学习编程必须亲自动手去做,只有自己做的程序才能找出错误,这样才能真正的达到目的。当程序编写完成而且能够正常运行心里非常高兴,虽然这对于一名程序员来说可能非常简单,但对我来说,如果要想在编程方面能够有所发展的话,我面临的困难还很多,要继续加强,努力,达到一种较高的水平。参考文献参考文献1 谭浩强. C 语言程序设计(第三版). 北京:清华大学出版社 20052 高涛,陆丽娜. C 语言设计. 西安:西安交通大学出版社 2007. 图书管理系统113 林碧英. C 语言程序设计教程. 北京:中国电力出版社 2006.4 王立武,陈艳,张宇,汪晔君.C 语言程序设计.北京.清华大学出版社 2009 附录附录 1用户手册用户手册点击运行,首先是进入菜单选择界面,可进行如图 1 所示。图图 1 进入菜单选择界面进入菜单选择界面输入 1 回车进入新书入库功能系统,可进行如图 2 所示。 图书管理系统12图图 2 进入新书入库选择界面进入新书入库选择界面输入 1 回车输入新书功能系统,可进行如图 3 所示。图图 3 进入新书入库选择界面进入新书入库选择界面输入 2 回车进入图书查询功能系统,可进行如图 4 所示。 图书管理系统13图图 4 进入新书入库选择界面进入新书入库选择界面输入 1 回车开始时图书查询系统,可进行如图 5 所示。图 5 进入图书查询界面 图书管理系统14输入 3 回车借书登记系统,可进行如图 6 所示图 6 进入借书登记界面输入 4 回车还书管理系统,可进行如图 7 所示图 7 进入图书查询界面 输入 5 回车显示信息系统,可进行如图 8 所示 图书管理系统15图 8 输出信息界面附录附录 2源程序源程序#include #include #include typedef struct bk char book_num11; char book_name41; int book_kc; int book_xc; struct bk * next;book; /* 图书信息*/typedef struct rd char reader_num11; char reader_name11; char reader_book_num11; struct rd * next ; reader;/*读者信息*/ 图书管理系统16struct bk * h_book,* h_reader; /*全局变量,分别为指向图书信息链表和读者信息链表的头指针*/void Form_Insert_New_Book(); /*新书入库菜单*/void Form_Find_Book(); /*查询图书菜单 */void Form_Borrow_Book(); /*借书菜单*/void Form_Return_Book(); /*还书菜单*/void Find_Book(char *); /*查询图书*/void Insert_New_Book(char *,char * ,int ); /*新书入库,即在链表中插入一个新节点*/void Borrow_Book(char *,char *);/*借书,修改读者借阅信息和图书的现存信息*/void Return_Book(char *,char *);/*还书,修改读者借阅信息和图书的现存信息*/void print_book(struct bk *);/*输出全部图书信息*/void print_reader(struct rd *);/*输出全部读者信息*/void load_data();/*从文件中读取数据,链表头指针指向第一个节点*/void init_reader();/*第一次运行程序时对三个读者的初始化*/void init_book();/*第一次运行程序时对三本图书的初始化*/void save();/*将链表中的信息保存到文件中*/void M_Form()/*主菜单*/ char ch; printf(n 图书管理系统主窗口); printf(n 0:退出系统); printf(n 1:新书入库); printf(n 2:图书查询); printf(n 3:借书登记); printf(n 4:还书管理); printf(n 5:输出全部信息);do /*此循环用来保证选择正确的数字键执行相应的功能*/ printf(nn 请选择相应的功能代码:); scanf(%c,&ch); fflush(stdin); /*用于清除键盘缓冲区中的多余字符*/ while(ch!=0&ch!=1&ch!=2&ch!=3&ch!=4&ch!=5); switch(ch) /*根据输入的字符进行选择执行相应的模块*/ case 0:exit(0); case 1:Form_Insert_New_Book();break; case 2:Form_Find_Book();break; case 3:Form_Borrow_Book();break; case 4:Form_Return_Book();break; case 5:load_data();print_book(h_book);print_reader(h_reader);M_Form(); default:printf(errorn);exit(0); 图书管理系统17void Form_Find_Book() char ch; char book_num11; printf(n 图书查询功能模块,请选择相应的功能代码:n); printf( 0:返回到主菜单n); printf( 1:图书查询); do printf(nn 请选择相应的功能代码:); scanf(%c,&ch); fflush(stdin); while(ch!=0&ch!=1); switch(ch) case 0:M_Form();break; /*选择 0,则返回到上一级目录,即主菜单*/ case 1: printf( n 请输入需要需要查询的书的编号:); scanf(%s,book_num); fflush(stdin); Find_Book(book_num); /*执行查询*/ Form_Find_Book();/*查询完毕后继续返回到查询窗口,执行下一个查询*/ default:printf(errorn);exit(0); void Find_Book(char book_num) /*查询图书模块,根据图书编号查询*/ struct bk *p; p=h_book; while(p!=NULL&strcmp(p-book_num,book_num)!=0)p=p-next;/*此循环用于查找,如果在中间找到,则 p 就不可能到末尾指向空*/ if(p=NULL) printf(nt 此编号对应的图书不存在!n); else printf(nt 图书编号t 图书名t 库存量t 现存量 n); printf( %10st %10st %dt %dtn,p-book_num,p-book_name,p-book_kc,p-book_xc); getch();void init_book() /*初始化图书模块*/ book ba3; FILE *fp; int i; printf(n 系统即将进行初始化,图书初始化模块:n); 图书管理系统18 printf(n 请分别输入三本书的书号,书名,数量(以空格隔开):n ); for(i=0;i3;i+) /*输入 3 本图书进行初始化*/ scanf(%s%s%d,bai.book_num,bai.book_name,&bai.book_kc); for(i=0;i3;i+) bai.book_xc=bai.book_kc; /*开始时库存=现存*/ if(fp=fopen(book.dat,wb)=NULL)/*建立新文件 book.dat 准备写入数据*/ printf(不能建立图书文件,初始化失败!请重新启动系统!n); return; for(i=0;ibook_num,book_num)!=0) q=p;p=p-next; if(strcmp(p-book_num,book_num)=0) printf(ntt 此编号已经存在,请重新输入!n); return; t=(struct bk *)malloc(sizeof(struct bk); strcpy(t-book_num,book_num); strcpy(t-book_name,book_name); t-book_kc=t-book_xc=number; q-next=t;t-next=NULL; if(book_fp=fopen(book.dat,ab)=NULL) printf(不能建立图书文件,初始化失败!请重新启动系统!n); return; /*将新书信息添加到文件中*/ fwrite(t,sizeof(struct bk),1,book_fp); fclose(book_fp);void print_book(struct bk *h) 图书管理系统19/*输出图书信息*/ struct bk *p; p=h; printf(nt 图书编号 t 图书名 t 库存量 t 现存量 n); while(p!=NULL) printf( %10st %10s %10dt%10dn,p-book_num,p-book_name,p-book_kc,p-book_xc); p=p-next; void print_reader(struct rd *h)/*输出读者信息*/ struct rd *p; p=h; printf(nt 读者编号 t 读者姓名 t 所借书号 n); while(p!=NULL) printf( %10st %10s %10sn,p-reader_num,p-reader_name,p-reader_book_num); p=p-next; getch();void Form_Borrow_Book()/*借书菜单界面*/ char ch; char book_num11,reader_num11; printf(n 图书借阅功能模块,请选择相应的功能代码:n); printf( 0:返回到主菜单n); printf( 1:图书借阅n); do printf(nn 请选择相应的功能代码:); scanf(%c,&ch); fflush(stdin); while(ch!=0&ch!=1); switch(ch) case 0:M_Form();break; case 1: printf( n 请输入读者编号与所借书编号:(以空格分隔)); scanf(%s%s,reader_num,book_num); fflush(stdin); Borrow_Book(reader_num,book_num);/*调用借书函数,执行借书功能*/ 图书管理系统20 Form_Borrow_Book();/*借书完成后,程序返回到借书菜单*/ default:printf(errorn);exit(0); void Borrow_Book(char reader_num,char book_num)/*输入读者编号,和需要借阅的书的编号,执行借书功能*/ struct bk *book_p; struct rd *reader_p; book_p=h_book; while(book_p!=NULL&strcmp(book_p-book_num,book_num)!=0) book_p=book_p-next; if(book_p=NULL) printf(nt 此编号对应的图书不存在!n); Form_Borrow_Book(); reader_p=h_reader; while(reader_p!=NULL&(strcmp(reader_p-reader_num,reader_num)!=0) reader_p=reader_p-next; if(reader_p=NULL) printf(nt 此编号对应的读者不存在!n); Form_Borrow_Book(); else if(strcmp(reader_p-reader_book_num,0)!=0) printf(nt 已达到最大借阅数,不能再借书!n); Form_Borrow_Book(); else book_p-book_xc=book_p-book_xc-1;/*借书完成后,修改现存量*/ strcpy(reader_p-reader_book_num,book_p-book_num);/*修改读者的借阅信息*/ save();/*将修改后的信息保存到文件中*/ load_data(); /*读入新文件中的数据*/ Form_Borrow_Book();/*程序执行完毕后,返回到借书菜单界面*/void Form_Return_Book()/*还书菜单*/ char ch; char book_num11,reader_num11; printf(n 归还图书功能模块,请选择相应的功能代码:n); printf( 0:返回到主菜单n); printf( 1:归还图书n); do 图书管理系统21 printf(nn 请选择相应的功能代码:); scanf(%c,&ch); fflush(stdin); while(ch!=0&ch!=1); switch(ch) case 0:M_Form();break; case 1: printf( n 请输入读者编号与所还书编号:(以空格分隔)); scanf(%s%s,reader_num,book_num); fflush(stdin); Return_Book(reader_num,book_num);/*调用还书函数*/ Form_Return_Book(); default:printf(errorn);exit(0); void Return_Book(char reader_num,char book_num)/*输入读者编号和所还书编号执行还书*/ struct bk *book_p; struct rd *reader_p; book_p=h_book; while(book_p!=NULL&strcmp(book_p-book_num,book_num)!=0) book_p=book_p-next; if(book_p=NULL) printf(nt 此编号对应的图书不存在!n); Form_Return_Book(); reader_p=h_reader; while(reader_p!=NULL&(strcmp(reader_p-reader_num,reader_num)!=0) reader_p=reader_p-next; if(reader_p=NULL) printf(nt 此编号对应的读者不存在!n); Form_Return_Book(); else if(strcmp(reader_p-reader_book_num,book_num)!=0) printf(nt 读者没有借阅此书n); Form_Return_Book(); else book_p-book_xc=book_p-book_xc+1;/*还书后,修改图书库存量*/ strcpy(reader_p-reader_book_num,0);/*还书后,修改读者借阅信息*/ save();/*保存到文件*/ load_data(); /*读入文件中的数据*/ 图书管理系统22 Form_Return_Book();void init_reader()/*系统第一次运行时,初始化 3 位读者信息,从键盘读入*/ FILE *fp; reader ra3; int i; printf(n 系统即将进行读者初始化:n); printf(n 请分别输入三位读者的编号和姓名(以空格隔开):n ); for(i=0;i3;i+) scanf(%s%s,rai.reader_num,rai.reader_name); for(i=0;i3;i+) strcpy(rai.reader_book_num,0); if(fp=fopen(reader.dat,wb)=NULL) printf(不能建立读者文件,初始化失败!请重新启动系统!n); return; for(i=0;inext=book_p1;book_p3=book_p2;book_p2=book_p1; book_p3-next=NULL; free(book_p1); fclose(fp_book); fp_reader=fopen(reader.dat,rb); reader_p1=(struct rd *)malloc(sizeof(struct rd); fread(reader_p1,sizeof(struct rd),1,fp_reader); h_reader=reader_p3=reader_p2=reader_p1; while(! feof(fp_reader) reader_p1=(struct rd *)malloc(sizeof(struct rd); fread(reader_p1,sizeof(struct rd),1,fp_reader); reader_p2-next=reader_p1;reader_p3=reader_p2;reader_p2=reader_p1; reader_p3-next=NULL; free(reader_p1); fclose(fp_reader);void save()/*将链表中的数据保存到内存中*/ FILE *book_fp,*reader_fp; struct bk *book_p; struct rd *reader_p; book_p=h_book; reader_p=h_reader; if(book_fp=fopen(book.dat,wb)=NULL) printf(不能建立图书文件,初始化失败!请重新启动系统!n); return; 图书管理系统24 while(book_p!=NULL) if(fwrite(book_p,sizeof(struct bk),1,book_fp)!=1) printf(写数据错误!n); exit(0); book_p=book_p-next; fclose(book_fp); if(reader_fp=fopen(reader.dat,wb)=NULL) printf(不能建立图书文件,初始化失败!请重新启动系统!n); return; while(reader_p!=NULL) if(fwrite(reader_p,sizeof(struct rd),1,reader_fp)!=1) printf(写数据错误!n); exit(0); reader_p=reader_p-next; fclose(reader_fp);main() FILE * fp; struct bk temp; clrscr(); h_book=NULL;h_reader=NULL; if(fp=fopen(book.dat,r)=NULL) init();/*第 1 次运行系统时的初始化*/ fclose(fp); load_data();/*从文件中读入数据*/ M_Form();/*显示主菜单*/ save();/*保存内存中的数据(即链表中的数据)到文件*/ getch(); 图书管理系统25完成时间:2010 年 7 月 12日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸下载 > CAD图纸下载


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

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


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