《基于c语言实现的图书管理系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《基于c语言实现的图书管理系统课程设计报告.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、河南工业大学C语言课程设计报告20212021学年第2学期课 程:C语言课程设计课程设计名称:图书管理系统姓 名:晁永兵学 号:202116040220学 院:信息科学与工程学院专 业:软件工程班 级:2班 2012年05月04日一、需求分析为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书此管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的几乎所有功能,包括查询、添加、删除、修改图书信息,以及对图书信息的存档、读取、排序。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用
2、户的选择来进行各种处理,并且在此过程中能够尽可能的处理用户使用过程中可能出现的异常情况。图书信息包括作者名、书名、出版社、出版时间、图书编号、价格、借书人姓名、借书人性别、借书人学号。图书信息的录入和显示要求有一定的标准格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等根本操作。整个程序实现链表操作,对图书信息的操作逐个地进行。二、算法设计:1设计思想:整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯穿。进一步加深、稳固了所学的专业的根本理论知识,培
3、养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。 2设计表示:(1)整个系统除了主函数外,另外还有各种功能子函数,利用循环语句do-while()和选择语句switch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。主函数中首先从文件读取信息到链表中,以用于后面其他函数的操作。总体主要实现了图书的录入、存储、查询、添加、删除、修改、排序等功能。2在主函数中选择管理员登录或者学生登录,并且输入正确密码后才可以进入系统,假设连续3次输入密码错误将会被强制退出。(3) Create_Boo
4、ks_Doc();这是一个指针函数,它主要实现了链表的创立,它返回的时一个单向链表的头。其他函数调用时只需调用它返回的头即可。Clear();此为清屏操作,在运行中可以随时将屏幕清空。 (4) Print_Book_Doc ();这个函数为链表的输出函数,把链表的头传给函数后,可以表格的形式输出整个链表的所有信息。、(5)save();这个函数为保存信息到文件的函数,使用时将链表的头传给函数,函数可将整个链表的所有信息存入到磁盘文件中。并覆盖掉源文件,以便以后调用。Read()这个函数为读取文件的函数,将文件中的数据读入链表中。 (7)search_book1();search_book2()
5、;search_book3();search_book4();search_book5();这五个函数为查询图书信息函数,它们分别按编号、书名、作者、借书人姓名、借书人学号进行查询。查询到信息后返回信息所在节点,查询不到那么返回空指针。(8)InsertDoc();Sorting_order1();Sorting_order2();DeleteDoc ();info_change ();这四个函数为功能函数,InsertDoc();添加图书信息、Sorting_order1();将图书按编号排序、Sorting_order2();将图书按价格排序、DeleteDoc ();删除图书信息、inf
6、o_change ();修改图书信息。调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。3结构体系设计:以下为局部流程图:图书管理系统主界面流程图图书管理系统退出系统登录学生登录管理员登录清屏操作图书信息新建图书信息添加图书信息删除图书信息浏览图书信息修改管理员幅员书管理系统管理员幅员书管理系统流程图图书信息排序图书信息查询图书查询系统主界面流程图按照图书号查询按照图书名查询按照图书作者查询按照借书人姓名查询 按照借书人学号查询退出查询图书查询系统主界面排序页面排序系统退出排序清屏操作按照图书编号排序按照图书价格排序5设计过程中的想法与程序中的缺乏:总的来说这个程序大致实现了题目的
7、要求,但是这套程序仍然存在着很多的问题与缺乏。比方,程序中主函数写的有点繁琐,有太多的嵌套,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些缺乏之处,提示信息不明确。还有就是没能做到模糊查询。这个系统主要是参照课本 通讯录模版编写的,同时也得到了老师和同学的一些帮助。我在做系统的过程中也遇到了很多问题,有的是知识缺乏,有的是考虑不够周全。事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。 我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改良的话,就是要改良一些算法,尽量把界面编写清楚,提示信息全面,方便易用。三、调
8、试与测试:上机操作局部截图系统主界面选择数字进入,退出系统选择1输入密码进入管理员版系统,然后出现功能菜单;选择1进入录入系统,录入后浏览;选择8进行清屏;由于版面原因,其他操作页面可以上机运行进行操作,在此就不再一一列出。四、小节:在这一个星期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。将理论和实践结合在一起,用先进的计算机工具方便人们的生活。C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。编写的程序从理论上来说并没有错,但一上机就问题不断。甚至有些课本上的知识照搬不变,也不能得到正
9、确的结果。有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。不管什么系统,只用运用到实际应用中,才具有现实意义。 所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。附录:源代码:#include#include#include#includestruct books_list char author20; /*作者名*/ char bookname20; /*
10、书名*/ char publisher20; /*出版单位*/ char pbtime15; /*出版时间*/ char booknum10; /*图书编号*/ float price; /*价格*/ char lendername20; /*借书人姓名*/ char lendersex10; /*借书人性别*/ char lendernum20; /*借书人学号*/ struct books_list * next; /*链表的指针域*/;/*清屏函数*/void Clear() system(cls);/*保存数据至文件*/void save(struct books_list * hea
11、d) struct books_list *p; FILE *fp; p=head; fp=fopen(f1.txt,w+); fprintf(fp,%20s%20s%20s%20s%20s%20f%20s%20s%20s,p-booknum,p-bookname,p-author,p-publisher,p-pbtime,p-price,p-lendername,p-lendersex,p-lendernum); while(p-next!= NULL) p=p-next; fprintf(fp,%20s%20s%20s%20s%20s%20f%20s%20s%20s,p-booknum,p
12、-bookname,p-author,p-publisher,p-pbtime,p-price,p-lendername,p-lendersex,p-lendernum); fclose(fp); printf(已将数据保存到 f1.txt 文件n);/*插入*/struct books_list * InsertDoc(struct books_list * head,struct books_list * book)char a;struct books_list * ptr,* p;p=head;ptr=book;if(head=NULL) head=ptr; head-next=NUL
13、L;else while(p-next!=NULL) p=p-next; p-next=ptr; ptr-next=NULL;printf(是否保存插入的图书信息?Y/N);getchar();scanf(%c,&a);if(a=Y|a=y) save(head);else printf(n未保存插入后数据!nn);return head;/*新建链表头节点*/struct books_list * Create_Books_Doc()struct books_list * head,*p;int size=sizeof(struct books_list);head=NULL; char f
14、lag=Y; while(flag=Y|flag=y) p=(struct books_list *)malloc(sizeof(struct books_list);/*开辟新空间,存入数据,添加进链表*/here0: printf(n 请输入图书编号:); getchar(); scanf(%s,p-booknum); printf(n 请输入图书书名:); getchar(); scanf(%s,p-bookname); printf(n 请输入图书作者名:); getchar(); scanf(%s,p-author); printf(n 请输入图书出版社:); getchar();
15、scanf(%s,p-publisher); printf(n 请输入图书出版时间:); getchar(); scanf(%s,p-pbtime); printf(n 请输入图书价格:); getchar(); if(scanf(%f,&p-price)!=1) printf(价格输入有误,请重新输入!); goto here0; printf(n 请输入借书人姓名:); getchar(); scanf(%s,p-lendername); printf(n 请输入借书人性别:); getchar(); scanf(%s,p-lendersex); printf(n 请输入借书人学号:);
16、getchar(); scanf(%s,p-lendernum); printf(n); head=InsertDoc(head,p); printf( 添加成功!); printf(n 继续添加(输入Y或y继续,否那么结束)?); getchar(); scanf(%c,&flag); printf(n); return head;/*修改操作*/void info_change(struct books_list * head) struct books_list * p; int panduan=0; char temp20,a; p=head; if(head=NULL) printf
17、( 图书库为空!n); else printf(请输入要修改图书的书名:); getchar(); scanf(%s,temp); while(p!=NULL) if(strcmp(p-bookname,temp)=0) printf(n 请输入修改后的图书编号:); getchar(); scanf(%s,p-booknum); printf(n 请输入修改后的图书书名:); getchar(); scanf(%s,p-bookname); printf(n 请输入修改后的图书作者名:); getchar(); scanf(%s,p-author); printf(n 请输入修改后的图书出版
18、社:); getchar(); scanf(%s,p-publisher); printf(n 请输入修改后的图书出版时间:); getchar(); scanf(%s,p-pbtime); printf(n 请输入修改后的图书价格:); getchar(); scanf(%f,&p-price); printf(n 请输入修改后的借书人姓名:); getchar(); scanf(%s,p-lendername); printf(n 请输入修改后的借书人性别:); getchar(); scanf(%s,p-lendersex); printf(n 请输入修改后的借书人学号:); getch
19、ar(); scanf(%s,p-lendernum); printf(n);getchar(); panduan=1; p=p-next; if(panduan=0) printf(n 没有此图书记录! nn); else printf(是否保存修改后的图书信息?Y/N); scanf(%c,&a); if(a=Y|a=y) save(head); else printf(n未保存修改后数据!nn); return;/*按照图书号查询*/void search_book1(struct books_list *head) int a=0; struct books_list * p; cha
20、r temp20; p=head; if(head=NULL) printf( 图书库为空!n); else printf(请输入您要查找图书的编号: ); getchar(); scanf(%s,temp); while(p!= NULL) if(strcmp(p-booknum,temp)=0) printf(n图书已找到!n); printf(n); printf(n); printf(图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n); printf(n); printf(%-6.6s%-10.10s%-10.10s%-10.10s%-12.12s
21、%-8.2f%-10.11s%-10.10s%-12.12sn,p-booknum,p-bookname,p-author,p-publisher,p-pbtime,p-price,p-lendername,p-lendersex,p-lendernum); printf(n); printf(n); a+; p=p-next; if(p=NULL&a=0) printf(n查询完毕,未找到所要查询的信息!n); return;/*按照图书名查询*/void search_book2(struct books_list *head) int a=0; struct books_list * p
22、; char temp20; p=head; if(head=NULL) printf( 图书库为空!n); else printf(请输入您要查找书本的名称: ); getchar(); scanf(%s,temp); while(p!= NULL) if(strcmp(p-bookname,temp)=0) printf(n图书已找到!n); printf(n); printf(n); printf(图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n); printf(n); printf(%-6.6s%-10.10s%-10.10s%-10.10s%-
23、12.12s%-8.2f%-10.11s%-10.10s%-12.12sn,p-booknum,p-bookname,p-author,p-publisher,p-pbtime,p-price,p-lendername,p-lendersex,p-lendernum); printf(n); printf(n); a+; p=p-next; if(p=NULL&a=0) printf(n查询完毕,未找到所要查询的信息!n); return;/*按照图书作者查询*/void search_book3(struct books_list *head) int a=0; struct books_l
24、ist * p; char temp20; p=head; if(head=NULL) printf( 图书库为空!n); else printf(请输入您要查找图书的作者: ); getchar(); scanf(%s,temp); while(p!= NULL) if(strcmp(p-author,temp)=0) printf(n图书已找到!n); printf(n); printf(n); printf(图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n); printf(n); printf(%-6.6s%-10.10s%-10.10s%-10.
25、10s%-12.12s%-8.2f%-10.11s%-10.10s%-12.12sn,p-booknum,p-bookname,p-author,p-publisher,p-pbtime,p-price,p-lendername,p-lendersex,p-lendernum); printf(n); printf(n); a+; p=p-next; if(p=NULL&a=0) printf(n查询完毕,未找到所要查询的信息!n); return;/*按照借书人姓名查询*/void search_book4(struct books_list *head) int a=0; struct b
26、ooks_list * p; char temp20; p=head; if(head=NULL) printf( 图书库为空!n); else printf(请输入您要查找的图书借书人姓名: ); getchar(); scanf(%s,temp); while(p!= NULL) if(strcmp(p-lendername,temp)=0) printf(n图书已找到!n); printf(n); printf(n); printf(图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n); printf(n); printf(%-6.6s%-10.10s
27、%-10.10s%-10.10s%-12.12s%-8.2f%-10.11s%-10.10s%-12.12sn,p-booknum,p-bookname,p-author,p-publisher,p-pbtime,p-price,p-lendername,p-lendersex,p-lendernum); printf(n); printf(n); a+; p=p-next; if(p=NULL&a=0) printf(n查询完毕,未找到所要查询的信息!n); return;/*按照借书人学号查询*/void search_book5(struct books_list *head) int
28、a=0; struct books_list * p; char temp20; p=head; if(head=NULL) printf( 图书库为空!n); else printf(请输入您要查找图书的借书人学号: ); getchar(); scanf(%s,temp); while(p!= NULL) if(strcmp(p-lendernum,temp)=0) printf(n图书已找到!n); printf(n); printf(n); printf(图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n); printf(n); printf(%-
29、6.6s%-10.10s%-10.10s%-10.10s%-12.12s%-8.2f%-10.11s%-10.10s%-12.12sn,p-booknum,p-bookname,p-author,p-publisher,p-pbtime,p-price,p-lendername,p-lendersex,p-lendernum); printf(n); printf(n); a+; p=p-next; if(p=NULL&a=0) printf(n查询完毕,未找到所要查询的信息!n); return;/*删除操作*/struct books_list * DeleteDoc(struct boo
30、ks_list * head)struct books_list * ptr1,* ptr2;int a=0;char b; char temp20; printf( 请输入您要删除的图书书名:); scanf(%s,temp);while(head!=NULL&strcmp(head-bookname,temp)=0) ptr2=head; head=head-next; free(ptr2); a=1; printf(已成功删除!);if(head=NULL) printf(n链表为空,无法删除!nn); return NULL;ptr1=head;ptr2=head-next;while
31、(ptr2!=NULL) if(strcmp(ptr2-bookname,temp)=0) ptr1-next=ptr2-next; free(ptr2); a=1; printf(已成功删除!); elseptr1=ptr2; ptr2=ptr1-next;if(ptr2=NULL&a=0) printf(n未找到要删除的数据!nn); goto here10;printf(是否保存删除后的图书信息?Y/N);getchar();scanf(%c,&b);if(b=Y|b=y) save(head);else printf(n未保存删除后数据!nn);here10:return head;/
32、*浏览*/void Print_Book_Doc(struct books_list * head)struct books_list * p1;if(head=NULL) printf(n链表为空,无法输出!nn); return; printf(n); printf(图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n); printf(n);for(p1=head;p1;p1=p1-next) printf(%-6.6s%-10.10s%-10.10s%-10.10s%-12.12s%-8.2f%-10.11s%-10.10s%-12.12sn,p1-b
33、ooknum,p1-bookname,p1-author,p1-publisher,p1-pbtime,p1-price,p1-lendername,p1-lendersex,p1-lendernum); printf(n);printf(n);/*读文件*/struct books_list * Read() struct books_list *p1,*head=NULL,*tail; FILE * fp; if(fp=fopen(f1.txt,r)=NULL) printf(File open error!n); printf(此时文件中无图书信息,请管理员先输入图书信息并进行保存。nn
34、); goto end; while(!feof(fp) p1=(struct books_list *)malloc(sizeof(struct books_list); fscanf(fp,%s%s%s%s%s%f%s%s%s,p1-booknum,p1-bookname,p1-author,p1-publisher,p1-pbtime,&p1-price,p1-lendername,p1-lendersex,p1-lendernum); if(head=NULL) head=p1; else tail-next=p1;tail=p1; tail-next=NULL; fclose(fp);end:return head;/*按照图书价格排序*/struct books_list * Sorting_or