C语言课程设计图书管理系统
《C语言课程设计图书管理系统》由会员分享,可在线阅读,更多相关《C语言课程设计图书管理系统(33页珍藏版)》请在装配图网上搜索。
1、 课 程 设 计 报 告 课程名称 C语言程序设计 课题名称 图书管理系统 专 业 通信工程 班 级 1302 学 号 姓 名 指导教师 2014年 6月 29 日目录一、课程设计目的1二、课程设计要求1三、设计题目分析13.1题目简介13.2设计要求1四、 课程设计内容24.1总体设计24.2详细设计34.3调试与测试12五、 设计心得与总结14六、建议15七、源代码16八、计算机与通信学院课程设计评分表30一、课程设计目的C语言程序设计是通信工程专业重要的基础课,通过本课程设计使学生进一步巩固课堂所学知识,全面熟悉、掌握C语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机
2、操作、调试程序的能力。二、课程设计要求1、课程设计目 2、课程设计要求 3、设计题目分析3、1 题目简介 3、2 设计要求 4、课程设计内容4、1 总体设计:包括系统总体设计框架和系统功能模块图;4、2 详细设计:包括主要功能模块说明(如函数功能、函数参数说明、函数调用 关系描述)和对应的工作流程图;4、3 调试与测试:包括程序调试过程、数据测试结果分析,测试过程中遇到的主要问题及采取的解决措施;5、设计心得与总结:包括课程设计过程中的学习体会和收获,对C语言和本次课程设计的认识等内容。6、建议7、报告最后附上评分表(见任务书末页)三、设计题目分析3.1题目简介图书管理系统(能够实现对图书信息
3、的查询,如:书名、作者、出版单位、出版时间、分类号、价格等)。3.2设计要求图书信息包括:书名、作者名、分类号、出版单位、出版时间、价格等;系统以菜单方式工作;具有图书信息录入,修改、插入、删除功能;能按书名查询或作者名查询;所有信息保存在文件中(每次使用,上次保存的信息能从文件中读取 开始4、 课程设计内容4.1总体设计系统总体设计框架和系统功能模块图菜单 根据菜单中输入的key 值选择功能选项key=1图书信息录入key=4图书信息删除key=5图书信息查找key=3图书信息插入key=2图书信息修改key=0退出系统 保存按任意键继续 结束4.2详细设计包括主要功能模块说明(如函数功能、
4、函数参数说明、函数调用关系描述)和相应的工作流程图;1、主函数:main();在主函数中执行菜单函数menu();,然后当菜单函数执行完后会执行printf(“退出系统!);语句在显示屏显示 退出系统!然后程序结束。开始 结束key=3图书信息插入输入key 值执行相应功能代码 菜单key=5图书信息查找key=4图书信息删除key=1图书信息录入key=0退出系统key=2图书信息修改2、 主菜单函数:menu();通过主菜单显示系统的功能,并通过主菜单进入各功能函数。 开始 输入key 值key=5ffnd_menu();key=4delete();key=3insert_data();k
5、ey=2update();key=1input_data();key=0Exit 结束3、图书信息录入函数:input_data(); 开始 本函数的功能:录入图书信息并保存在文件中。int key=1key=1? N Yfp=fopen(F:Books_Management_Systen_BMS.dat, a+) =NULL? N输入key值创建文件F:Books_Management_Systen_BMS.dat YYfwrite(&BOOK,sizeof(struct book), 1, fp);录入图书信息 结束flose(fp);4、图书信息修改函数:uodate();本函数的功能是
6、:修改图书信息并将修改后的信息保存在文件中。 开始int flag=0int key=1key=1? N输入要修改的书名fp=fopen(F:Books_Management_Systen_BMS.dat, rb+);(fread(&BOOK,sizeof(struct book), 1, fp) = 1? N Ystrcmp(BOOK.title, title) =0? N输入key值 Yflag=1fclose(fp);break录入新的图书信息并文件中Flag=1? YN 结束5、图书信息插入函数:insert_data();本函数的功能是:实现对图书信息的补录。开始 int key=1
7、fp=fopen(F:Books_Management_Systen_BMS.dat, a+);key = 1?Y录入图书信息写入文件中输入key值 Nfclose(fp) 结束6、图书信息删除函数:delete();本函数的功能是:将已写入文件的图书信息进行删除。 开始int key=1 int flag=0fp=fopen(F:Books_Management_Systen_BMS.dat, rb+);key=1? N Y输入您要删除图书信息的图书名(fread(&BOOK,sizeof(struct book), 1, fp) =1? N输入key的值YNstrcmp(title,BOO
8、K.title) =0? 删除图书信息Y flag=1flag=1? break fclose(fp) 结束7、图书信息查找菜单:find_menu();本函数的功能是:显示一个菜单供用户选择是按书名查找信息还是按作者名查找图书信息。 开始 图书查找菜单输入key值key=2Find_author_name();key=0退出key=1Find_title(); 结束8、按书名查找函数:find_title(); 开始本函数的功能是能通过输入图书名查询相关图书的信息。int key = 1int flag = 0 key=1? N Yfp=fopen(F:Books_Management_Sy
9、sten_BMS.dat, rb);输入书名(fread(&BOOK, sizeof(struct book), 1, fp) =1? 输入key值 NYN fclose(fp);strcmp(title, BOOK.title) = 0?输出查询到的图书信息 flag=1Y YYflag=1? breakN 结束9、按作者名查找图书信息find_author_name():本函数的功能是:通过输入作者名来差查询图书信息。 开始 int key = 1 int flag = 0key=1? NY输入作者名输入key的值fp=fopen(F:Books_Management_Systen_BMS
10、.dat, rb);(fread(&BOOK, sizeof(struct book), 1, fp) =1? N N fclose(fp); Ystrcmp(title, BOOK.title) = 0? 输出图书信息 Y flag=1 Y flag=1? breakN 结束4.3调试与测试包括程序调试过程、数据测试结果分析,测试过程中遇到的主要问题及采取的解决措施;调试与测试:在测试程序中遇到的问题1:当关闭程序后再运行程序并且录入新的信息,然后去查询以前的信息时,发现以前的信息不存在了。原因:在录入函数中数据写入文件的方式是“wb”,”wb”将数据写入文件的特点是从文件的开头开始写的,当
11、下一次运行程序并录入新的数据时会将原有的信息覆盖。解决方法:在录入函数中将数据写入文件的方式改”a+”,因为”a+”的特点是从文件的末尾开始写入新的数据的,不会覆盖以前的数据。问题2:实现删除功能时是将要删除的信息用空字符串覆盖掉,实质上计算机为原有数据分配的内存空间还存在,这会导致内存的浪费。解决方法:暂且还没有找到解决的方法。5、 设计心得与总结心得与总结进入大学已有一年了,这次的c语言课程设计第一次让我在大学里体验到了疲劳与充实和为了做好一件事的那种激情与奋斗!在这学期刚开始接触c语言的时候感觉这门课程很难学,后来还是坚持下来去认真学并坚持经常敲代码。因为这几个月坚持学c使我有了一定的自
12、学能力,我也体会到了不为考试而学习的那种轻松、愉快的感觉。在本次课程设计中我学到了很多平时没有学到的知识并加强和巩固了我的c语言基础。为了能够独立完成课程设计,我在实习周的前的半个月时间重点学习了文件和结构体的有关内容。经历了这次课程设计,我对文件方面的内容有了进一步的了解。在做这次课程设计的时候,我发现我的基础知识掌握的还不够牢固,平时所敲得代码量还远远不够。这次的课设让我知道了该如何学习其它的编程语言,在平时的学习中要成多问、多看、多敲、多想的习惯。在本次课设中我遇到了一些问题并请教了老师和学长及同学,很感谢他们对我的帮助。通过和罗老师以及张孝勇学长的聊天,我知道了在写程序时要有一个良好的
13、逻辑思维,要想清楚如何去解决一个问题并理清思路,在当自己的程序完成之后要仔细的去找程序中存在的不足并完善,要清楚自己程序中每一个语句的作用。在本次课设中当我完成自己的答辩后,我积极去帮其他同学解决问题。在帮他们修改程序虽然花去了我很多时间和精力,同时我也收获了很多。帮助别人真的是一件很快乐的事情,并且在帮助人的过程中也会有意想不到的收获。在帮同学看程序时,我发现很多代码写的很混乱,给人的第一感觉就是不想看这个程序,有些代码格式也不是很规范,让人看着很不舒服。我发现学会去敲非常规范的代码很重要;在写程序时注释是非常重要的,这也是为了自己和别人能快速的去读懂自己的程序;学习编程语言最重要的一个基础
14、就是要学会如何看懂一个程序,在这方面我还欠佳。经过几个月的c语言学习和这次的c语言课程设计,我真正体会到了学习的快乐,并且我找到了我以后的发展方向。六、建议1、运用链表和动态内存的知识解决删除功能的缺陷使程序得到进一步的完善。2、随着以后知识的积累,要逐步增加此图书管理系统的功能。3、要一一找出此系统存在的缺陷,并试着找到好的方法来弥补缺陷。4、学习编程语言的过程中要多敲代码。5、要将代码书写规范。6、学会看懂程序。7、在写程序的过程中要多用注释。8、在写程序是思路要清晰,要理解每一个语句,每一个函数的功能和作用。9、要多看一些牛人写的代码。10、在学习的过程要养成多问,多想的习惯。11、要把
15、英语这个工具学好。七、源代码# include # include # include struct book char title20; /*书名*/ char author_name20; /*作者名*/ char class_num20; /*分类号*/ char publisher20; /*出版单位*/ char publication_data20; /*出版时间*/ char price10; /*价格*/BOOK;FILE * fp;void menu();/*列出菜单*/void input_data();/*录入数据*/void update();/*数据的修改*/void
16、 insert_data();/*数据的插入*/void delete();/*数据的删除*/void find_menu();/*图书信息查找菜单*/void find_title();/*图书信息查找*/void find_author_name();/*图书信息查找*/void input_data()/*用来实现对图书信息的录入*/ int key = 1; printf(n*图书信息录入*n); if (fp = fopen(F:Books_Management_Systen_BMS.dat, a+) = NULL) printf(Can not open file!n); exit
17、(0); while (key = 1) printf(请输入信息;n); printf(书名:); scanf(%s, BOOK.title); fflush(stdin); /*清空缓冲区*/ printf(作者名:); scanf(%s, BOOK.author_name); fflush(stdin); printf(图书分类号:); scanf(%s,BOOK.class_num); fflush(stdin); printf(图书出版单位:); scanf(%s, BOOK.publisher); fflush(stdin); printf(图书出版时间:); scanf(%s,
18、BOOK.publication_data); fflush(stdin); printf(图书价格:); scanf(%s, BOOK.price); fwrite(&BOOK, sizeof(struct book), 1, fp); printf(录入成功!n); printf(是否继续?是的话请按1,否的话请按0退出:); scanf(%d, &key); fclose(fp); system(pause); /*就是在命令行上输出一行类似于“Press any key to exit”的字,*/ /*等待用户按一个键,然后返回。*/ return;void update() /*用来
19、实现对图书信息的修改*/ int flag = 0; int key = 1; char title20; char new_title20; char author_name20; char class_num20; char publisher20; char publication_data20; char price10; while (key = 1) printf(请输入您要修改信息的图书的图书名:); scanf(%s, title); fp = fopen(F:Books_Management_Systen_BMS.dat, rb+); while ( (fread(&BOOK
20、, sizeof(struct book), 1, fp) = 1) /* fread函数的类型为int型,如果函数执行成功,*/ /*则函数的返回值为形参count的值1,即输出项的个数*/ if (strcmp(BOOK.title, title) = 0) flag = 1; /*标记*/ break; if(flag=1) printf(书名:); printf(%sn, BOOK.title); printf(作者:); printf(%sn, BOOK.author_name); printf(图书分类号:); printf(%sn, BOOK.class_num); printf
21、(图书出版单位:); printf(%sn, BOOK.publisher); printf(图书出版时间:); printf(%sn, BOOK.publication_data); printf(图书价格:); printf(%sn, BOOK.price); printf(请输入新的图书信息:n); printf(书名:); scanf(%s, new_title); fflush(stdin); printf(n作者:); scanf(%s, author_name); fflush(stdin); printf(n图书分类号:); scanf(%s, class_num); fflu
22、sh(stdin); printf(n图书出版单位:); scanf(%s, publisher); fflush(stdin); printf(n图书出版时间:); scanf(%s, publication_data); fflush(stdin); printf(n图书价格:); scanf(%s, price); fflush(stdin); fseek(fp, -sizeof(struct book), 1); /* 将文件位置标记向后退一个struct book锁占的长度*/ strcpy(BOOK.title, new_title); strcpy(BOOK.author_nam
23、e, author_name); strcpy(BOOK.class_num, class_num); strcpy(BOOK.publisher, publisher); strcpy(BOOK.publication_data, publication_data); strcpy(BOOK.price, price); fwrite(&BOOK, sizeof(struct book), 1, fp); printf(修改成功!n); fclose(fp); else printf(没有此图书的信息!n); printf(请确认您是否继续,是的话请输入1,否的话请输入0;); scanf(
24、%d, &key); system(pause); return;void insert_data() /*插入图书信息*/ int key = 1; fp = fopen(F:Books_Management_Systen_BMS.dat, a+); while (key = 1) printf(请输入图书信息:n); printf(书名:); scanf(%s, BOOK.title); printf(作者:); scanf(%s, BOOK.author_name); printf(图书分类号:); scanf(%s, BOOK.class_num); printf(图书出版社:); s
25、canf(%s, BOOK.publisher); printf(图书出版时间:); scanf(%s, BOOK.publication_data); printf(图书价格:); scanf(%s, BOOK.price); fwrite(&BOOK, sizeof(struct book), 1, fp); printf(插入成功!n); printf(请确认是否继续,是的话请按1,否的话请按0退出:); scanf(%d, &key); fclose(fp); system(pause); return;void delete() /*删除图书信息*/ int key = 1; int
26、 flag = 0; char title20; while (key = 1) printf(请输入您要删除图书信息的图书名:); scanf(%s, title); fp = fopen(F:Books_Management_Systen_BMS.dat, rb+); while ( (fread(&BOOK, sizeof(struct book), 1, fp) = 1) /* fread函数的类型为int型,如果函数执行成功,*/ /*则函数的返回值为形参count的值1,即输出项的个数*/ if (strcmp(title, BOOK.title) = 0) flag = 1; b
27、reak; if (flag = 1) fseek(fp, -sizeof(struct book), 1); /* 将文件位置标记向后退一个struct book锁占的长度*/ strcpy(BOOK.title, ); strcpy(BOOK.author_name, ); strcpy(BOOK.class_num, ); strcpy(BOOK.publisher, ); strcpy(BOOK.publication_data, ); strcpy(BOOK.price, ); fwrite(&BOOK, sizeof(struct book), 1, fp); printf(删除成
28、功!n); else printf(没有此图书的信息!n); fclose(fp); printf(请问是否继续,是的话输入1,否的话输入0:); scanf(%d, &key); system(pause); return;void find_title() /*根据书名查找图书信息*/ int flag = 0; int key = 1; char title20; while (key = 1) fp = fopen(F:Books_Management_Systen_BMS.dat, rb); printf(书名:); scanf(%s, title); while ( (fread(
29、&BOOK, sizeof(struct book), 1, fp) = 1) /* fread函数的类型为int型,如果函数执行成功,*/ /*则函数的返回值为形参count的值1,即输出项的个数*/ if (strcmp(title, BOOK.title) = 0) flag = 1; break; if (flag = 1) printf(书名:); printf(%sn, BOOK.title); printf(作者:); printf(%sn, BOOK.author_name); printf(图书分类号:); printf(%sn, BOOK.class_num); print
30、f(图书出版单位:); printf(%sn, BOOK.publisher); printf(图书出版时间:); printf(%sn, BOOK.publication_data); printf(图书价格:); printf(%sn, BOOK.price); else if (flag = 0) printf(没有此图书的信息!n); fclose(fp); printf(请问是否继续,是的话请输入1,否的话输入0:); scanf(%d, &key); system(pause); return;void find_author_name() /*根据作者名查找图书信息*/ int
31、flag = 0; int key = 1; char author_name20; while (key = 1) fp = fopen(F:Books_Management_Systen_BMS.dat, rb); printf(作者:); scanf(%s, author_name); while ( (fread(&BOOK, sizeof(struct book), 1, fp) = 1) /* fread函数的类型为int型,如果函数执行成功,*/ /*则函数的返回值为形参count的值1,即输出项的个数*/ if (strcmp( author_name, BOOK.author
32、_name) = 0) flag = 1; break; if (flag = 1) printf(书名:); printf(%sn, BOOK.title); printf(作者:); printf(%sn, BOOK.author_name); printf(图书分类号:); printf(%sn, BOOK.class_num); printf(图书出版单位:); printf(%sn, BOOK.publisher); printf(图书出版时间:); printf(%sn, BOOK.publication_data); printf(图书价格:strcmp(title, BOOK.
33、title) = 0); printf(%sn, BOOK.price); else if (flag = 0) printf(没有此图书的信息!n); fclose(fp); printf(请问是否继续,是的话请输入1,否的话输入0:); scanf(%d, &key); system(pause); return;void find_menu() /*图书查询信息菜单*/ char key; while (key != 3) system(cls); printf(n);fflush(stdin); printf(n); printf(|*图书信息查询*nn); printf(|1.按书名
34、查找:n); printf(|2.按作者名查找:n); printf(|3.退出图书信息查询:n); printf(|n); printf(|*谢谢使用*nn); key = getchar(); switch (key) case 1: find_title(); break; case 2: find_author_name(); break; case 3: system(pause); break; default: printf(enter data error!n); void menu() /*主菜单*/ char key; while (key != 0) system(cls
35、); printf(n); printf(n); printf(|*欢迎使用图书管理系统*nn); printf(|1.图书信息录入:n); printf(|2.图书信息修改:n); printf(|3.图书信息插入;n); printf(|4.图书信息删除:n); printf(|5.图书查找:n); printf(|0.退出系统:n); printf(|n); printf(|*感谢对湖工计算机软件开发实验室的支持*nn); key = getchar(); switch (key) case 1: input_data(); break; case 2: update(); break; case 3: insert_data(); break; case 4: delete(); break; case 5: find_menu(); break; case 0: break; default: printf(enter data error!n); int main() menu(); printf(退出系统n); return 0;31八、计算机与通信学院课程设计评分表 设计内容: C语言程序设计 项 目评 价课程设计期间表现情况课程设计内容完成情况课程设计答辩成绩课程设计报告完成质量综 合 成 绩 日 期: 2014年6月 30 日
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。