小型图书管理系统C语言课程设计报告
德州学院计算机系 课程设计报告
实习名称 数据结构 设计题目 小型图书管理系统 实习时间 2011.1.3-2011.1.9 专业班级 2009级网络工程 指导老师 徐志敏 教学单位(盖章)
小组分工情况:
学号 200901005005 200901005056 姓名 刘伟 孟学文 分工 插入排序存档程序编写、报告撰写 删除查找修改程序编写、报告撰写
二0一一年一月九日
- 1 -
德州学院计算机系 2009级 数据结构课程设计
课程设计报告正文内容及格式要求:
1、正文部分主要包括:选题背景、论点或方案论证、过程(设计或实验)论述、结果分析、结论或总结。
2、标题:题目用小二号黑体字(加黑),居中;副标题用三号黑体字,紧挨正标题下居中,文字前加破折号。英文题目为18磅加粗Times New Roman字,副标题为16磅加粗Times New Roman字。 3、课程设计报告格式要求: 一级标题用小三号黑体字; 二级标题用四号黑体字; 三级标题用小四号黑体字;
正文用宋体小四号字(英文用12磅Times New Roman字),采用1.5倍行距,标准字符间距: 页码一律用小5号字标明。 4、课程设计报告撰写要求:
(1)文字通顺,语言流畅,能将设计过程表述清楚。 (2)图表整洁,布局合理,须按国家规定的绘图标准绘制。 (3)报告字数不少于3千字。
小型图书管理系统
一、选题背景
在学习了数据结构课本理论知识后,为了检验自己所学知识的牢固性,巩固大家的理论知识,调动大家的编程兴趣;同时为大家提供一个实践自己,检验自己的平台,以增加大家对将来工作的适应能力;也为了锻炼大家的动手实践能力,遂在学期末进行了本次课程设计。
“数据结构”在计算机科学中是一门综合性的专业基础课。“数据结构”的研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有着密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必
- 2 -
德州学院计算机系 2009级 数据结构课程设计
须考虑如何组织数据,以便查找和存取数据元素更为方便。因此,可以认为“数据结构”是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
我们本着自己的兴趣及挑战自己的态度,也为检验我们理论知识的熟练度,锻炼我们动手实践能力,我们选择了小型图书管理系统的编写。因为我们生活在大学,图书馆是我们学习的天堂,借书和还书又是必不可少的,一个好的图书管理系统对于我们学生和管理人员都会为大家提供很多便利。本着挑战和创新的思想,我们进行了此次课程设计程序编写及报告撰写。
二、运行环境(软、硬件环境)
预装了Windows XP操作系统的PC机、 Microsoft Visual C++ 6.0版编辑器。 三、算法设计的思想
通过对图书管理系统内的图书进行添加和删除操作,实现同学借书和还书的记录工作,通过对图书的查找和按指定方式排序,更有利于同学们挑选自己所需要的图书,借阅借书所需时间。同时,通过按需要的条件排序,也有助于图书管理人员更加方便快捷的管理全部书库图书信息。
遍历查找和插入排序的功能,以及其它所有的算法操作都是为了方便快捷的利用图书馆资源,更大化的优化操作流程和更好体现人机一体话的概念。
设计程序框架图:
- 3 -
德州学院计算机系 2009级 数据结构课程设计
四、算法的流程图
- 4 -
德州学院计算机系 2009级 数据结构课程设计
五、算法设计分析
定义图书结构体 struct book
结构体内容:定义作者、书名、出版社、书号数组及浮点型价格数据。 {
char writer[20];//作者// char title[20];//书名//
char publishinghouse[20];//出版社// char number[10];//书号// float price;//价格// struct book * next; };
定义书库的结构体指针: struct book * Create_Book(); 插入图书信息:
void Insert(struct book * head); 删除图书信息:
void Delete(struct book * head); 刷新显示书库信息:
void Print_Book(struct book * head); 查找数目:
void search_book(struct book * head); 更改图书信息:
void change_Book(struct book * head); 对数据进行保存工作
void save(struct book * head);
六、源代码
#include - 5 - 德州学院计算机系 2009级 数据结构课程设计 struct book { char writer[20]; char title[20]; char publishinghouse[20]; char number[10]; float price; struct book * next; }; struct book * Create_Book(); void Insert(struct book * head); void Delete(struct book * head); void Print_Book(struct book * head); void search_book(struct book * head); void change_Book(struct book * head); void save(struct book * head); struct book * Create_Book() { } void save(struct book * head) { struct book * head; head=(struct book *)malloc(sizeof(struct book)); head->next=NULL; return head; struct book *p; FILE *fp; p=head; fp=fopen(\"kucun.txt\ fprintf(fp,\"************************************************\\n\"); fprintf(fp,\"书号\ 书名\ 作者\ 出版社\ 价格\ \\n\"); fprintf(fp,\" \\n\"); while(p->next!= NULL) { - 6 - 德州学院计算机系 2009级 数据结构课程设计 } //插入// void Insert(struct book *head) { struct book *s, *p,*p1,*swap; char flag='Y'; swap=(struct book *)malloc(sizeof(struct book)); p1=swap; p=head; while(flag=='Y'||flag=='y') { s=(struct book *)malloc(sizeof(struct book)); printf(\"\\n 请输入图书书号:\"); fflush(stdin); scanf(\"%s\ printf(\"\\n 请输入图书书名:\"); fflush(stdin); scanf(\"%s\ printf(\"\\n 请输入图书作者名:\"); fflush(stdin); scanf(\"%s\ printf(\"\\n 请输入图书出版社:\"); fflush(stdin); scanf(\"%s\ printf(\"\\n 请输入图书价格:\"); fflush(stdin); - 7 - } p=p->next; fprintf(fp,\"%s\ %s\ %s\ %s\ %.2f\ \\n\ fprintf(fp,\"************************************************\\n\"); fclose(fp); printf(\" 已将图书数据保存到 kucun.txt 文件\\n\"); 德州学院计算机系 2009级 数据结构课程设计 scanf(\"%f\ printf(\"\\n\"); //排序// p1=p->next; if(head->next!=NULL) do { } p=p1; p1=p->next; strcpy(s->number,swap->number); strcpy(s->title,swap->title); strcpy(s->writer,swap->writer); strcpy(s->publishinghouse,swap->publishinghouse); s->price=swap->price; strcpy(p1->number,s->number); strcpy(p1->title,s->title); strcpy(p1->writer,s->writer); strcpy(p1->publishinghouse,s->publishinghouse); p1->price=s->price; if(strcmp((p1->number),(s->number))>0) { strcpy(swap->number,p1->number); strcpy(swap->title,p1->title); strcpy(swap->writer,p1->writer); strcpy(swap->publishinghouse,p1->publishinghouse); swap->price=p1->price; }while(p1!=NULL); p->next=s; s->next=NULL; printf(\" ******* 添加成功!*******\"); printf(\"\\n 继续添加?(Y/N):\"); - 8 - 德州学院计算机系 2009级 数据结构课程设计 fflush(stdin); scanf(\"%c\ printf(\"\\n\"); if(flag=='N'||flag=='n') {break;} else if(flag=='Y'||flag=='y') {continue;} } save(head); } //查找// void search_book(struct book *head) { struct book * p; char temp[20]; p=head; if(head==NULL || head->next==NULL) { printf(\" ******* 图书库为空!*******\\n\"); } else { printf(\"请输入您要查找的书名: \"); fflush(stdin); scanf(\"%s\ while(p->next!= NULL) { p=p->next; if(strcmp(p->title,temp)==0) { printf(\"\\n图书已找到!\\n\"); printf(\"\\n\"); printf(\"书号: %s\\\n\ - 9 - 德州学院计算机系 2009级 数据结构课程设计 printf(\"书名: %s\\\n\ printf(\"作者名: %s\\\n\ printf(\"出版社: %s\\\n\ printf(\"价格: %.2f\\\n\ } if(p->next==NULL) { printf(\"\\n查询完毕!\\n\"); } } } } void Print_Book(struct book * head) { struct book * p; if(head==NULL || head->next==NULL) { printf(\"\\n ******* 没有图书记录! *******\\n\\n\"); } p=head; printf(\"*************************************\\n\"); printf(\" 书号\书名\作者\出版社\价格\\\n\"); printf(\"*************************************\\n\"); while(p->next!= NULL) { ); } printf(\"*************************************\\n\"); printf(\"\\n\"); - 10 - p=p->next; printf(\"%s\%s\%s\%s\%.2f\\\n\ 德州学院计算机系 2009级 数据结构课程设计 } //更改// void change_Book(struct book * head) { struct book * p; int panduan=0; char temp[20]; p=head; printf(\"请输入要修改图书的书号:\"); scanf(\"%s\while(p->next!= NULL) {p=p->next; if(strcmp(p->number,temp)==0) { printf(\"\\n 请输入图书书名:\"); fflush(stdin); scanf(\"%s\ printf(\"\\n 请输入图书作者名:\"); fflush(stdin); scanf(\"%s\ printf(\"\\n 请输入图书出版社:\"); fflush(stdin); scanf(\"%s\ printf(\"\\n 请输入图书价格:\"); fflush(stdin); scanf(\"%f\ printf(\"\\n\"); panduan=1;}} if(panduan==0) { printf(\" \\n******没有图书记录!******\\n\\n\");} } //删除// - 11 - 德州学院计算机系 2009级 数据结构课程设计 void Delete(struct book *head) { struct book *s,*p; char temp[20]; int panduan; panduan=0; p=s=head; printf(\" [请输入您要删除的书名]:\"); scanf(\"%s\ p=p->next; while(p!= NULL) { } if(panduan==1) { } else { } - 12 - if(strcmp(p->title,temp)==0) { } p=p->next; panduan=1; break; while(s->next!=p) { } s->next=p->next; free(p); printf(\"\\n ******* 删除成功!*******\\n\"); save(head); s=s->next; printf(\" 您输入的书目不存在,请确认后输入!\\n\"); 德州学院计算机系 2009级 数据结构课程设计 } //主函数// void main() { struct book * head; int choice; head=NULL; while(1) { printf(\" *************************************************\\n\"); printf(\" * 小型图书管理系统 *\\n\"); printf(\" * *\\n\"); printf(\" * [1]图书信息录入 *\\n\"); printf(\" * *\\n\"); printf(\" * [2]图书信息浏览 *\\n\"); printf(\" * *\\n\"); printf(\" * [3]图书信息查询 *\\n\"); printf(\" * *\\n\"); printf(\" * [4]图书信息修改 *\\n\"); printf(\" * *\\n\"); printf(\" * [5]图书信息删除 *\\n\"); printf(\" * *\\n\"); printf(\" * [6]退出系统 *\\n\"); printf(\" *************************************************\\n\"); printf(\" 请选择:\"); fflush(stdin); scanf(\"%d\ switch (choice) { case 1: if(head==NULL) { head=Create_Book(); - 13 - 德州学院计算机系 2009级 数据结构课程设计 } Insert(head); break; Print_Book(head); break; search_book(head); break; change_Book(head); break; Delete(head); break; printf(\"\\n\"); printf(\" ******* 感谢使用图书管理系统 ******\\n\"); break; case 2: case 3: case 4: case 5: case 6: default: } } } printf(\" ******* 输入错误,请重新输入!*******\"); break; 七、运行结果分析 主界面:显示提示操作信息,按提示信息进行操作,方便操作管理。 - 14 - 德州学院计算机系 2009级 数据结构课程设计 添加信息页面:在主界面选择1,分书号、书名等条目添加图书信息,存档到书库,便于用户查找和管理员管理所有图书。在一次添加完成后可以根据提示进行继续添加图书信息到书库。 - 15 - 德州学院计算机系 2009级 数据结构课程设计 查询库存所需图书信息:在主界面选择3,根据书名,从书库中直接调用所查找图书的全部信息。 显示浏览库存图书信息(排序功能):按提示操作在主界面选择2,展示现在书库中所有图书信息,并按书号大小排序,一目了然。 更改库存图书信息:在主界面选择4,对图书信息进行更改、存档,更改后图书信息将覆盖原来图书信息并存档。并在修改完成后,在主界面选择2,显示更改后现存图书信息。 - 16 - 德州学院计算机系 2009级 数据结构课程设计 在库存中删除外借图书信息:在主界面选择5,从书库中直接删除外借图书,并做存档kucun.txt文件工作。 图书存档txt文件:图书信息自动存档txt文件,方便借阅人查看全部库存图书信息,并帮助管理员做好图书信息保存工作。 分析:通过图书管理系统流程截图解析可知,图书信息库的存档和管理都需要图书管理人员的手动操作,而且很机械化,信息更改方法古老繁琐,虽然可以实现智能化的自我按书号排序和按图书书名查找,但是程序还存在不足之处,开发程序还有待进一步 - 17 - 德州学院计算机系 2009级 数据结构课程设计 完善和提高。 八、收获及体会 经过这次课程设计,通过对程序的编制,调试和运行,使我更好的掌握了链表基本性质和有关小型数据系统问题的解决方法,熟悉了各种调用的数据类型,在调试和运行过程中使我更加的了解和熟悉程序运行的环境变量,提高了我对程序调试分析的能力和对错误的纠正能力。这次数据结构的程序设计,对于我来说是一个挑战。老师教导我们:课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过这次课程设计我深有体会。 在课程设计过程中程序编译的同时我也发现自己对知识的掌握的不足之处。在编译程序的过程中(例如:通过排序程序的嵌套一次次的修改编写以及指针和数组的运用),使我的编程能力有了很大程度的提高,对相关函数也可以做到熟练掌握了。在做这个课程设计的时候遇到许多困难,一个小部分可能就会花掉很长时间编写修改,虽然花费了时间,但是学到了很多知识,同时通过查课本找资料,一点一点的补足学习课本知识时的漏洞,真正让我体会到理论和实践的差距,通过这次课程设计,真正锻炼了我的实践能力,做到了理论和实践相结合,实践联系理论的统一。 通过这次的课程设计,让我深刻意识到自己在学习中的不足,同时也找到了克服这些弱点的方法,这也是一笔很大的资源财富。在以后的学习过程中,我应该利用更多的时间去上机实验,多编写程序,相信不久后我的编程能力都会有很大的提高能设计出更多的更有创新的程序或软件。 - 18 - 德州学院计算机系 2009级 数据结构课程设计 指导教师评语 注:课程设计成绩由指导教师或答辩小组评定出成绩,分优秀、 良好、中等、 指导教师(签名) 及 格、 不及格五级,分别给小组的每个成员打分。 学号 姓名 成绩 成绩 指导教师或答辩小组成员(签名) 备 注 - 19 - 因篇幅问题不能全部显示,请点此查看更多更全内容