集美大学诚毅学院软件工程课设计报告题目:图书管理系统系部名称:计算机信息工程专业:软件工程学生姓名:余传贵班级:软件1271学号:201242059027时间:2013年12月23日至2013年12月27日指导老师:王宗跃课程设计题目:图书管理系统一、实验目的:1、通过系统分析、系统设计、编程调试,写实验报告等环节,初步掌握软件系统设计的方法和步骤。2、熟悉C语言程序的编辑、编译、链接和运行的过程,掌握C语言的数据类型。3、掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读写等文件基本操作函数。4、训练自己灵活运用程序设计语言进行软件开发的能力,提高分析问题和解决问题的能力,培养必要的工程实践能力,从而提高程序设计水平。二、实验内容:1、键盘输入密码。2、键盘按照提示进行操作。3、键盘按照提示实现对图书信息的输入。4、查询模块,实现按编号、名称、类型进行查询5、更新模块,实现对图书信息的删除、更改和添加.。6、排序模块,实现按编号、名称、类型进行排序。7、统计模块,实现按名称、类型出版社进行数量统计。三、需求分析:程序实现以菜单形式进入并操作,对图书信息的查询、更新、排序、统计功能,为此可以做出一系列操作函数,以链表保存图书的图书编号、图书名称、图书作者、图书类型、图书出版社、图书出版时间、图书数量,并用文件指针对信息进行保存和以实现对图书信息的录入、保存、修改、删除、添加、查询、排序和统计等功能。四、概要设计1、方案设计读取信息查询信息更新信息排序信息统计信息保存信息修改信息添加信息名称排序输出信息录入信息输入密码编号排序类型排序名称统计类型统计出版社统计类型查询名称查询编号查询删除信息设计图2、模块功能说明。对各个模块进行功能描述:1)各模块间通过菜单切换和调用。2)主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。3)程序能够保证各模块功能的独立和数据共享。4)可以保存到文件,可以从文件读入已有的文件。5)录入模块可以用来录入图书信息。6)输出模块可以用来输出已经录入的图书信息。7)查询模块可以用来查询图书的信息,包括按编号查询、按名称查询和按类型查询。8)更新模块可以用来更新图书信息,包括添加信息,删除信息和修改信息。9)统计模块可以用来统计图书的具体信息,包括按名称统计,按类型统计,按出版社统计。10)排序模块可以用来对图书信息进行排序,包括按编号排序、按名称排序和按类型排序。五、详细设计及运行结果:功能模块流程图如下:主函数voidmain(){inti,choice;chara[7]=123456,b[7];printf(\n\n★请输入密码(六位):);for(i=0;i6;i++){b[i]=getch();printf(*);}getch();b[6]='\0';if(!strcmp(a,b)){do{system(color7e);printf(****************\n);printf(1.录入图书信息\n);printf(****************\n);printf(2.保存图书信息\n);printf(****************\n);printf(3.读取图书信息\n);printf(****************\n);printf(4.输出图书信息\n);printf(****************\n);printf(5.查询图书信息\n);printf(****************\n);printf(6.更新图书信息\n);printf(****************\n);printf(7.排序图书信息\n);printf(****************\n);printf(8.统计图书信息\n);printf(****************\n);printf(0.退出系统\n\n);printf(请选择(0-8):);scanf(%d,&choice);switch(choice){case1:input();break;case2:save();break;case3:read();break;case4:output();break;case5:inquire();break;case6:renew();break;case7:sort();break;case8:count();break;case0:break;}}while(choice!=0);{exit(0);}}elseprintf(\n\n*************密码错误!***********\n);}Choice=3Choice=4Choice=5读取信息输出信息查询信息是Y否NNYYYNChoice=8N否统计信息是YChoice=6更新信息是YNChoice=7排序信息是YNChoice=0NChoice=2保存信息YNChoice=1录入信息保存输入提示信息开始结束输入模块输出模块查询模块更新模块NYChoice将图书信息存盘结束Y输入图书信息结束开始输出图书信息i++Nnum=0开始num=0NY否YNChoice=2按名称查询是YYNChoice=1按编号查询输入提示信息NChoice=3按类型查询YChoice=0开始NYNChoice=2添加信息是YChoice=1删除信息输入提示信息NChoice=3修改信息是YChoice=0保存开始返回返回统计模块排序模块是是是开始返回否否否Choice=2按类型统计Choice=1按名称统计输入提示信息否Choice=3按出版社统计Choice=0按编号排序Choice=1按类型排序输入提示信息Choice=3按名称排序Choice=4Choice=0开始返回是是是否否修改模块添加模块删除模块六、设计体会及调试情况:在这两个星期里,我们专业的学生在宋辉老师的带领下进行了c语言课程设计。在这之前,我们已经对c语言这门课程学习了一年,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手。起初由于上机实践太少,经验很是不足,遇到错误就犯晕,经过几天连续编程,我也积累了不少以前没有的经验,遇到错误也不那么惧怕了,还从一些同学那里学到了不少编程技巧和好习惯,不得不说我得感谢学校给我们这样一个连续足够的实践来强化C语言编程能力。而且我越来越对编程有兴趣了,当程序正常运行那一刻真恨不得对全世界人说我成功了。现在我再说说本次课程设计我的心得体会:课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中才发现问题很多。也只有上机操作才能认识到自己课本学的与实践的差距。开始选择修改项是否修改输出修改信息是否继续结束开始输入新信息是否继续输出新信息结束开始选择删除项是否删除输出剩余信息是否继续结束是否是否是是否否是否然而学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。也就是把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解决问题。也只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓环境就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。上机是学好程序语言的必经之路,也是最快捷的,即使花费一整天时间来看书可能还不如安安心心在那里编写几个程序更能理解所学的东西。通过本次课程设计我认识到学习是个积累的过程,只有有了量的积累才可能会有质的飞跃,多实践远胜于空想,没有做不到,只有不想做。附录:源代码(略,详见电子版实验报告)#includestdio.h#includestdlib.h#includestring.h#includeconio.h#definePRINT1printf(*****************************************************************************\n)#definePRINT2printf(图书编号-图书名称-图书作者-图书类型-图书出版社-图书出版时间(年-月-日)-图书数量\n)#definePRINT3printf(%d%s%s%s%s%d-%d-%d%d\n,book[i].num,book[i].name,book[i].writer,book[i].type,book[i].publish,book[i].publish_time.year,book[i].publish_time.month,book[i].publish_time.day,book[i].amount)#definePAGE3#defineMAX300intsum;//用来记录图书数目(全局变量)structDATE//定义日期结构体类型{intyear;intmonth;intday;};structBOOK//定义图书结构体类型{intnum;//图书编号charname[10];//图书名称charwriter[8];//图书作者chartype[10];//图书类型charpublish[40];//图书出版社structDATEpublish_time;//图书出版时间intamount;//图书数量}book[MAX];//存放MAX个图书信息记录的结构体数组//录入模块voidinput(){inti=0,s=MAX;charchoice;printf(\n\n****录入图书信息****(最多%d种)\n,s);printf(*******************************\n);do{printf(\n第%d种图书,i+1);printf(\n★输入图书编号:);scanf(%d,&book[i].num);if(book[i].num==0)break;printf(\n★输入图书名称:);scanf(%s,book[i].name);printf(\n★输入图书作者:);scanf(%s,book[i].writer);printf(\n★输入图书类型:);scanf(%s,book[i].type);printf(\n★输入出版社:);scanf(%s,book[i].publish);printf(\n★出版时间(yyyy-mm-dd):);scanf(%d-%d-%d,&book[i].publish_time.year,&book[i].publish_time.month,&book[i].publish_time.day);printf(\n★输入图书总量:);scanf(%d,&book[i].amount);i++;printf(\n☆要继续输入吗?(Y/N):);choice=getch();if(choice=='N'||choice=='n')break;}while(iMAX);pri