- 题目意义和设计思想
1、题目意义
图书馆,作为文献的聚集地和展示平台,常常扮演着引领文化前进的角色,是每个大学不可或缺的基础设施,而图书管理系统则是一个图书馆能够正常运转的关键。本次课程设计使用C语言制作程序来实现图书的登记,删除,查询,浏览以及读者的借阅,还书,会员登录,修改密码等功能。程序中涉及到数据链表和文件指针的操作,包括结构体数据定义,使用及文件的读写,定位,修改等。
2、设计思想
①新建账号密码,然后通过二者的匹配登录系统,这样可以保证是本校同学才能使用,另外还可以修改密码。
②添加图书的基本信息,如 书号,书名,作者,出版社,类别,进库量;
③删除图书,通过图书的书名进行删除;
④图书查询,通过图书的书号,书名,作者或者类别进行检索;
⑤浏览图书的库存,将所有数目展示出来;
⑥借书登记,先判断是否有这本数,然后进行借书人学号,姓名,归还截止期限,借书书名进行登记
⑦还书情况查看。
⑧借阅情况查看。
⑨会员登录,通过数据文件中的已注册的账号密码来登录到图书管理系统。
⑩修改密码
2.1总设计框架图
二、采用的主要技术、遇到的难点和解决方法
三、实现的主要功能和系统结构1.采用的主要技术
①switch()函数
在多级菜单的功能选择上,需要大量运用switch()函数来实现函数与函数之间的联系,功能与功能之三、实现的主要功能和系统结构间的交替。如通过switch语句来选择打开图书管理系统还是结束管理系统
②循环结构
为了实现一些文件的遍历和链表的创建等,需要用到各种循环结构,如,查询图书功能,修改密密码功能等。
③文件的新建,打开,读取,写入,关闭。
图书管理系统每次的功能执行都是需要产生持续性的影响,因此就需要大量使用文件来保存各种数据,如储存注册的账号密码,储存读者的借阅信息等。
④结构体及链表的创建,修改,遍历。
整个图书管理系统包含的数据结构非常复杂,有字符型,字符数组型,指针型,整型,浮点型等等,通过结构体可以将其中有关联但类型不相同的数据集中到一起,方便数据的保存和修改,另外通过链表将数组相连,更方便对文件件中的数据进行修改和删除。如,删除图书信息,删除旧的密码。
⑤指针
通过指针可以很好的对数据进行访问,在链表和文件的使用中指针的功能无可替代,如在还书功能和修改密码中,都有很大的作用。
2.遇到的难点及解决办法
(1)不知道如何停止程序,以及只让程序在ESC和回车按下后才继续工作。
解:查阅资料getch()
所在头文件:conio.h
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符
代码: for(;i!=13&&i!=27;)
i=getch();
(2)不知道C语言未初始化的变量的值,导致无限循环。
解:全局变量 、静态变量初始值为0
局部变量,自动变量初始值随机分配(3)不知道如何快速清理文件和新建文件
解:查阅览书本后知道,先只写文件,如果文件名和已存在的相同,那么就会先删除原有文件,而且如果不存在文件将会之间新建文件。
fp=fopen(“library.txt”,”w”); \\清空
fclose(fp);
if ((fp=fopen(“library.txt”,”r”))==NULL)//快速新建
{
fp=fopen(“library.txt”,”w”);
fclose(fp);
}
(4)对a!=2和a=!2弄混淆
解:a!=2:表示a不等于“2”;
a=!2:表示a等于“!2”(0);
(5)编译正确,但是有的时候scanf语句好像没有执行,输入数据回车,程序没反应
解:查阅得知:
这种情况通常发生在前面已经有了输入语句,而当前的scanf是在接收字符(即用%c控制输入)时。由于前面的输入语句(不一定是scanf)把最后输入的’\n’遗留在了输入缓冲区,而当前的scanf(“%c”,…);又会把’\n’当一个字符接收,又由于scanf在%c控制下只接收一个字符,所以就不能接收正式输入的字符了。解决这一问题的最简单办法是在接收字符的scanf的控制符”%c”中的%前加一个空格写成” %c”,把前一次输入遗留在输入缓冲区里的所有广义空格(‘ ‘、’\t’、’\n’等)都吸收掉。在接收字符的scanf前加getchar()等的办法其实是有漏洞的——当缓冲区里只遗留了一个广义字符时可正常工作,若多于一个则同样出错。按回车没反应
(6),关于“feof”的误区
For(;!feof(fp););
n++;
n–;来判断文件里面字符的个数为什么错误,
查阅得知:
1.EOF
EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。这个定义的意思是,文档的结尾都有一个隐藏字符”EOF”,当程序读取它的时候,就会知道文件已经到达结尾。通常使用while循环加EOF判断作为读取结束的标志。
EOF 的值通常为 -1,但它依系统有所不同。
2.feof()
feof()的原理:
feof()函数,并不是通过读取到文件的EOF来评判,这个文件是否为空。
对feof()来说,它的工作原理是,站在光标所在位置,向后看看还有没有字符。如果有,返回0;如果没有,返回非0。它并不会读取相关信息,只是查看光标后是否还有内容。
直接使用时的错误分析:
对于一个空文件来说,当程序打开它的时候,它的光标会停在文件的开头,但是由于文件里什么内容都没有存(但是EOF是存在的),即整个文件就存贮了一个EOF。当程序打开文件,并直接调用feof()时,这个函数就会站在光标的位置向后张望,结果就看见了EOF,然后就当然返回0了。所以使用feof()函数时,必须要读取文件,让光标移动。(7)错因:用正确的格式写入文件,结果却没有数据
解:没有及时fclose(fp),不弥补数据储存的原理。
打开文件fopen函数把返回值赋给fp,用fclose关闭文件,如果不关闭文件就结束程序将会丢失数据,因为,在向文件里面写入数据时,是先将数据输入到缓冲区,待缓冲区从满后才正式输出给文件。因此用fclose函数关闭文件时,先把缓冲区中的数据输出到磁盘文件,然后才撤销文件信息区。
今天的文章c语言图书管理系统分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/5247.html