c语言图书管理系统课程设计报告_第1页
c语言图书管理系统课程设计报告_第2页
c语言图书管理系统课程设计报告_第3页
c语言图书管理系统课程设计报告_第4页
c语言图书管理系统课程设计报告_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上河南工业大学C语言课程设计报告20112012学年第2学期课 程:C语言课程设计课程设计名称:图书管理系统姓 名:晁永兵学 号:0学 院:信息科学与工程学院专 业:软件工程班 级:2班 2012年05月04日一、需求分析为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书此管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的几乎所有功能,包括查询、添加、删除、修改图书信息,以及对图书信息的存档、读取、排序。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依

2、据用户的选择来进行各种处理,并且在此过程中能够尽可能的处理用户使用过程中可能出现的异常情况。图书信息包括作者名、书名、出版社、出版时间、图书编号、价格、借书人姓名、借书人性别、借书人学号。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。整个程序实现链表操作,对图书信息的操作逐个地进行。二、算法设计:1设计思想:整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识

3、,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。 2设计表示:(1)整个系统除了主函数外,另外还有各种功能子函数,利用循环语句do-while()和选择语句switch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。主函数中首先从文件读取信息到链表中,以用于后面其他函数的操作。总体主要实现了图书的录入、存储、查询、添加、删除、修改、排序等功能。(2)在主函数中选择管理员登录或者学生登录,并且输入正确密码后才可以进入系统,若连续3次输入密码错误将会被强制退出。(3) Create_

4、Books_Doc();这是一个指针函数,它主要实现了链表的创建,它返回的时一个单向链表的头。其他函数调用时只需调用它返回的头即可。Clear();此为清屏操作,在运行中可以随时将屏幕清空。 (4) Print_Book_Doc ();这个函数为链表的输出函数,把链表的头传给函数后,可以表格的形式输出整个链表的所有信息。、(5)save();这个函数为保存信息到文件的函数,使用时将链表的头传给函数,函数可将整个链表的所有信息存入到磁盘文件中。并覆盖掉源文件,以便以后调用。Read()这个函数为读取文件的函数,将文件中的数据读入链表中。 (7)search_book1();search_book

5、2();search_book3();search_book4();search_book5();这五个函数为查询图书信息函数,它们分别按编号、书名、作者、借书人姓名、借书人学号进行查询。查询到信息后返回信息所在节点,查询不到则返回空指针。(8)InsertDoc();Sorting_order1();Sorting_order2();DeleteDoc ();info_change ();这四个函数为功能函数,InsertDoc();添加图书信息、Sorting_order1();将图书按编号排序、Sorting_order2();将图书按价格排序、DeleteDoc ();删除图书信息、i

6、nfo_change ();修改图书信息。调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。3结构体系设计:以下为部分流程图:图书管理系统主界面流程图图书管理系统退出系统登录学生登录管理员登录清屏操作图书信息新建图书信息添加图书信息删除图书信息浏览图书信息修改管理员版图书管理系统管理员版图书管理系统流程图图书信息排序图书信息查询图书查询系统主界面流程图按照图书号查询按照图书名查询按照图书作者查询按照借书人姓名查询 按照借书人学号查询退出查询图书查询系统主界面排序页面排序系统退出排序清屏操作按照图书编号排序按照图书价格排序5设计过程中的想法与程序中的不足:总的来说这个程序大致实现了题

7、目的要求,但是这套程序仍然存在着很多的问题与不足。比如,程序中主函数写的有点繁琐,有太多的嵌套,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提示信息不明确。还有就是没能做到模糊查询。这个系统主要是参照课本手机通讯录模版编写的,同时也得到了老师和同学的一些帮助。我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是考虑不够周全。事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。 我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。

8、三、调试与测试:上机操作(部分截图)系统主界面(选择数字进入,退出系统)选择1输入密码进入管理员版系统,然后出现功能菜单;选择1进入录入系统,录入后浏览;选择8进行清屏;由于版面原因,其他操作页面可以上机运行进行操作,在此就不再一一列出。四、小节:在这一个星期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。将理论和实践结合在一起,用先进的计算机工具方便人们的生活。C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。编写的程序从理论上来说并没有错,但一上机就问题不断。甚至有些课本上的知识照搬不变

9、,也不能得到正确的结果。有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。不管什么系统,只用运用到实际应用中,才具有现实意义。 所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。附录:源代码:#include<stdio.h>#include<math.h>#include<string.h>#include<stdl

10、ib.h>struct books_list char author20; /*作者名*/ char bookname20; /*书名*/ char publisher20; /*出版单位*/ char pbtime15; /*出版时间*/ char booknum10; /*图书编号*/ float price; /*价格*/ char lendername20; /*借书人姓名*/ char lendersex10; /*借书人性别*/ char lendernum20; /*借书人学号*/ struct books_list * next; /*链表的指针域*/;/*清屏函数*/v

11、oid Clear() system("cls");/*保存数据至文件*/void save(struct books_list * head) 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

12、->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->bookname,p->author,p->publisher,p->pbtime,p->price,p->lendername,p->lendersex,p->lendernum); fclos

13、e(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=NULL;else while(p->next!=NULL) p=p->next; p->next=ptr; ptr->next=NU

14、LL;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

15、 flag='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

16、); printf("n 请输入图书作者名:"); getchar(); scanf("%s",p->author); printf("n 请输入图书出版社:"); getchar(); scanf("%s",p->publisher); printf("n 请输入图书出版时间:"); getchar(); scanf("%s",p->pbtime); printf("n 请输入图书价格:"); getchar(); if(scanf(&

17、quot;%f",&p->price)!=1) printf("价格输入有误,请重新输入!"); goto here0; printf("n 请输入借书人姓名:"); getchar(); scanf("%s",p->lendername); printf("n 请输入借书人性别:"); getchar(); scanf("%s",p->lendersex); printf("n 请输入借书人学号:"); getchar(); scanf(

18、"%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 *

19、 p; int panduan=0; char temp20,a; p=head; if(head=NULL) printf(" 图书库为空!n"); else printf("请输入要修改图书的书名:"); getchar(); scanf("%s",temp); while(p!=NULL) if(strcmp(p->bookname,temp)=0) printf("n 请输入修改后的图书编号:"); getchar(); scanf("%s",p->booknum); pri

20、ntf("n 请输入修改后的图书书名:"); getchar(); scanf("%s",p->bookname); printf("n 请输入修改后的图书作者名:"); getchar(); scanf("%s",p->author); printf("n 请输入修改后的图书出版社:"); getchar(); scanf("%s",p->publisher); printf("n 请输入修改后的图书出版时间:"); getchar()

21、; 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);

22、printf("n 请输入修改后的借书人学号:"); getchar(); 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')

23、 save(head); else printf("n未保存修改后数据!nn"); return;/*按照图书号查询*/void search_book1(struct books_list *head) int a=0; struct books_list * p; char temp20; p=head; if(head=NULL) printf(" 图书库为空!n"); else printf("请输入您要查找图书的编号: "); getchar(); scanf("%s",temp); while(p!=

24、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%-8.2f%-10.11s%-10.10s%-12.12sn",p->bo

25、oknum,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 boo

26、ks_list *head) int 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->bookname,temp)=0) printf("n图书已找到!n"); printf("n"); print

27、f("n"); printf("图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n"); printf("n"); printf("%-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->

28、;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_list * p; char temp20; p=head; if(head=NULL) printf("

29、图书库为空!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&

30、quot;); printf("%-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=

31、NULL&&a=0) printf("n查询完毕,未找到所要查询的信息!n"); return;/*按照借书人姓名查询*/void search_book4(struct books_list *head) int a=0; struct books_list * p; char temp20; p=head; if(head=NULL) printf(" 图书库为空!n"); else printf("请输入您要查找的图书借书人姓名: "); getchar(); scanf("%s",temp)

32、; 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%-10.10s%-10.10s%-12.12s%-8.2f%-10.11s%-10.10s%-12.12sn

33、",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

34、_book5(struct books_list *head) int 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(

35、"n"); printf("n"); printf("图书号 书 名 作 者 出版单位 出版时间 价格 借书人姓名借书人性别 借书人学号 n"); printf("n"); printf("%-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

36、->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 books_list * head)struct books_list * ptr1,* ptr2;int a=0;char b; char

37、 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;whi

38、le(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&qu

39、ot;,&b);if(b='Y'|b='y') save(head);else printf("n未保存删除后数据!nn");here10:return head;/*浏览*/void Print_Book_Doc(struct books_list * head)struct books_list * p1;if(head=NULL) printf("n链表为空,无法输出!nn"); return; printf("n"); printf("图书号 书 名 作 者 出版单位 出版时间

40、 价格 借书人姓名借书人性别 借书人学号 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->booknum,p1->bookname,p1->author,p1->publisher,p1->pbtime,p1->price,p1->lendername,p1->lendersex,p1-

41、>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"); goto end; wh

42、ile(!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->ne

43、xt=p1;tail=p1; tail->next=NULL; fclose(fp);end:return head;/*按照图书价格排序*/struct books_list * Sorting_order1(struct books_list * head)struct books_list *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;char b;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next) p3=p1; for(p2=p1->next,p5=p7=p2;p2!=NULL;p7=p2,p2=

44、p2->next)if(p1->price>=p2->price) p3=p2; p5=p7; if(p3!=p1) /*说明p1->price>=p2->price成立*/if(x&&p1=head) /*对p1=head时排序的处理*/ p6=p1->next; p1->next=p3->next; p3->next=p6; p5->next=p1; head=p3; p1=p3; x=0;else /*对p1!=head时排序的处理*/ p6=p1->next; p1->next=p3-&

45、gt;next; p3->next=p6; p4->next=p3; p5->next=p1; p1=p3; printf("是否保存排序后的图书信息?(Y/N)");getchar();scanf("%c",&b);if(b='Y'|b='y') save(head);else printf("n未保存排序后数据!nn");return head;/*按照书号排序*/struct books_list * Sorting_order2(struct books_list *

46、head)struct books_list *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;char b;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next) p3=p1; for(p2=p1->next,p5=p7=p2;p2!=NULL;p7=p2,p2=p2->next)if(strcmp(p1->booknum,p2->booknum )>0) p3=p2; p5=p7; if(p3!=p1)if(x&&p1=head) p6=p1->next; p1->

47、;next=p3->next; p3->next=p6; p5->next=p1; head=p3; p1=p3; x=0; else p6=p1->next; p1->next=p3->next; p3->next=p6; p4->next=p3; p5->next=p1; p1=p3; printf("是否保存排序后的图书信息?(Y/N)");getchar();scanf("%c",&b);if(b='Y'|b='y') save(head);else p

48、rintf("n未保存排序后数据!nn");return head;/*主函数*/int main(void) struct books_list * head=NULL, * p; int choice1,choice3,choice4,choice5,choice6,num=0; char choice2,password20; int size=sizeof(struct books_list); head=Read(); do printf(" 欢迎进入图书管理系统 n"); printf(" n"); printf(" 1管理员登录 n"); printf(" n"); printf(" 2学生登录 n"); printf(" n"); printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论