《最新C语言图书管理系统课设报告.docx》由会员分享,可在线阅读,更多相关《最新C语言图书管理系统课设报告.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC语言图书管理系统课设报告C语言图书管理系统课设报告程序设计语言-C课程设计报告 题目:图书管理系统 班级: 学号: 姓名:2016年5月12日-目录1. 程序总体功能2. 新增功能3. 函数调用关系4. 主要算法流程图1. 排序算法流程图2. 插入算法流程图5. 过程难点及解决方法6. 附录:源程序一:程序总体功能本图书管理系统可以实现图书管理的基本功能,包括图书信
2、息的录入、输出、排序、删除、查找及批量导入/导出等。图书属性信息包括书号、书名、第一作者、版次、出版年信息。二:新增功能1. 数据校验功能:即在程序运行之前对输入数据的有效性进行判断,若输入数据不合逻辑则输出“数据输入有误,请核实后再输”不再执行后续程序,以此增加程序运行的效率。在本课程设计的删除记录功能中,按照要求输入要删除图书的书名后要接着输入书号来删除图书,若所输入书号不在正确书号范围内(书号输入错误),将直接终止程序,不再执行后续的删除程序。三:函数调用关系函数说明:0.退出系统1.数据输入函数:int Input(Bookinfo books,int n)2.数据输出函数:void
3、Display(Bookinfo books,int n)3.删除记录函数(1):int Delete(Bookinfo books,int n,char *book) 删除记录函数(2):int Delete_a_record(Bookinfo books,int n)4.排序函数:void Sort_by_name(Bookinfo books,int n)5.有序插入函数(1):int Insert(Bookinfo books,int n, Bookinfo *s) 有序插入函数(2):int Insert_a_record(Bookinfo books,int n)6. 数据查询函数
4、(1):int Query(Bookinfo books,int n,char *book) 数据查询函数(2):void Query_a_record(Bookinfo books,int n)7. 从文件导入数据函数:int AddfromText(Bookinfo books,int n)8. 记录数据写入文件函数:void WritetoText(Bookinfo books,int n)9. 主菜单函数:int menu_select()10. 主函数:void main()函数调用关系:(箭头指向被调用函数)数据输入函数11主函数10 数据输出函数22循环调用 删除记录函数3(1)
5、删除记录函数3(2) 3 排序函数4 4主菜单函数9有序插入函数5(1)有序插入函数5(2) 5 数据查询函数6(1)数据查询函数6(2) 6 从文件导入数据函数7 7 将记录数据写入文件函数8 8 退出系统 0 四:主要算法流程图1. 排序算法(数组按书名升序排序)已有结构体数组Bookinfo books及数组元素个数n;定义整型量i,j,p;定义结构体变量 l;开始 i=0; j=0;p=0;否 in-1是p=ij=i+1 否 j=n-1 是 是 strcmp(booksk.book,(*s).book)0 否 booksk+1=(*s) booksk+1=booksk; k=k-1 r
6、eturn (n+1) 五:过程难点及解决方法1. 结构体定义及指向结构体变量的指针定义是新尝试:上机指导书用typedef 定义了新的结构体类型,而这种定义方式上课时未讲,需要重新学习这部分知识,并尝试使用。同时,指向结构体变量的指针也是新学习的知识,并首次使用。2. 变量的作用域及存储类别需严格区分:结构体数组中的元素个数n(主函数中用m接收函数返回的n值)需要在程序整个运行期间始终存在,而在一开始运行程序期间未意识到这个问题,把n简单地定义成int型,导致程序运行始终错误。在多次尝试后才意识到调用不同函数时,变量n应该保留上次函数调用结束时的值,于是把n定义成全局变量,m定义成静态局部变
7、量,问题得以解决。3. 从文件批量导入数据多次失败:自己首先新建了“Dictory”文本文档并输入了图书信息,然而从文本文档导入数据时却总是得到一堆乱码,而不是正确的图书信息。最后经过和同学的讨论才得以找到原因,原来是因为文本文档中的数据之间有空格,而写scanf函数时却忽略了空格。调整之后,程序终于得以正常运行。4. 函数之间调用关系复杂:本程序调用的函数众多,函数中符号众多,写函数需要非常细心认真。也正因如此,我的程序在编译阶段出现了几十项错误,其中“C语言课设图书管理系统.cpp(174) : error C2601: Delete : local function definition
8、s are illegal”这条错误出现10多次。查阅资料后才意识到这是由我编写的函数程序中花括号缺失造成的,排查后才得以解决。这只是众多编写过程中问题及难点的部分展示,其他的问题也多是由于不细心造成的,此处不再赘述。六:附录:源程序/图书管理系统 #include#include#include#includetypedef structchar ISBN10; char book30;char author20;int edition;char press50;int year;Bookinfo; /定义结构体数组Bookinfo books500; /定义含500个变量的结构体数组存放图
9、书信息int menu_select();/显示主菜单int Input(Bookinfo books,int n); /1.数据输入void Display(Bookinfo books,int n); /2.输出数据int Delete_a_record(Bookinfo books,int n); /3.删除记录void Sort_by_name(Bookinfo books,int n); /4.排序int Insert_a_record(Bookinfo books,int n); /5.有序插入void Query_a_record(Bookinfo books,int n); /
10、6.查询数据int AddfromText(Bookinfo books,int n); /7.从文件中整批输入数据void WritetoText(Bookinfo books,int n); /8.将记录写到文件static int n=0;void main() /主函数static int m=0; /定义静态局部变量for(; ;)switch(menu_select()case 1:m=Input(books,n) ;printf(现在共有%d本书n,m);system(pause);break;case 2:Display(books,m);system(pause);break
11、;case 3:Delete_a_record(books,m) ;system(pause);break;case 4:Sort_by_name(books,m);system(pause);break; case 5: m=Insert_a_record(books,m); printf(现在共有%d本书n,m);system(pause);break;case 6:Query_a_record(books,m);system(pause);break;case 7:m=AddfromText(books,m);printf(现在共有%d本书n,m);system(pause);break
12、;case 8:WritetoText(books,m);system(pause);break;case 0:printf(再见!欢迎再次光临图书管理系统n);system(pause);exit(0);int menu_select() /显示主菜单程序char c;dosystem(cls);printf(n);printf(n);printf(n);printf(*/欢迎光临图书管理系统V30.0+/*n);printf(*designed by lichenyang*n);printf(*Put into use in May 2016*n);printf(1. Input reco
13、rdsn);printf(2. Display All Recordsn);printf(3. Delete a Recordn);printf(4. Sortn);printf(5. Insert a Recordn);printf(6. Queryn);printf(7. Add Record from a Text Filen);printf(n);printf(n);printf(n);printf(8. Write to a Text Filen);printf(0. Quitn);printf(Give your choice: n);c=getchar();while(c8);r
14、eturn(c-0);int Input(Bookinfo books,int n) /1.数据输入函数 char c; int i=0; printf(please input the information of a book:n);printf(The information of a book includes its ISBN,name,author,edition,press,year)n);/版本请输入数字for(n=0;c!=e;n+,i+)scanf(%s%s%s%d%s%d,booksi.ISBN,booksi.book,booksi.author,&booksi.edit
15、ion,booksi.press,&booksi.year);printf(Now you can input e to stop or coutinue to input the informationn);getchar();c=getchar();printf(输入数据已终止!n); return n;void Display(Bookinfo books,int n) /2.数据输出函数 int i;char c;c=a; /赋初值for(i=0;in&c!=e;i+)printf(%st%stt%st%dt%st%dn,booksi.ISBN,booksi.book,booksi.a
16、uthor,booksi.edition,booksi.press,booksi.year);if(i%10=0&i!=0)printf(press enter to continue or input e to stopn); getchar(); c=getchar();system(pause); int Delete(Bookinfo books,int n,char *book) /3.1.删除记录被调用函数int i;int j=-1;/用于后续判断s是否输入正确char c;char s10;printf(以下是所有同名图书n);for(i=0;in;i+)if(strcmp(b
17、ook,booksi.book)=0)printf(%s%s%s%d%s%dn,booksi.ISBN,booksi.book,booksi.author,booksi.edition,booksi.press,booksi.year);printf(input the ISBN of the book you want to delete!n);scanf(%s,s);printf(确认删除吗?(输入“Y”执行删除程序或者按任意键退出删除)n);getchar();c=getchar();if(c=y|c=Y)for(i=0;in;i+)if(strcmp(s,booksi.ISBN)=0)
18、j=i;break;if(j!=i)printf(数据输入有误,请核实后再输n);elsefor(;jn;j+)booksj=booksj+1;printf(删除数据成功!n);return(n-1);else return(n);int Delete_a_record(Bookinfo books,int n) /3.2.删除记录char b30;char *book=b;char c;int m;printf(please input the name of a book you want to delete:n); scanf(%s,b);printf(确认删除吗?(输入“Y”执行删除程
19、序或者按任意键退出删除)n);getchar();c=getchar();if(c=y|c=Y)m=Delete(books,n,book);return(m); void Sort_by_name(Bookinfo books,int n) /4.按照书名升序排列printf(已按照书名升序排列,返回2查看n);int i,j,p;Bookinfo l;for(i=0;in-1;i+)p=i;for(j=i+1;j=-1;k-)if(strcmp(booksk.book,(*s).book)=-1)n=n+1;return(n);int Insert_a_record(Bookinfo bo
20、oks,int n) /5.2.输入待插入的图书信息,调用Insert函数Bookinfo s;Bookinfo *p; /定义指向结构体变量的指针p=&s;int l;printf(please input the information of a book:n); printf(Theinformationof a book includes its ISBN,name,author,edition,press,year)n);scanf(%s%s%s%d%s%d,s.ISBN,s.book,s.author,&s.edition,s.press,&s.year); l=Insert(bo
21、oks,n,p); /函数调用printf(插入数据成功!n);printf(可重新返回5插入数据n);return(l);int Query(Bookinfo books,int n,char *book) /6.1.查询图书数据的被调用函数int i,j;for(i=0,j=0;i=0;p-) q=&sp; n=Insert(books,n,q); /结构体数组名作函数参数 printf(从文件输入数据并有序插入成功!n); fclose(fp);return (n);void WritetoText(Bookinfo books,int n) /8.将数组记录全部写入文件FILE *fp;int i=0;printf(即将把数据写入文件,请稍后.n);fp=fopen(WritetoText.txt,w);if(fp=NULL)printf(创建文件失败!n);exit(1); for(;in;i+)fprintf(fp,%st%st%st%dt%st%dn,booksi.ISBN,booksi.book,booksi.author,booksi.edition,booksi.press,booksi.year);printf(数据写入文件成功!请到文件中查看数据!n); fclose(fp);