1、武汉工商学院信息工程学院项目名称:图书信息管理系统学生姓名: 学 号: 班 级:15计科实验班 指导教师: 2016年3月23日目 录1. 实验的目的和意义11.1目的11.2意义12 系统功能的描述22.1实验功能设计22.2实验功能描述23 系统存储结构设计与描述5N=(i-1);4 系统功能实现与算法描述54.1信息查询功能64.2信息排序功能64.3 图书信息删除功能74.4图书信息修改功能85 系统性能测试105.1菜单函数的功能测试105.2录入函数的功能测试105.3浏览函数的功能测试115.4查询函数的功能测试125.5排序函数的功能测试135.6修改函数的功能实现145.7删
2、除函数的功能测试145.8添加图书信息功能测试155.9结束函数的功能测试166 设计小结17致谢18参考文献19附录20程序设计基础课程设计报告1. 实验的目的和意义1.1目的随着人们生活水平的日益提高,人们对文化的需求也越来越大。在人们的业余生活中,越来越多的人乐于享受文字给生活带来的乐趣。而图书也是学生的学习过程中必不可少的。而本项目旨在研发一个图书馆的管理系统,实现图书馆的信息化管理。在方便读者查询借阅图书的同时,方便图书管理员对图书进行管理。对于用户来说,操作简便易行,本系统提供了按照isbn,书名,作者,出版单位,出版年份,价格6种方式的查询书目操作。本系统提供添加书目,删除书目,
3、编辑书目信息等操作,方便后台管理员对所有图书进行管理。1.2意义随着社会的发展,传统的图书管理方式已不再符合现代社会需求,相比传统繁琐复杂的图书借出与还入方式,用简单的C语言程序代码编写的图书管理系统就可以更简单的实现图书信息录入,修改,删除,查询和浏览以及保存等功能,让用户使用是更易上手,使得复杂且大量的图书管理操作更容易使用。2 系统功能的描述图书管理系统具有图书信息的录入保存,信息导入,浏览,查询和图书信息的排序,删除等功能。2.1实验功能设计图书信息管理系统开发图书信息包括:书名、作者名、ISBN号、出版单位、出版年份、价格等。试设计一个图书信息管理系统,使之能提供以下功能:(1)系统
4、以菜单方式工作;(2)图书信息录入功能(图书信息用文件保存);(3)图书信息浏览功能;(4)查询和排序功能:(至少一种查询方式)1)按书名查询;2)按作者名查询;3)按出版社查询;4)按出版年份查询。(5)修改图书信息:对某图书信息进行修改(6)删除图书:将某图书的信息删除(7)退出根据题目所给问题,要求所编程序要实现以下功能:图书信息录入模块的实现;系统中文件的保存和读写功能的实现;图书信息的浏览;图书信息的查询。分为按图书书名查询,按作者名查询,按isbn编号查询以及按出版单位查询。图书信息按年份排序,修改的功能。对某本图书的删除功能以及退出功能。系统菜单的的设计。对程序的设计和检测的功能
5、。2.2实验功能描述程序运行以后就会显示菜单界面:图书管理系统:1.图书信息录入 2.图书信息浏览 3.图书信息查询 4.图书信息排序 5.修改图书信息 6.删除图书 7.退出系统如下是功能模块:图2-1 功能模块图(1) 图书信息录入 进入系统后会显示菜单界面,选择图书信息录入功能后会出现请输入需要录入信息的图书数量,从键盘输入需录入信息的图书数量后就开始录入图书信息,录入结束后会自动保存入已创建的文件里,然后会出现提示:返回主菜单请选择1,退出请选择0,根据提示选择退出系统或返回主菜单。(2)图书信息浏览功能 进入系统后会显示菜单界面,根据菜单选择2图书信息浏览功能,然后就会依次显示出图书
6、的书名,作者名,isbn编号,出版单位,出版年份和图书价格,若先前已经录入过图书信息则会依次显示出图书信息,若未录入过则会显示空白,结束后会出现返回主菜单或退出选项,根据提示进行退出或返回主菜单操作。(3)图书信息查询功能 进入主菜单后选择3信息查询功能,然后界面上会显示查询方式:1按书名查询 2按作者名查询 3按isbn编号查询 4按出版单位查询,根据选项选择查询方式。若已找到此图书就会显示此图书的书名,作者名,isbn编号,出版单位,出版年份和价格;若未找到此图书,界面会显示未找到此图书的相关信息。若要继续修改请按y否则请按n。结束后会显示返回主菜单和退出系统选项,根据选项进行退出或返回主
7、菜单操作。(4)图书排序功能 进入主菜单后选择4图书信息排序功能,菜单界面显示排序方式(从小到大):1按作者名排序 2按isbn编号查询 3按出版年份查询,选择排序方式后开始排序操作,完成后显示出排序后所有的图书信息。结束后会显示返回主菜单和退出系统选项,根据选项进行退出或返回主菜单操作。(5)修改图书信息功能 进入主菜单后选择5图书信息修改功能,菜单界面会显示“请输入你要修改的图书的书名或isbn编号”,若在已录入的图书信息中找到此图书,则会显示“已找到此图书的相关信息!”,若未找到则会显示“未找到此书的相关信息!”然后显示此书的书名,作者名,isbn编号,出版单位,出版年份,价格信息。在完
8、成此操作后界面会显示出一个选项菜单,根据选项选择需要修改的图书信息后根据提示输入修改后的图书信息,在完成修改后,会输出修改后的全部的图书信息。若要继续修改请按y,结束修改请按n.结束后根据提示选择返回主菜单或者退出。(6)删除图书功能 进入主菜单候选择6删除图书功能,运行界面会显示出删除前已录入的所有图书信息,根据提示输入需要被删除的图书书名,若找到此图书则显示已找到此书的相关信息并输出其所有信息,若未找到则显示未找到此书的相关信息。完成删除操作后,显示出删除后所有图书信息。结束后根据提示选择退出系统或返回主菜单。添加图书信息功能 进入主菜单后选择信息添加功能,然后输入需要添加信息的图书数量,
9、选择后依次输入图书的信息。结束后若要继续添加请按y,否则请按n。结束后若要返回主菜单请按y,退出系统请按任意键。(7)退出系统功能 选择退出系统后,运行界面显示出“谢谢使用!”后退出系统。3 系统存储结构设计与描述1) 系统需要存储的信息包含图书书名、图书作者名、isbn编号、出版单位、出版年份、图书价格,其中图书书名、图书作者名、isbn编号、出版单位信息均使用字符数组类型存放,出版年份信息使用int类型存放,图书价格信息使用float类型存放; 2 )系统设计的结构体定义如下: struct bookchar shuming20; /图书书名char name20; /图书作者名char
10、isbn20; /图书isbn编号char chubandanwei20; /出版单位int year; /出版年份float prize; /图书价格stuM;系统定义了一个M,己可录入的最大的信息量。#define M 100003 )保存函数 save()将已录入的所有图书信息从内存保存到硬盘中保存在book.txt文本里。for(i=0;iN;i+)fwrite(&stui,sizeof(struct book),1,fp);fclose(fp);4 )导入函数 load()将图书信息从硬盘导入到内存中以进行其他操作。while (!feof(fp)fread(&stui,sizeof
11、(struct book),1,fp);i+;fclose(fp);N=(i-1);4 系统功能实现与算法描述4.1信息查询功能 运用for循环,若找到此书的相关信息就显示已经在到相关图书并输出该图书的相关信息,若未找到就能继续查找直到循环结束,若循环结束后还未找到相关图书就显示未找到相关图书。结束后选择是否继续修改。图4-1 查询流程图4.2信息排序功能 定义一个结构体中间变量,用冒泡排序两层for循环,第二层循环内加if判断语句,若顺序相反(从小到大排序)就进行变量之间的交换。图4-2 排序流程图4.3 图书信息删除功能 先查找要删除的图书信息,若找到后选择是否进行删除操作,若进行删除操作
12、就用后一本图书的信息覆盖前一本图书信息,若不进行删除就退出,若未找到也退出程序。图4-3 删除流程图4.4图书信息修改功能 先找到要修改的图书信息,然后选择要修改的图书信息类型,修改后进行保存,若要继续修改就按Y否则就按N结束。图4-4 修改流程图5 系统性能测试5.1菜单函数的功能测试进入系统后显示菜单。图5-1 菜单功能测试图5.2录入函数的功能测试显示菜单后选择1图书信息录入功能,输入需要录入信息的图书数量,然后进行图书信息的录入。如图5-2所示图5-2 录入功能测试图5.3浏览函数的功能测试显示菜单后选则2图书信息浏览功能,输出先前已经录入的图书信息。图5-3 浏览功能测试图5.4查询
13、函数的功能测试显示菜单后选择图书信息查询功能,然后在四种查询方式中任选一种方式并输入序号,然后输入与序号对应的要查询的图书信息,若找到此图书会显示已找到此图书并输出该图书的相关信息,若未找到提示输入错误。结束后若要继续查询请按y,否则请按n。如图5-4-1示找到图书信息。图5-4 查询功能测试图 如图5-5示若输入错误则显示未找到相关书籍。 图5-5查询错误提示5.5排序函数的功能测试显示菜单后选择图书信息排序功能。然后在按作者名排序,按isbn编号排序,按出版年份排序这三种排序方式中任选一种,然后输出排序后的所有图书信息(按从小到大的顺序)。图5-6 排序功能测试图5.6修改函数的功能实现显
14、示菜单后选择图书信息修改功能,输入你要修改的图书的书名或isbn编号,若找到此书则显示已找到此书的相关信息并输出该图书的所有信息,否则则显示未找到此术的相关信息!然后选择修改图书信息的类型,在输入修改后的图书信息,修改完成后输出所有的图书信息。若要继续修改请按y,结束修改请按n。如图所示图5-7 修改功能测试图5.7删除函数的功能测试显示菜单后选择图书信息删除功能,输出删除前所有的图书信息,然后输入需要删除信息的图书书名,若找到此书则显示已找到此书的相关信息,否则就显示未找到。若确认删除就按Y否则就按N,删除完成后显示删除后所有的图书信息!如图5-7-1所示图5-8 删除功能测试图若输入错误则
15、会提示,输入有误。如下图所示 图5-9 删除错误提示5.8添加图书信息功能测试 显示菜单后选择图书信息添加功能,输入需要添加信息的图书数量,然后依次添加入信息。如下图所示 图510 信息添加功能测试5.9结束函数的功能测试显示菜单后选择退出功能,显示“谢谢使用!”。图5-10修改功能测试图6 设计小结用c语言编写的图书管理系统实现了图书信息的录入保存,导入浏览,查询,排序,删除,修改等功能,是图书管理操作的方便快捷化,是复杂的工作变得简单 。在编写图书管理系统代码的过程中,我遇到了很多问题:1保存和导入函数的运用上存在很多问题,首先是对保存和导入函数的用法和理解含糊不清,其次就对何时需要调用保
16、存和导入函数不太清楚。在查阅一些书籍和案例后,清楚了如何使用保存和导入函数。2 对结构体变量定义和结构体之间的信息交换不太熟悉,例如在对图书信息进行排序的过程中需要对整个结构体的信息进行交换,需定义一个新的有相同结的构体类型名的结构体变量才能进行结构体信息之间的交换。且交换的顺序十分重要。在请教老师后和查阅相关书籍后,加深了我对结构体的认识和理解。3 对于一些细节上的问题不够细心。例如一条语句后的分号,定义的变量类型,变量的使用,函数调用中实参和形参的类型等。通过一次又一次对程序的测试,最后解决了这些细节上的问题。这次的课程设计巩固了我对c语言课程学习,加深了我对一些程序算法的理解。并认识到程
17、序设计并不只是对程序代码设计能力的检测,更是对程序报告编写能力考验。致谢本次的课程设计实验中我遇到很到问题,不管是细节问题还是一些算法问题都让我耗费了一定的时间。在解决问题的过程中,周围的老师和同学都给与了我很大的帮助。通过老师和同学的指导和帮助一些知识点薄弱的地方都得到了加强。非常感谢老师和同学的帮助,让我能够准确完成课程设计报告。通过这次课程设计实验我了解到团队合作的重要性,不论是在以后的学习中还是将来的工作中我都会谨记图解合作和不耻下问的重要性。参考文献1 胡成松,黄玉兰,李文红.C语言程序设计M.北京:机械工业出版社,2015.82 周红,苏晓光.C语言程序设计实用教程M.北京:人民邮
18、电出版社,2013.113 王新,孙雷.C语言课程设计M. 北京:清华大学出版社, 2016:142-147附录#include #include #include int mean();void save(int);void load();void input();void look();void search();void paixu();void xiugai();void shuming1(char ch20);void name1(char ch20);void isbn1(char ch20);void cbdw(char ch20);void year1(int a);void
19、prize1(float a);void back();void add();void xuanxiang();#define M 10000int N=0;struct bookchar shuming20; /图书书名char name20; /图书作者名char isbn20; /图书isbn编号char chubandanwei20; /出版单位int year; /出版年份float prize; /图书价格stuM;int mean()int choose;printf(-图书管理系统-n);printf(=n);printf(t(1) 图书信息录入n);printf(t(2) 图
20、书信息浏览n);printf(t(3) 图书信息查询n);printf(t(4) 图书信息排序n);printf(t(5) 修改图书信息n);printf(t(6) 删除图书信息n);printf(t(7) 添加图书信息n);printf(t(8) 退出程序n);printf(=n);printf(请输入你的选择:t);scanf(%d,&choose);printf(n);return choose;void save(int N) FILE *fp;int i;if(fp=fopen(book.txt,wb)=NULL)printf(cannot open file n);return;f
21、or(i=0;iN;i+)fwrite(&stui,sizeof(struct book),1,fp);fclose(fp);void load() FILE*fp;int i=0;if(fp=fopen(book.txt,rb)=NULL)printf(cannot open infilen);exit(0);while (!feof(fp)fread(&stui,sizeof(struct book),1,fp);i+;fclose(fp);N=(i-1);void input()int i;printf(请输入需要录入信息的图书数量:t);scanf(%d,&N);printf(n);f
22、or(i=0;iN;i+)printf(请输入第%d本图书的书名: ,i+1);scanf(%s,stui.shuming);printf(请输入第%d本图书的作者名: ,i+1);scanf(%s,stui.name);printf(请输入第%d本图书的isbn编号: ,i+1);scanf(%s,&stui.isbn); printf(请输入第%d本图书的出版单位: ,i+1);scanf(%s,stui.chubandanwei);printf(请输入第%d本图书的出版年份: ,i+1);scanf(%d,&stui.year);printf(请输入第%d本图书的价格: ,i+1);sc
23、anf(%f,&stui.prize);printf(n);save(N);void look()int i;load(); printf(书名t作者名tisbn编号t出版单位t出版年份t价格n); for(i=0;iN;i+)printf(%st%st%stt%stt%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.chubandanwei,stui.year,stui.prize);void search() int i,a,flog=0; printf(查询方式:nt1. 按书名查询tt2.按作者名查询nt3.按isbn编号查询t4.按出版单
24、位查询n); printf(n请输入查询方式: ); scanf(%d,&a); switch(a) case 1: char ch120; printf(请输入需要查找的书名: ); scanf(%s,ch1); printf(n); load(); for(i=0;iN;i+) if(strcmp(stui.shuming,ch1)=0) printf(已找到相关图书!n); printf(书名t作者名tisbn编号t出版单位t出版年份t价格n); printf(%st%st%stt%stt%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.ch
25、ubandanwei,stui.year,stui.prize); flog=1; break; case 2: char ch220; printf(请输入需要查找的作者名: ); scanf(%s,ch2); printf(n); load(); for(i=0;iN;i+) if(strcmp(stui.name,ch2)=0) printf(已找到相关图书!n); printf(n书名t作者名tisbn编号t出版单位t出版年份t价格n); printf(%st%st%stt%st%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.chuban
26、danwei,stui.year,stui.prize); flog=1; break; case 3: char ch320; printf(请输入需要查找的isbn编号: ); scanf(%s,ch3); printf(n); load(); for(i=0;iN;i+) if(strcmp(stui.isbn,ch3)=0) printf(已找到相关图书!n); printf(n书名t作者名tisbn编号t出版单位t出版年份t价格n); printf(%st%st%stt%st%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.chuband
27、anwei,stui.year,stui.prize); flog=1; break; case 4: char ch420; printf(请输入需要查找的出版单位: ); scanf(%s,ch4); printf(n); load(); for(i=0;iN;i+) if(strcmp(stui.chubandanwei,ch4)=0) printf(已找到相关图书!n); printf(n书名t作者名tisbn编号t出版单位t出版年份t价格n); printf(%st%st%stt%st%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.ch
28、ubandanwei,stui.year,stui.prize); flog=1; break; if(flog=0) printf(未找到该作者的相关图书!n);void paixu()int i,j,n;struct book temp;/temp为结构体变量printf(n排序方式(从小到大):nt1.按作者名排序 2.按isbn编号排序 3.按出版年份排序n);printf(n请输入你的选择:);scanf(%d,&n);switch(n)case 1:load(); for(i=0;iN;i+)for(j=0;j0)temp=stuj;stuj=stuj+1; stuj+1=temp
29、;printf(排序后的所有图书信息为:n);for(i=0;iN;i+)printf(%st%st%stt%st%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.chubandanwei,stui.year,stui.prize); break;case 2:load();for(i=0;iN;i+)for(j=0;j0)temp=stuj;stuj=stuj+1; stuj+1=temp;printf(排序后的所有图书信息为:n);for(i=0;iN;i+) printf(%st%st%stt%st%dtt%.2fn,stui.shuming
30、,stui.name,stui.isbn,stui.chubandanwei,stui.year,stui.prize);break;case 3:load();for(i=0;iN;i+)for(j=0;jstuj+1.year)temp=stuj;stuj=stuj+1; stuj+1=temp;printf(排序后的所有图书信息为:n);for(i=0;iN;i+) printf(%st%st%stt%st%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.chubandanwei,stui.year,stui.prize);break;voi
31、d xiugai() int i,j,flog=0;char ch120,ch;printf(请输入你要修改的书籍的isbn编号:t);scanf(%s,ch1);printf(n);load();for(i=0;iN;i+)if(strcmp(stui.isbn,ch1)=0)printf(*n);printf(已找到该图书的相关信息!n);flog=1;printf(n书名t作者名tisbn编号t出版单位t出版年份t价格n);printf(%st%st%stt%stt%dtt%.2fn,stui.shuming,stui.name,stui.isbn,stui.chubandanwei,s
32、tui.year,stui.prize);printf(n请选择你要修改的图书信息:n1.书名t2.作者名t3.isbn编号t4.出版单位t5.出版年份t6.价格n);printf(*n);scanf(%d,&j);switch(j)case 1:shuming1(stui.shuming);break;case 2:name1(stui.name);break;case 5:year1(stui.year);break;case 6:prize1(stui.prize);break;case 3:isbn1(stui.isbn);break;case 4:cbdw(stui.chubanda
33、nwei);break;default:printf(输入错误n);break;if(flog=0)printf(未找到该图书的相关信息!n);printf(n继续修改请按y,结束请按n,请输入你的选择: );scanf(%s,ch);if(ch=y|ch=Y)xiugai();void shuming1(char ch20) char ch120; printf(请输入修改后的书名:n); scanf(%s,ch1); strcpy(ch,ch1); save(N); look();void name1(char ch20)char ch120;printf(请输入修改后的作者名:n);sc
34、anf(%s,ch1);strcpy(ch,ch1);save(N);look();void isbn1(char ch20)char ch120;printf(请输入修改后的isbn编号:n);scanf(%s,ch1);strcpy(ch,ch1);save(N);look();void cbdw(char ch20)char ch120;printf(请输入修改后的出版单位:n);scanf(%s,ch1);strcpy(ch,ch1);save(N);look();void year1(int a)int n;printf(请输入修改后的出版年份:n);scanf(%d,&n);a=n
35、;save(N);look();void prize1(float a)float n;printf(请输入修改后的图书价格:n);scanf(%f,&n);a=n;save(N);look();void shanchu()int i,n=0;int flog=1;char ch50,ch1;printf(删除前所有图书信息为:n);look();printf(n);printf(请输入要删除的图书的书名: );scanf(%s,ch);printf(n);for(i=0;iN;i+) if(strcmp(ch,stui.shuming)=0) flog=0;n=i; printf(已找到该书
36、籍的信息!n); if(flog=1) printf(未找到该书籍的相关信息!n); else printf(确认删除请按y,否则请按n: ); scanf(%s,&ch1); printf(n); if(ch1=y|ch1=Y) for(n;nN-1;n+) stun=stun+1; save(N-1); printf(删除后的所有图书信息为:n); look(); void quit()printf(谢谢使用!n); void back()char ch;printf(n);printf(若要返回主菜单请按y,退出请按任意键: );scanf(%s,&ch);printf(n);if(ch
37、=y|ch=Y)system(cls);xuanxiang();void add()int i,m;printf(请输入添加信息的图书数量:n);scanf(%d,&m);for(i=N;iN+m;i+)printf(请输入第%d本图书的书名: ,i+1);scanf(%s,stui.shuming);printf(请输入第%d本图书的作者名: ,i+1);scanf(%s,stui.name);printf(请输入第%d本图书的isbn编号: ,i+1);scanf(%s,&stui.isbn); printf(请输入第%d本图书的出版单位: ,i+1);scanf(%s,stui.chubandanwei);printf(请输入第%d本图书的出版年份: ,i+1);scanf(%d,&stui.year);printf(请输入第%d本图书的价格: ,i+1);scanf(%f,&stui.prize);printf(n);N=N+m;save(N);void xuanxiang() switch(mean() case 1:input()