东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:2009班别:2班指导教师:侯家利组长:黄培周(200941301208)同组成员:邹日宙(200941301211)陈俊杰(200941301239)叶毅杰(200941301225)目录一、目的.....................................................................................................1二、需求分析.............................................................................................1三、概要设计.............................................................................................1四、详细设计.............................................................................................3五、调试分析.............................................................................................4六、测试结果.............................................................................................5七、用户使用说明....................................................错误!未定义书签。八、课程设计总结..................................................................................错误!未定义书签。附录:参考代码........................................................错误!未定义书签。图书信息管理系统..............................................错误!未定义书签。一目的本课程设计为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。二需求分析根据图书馆图书信息管理的需要,建立一个“图书信息管理系统”,以方便对图书的各项管理操作。开发目的如下:1、图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。2、图书信息管理系统,提供以下功能:1)图书信息录入功能(图书信息用文件保存)--输入;2)图书信息浏览功能--输出;3)查询和排序功能:--算法;4)按书名查询;5)按作者名查询;6)按登录号从大到小排列;7)图书信息的删除与修改三概要设计程序总体功能框架:开始界面主要提示的菜单界面插入图书信息浏览图书信息查询图书信息删除图书信息修改图书信息采用结构:structtsxx{//定义结构longdlnum;//定义登录号charbname[10];//定义书名charaname[10];//定义作者名charscnum[10];//定义分类号charplname[10];//定义出版社名chartime[11];//定义录入时间floatprice;//定义价格structtsxx*next;//定义指向下一个结构的首地址};链表结构:head各功能独立自定义的函数:1、插入图书信息(按登录号从大到小排序):structtsxx*zengjia(structtsxx*head)//传递链表的首地址,并返回链表的首地址2.、浏览全部的图书信息:voidPtrint_Stu_Doc(structtsxx*head)//传递链表的首地址3、查询图书信息(包括书名查询和作者名查询):voidCheck(structtsxx*head)//传递链表的首地址4、删除图书信息:structtsxx*Delete(structtsxx*head)//传递链表的首地址,并返回链表的首地址5.、修改图书信息:structtsxx*revise(structtsxx*head)//传递链表的首地址,并返回链表的首地址其他一些变量的定义:longsize;//定义结构的大小FILE*fp;//定义文件指针,指向文件structtsxx*head;//定义链表的首地址structtsxx*p;//定义结构指针charchoice;//定义选择变量structtsxxAstructtsxxBstructtsxxCstructtsxxDNULL四详细设计1、设计思路:首先,输入一些图书信息,申请一个结构类型的动态内存,把图书信息赋值到动态内存内,每一快动态内存存放一本图书的信息,并形成一条链表,比较登录号的大小,按登录号从大到小排列;然后,建立并打开一个文件,把链表中的数据写入文件中,然后关闭文件;最后,插入功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入你想要插入的图书信息,比较登录号的大小,然后把新的图书信息按照登录号的大小顺序插入链表里面,新建一个文间,把新的链表写入文件中;浏览功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,然后链表头开始,把结构中的数据一个一个输出到界面上;查询功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表;选择你要查询的方式:1是按书名查询,2是按作者名查询。输入你的选择,判断你的查询方式。书名查询:输入你要查询的书名,在链表中查找你这本书,然后把这本书的信息输出到界面上;作者名查询:输入你要查询的作者名,在链表中查找对应作者名的图书的信息,并把信息输入到界面上;修改功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入你要修改的图书的登录号,在链表中查找对应登录号的图书信息的结构,重新输入你要修改的图书的全部信息,并把这些新的图书信息赋值给找到的结构,覆盖旧的图书信息,新建一个文件,存放新的图书信息;删除功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入你要删除的图书的登录号,在链表中查找对应登录号的图书信息的结构与前一个结构,让前一个结构的next指向对应登录号结构的下一个结构,释放动态内存,新建一个新的文件,存放新的图示信息;2、数据结构的选择:据图书信息表特点,决定选用链表这种数据结构(也可用其它的数据结构)来作为组成成绩数据库的基本框架。链表是最简单也是最常用的一种动态数据结构。它是对动态获得的内存进行组织的一种结构。选用链表有得好处:1.即用即申请,不会造成内存空间的浪费;2.是数据之间既有独立性,又便于数据的相互连系;3.便于数据的添加及删除等优点。3、设计思想的选择:用模块化程序设计理念,对各个功能定义不同函数,分块处理,这样有利于后期调试及今后对功能的完善。五调试分析1、把数据从文件中拿出来时,当文件是空的,它也会读数据,这时的数据时0;当文件不空时,最后的数据会被读两次。因此,这样读出来的文件就会出现一些小差错,必须做适当的调整。当文件为空,把链表的首地址head赋值为NULL,然后释放动态内存;当文件不为空时,把链表的最后第二个结构的next赋值为NULL,然后释放动态内存。2、因为开始时定义choice为整型变量,所以只能输入整数,如果不小心输入字符数时,整个程序就出现错误,不能继续运行。因此,我们把choice重新定义成字符型,这样就可以输入字符数,所以后面用switch时,也要改成字符型。3、一开始运行程序是,因为还没有创建文件,所以在读取文件中的数据时,就会出现“不能打开文件”的错误。因此,在一开始运行程序时必须要先创建一个文件,以后程序就会自动建立一个新的文件。4、在作者名查询那里,一开始是当查找到一条对应的结构数据时,因为用了break,所以就直接退出了循环,因此如果一个作者有多本书是,以只能查询一本书的信息。调试后,我们把break删掉,这样它就会一直循环,直到链表的最后一条数据,它才会跳出循环。这样就能把一个作者全部的书都显示出来。…………六测试结果1、数据的输入:新建一个文件,并把数据写入文件中:增加功能:查询功能:浏览功能:修改功能:删除功能:七用户使用说明一开始运行程序时,就会出现一个让你选择的界面,1.是增加数据,2是查询数据,3是浏览数据,4是修改数据,5是删除数据,6是输入数据,并新建一个文本存这些数据,0是退出程序。当你输入1时,界面就会输出“Enterthestatic(lognumbooknameauthornamescorenumpublishnametimeprice):”,接着你就输入你要增加的图书的信息就可以了。当你输入2时,就会在出现一个让你选择的界面,1是书名查询,2是作者名查询。当你输入1时,如果文件时空的,界面就会输出“N0Records”,如果文件不是空的,界面就会输出“Inputbname:”,就着你就输入你要查询的图书的书名,如果文件中没有你要查询的这本书,界面就会输出“Thereisn'tthisstatic!”,当文件中有你要查询的这本书时,界面就会输出这本书的全部信息。当你输入2时,如果文件时空的,界面就会输出“N0Records”,如果文件不是空的,界面就会输出“Inputaname:”,就着你就输入你要查询的图书的作者名,如果文件中没有你要查询的这本书,界面就会输出“Thereisn'tthisstatic!”,当文件中有你要查询的这本书时,界面就会输出这本书的全部信息。当你输入3时,界面就会输出全部图书的全部信息;当你输入4时,界面就会输出“Inputthelognum:”,接着你要输入你要修改的图书的登录号,如果文件时空的,界面就会输出“Notrecords!”,如果文件不是空的,但没有你所输入的登录号的图书,界面就会输出“Thereisn'tthisstatic!”,如果文件不是空的,并且有你输入的登录号的图书,界面就会输出这本书的全部信息,很“Retypethestatic:”,接着你重新输入这本书的全部信息就可以了。当你输入4时,界面就会输出“Inputdlnum:”,接着你就输入你要删除的图书的登录号就可以了。当你输入6时,界面就会输出“Enterthestatic(lognumbooknameauthornamescorenumpublishnametimeprice):”,接着你就输入你要增加的图书的信息就可以了。当你输入0时,就退出程序当你输入的是其他的数字或是字符时,界面就会输出“Entererror!”。八课程设计总结做为这个小组的组长,我觉得我们所设计的程序今本上已经能够实现题目的要求,并且运用的链表,还用文件来存数据。但是,我觉得我们的程序还是存在着一些不足之处。首先建立一个文件是文件名和拓展名都已经被规定好的,其次是当文件为空时,程序运行时,当你输入得选择不是6是,会发生错误,所以一开始要先运行选择6,后才能运行其他选择,最后是运行查询、修改、删除功能,你输入的信息要跟文件中的一致,才能实现,如果稍有不同,就不够实现这些功能了。另外,我想感谢我的组员,因为我们是分工合作的,他们有的负责一个功能,有的负责两个功能,而我主要是些主函数,在他们的积极配合下,我们很快就把总程序写好,并调试完毕。所以我想感谢他们的配合。因为集体的力量是强大的,只有我们的积极合作,才能够准时的完成这个课程设计。最后,我觉得在这个课程设计的过程中,我学到了