1、 课 程 设 计 报 告 课程名称 C 语言程序设计 课题名称 图书借阅管理系统 专 业 网络工程 班 级 1002 班 学 号 姓 名 指导教师 2017 年 6 月 20 日 2 一、设计内容与设计要求 1设计内容:对一个有 N 本图书的图书馆,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。(1)、本系统采用一个包含 N 个数据的结构体数组,每个数据的结构应当包括:书号、书名、作者、出版社、出版日期、单价、是否借出等。(2)、本系统显示这样的菜单:a.图书基本信息录入 b.图书基本信息显示 c.图书基本信息删除 d.图书基本信息修改 e.图书基本信息查询
2、(按书号查询、书名等)g.退出系统(3)、执行一个具体的功能之后,程序将重新显示菜单。2设计要求:掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。1.设计正确,方案合理。2.界面友好,使用方便。3.程序精炼,结构清晰。4.设计报告 5000 字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。5.上机演示。6.按学号顺序选课题号,并在规定的时间内独自完成相关课题的 C 源程序编写、调整和运行。源程序及编译生成各文件均保存在软盘中;7.按本任务书的要求,按附录的要求编写课程设计报告(Word 文档格式)。并用 A
3、4 的复印纸打印并装订;二、进 度 安 排 第 十八 周 星期 1 8 时 00 分11 时 30 分 星期 2 14 时 00 分18 时 15 分 星期 3 8 时 00 分11 时 30 分 星期 4 8 时 00 分11 时 30 分 3 第 十九 周 星期 1 8 时 00 分11 时 30 分 星期 2 14 时 00 分18 时 15 分 4 三、课程设计报告 1.程序设计准备 做系统前,首先,自己详细看了C 程序设计(教科书),基本自学会了文件的相关内容,理解了相关函数的用法和作用;另,上网查询了很多相关资料,还有找了很多相关的系统,都详细的看了一遍,加深了对 C 的理解以及对
4、文件的相关内容进一步理解。学习了 C 语言的内容,图书信息管理系统有助于 C 语言学习的进一步巩固,在本系统可以增强对指针、文件、函数、结构体变量等基本知识的进一步理解。另外图书信息管理系统也是学校常用的基本系统之一,它有助于学校对图书馆书籍的基本管理。2.程序设计说明 根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中去,所以应该提供下个结构体和文件的输入等操作:在程序中需要实现图书信息录入,浏览,查询,删除和修改等功能的操作,所以需要建立相应的模块来实现:另外还需提供选择菜单实现功能,在运行时达到所要求的目的。3.程序的主
5、要功能 图书管理在生活中运用非常广泛,因此需要用许多的程序来对它们进行管理。图书借阅管理系统是对图书信息的基本管理,它包括:图书信息的录入、图书信息的显示、图书信息的删除、图书信息的修改、图书信息的查询。通过编译一个 C 语言函数,其中包含一个主函数,多个子函数,主函数调用其余的子函数实现人们能够简易、快捷的了解并找到自己所学要的信息的功能。1、图书基本信息录入:对新到图书馆的图书的信息(编号、书名、出版社、作者、价格)进行录入。2、图书基本信息显示:显示已被录入图书的所有信息。3、图书基本信息删除:通过输入书名,判断此图书是否存在,若存在,则删除该图书所有信息,若不存在则提示用户重新输入图书
6、书名。4、图书基本信息修改:通过输入书名,判断此图书是否存在,若不存在则提示用户重新输入图书书名,若存在,则可对图书各项信息进行修改。5、图书基本信息查询:将所有图书信息包括编号、书名、出版社、作者、价格等显示在屏幕上。5 6、退出系统:即退出图书借阅管理系统。使用模块化编程的方法每项功能有一个或多个函数组合来完成,其中菜单选项模块对应如下:图书基本信息录入=void insert()图书基本信息显示=void print()图书基本信息删除=void del()图书基本信息修改=void modify()图书基本信息查询=void find()这份代码中各个变量的定义如下:num 图书编号
7、name 书名 author 作者 pub 出版社 where 出版日期 count 单价 四.功能模块的划分 1.主函数模块 根据图书馆信息管理系统的要求,可设计一个主函数,及定义多个用户自定义函数。在主函数中定义全局变量,即是在函数外部定义的变量,其不属于某一个函数,而属于一个源程序文件,在整个程序内可以多次被引用。6 2.图书基本信息显示模块 当用户选择图书基本信息显示时,程序会将所有图书信息列出。3.图书基本信息输入模块 在程序开始运行,创建文件库时,调动此模块,提示用户输入新的图书编号(编号为 0 时结束输入),然后继续输入图书书名,作者,出版社,出版日期,单价等信息。结束输入时提示
8、用户图书输入完成 4.图书基本信息查询模块 用户先选择图书查询方式(按书名查找或按书号查找)输入图书书名或书号后,查找出该图书是否存在,若存在,则显示该图书信息,若不存在则提示用户无此图书信息。7 5.图书基本信息删除模块 用户输入所要删除的图书书名,先查找该图书是否存在,若存在,则删除该图书所有信息,若不存在则提示无此图书信息。8 6.图书基本信息录入模块 首先输入图书录入的编号(不为 0)判断是否有重复的编号,若有,则提示用户该书已存在,若无则继续录入书名、作者、出版社、单价。9 7.图书基本信息修改模块 用户输入要修改的书名,判断该书是否存在,若不存在,则提示用户无此图书信息;若存在,则
9、提示用户选择修改项目,然后提示用户图书信息修改完成。8.读文件模块 在运行该程序时,程序会自动检测是否存在图书信息,若存在,则会显示图书信息,若不存在,则会提示用户创建文件库,录入图书信息。10 9.文件保存模块 当用户对图书信息有录入,修改,删除等操作时,程序会自动保存操作和新的图书信息。五.主要功能的实现 程序运行流程:但每个模块运行完即会回到主函数,然后选择其他或退出。11 六.程序调试 1.第一次运行程序时,库文件不存在图书信息,于是录入图书信息。图书编号 书名 作者 出版社 出版日期 单价 1 英语 张三 人民教育出版社 2011.06 30 2.主界面。12 3.在主界面选择 1,
10、开始录入新的图书信息。图书编号 书名 作者 出版社 出版日期 单价 2 数学 李四 高等教育出版社 2011.06 28 4.在主界面选择 2,查询图书信息,按 1 或 2 分别选择按书名或书号查询。(以 英语为例)13 选择 2,按书号查找,输入书号:1,即可查询图书英语所有信息。选择 1,按书名查找,输入书名:英语,即可获得图书英语所有信息。14 5.在主界面选择 3,对图书资料进行删除(以数学为例),在后续图书信息显示时无数学图书信息。6.在主界面选择 4,对图书进行修改(以英语为例,修改图书作者,将作者更换为王五),在后续图书基本信息显示时,作者不将是张三,而是王五。15 7.在主界面
11、选择 5,图书基本信息显示,此时图书信息经过删除和修改,和初始信息不同。16 七.总结 通过为期一周的课程设计,对C 语言这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们网络工程专业的学习中占据着十分重要的地位。自己 C 语言编程的能力有了提高,特别是在文件、指针、数组、函数和结构体方面有了很大提高,另外还学习了课本没有讲到的知识,学会了使用模块化编程的简单方法,另外在对话框的编程要求美观、方面也有了体会。循环是 C 语言的重要方法,也是本程序的灵魂,它在本程序中既有“穿针引线”的作用,也起到了对数据进行分析、存贮、读取等重要的作用,本程序在使用循环过程中对循环进行了多
12、方法的应用也是一个“亮点”,它使程序变得结构合理,通俗易懂,也降低了程序的难度。以后要对这种方法进行深刻的体会。数组在程序中有着很重要的作用,对数据的贮存、输入、读取起着很重要的作用,本程序几乎所有数据都以数组进行输入、贮存、读取方便了对数据的处理和输入,数组的的使用在本程序中有很大的好处。函数是实现模块化编程的基础,它使程序变得方面易懂,对修改起了很大作用,降低了编程的难度,一个函数就是一个功能,它使各个功能之间有了一定的独立性,但也有了一定的联系性,一个函数的错误,不会导致整个程序的失败(主函数除外),对函数的良好应用时在本程序中又以深刻的体会,有了很大提高。结构体的使用,为本程序提供了很
13、大方便,也提高了程序的可读性,结构数组方便了对数据的管理。这个程序的结构大体是从网络上借鉴的,但是大部分功能模块与任务要求不同,只能自己修改,最后终于调试通过,同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。同时提高了自己对编程的兴趣,使自己对编程有了更深的理解,体会到编程的乐趣。17 八附件 原代码清单及注释#include#include#include#include#define N sizeof(struct book)#define PT%-5d%10s%6
14、s%6s%8s%3d n,p-num,p-name,p-author,p-pub,p-where,p-count struct book /*图书信息*/int num;/*书号*/char name10;/*书名*/char where10;/*出版日期*/char author15;/*作者*/char pub20;/*出版社*/int count;/*单价*/struct book*next;void find1(struct book*p0);void find2(struct book*p0);/*输出模块*/void print(struct book*p0)struct book
15、*p;system(cls);p=p0-next;printf(nn图书信息表);printf(nn 图书编号-图书名称-作者-出版社-出版日期 18 -单价nn);while(p!=NULL)printf(PT);p=p-next;getch();/输入任意值返回 system(cls);/*输入模块*/struct book*creat()struct book*head,*p1,*p2;int i=0;head=p2=(struct book*)malloc(N);/分配新的内存给 p2 head-next=NULL;printf(nntt 录入图书信息);printf(n-);whil
16、e(1)p1=(struct book*)malloc(N);printf(n 请输入图书编号(书号 0 为结束):);scanf(%d,&p1-num);if(p1-num!=0)printf(nn 书名 作者 出版社 出版日期 单价nnn);scanf(%s%s%s%s%d,p1-name,p1-author,p1-pub,p1-where,&p1-count);p2-next=p1;p2=p1;i+;19 else break;p2-next=NULL;free(p1);printf(n-);printf(ntt%d 种书录入完毕,i);getch();system(cls);retur
17、n head;/*查找模块*/void find(struct book*p0)int v;system(cls);printf(1.按书名查找nnn);printf(2.按书号查找n);scanf(%d,&v);switch(v)case 1:find1(p0);break;case 2:find2(p0);break;default:;void find1(struct book*p0)system(cls);char name10;int flag=1;20 struct book*p;p=p0-next;printf(请输入要查找的书名:n);scanf(%s,&name);for(p
18、=p0;p;p=p-next)if(strcmp(p-name,name)=0)printf(nn 图书编号-图书名称-作者-出版社-出版日期-单价nn);printf(PT);flag=0;break;if(flag)printf(n 暂无此图书信息n);/当 flag=1 时执行 getch();void find2(struct book*p0)system(cls);int num;int flag=1;struct book*p;p=p0-next;printf(请输入要查找的书号:n);scanf(%d,&num);for(p=p0;p;p=p-next)if(p-num=num)
19、printf(nn 图书编号-图书名称-作者-出版社-出版日期-单价nn);printf(PT);21 flag=0;break;if(flag)printf(n 暂无此图书信息n);getch();/*删除模块*/void del(struct book*p0)system(cls);char name10;int flag=1;struct book*p;p=p0;printf(请输入要删除的书名:n);scanf(%s,name);while(p!=NULL)if(strcmp(p-name,name)=0)p0-next=p-next;/后续结点连接到前驱结点之后 free(p);pr
20、intf(t 该书资料已删除.);flag=0;break;p0=p;p=p-next;if(flag)printf(nt 无此图书信息。);getch();22 system(cls);/*录入模块*/void insert(struct book*p0)struct book*p;system(cls);p=(struct book*)malloc(N);while(1)printf(n 请输入要录入的图书编号(书号 0 为退出):);scanf(%d,&p-num);if(p-num!=0)if(p0-next!=NULL&p0-next-num=p-num)/找到重号 p=p-next
21、;free(p);printf(t 该书已存在);else printf(nn 书名 作者 出版社 出版日期 单价nnn);scanf(%s%s%s%s%d,p-name,p-author,p-pub,p-where,&p-count);p-next=p0-next;p0-next=p;printf(t 已成功录入.);else break;23 getch();system(cls);/*修改模块*/void modify(struct book*p0)system(cls);char name10;int flag=1;int choice;struct book*p;p=p0-next;
22、printf(请输入要修改的书名:nn);scanf(%s,name);while(p!=NULL&flag=1)if(strcmp(p-name,name)=0)printf(nt 请选择要修改的项:);printf(nt 1.修改图书编号n);printf(nt 2.修改图书出版日期n);printf(nt 3.修改图书作者n);printf(nt 4.修改图书出版社n);printf(nt 5.修改图书单价n);scanf(%d,&choice);switch(choice)case 1:printf(n 请输入新的图书编号:);scanf(%d,p-num);break;24 case
23、 2:printf(n 请输入新的图书出版日期:);scanf(%s,p-where);break;case 3:printf(n 请输入新的图书作者:);scanf(%s,p-author);break;case 4:printf(n 请输入新的图书出版社:);scanf(%s,p-pub);break;case 5:printf(n 请输入新的图书单价:);scanf(%d,p-count);break;printf(nt 该项已成功修改。nt 新的图书信息:);printf(nn 图书编号-图书名称-作者-出版社-出版日期-单价nn);printf(PT);flag=0;p0=p;p=p
24、0-next;if(flag)printf(nt暂无此图书信息。);getch();system(cls);/*读文件*/struct book*read_file()int i=0;struct book*p,*p1,*head=NULL;25 FILE*fp;if(fp=fopen(library.txt,rb)=NULL)/以只读的方式打开文件 printf(nn t*库文件不存在,请创建!*);getch();return NULL;head=(struct book*)malloc(N);p1=head;head-next=NULL;printf(n 已有图书信息:);printf(
25、nn 图书编号-图书名称-作者-出版社-出版日期-单价nn);while(!feof(fp)p=(struct book*)malloc(N);while(fscanf(fp,%d%s%s%s%s%d,&p-num,p-name,p-author,p-pub,p-where,&p-count)!=EOF)printf(PT);i+;p1-next=p;p1=p;p1-next=NULL;fclose(fp);printf(n 共种%d 图书信息,i);printf(nnn 文件中的信息以正确读出。按任意键返回。);getch();system(cls);26 return(head);/*保存
26、文件*/void save(struct book*head)FILE*fp;struct book*p;fp=fopen(library.txt,wb);/以只写方式打开二进制文件 if(fp=NULL)/打开文件失败 printf(n=打开文件失败!n);getch();return;else for(p=head-next;p!=NULL;p=p-next)fprintf(fp,%d%s%s%s%s%dn,p-num,p-name,p-author,p-pub,p-where,p-count);fclose(fp);printf(nt 保存文件成功!n);void main()struc
27、t book*head=NULL;int choice=1;head=read_file();if(head=NULL)printf(ntt*);getch();27 head=creat();do system(cls);printf(-Welcome-n);printf(欢迎您,图书管理员nnnn);printf(*nn);printf(n 请选择:);printf(n 1.图书基本信息录入n);printf(n 2.图书基本信息查询n);printf(n 3.图书基本信息删除n);printf(n 4.图书基本信息修改n);printf(n 5.图书基本信息显示n);printf(n 0
28、.退出系统n);printf(*n);scanf(%d,&choice);switch(choice)case 2:find(head);break;case 4:modify(head);break;case 1:insert(head);break;case 3:del(head);break;case 5:print(head);break;case 0:system(cls);break;while(choice!=0);save(head);28 附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4 大小的图纸及程序清单)。正文的格式:一级标题用 3 号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为 22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在 5000 字以上(不含程序原代码)。计算机科学与技术系课程设计评分表 课题名称:项 目 评 价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩 教师签名:日 期:(注:1 此页附在课程设计报告之后;2 综合成绩按优、良、中、及格和不及格五级评定。)