




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四川师范大学成都学院高级语言程序课程设计基于C语言的图书管理系统程序设计TOC\o"1-5"\h\z学生姓名 XXX学号 XXXX所在学院 通信工程学院专业名称 通信工程 班级 XXXXXX指导教师成绩四川师范大学成都学院二O一四年十二月基于C语言的图书管理系统程序设计内容摘要:图书管理系统是图书馆的重要组成部分,图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来,迫使人们起用新的管理方法来管理图书。基于c语言的设计和开发图书馆管理系统的实践,阐述了图书管理软件中所应具有的功能、设计、实现。介绍了图书管理系统的设计和系统功能的实现过程。该系统可以运用于高校的图书管理,由图书编目,图书流通,标准管理,资料管理,系统维护等多个子系统组成,实现对新进图书基本信息的输入、图书基本信息的查询、对撤消图书信息的删除、为借书人办理注册、办理借书手续、办理还书手续等。实现了图书资料的计算机网络管理。关键词:图书管理c语言程序设计BasedontheClanguagelibrarymanagementsystemprogramdesignAbstract:Librarymanagementsystemisanimportantpartofthelibrary,thebookisourbestwaytogetinformation,butduetothelargeincreaseincollectionoflibrarybooks,sothatthetraditionallibrarian'sworkincreasinglyheavyup,forcingpeoplehirednewmanagementwaystomanagebooksKeywords:LibrarymanagementClanguageProgramdesign目录基于C语言的图书管理系统程序设计前百图书馆管理信息系统是对学校图书进行全面信息管理的系统。该管理系统可以有效地管理学校图书资源,记录学校与读者之间的使用书籍情况。此外,根据读者的要求,实现书籍基本信息的输入,查询等几个方面的功能。本系统可以作为独立的系统使用,它包括借阅信息管理、书籍信息管理、读者信息管理、系统管理四个主要的功能模块。该管理系统力求给读者方便快捷的途径去及时了解书籍信息。针对各个模块不同的数据表实现添加记录、修改记录、删除记录、以及查询显示记录等功能,所有的操作方便而快捷,并全面实现了图书馆管理的各项功能。1绪论选题背景和选题意义选题背景随着社会的发展及知识经济时代的到来,信息管理系统在各行各业发挥着越来越重要的作用。而在高校的图书管理中,避免了手工操作而带来的一些不必要的问题。选题意义图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本,表格等纸介质的手工处理,数据处理工作量大,容易出错。由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基于环境。图书管理系统简介图书管理系统是图书馆的重要组成部分,图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来,迫使人们起用新的管理方法来管理图书。本文通过设计和开发图书馆管理系统的实践,阐述了图书管理软件中所应具有的功能、设计、实现。介绍了图书管理系统的设计和系统功能的实现过程。该系统可以运用于高校的图书管理,由图书借阅,图书归还,图书查询,图书信息修改,等多个模块组成,实现了图书资料的计算机网络管理。一般通用的图书馆管理系统通常包括系统管理、读者管理、编目、图书流通、统计、查询等功能。比较先进的系统能够在一个界面下实现图书、音像、期刊的管理,设置假期、设置暂离锁、暂停某些读者的借阅权、导入导出读者资料、交换MARC(MachineReadableCatalogue)数据、升级辅助编目库、征订图书等。此外,随着工Internet应用的发展,一个完善的系统还应提供无缝接入Internet的功能,通过IE浏览器让读者使用借阅资料查询、更换密码、预约、资料检索等功能。有些系统还能提供读者自助服务,可以开放一些客户机让读者自行管理密码、查询自己的借阅史、预约资料、检索资料等。图书管理系统需求分析为满足图书管理现代化的需求,国内软件商已开发出很多商品化图书管理软件,但他们大多是面向大型专业图书馆而开发的,专业性强,操作和使用比较复杂,难以掌握。而国内很多中小型图书馆由于管理人员不多且大多数不是图书管理业务的专业人员、业务分工也不是很详细、明确,这样的软件对于他们而言太复杂,所以应用效果并不是很好。目前在大的图书馆己经有一整套比较完善的信息管理系统,而在一般小型图书馆中大部分工作还是进行手工管理,工作效率低,并不能即时了解图书馆各类图书的库存,读者比较需求的图书难以在短时间内找到,图书的入库和更新比较麻烦等等,不便于动态及时调整图书结构。同时由于不可避免的人为因素,造成数据的遗漏、误报等。为了更好的适应当前中小型图书馆的读者借阅需求,缓解手工管理存在的各种弊端,因此开发了面向中小型图书馆的图书管理系统,为用户提供全方位的信息服务。通过对中小型图书馆的调查、分析发现,用户的需求可分为4个方面:第一是图书馆的工作人员通过计算机来管理各类图书,分类编号、调整图书结构、增加图书库存,适应读者的需求。第二是读者能通过计算机来查询浏览图书馆中的图书,来确定自己需要的书籍,为借阅做好准备。第三是工作人员对读者的借书情况能够作好全面掌握,能及时得到每个读者的当前借阅状态和历史借阅记录。第四也是图书馆的核心工作,对图书的借阅管理。在软、硬件方面对系统的需求是软件要易学,容易掌握,可以很简单方便地管理各种图书信息。硬件的配置要求不能太高,这样可以适应中小型图书馆的经济条件。总之,中小型图书馆管理信息系统旨在提供一个可以操作的,方便查询的,易于修改的辅助管理系统。同时提供了系统智能辅助与用户自主选择的两种方式,提高查询效率。2系统分析题目分析本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验。要求为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;要求以上功能分别用函数实现。系统分析图书馆管理系统包括:录入:新进图书及基本信息输入删除:旧图书及基本信息删除查询:查询要借阅的图书信息修改:修改已有的图书信息借书:实现用户办理借书手续还书:实现用户.办理还书手续系统以菜单方式工作,界面友好,易于操作。系统的程序设计环境;:本系统使用VisualC++作为程序开发工具。VisualC++口是基于对象的快速应用程序开发工具,是当今最强大、最灵活的应用程序开发工具之一,具有良好的可视化应用程序开发环境和强大的可扩展数据库功能。利用VisualC++提供的可视化组件库进行编程,可以快速、高效地开发出基于Windows环境的各类应用程序。VisualC++语言的特点是面向对象设计的程序语言,VisualC++的基础编程语言是具有面向对象特性的语言,具有代码稳定、可读性好、编译速度快等优点,并将面向对象的概念移植到了C语言中,使这种基础语言有了新的发展空间。与其它编程软件相比,特别是在数据库和网络应用方面,VisualC++具有简便易用、灵活高效的特点。开发软件通常要经过修改⑵源代码、编译、测试、再修改、再编译、再测试等操作,这些操作形成了一个开发循环,所以快速的编译器可以大大地降低开发周期。VisualC++正是建立在这种高效编译器的基础之上,是针对Windows的最快的高级语言代码编译器,因此生成的代码十分精练高效,使VisualC++程序的运行速度更快。这也是本人使用VisualC++作为程序设计开发语言的重要原因。3管理系统的总体设计与详细设计总体设计总体设计目标:使用者可以利用本系统进行对图书馆借阅的各项运算操作,如根据用户的需求自动的进行添加图书,删除图书,借书还书。查找所要的图书,查阅图书的详细资料,查阅读者的详细资料。最后清晰完整的结果于屏幕中。大大方便使用者对图书借阅的操作,不仅节省时间,而且提高准确性,可以达到事半功倍的效果。总体设计策略:本系统采用的是⑶自顶向下、层次化的模块结构。对高层模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。对低层模块,采用以变换为中心的设计策略。为了提高每个模块的内聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块(即功能内聚),使模块间的联系完全是通过主模块的控制和调用来实现(即⑷非直接耦合)。结合上述分析该系统应包括以下模块:信息输入、信息删除,信息查询,信息显示,信息修改,图书借出、图书归还。结构图如图3-1:图书馆管理系统信 信信图3信结吉构框图显图图息书数据:息号、书名球作三者、,出版文社、存数、总数书书详输设计删查修信借归•主函数 除询改息出还主函数要求设计比较简洁,只提供设⑸输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。流程图如下图3-2:printf(〃\t\t\t1注册新书\t\t\t2借阅图书\n〃);printf(〃\t\t\t3查询图书信息\t\t\t4修改图书信息\n〃);printf(〃\t\t\t5归还图书\t\t\t6删除图书\n〃);printf(〃\t\t\t7显示图书\t\t\t8退出系统\n〃);printf(〃请按数字键:\n〃);switch(getch()){case'1':book_add();break;case'2':book_out();break;case'3':book_search();break;case'4':book_change();break;case'5':book_in();break;case'6':book_del();break;case'7':book_show();break;case'8':exit(0);}gotomenu;)・输入模块分析:该模块的功能是假如用户需要新加入新的图书信息,通过⑹键盘输入将新信息逐条加在原来输入文件上但不能覆盖原有信息。流程图如下图3-3:图3-3输入模块流程图程序:voidbook_add(void){intn;system("cls");page_title(〃注册新书”);for(n=0;n<100;n++)if(books[n].id==0)break;printf(〃序号:“);scanf("%d”,&books[n].id);printf(〃书名:");scanf("%s”,&books[n].name);printf(〃作者:”);scanf("%s”,&books[n].author);printf(〃出版社:“);scanf("%s”,&books[n].publish);printf(〃数量:”);scanf("%d”,&books[n].total);books[n].store=books[n].total;return_confirm();}・删除模块分析:该模块用于显示所有图书信息,由于记录[7较多,故而采取分屏显示。显示完所有纪录后,用户需输入图书编号进而查找图书信息。流程图如下图3-4:图3-4删除模块流程图程序:intbook_del(void)(intn,num,i;system(〃cls〃);page_title(〃删除图书〃);printf(〃请输入所要删除的书的编号:〃);scanf(〃%d〃,&num);for(n=0;n<100;n++)(if(books[n].id==num)for(i=n;i<100;i++){books[i].id=books[i+1].id;strcpy(books[i].name,books[i+1].name);strcpy(books[i].publish,books[i+1].publish);printf(〃该书已删除.\n〃);returnn;)
输入要查询的书名printf(〃没有找到相关记录\n");return-1;)・查询模块图3-5查询模块流程图程序:intbook_search(void){intn,i=1;charnam[30];system(〃cls〃);printf(〃请输入书名:");scanf(〃%s〃,&nam);for(n=0;n<100;n++){if((strcmp(books[n].name,nam)==0)){printf(〃序号:%d\t〃,books[n].id);printf(〃书名:%s\t〃,books[n].name);printf(〃作者:%s\t〃,books[n].author);printf(〃出版社:%s\t〃,books[n].publish);printf(〃存数:%d\t〃,books[n].store);printf(〃总数:%d\n〃,books[n].total);i=0;))if(i==1)printf(〃\n没有找到相关记录.\n〃);return-1;}・修改模块分析:该模块功能应体现为用户修改图书信息,若有记录则修改信息。流程图如下图3-6:图3-6修改模块流程图程序:intbook_change(void)(intn,i;system("cls");page_title(〃修改图书信息”);printf(〃请输入要修改的图书编号:〃);scanf("%d",&i);for(n=0;n<100;n++){if(books[n].id==i){printf(〃修改书名:〃);scanf(〃%s〃,books[n].name);printf(〃修改作者:〃);scanf(〃%s〃,books[n].author);printf(〃修改出版社名:〃);scanf(〃%s〃,books[n].publish);printf(〃修改总数:〃);scanf(〃%d〃,&books[n].total);printf(〃修改图书信息成功.\n〃);books[n].store=books[n].total;returnn;}}printf(〃\n没有找到相关记录.\n〃);return-1;)显示模块分析:该模块功能应体现为显示全部的图书信息。流程图如下图3-7:图3-7显示模块流程图程序:intbook_show(void){intn,i=1;system("cls");for(n=0;n<100;n++)(if(strlen(books[n].name)!=0)(printf(〃序号:%d\t”,books[n].id);printf(〃书名:%s\t”,books[n].name);printf(〃作者:%s\t”,books[n].author);printf(〃出版社:%s\t”,books[n].publish);printf(〃存数:%d\t”,books[n].store);printf(〃总数:%d\n”,books[n].total);i=0;)}if(i==1)printf("\n没有找到相关记录.\n");return-1;)借出模块分析:该模块功能应体现为用户输入图书序号,若有书则要求输入账号流程图如下图3-8:图3-8借书模块流程图程序:voidbook_out(void){intn,s,l,d;system("cls");page_title(〃借阅图书”);if((n=search_book())!=-1&&books[n].store>0){printf(〃请输入借书证序号:〃);scanf("%d",&s);printf(〃请输入可借天数:〃);scanf(〃%d〃,&d);for(l=0;l<10;l++){if(books[n].usr[l]==0){books[n].usr[l]=s;books[n].days[l]=d;break;}}books[n].store--;}if(n!=-1&&books[n].store==0)printf(〃此书已经全部借出.\n〃);return_confirm();}归还模块分析:该模块功能应体现为方便用户归还图书流程图如下图3-9:
图3-9归还图书模块程序:voidbook_in(void){intn,s,l;page_title(〃归还图书〃);if((n=search_book())!=-1&&books[n].store<books[n].total){printf(〃借阅者图书证列表:\n〃);for(l=0;l<10;l++)if(books[n].usr[l]!=0)printf(〃[%d]-%d^\n",books[n].usr[l],books[n].days[l]);printf(〃请输入借书证序号:〃);scanf(〃%d〃,&s);for(l=0;l<10;l++){if(books[n].usr[l]==s){books[n].usr[l]=0;books[n].days[l]=0;break;}}books[n].store++;}if(n!=-1&&books[n].store==books[n].total)printf(〃全部入藏.\口〃);return_confirm();}・公共函数定义结构体:structBOOK{intid,usr[10],total,store,days[10],zt;charname[31],author[21];}books[100];voidpage_title(char*menu_item){printf('\t\t\t************欢迎使用图书馆管理系统**********\n\n-%s-\n\n〃,menu_item);}voidreturn_confirm(void){printf(〃\n按任意键返回 \n〃);getch();)4调试与测试第一,用一组简单的数据对程序进行调试,是否各函数有出错现象。然后用复杂数据对程序进行调试。直到确定程序对正常数据没有错误为止。第二,当数据测试时,程序错误,要首先找到出错的函数,对函数中各个变量进行观察,有时变量很多,循环多重不要急,对各个数据的观察,对程序的调试有很大的帮助。你也可以先对几个变量熟悉后,在多重循环里,确定正确的数据,将其跳过调试,对有疑问的数据循环进行仔细观察。虽然这是比较省力气的活,但对复杂的数据错误并不是很有效,所以仔细观察每个数据的变化对调试的成功与否有决定性作用。第三,测试时,根本的错误并不一定在运行错误的函数内,或许在前面的函数内已经奠定了这些错误数据的基础,需要反过头来,对所有的的函数进行一项项的调试!从程序运行的第一个函数开始调试。按照程序运行的步骤下去。一个个的确定函数的正确性,每确定一个函数,在以后的调试中可以减少对该函数的调试次数,或者直接跳到下一个函数。所谓的各个击破便是如此。对头文件中的各个函数的返回值和它所要传入的参变量及其功能更是需要注意。第四,调试时,需要对错误缩小范围,从整个程序到指定函数,再到指定区域,再到指定行,在对程序缩小范围或对编译没通过的程序缩小错误范围时可以用〃/**/〃来进行调试,确定正常范围,缩小错误范围。5编码实现・主界面截图图5-1主界面注册新书界面截图图5-2新书注册显示界面截图图5-3图书显示借阅界面截图图5-4图书借阅归还界面截图图5-5图书归还查询界面截图图5-6图书查询修改界面截图图5-7修改图书删除界面截图图5-8删除界面6结论经过以上各章节的介绍,已经完成了图书馆管理系统的开发,图书馆系统是一套实用性非常强的系统,从小学、中学直到大学,很多人一直与图书馆打交道,图书馆的发展从手工管理、手工管理和计算机管理并行,直到现在的完全计算机管理。图书馆管理系统不仅需要灵活的交互功能,还需要经常与数据库进行联系,要求具有操作简单和功能强大的数据库访问能力。界面尽量美观友好、多彩多姿,完全的图形化设计,操作者易于上手,同时多种媒体技术的集成利用,可以方便的完成用户乐于接受的各种界面设计。本系统虽具备了基本的功能,但由于时间关系,还有很多功能待实现,在此基础上结合实际应用中所出现的问题,要改善图书的入库和删除功能,使工作人员在主界面上就能进行其操作;在过期天数中应该增加罚款的功能;如果作为校园的图书管理系统,应区分出不同身分的人(如教师和学生)的借阅权限等。通过这次编程我深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作。善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高。附录程序源代码#include<>#include<>#include<>#include<>structBOOK{intid,usr[10],total,store,days[10];charname[30],author[20],publish[40];}books[100];voidpage_title(char*menu_item){printf('\t\t\t************欢迎使用图书馆管理系统**********\n\n-%s-\n\n〃,menu_item);}voidreturn_confirm(void){printf(〃\n按任意键返回 \n〃);getch();}intsearch_book(void){intn,i;printf(〃请输入图书序号:〃);scanf("%d",&i);for(n=0;n<100;n++){if(books[n].id==i){printf(〃序号:%d\n〃,books[n].id);printf(〃书名:%s\n〃,books[n].name);printf(〃作者:%s\n〃,books[n].author);printf(〃出版社:%s\n〃,books[n].publish);printf(〃存数:%d\n〃,books[n].store);printf(〃总数:%d\n〃,books[n].total);returnn;}}printf(〃\n没有找到相关记录.\n〃);return_1;}intbook_search(void){intn,i=1;charnam[30];system(〃cls〃);printf(〃请输入书名:〃);scanf(〃%s〃,&nam);printf(〃查询结果如下:\n〃);for(n=0;n<100;n++){if((strcmp(books[n].name,nam)==0)){printf(〃序号:%d\t〃,books[n].id);printf(〃书名:%s\t〃,books[n].name);printf(〃作者:%s\t〃,books[n].author);printf(〃出版社:%s\t〃,books[n].publish);printf(〃存数:%d\t〃,books[n].store);printf(〃总数:%d\n”,books[n].total);i=0;))if(i==1)printf("\n没有找到相关记录.\n");return_1;}intbook_change(void)(intn,i;system("cls");page_title(〃修改图书信息”);printf(〃请输入要修改的图书序号:〃);scanf("%d",&i);for(n=0;n<100;n++)(if(books[n].id==i)(printf(〃修改书名:〃);scanf(〃%s〃,books[n].name);printf(〃修改作者:〃);scanf(〃%s〃,books[n].author);printf(〃修改出版社名:〃);scanf(〃%s〃,books[n].publish);printf(〃修改总数:〃);scanf(〃%d〃,&books[n].total);printf(〃修改图书信息成功.\n〃);books[n].store=books[n].total;returnn;}}printf(〃\n没有找到相关记录.\n〃);return-1;)intbook_show(void){intn,i=1;system("cls");for(n=0;n<100;n++)(if(strlen(books[n].name)!=0)(printf(〃序号:%d\t”,books[n].id);printf(〃书名:%s\t”,books[n].name);printf(〃作者:%s\t”,books[n].author);printf(〃出版社:%s\t”,books[n].publish);printf(〃存数:%d\t”,books[n].store);printf(〃总数:%d\n”,books[n].total);i=0;)}if(i==1)printf("\n没有找到相关记录.\n");return-1;)voidbook_out(void){intn,s,l,d;system("cls");page_title(〃借阅图书”);if((n=search_book())!=-1&&books[n].store>0){printf(〃请输入借书证序号:〃);scanf("%d",&s);printf(〃请输入可借天数:〃);scanf(〃%d〃,&d);for(l=0;l<10;l++){if(books[n].usr[l]==0){books[n].usr[l]=s;books[n].days[l]=d;break;}}books[n].store--;}if(n!=-1&&books[n].store==0)printf(〃此书已经全部借出.\n");return_confirm();}voidbook_in(void){intn,s,l;system("cls");page_title(〃归还图书”);if((n=search_book())!=-1&&books[n].store<books[n].total){printf(〃借阅者图书证列表:\n");for(l=0;l<10;l++)if(books[n].usr[l]!=0)printf("[%d]-%d^\n",books[n].usr[l],books[n].days[l]);printf(〃请输入借书证序号:〃);scanf("%d",&s);for(l=0;l<10;l++){if(books[n].usr[l]==s){books[n].usr[l]=0;books[n].days[l]=0;break;}}books[n].store++;}if(n!=-1&&books[n].store==books[n].total)printf(〃全部入藏.\口〃);return_confirm();}voidbook_add(void){intn;system(〃cls〃);page_title(〃注册新书”);for(n=0;n<100;n++)if(books[n].id==0)break;printf(〃序号:“);scanf("%d”,&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 禽类罐头在国际市场的营销策略考核试卷
- 数据处理技巧试题及答案
- 货物运输合同与责任保险考核试卷
- 学习数据库在微服务中的应用模式试题及答案
- 三级计算机嵌入式考试科目调整分析试题及答案
- 公路桥梁设计相关试题及答案
- 全方向掌握公路工程执照考试试题及答案
- 公路工程质量验收标准考题及答案
- 建设安全网络环境试题及答案
- 石材质量鉴别技巧考核试卷
- 《父亲》音乐课件
- 护理管理pdca的课件
- 客户服务与问题解决技巧培训
- 腾讯云安全运维
- (材料)综合物性测量系统
- 土壤农化分析实验智慧树知到课后章节答案2023年下甘肃农业大学
- 人教版八年级《竹竿舞》评课稿
- 往生荐亡功德文疏教学教材
- 有机植物生产中允许使用的投入品
- 储罐脚手架搭设方案
- 教学茶树植物保护茶树常见害虫及防治
评论
0/150
提交评论