1、课 程 设 计 报 告课程名称 C语言程序设计 课题名称 图书信息管理系统 专 业 机械电子 班 级 学 号 姓 名 指导教师 课 程 设 计 任 务 书课程名称 C语言程序设计 课 题 图书信息管理系统 专业班级 机械电子1101班 学生姓名 学 号 指导老师 审 批 任务书下达日期 2012 年 12月 19日任务完成日期 2012 年 12 月 29 日一、设计内容与设计要求1 设计内容:图书信息管理系统设计涉及的知识点:掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;掌握数组的基本概念。熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理
2、。掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。掌握结构体的概念,结构体类型的定义,结构体变量的定义和初始化,结构体成员的表示,结构体变量的赋值含义,结构体与指针、函数的关系。掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。2设计要求:1) 用C语言实现系统;利用结构体数组实现图书信息的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。2) 建立一个图书信息数据库,文件名为book.txt,并从该文
3、件中读取数据;3) 图书信息管理系统应能提供以下功能:系统以菜单方式工作图书信息显示功能;能以表格形式显示图书库中所有信息,且应有表头。图书信息追加功能;追加一条(或多条)新记录,要求在追加过程中有相应的提示信息,完成追加后能重新排序和显示;图书信息查询功能;a. 按书名查询;b. 按单价查询; c. 按出版单位查询; d. 按出版时间查询e. 按分类号查询; f. 按入库时间查询要求系统在上述查询方式中至少应有两种以上的查询方式,且能显示符合条件的所有记录。图书信息的删除;要求可按指定的图书编号和指定的图书书名两种定位方式删除图书记录。图书信息的修改;要求能按指定的图书编号和按指定的图书书名
4、两种定位方式进行修改,且可以按用户要求修改记录中除图书编号和书名以外的指定内容,并重新显示;图书信息的统计:能按指定的图书分类号或按指定的单价两种方式分别进行统计,并将统计的结果以及被统计的图书信息用表格的形式显示;能按图书单价排序(降序)要求在删除模块、修改模块和查询模块中若找不到所需的记录时,系统设计中应有一定的提示信息。4) 说明:(1) 要求将修改后的数据写入到一个新的数据文件newbook.txt中。(2) 对系统有兴趣的同学可以在实现基本要求的基础上,完善系统的其它功能。5) 图书信息管理系统采用一个结构体数组,图书信息包括:图书编号、分类号、书名、作者名、出版单位、出版时间、入库
5、时间、价格等,其数据库结构如下:int bh; /*图书编号*/ int flh; /*分类号*/char sname10; /*书名*/ char zname10; /*作者名*/char cbdw 12; /*出版单位*/char cbdate8; /*出版时间*/ char rkdate8; /*入库时间*/double dj; /*单价*/ 注意:图书编号不能重复且不少于4位数字,各项字符串的长度要求在410之间,数据库应有10条或多于10条以上的记录。6) 要求:要求每个学生必须独立思考,认真并按时完成本课程设计所包含的所有内容;要求学生必须按照课程设计报告的完整格式说明设计内容,设
6、计任务分析过程和算法,给出程序流程图和全部源程序;设计报告的完整格式应包括以下部分的内容:系统设计总体思路;系统的主要功能;系统功能模块的划分(要求画出总体模块框图);主要功能的实现和各个程序模块说明(每个功能模块的框图、系统主模块的流程图,各个功能模块至少要有一个主要的流程图);程序调试过程及各模块调试中相应的部分截图;课程设计总结与体会(不少于500字)。课程设计参考文献;程序清单;课程设计周内,凡规定的集中上机时间必须到机房调试程序;设计完成后必须参加答辩,并按要求演示程序,提交课程设计报告和有关电子文档。7)分组及安排所选题目根据学生班号和学号确定,(班号+学号)% 6+1。如你的班号
7、为01班、学号为01,则所选题目号为:(1+1)%6+13,即课题号为3。8)成绩评定程序设计方案是否合理;程序设计是否正确;调试结果;设计说明书的质量高低;答辩时回答问题情况;课程设计周表现情况;总评成绩记入“课程设计成绩评分表”。二、进度安排第 16 周 星期四 14:0017:00 讲课、布置任务第 17 周 星期一 8:0012:00 机房上机调试程序星期二 8:0012:00 机房上机调试程序星期三 19:0022:00 机房上机调试程序星期四 8:0012:00 机房上机调试程序、答辩 附:课程设计报告排版、打印和装订要求1. 课程设计报告装订顺序:封面、任务书、目录、正文、附件、
8、评分表。按A4大小的纸张排版和打印。 2. 设计报告的页码从目录之后开始使用;3. 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22磅。正文中程序清单(英文)用英文字体Times New Roman,单倍行间距。 4. 正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试(各模块至少有一个程序调试的截图);五、总结(不少于500字);六、参考文献;t、附件(包含所有程序的原代码,且程序中应有必要的注释)。八.正文总字数要求在5000字以上(不含程序原代码)。5设计报告中任
9、务书和评分表不需重新排版。目 录一、系统的主要思路 1二、系统的主要功能 21、显示功能 22、追加功能 23、修改功能 2 4、删减功能 25、查询功能 26、统计功能 27、排序功能 28、退出功能 2三、系统功能模块的划分 31、总体模块功能框图 3四、总流程图 41、总流程图 42、八大模块的流程图 5五、程序调试 131、显示模块 132、追加模块 143、修改模块 174、删减模块 215、查询模块 246、统计模块 267、排序模块 288、退出模块 29六、总结 30七、参考文献 31八、附件 32word文档 可自由编辑一、 系统的主要思路C语言是一种高级程序设计语言,此系统
10、就是利用C语言所编写的一个图书信息管理系统,简单实用,界面清晰。利用结构体数组来实现图书信息的数据结构,使得各个数据可以批量处理,在各个模块中发挥巨大作用。系统的各个功能是调用各个函数的形式来实现的,并提供一个循环的界面来调用,其中有选项让用户选择,从而实现各个功能的操作。首先,我们得先创建一个数据库,用来存放图书的信息,如:图书编号,分类号,书名,作者名,出版单位,出版时间,入库时间,单价等。这个数据库存放在一个book.txt文本文档中,而创建这个数据库需要另一个函数编译,连接,运行后产生,从而供图书信息管理系统的程序进行操作。在程序开头需要用读函数fscanf读取book.txt文本文档
11、中的数据,转入内存中,从而被图书管理系统的程序进行各种操作。然后运行程序后显示的是主菜单界面,通过系统的提示引导,用户可以选择进入各个模块进行图书信息处理和操作。最后,每进行一个模块操作完成后,会返回主菜单,处理完各个信息后并且正常退出后,系统又会调用写函数将修改后的数据写入一个新创建的文本文档中。系统共有八个模块,分别是:显示模块,追加模块,修改模块,删减模块,查询模块,统计模块,排序模块,退出模块。系统各个模块的功能是通过调用主函数中的switch语句来实现的。二、系统的主要功能1、 显示功能通过设计此模块,来实现图书信息的显示,供用户浏览全体数据。2、 追加功能通过设计此模块,来实现新的
12、图书信息的加入,供用户方便操作。3、 修改模块通过设计此模块,来实现对数据库里的任意信息进行修改,供用户方便操作。4、 删减模块通过设计此模块,来实现数据库里的任意信息进行删减,供用户方便操作。5、 查询模块通过设计此模块,来实现按指定的图书编号,分类号以及书名的选择进行图书信息查看,供方便用户方便操作。6、 统计模块通过设计此模块,来实现按指定的图书分类号和单价的选择进行图书信息的统计,供用户方便操作。7、 排序模块通过设计此模块,来实现对数据库的图书信息按单价进行排序显示,供用户方便操作。8、 退出模块通过设计此模块,来实现退出系统的主菜单。三、系统功能模块的划分退出主函数退出模块排序模块
13、统计模块查询模块删减模块修改模块追加模块显示模块1、总体模块功能框图四、总流程图1、总流程图输出Sele=8Sele=7Sele=6Sele=5Sele=4Sele=3Sele=2统计模块查询模块删减模块修改模块追加模块排序模块退出模块显示模块Sele=?输入开始Sele=1退出2、八大模块的流程图(1)、显示模块退出显示数据输入1开始退出显示数据输入2继续追加?1/2输入1确定追加?1/2输入2开始(2)、追加模块输入追加条数输入追加内容21退出输入2显示数据输入图书书名继续修改?1/2输入修改内容6单价5入库时间4出版时间3出版单位2作者名1分来号输入图书编号选择定位方向输入1开始确定修改
14、?1/2输入3(3)、修改模块2121退出显示数据输入2继续删除?1/221确认删除?1/2显示数据输入图书编号输入图书书名输入1确定删除?1/2输入4开始选择定位方向(4)、删减模块212132121退出显示数据输入2继续查询?1/2显示数据输入书名输入分类号输入图书编号选择定位方向输入1确定查询?1/2输入5开始(5)、查询模块2121退出显示数据输入2继续统计?1/2显示数据输入分类号输入单价输入1确定统计?1/2输入6开始选择定位方向(6)、统计模块显示数据输入7开始退出(7)、排序模块显示结束界面输入8开始退出(8)、退出模块五、程序调试1、显示模块 void Disp()开始运行图
15、书信息管理系统程序,主界面显示如下图所示,选择你所要进入的模块。在主界面中输入1,调用显示模块的函数,显示数据如下图所示。2、追加模块 void Appe()主界面中输入2,回车,调用追加模块函数,进入函数界面,选择确定追加,输入1,回车,界面如下图所示。在此界面可输入追加的条数,输入2,回车,显示如下图所示。此界面可输入你所追加的图书信息的具体内容,每成功追加一本,将会有提示的信息,然后继续追加,直到追加完毕,显示如下图所示。成功追加完毕后,确认是否继续追加,输入所需的选择回车。若不继续追加,输入2,回车,显示如下图所示。再退回主界面时会有再次显示你所追加内容的数据,按任意键回主菜单,显示如
16、下图所示。3、修改模块 void Modi()主界面中输入3,回车,调用修改模块函数,进入函数界面,选择确定修改,输入1,回车,界面如下图所示。确定修改之后,系统会提示要选择修改的定位方向,一个是图书编号,另一个是图书书名,可进行选择。若选择1,输入1,回车,显示如下图所示。选择图书编号之后,系统提示输入图书编号的具体内容,输入后,回车,显示如下图所示。找到要修改的图书后,将有六个选项可供修改,分别为:分类号,作者名,出版单位,出版时间,入库时间,单价。若选择入库时间,输入5,回车,显示如下图所示。确定要修改入库时间后,输入要修改的内容,回车,显示如下图所示。修改完毕后,将会显示修改后的内容,
17、系统提示是否继续修改。若不继续修改,输入2,回车,显示如下图所示。退回主界面之前,会再次显示修改后的内容,按任意键返回主菜单,显示如下图所示。4、删减模块 void Dele()主界面中输入4,回车,调用删减模块函数,进入函数界面,选择确定删减,输入1,回车,界面如下图所示。确定进行删除后,系统提示选择删除定位方向,一个是图书编号,另一个是图书书名。若选择图书书名,输入2,回车,显示如下图所示。确定选择图书书名方向之后,系统提示输入图书书名具体内容,进行输入后回车,显示如下图所示。定位到具体的一本书后,系统提示是否确认要删除。若选择是,输入1,回车,显示如下图所示。确认删除后,将显示删除后的图
18、书信息,系统提示是否继续删除。若选择否,输入2,回车,显示如下图所示。确认不继续删除后,将会再次显示图书信息具体内容,按任意键返回主界面,显示如下图所示。5、查询模块 void Query()主界面中输入5,回车,调用查询模块函数,进入函数界面,选择确定查询,输入1,回车,界面如下图所示。确认查询后,系统提示选择查询方式,分别为:图书编号,分类号,书名。若选择分类号,输入2,回车,显示如下图所示。选择分类号查询后,输入具体的分类号,回车,显示如下图所示。找到具体图书信息后,系统将显示此书的具体内容,系统也将提示是否继续查询。若不继续查询,输入2,回车,将返回主界面,显示如下图所示。6、统计模块
19、 void Total()主界面中输入6,回车,调用统计模块函数,进入函数界面,选择确定统计,输入1,回车,界面如下图所示。确认统计后,系统将提示选择统计方式,一个是按分类号,另一个是按单价。若选择单价,输入2,回车,显示如下图所示。确认按单价统计后,系统提示输入具体的单价查询区间,输入后,回车,显示如下图所示。系统找到相应的图书信息后,将显示出来,还会计算此区间的图书有几本,也提示是否继续统计。若选择否,输入2,回车,将返回主界面,显示如下图所示。7、排序模块 void Sort()主界面中输入7,回车,调用排序模块函数,进入函数界面,选择确定排序,输入1,回车,系统将自动按单价降序重新排列
20、,并在此函数界面显示出来,按任意键返回主界面,显示如下图所示。8、退出模块 void Quit()主界面中输入8,回车,调用退出模块函数,进入函数界面,系统将显示结束语句,按任意键将退出图书管理系统,显示如下图所示。六、总结经过一周的C语言课程设计,现在想来里面既有快乐也有烦恼,对于我们这个年龄段的大学生来说,是一次很不错的经历。让我们懂得什么是团队合作,也让我们感受到一个集体需要的是相互信任,每个人做好自己的那部分工作,然后综合起来,成为一个成品,这是件很了不起的事。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考
21、察过程。醉着科学技术发展的日新月异。当今计算机应用在生活中可以说是无处不在的。因此作为二十一世纪的大学生来说掌握计算机开发技术是十分重要的。我的课程设计题目是图书信息管理系统,一开始的确无从下手,但是一旦开始编程,进行设计排版以后,就渐渐进入状态。虽然在设计编程过程当中遇到过很多困难,但是只要有信心,有毅力,还要有一种挑战的心理,实在不会,可以询问老师。过程是艰难的,结果是欣慰的。更重要的是,相信这一次经历会给我们大学毕业以后带来一些意想不到的好处,至少我们知道了一些别人所不知道的东西。我编写的整个程序具备简洁方便的特点,界面清晰,操作方便等优点。操作者只要结合自己的想法和根据系统的提示进行操
22、作是很实用的,而且会有一个文本文档,用来记录图书的信息,在结束后也产生一个新的文本文档来记录修改后的图书信息。程序设计过程有如解决实际问题一般,从实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入,输出,完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始着手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量,数组,函数,然后确定处理过程算法。可的最后结论。最后小结:在程序设计中,可认为也是个小社会,每个一同的社会成员都有不同的想法。程序设计学的好坏要看你在社会中解决问题的能力高低,所以不同的人编程结果是不同的。在这个社
23、会中,经验和想法最为重要。在此,特地感谢指导此次C语言课程设计的指导老师,以及一起完成程序的同学。七、参考文献1贾宗璞 许合利,C语言程序设计,人民邮电出版社,2010.9.12谭浩强,C语言程序设计(程序设计),清华大学出版社,2012.6.1八、附件程序的原代码:#include stdio.h#include string.h#include conio.h#include stdlib.hint N=0;struct stu int bh; /*图书编号*/ int flh; /*分类号*/ char sname10; /*书名*/ char zname10; /*作者名*/ char
24、 cbdw 12; /*出版单位*/ char cbdate8; /*出版时间*/ char rkdate8; /*入库时间*/ double dj; /*单价*/ s40;void Re_file() FILE *fp; fp=fopen(book.txt,r); while( fscanf(fp,%dn%dn%sn%sn%sn%sn%sn%lfn,&sN.bh,&sN.flh,sN.sname,sN.zname,sN.cbdw,sN.cbdate,sN.rkdate,&sN.dj)!=EOF) N+; fclose(fp);void Wr_file()int i; FILE *fp; fp
25、=fopen(newbook.txt,w); for(i=0;iN;i+) fprintf(fp,%dn%dn%sn%sn%sn%sn%sn%lfn,si.bh,si.flh,si.sname,si.zname,si.cbdw,si.cbdate,si.rkdate,si.dj); fclose(fp);void Disp() /*显示模块*/ system(cls);int i;printf(n图书编号 分类号 书名 作者名 出版单位 出版时间 入库时间 单价n);for(i=0;iN;i+)printf(%-10d%-8d%-10s%-10s%-10s%-10s%-10s%-10.3lfn
26、,si.bh,si.flh,si.sname,si.zname,si.cbdw,si.cbdate,si.rkdate,si.dj); /*显示数据*/void Appe() /*追加模块*/ system(cls);int i,j,a,b;printf(ntt 确定追加?n);printf(ntt 1:是 2:否n);printf(ntt 请选择:);scanf(%d,&b);if(b=1)printf(ntt 请输入追加条数:);scanf(%d,&j);system(cls);for(i=1;i=j;i+)printf(ntt 请输入图书编号:); /*输入信息*/scanf(%d,&s
27、N.bh);printf(ntt 请输入分类号:);scanf(%d,&sN.flh);printf(ntt 请输入书籍名:);scanf(%s,sN.sname);printf(ntt 请输入作者名:);scanf(%s,sN.zname );printf(ntt 请输入出版单位:);scanf(%s,sN.cbdw);printf(ntt 请输入出版时间:);scanf(%s,sN.cbdate );printf(ntt 请输入入库时间:);scanf(%s,sN.rkdate);printf(ntt 请输入书籍单价:);scanf(%lf,&sN.dj);N+;printf(n);pri
28、ntf(tt 已经成功追加%d本n,i);printf(n);printf(ntt *n); /*提示信息*/printf(tt * 你还要继续追加吗 *n);printf(tt * *n);printf(tt * 1:是 2:否 *n);printf(tt * *n);printf(tt *n);printf(ntt 请选择:);scanf(%d,&a);system(cls);switch(a)case 1:Appe(); break;case 2: ; break;void Modi() /*修改模块*/ system(cls);int i,m,a,b,c,e,f,n=1;printf(
29、n图书编号 分类号 书名 作者名 出版单位 出版时间 入库时间 单价n);for(i=0;iN;i+)printf(%-10d%-8d%-10s%-10s%-10s%-10s%-10s%-10.3lfn,si.bh,si.flh,si.sname,si.zname,si.cbdw,si.cbdate,si.rkdate,si.dj);printf(ntt 确定修改?n);printf(ntt 1:是 2:否n);printf(ntt 请选择:);scanf(%d,&f);if(f=1)while(n=1)printf(ntt 请选择修改定位方向:n);printf(ntt 1:图书编号 2:图
30、书书名n);printf(ntt 请选择:);scanf(%d,&m);system(cls);if(m=1)AA:printf(ntt 请输入图书编号:); scanf(%d,&a);system(cls);for(i=0;i=N)printf(ntt 无此图书编号信息,是否重新输入?n);printf(ntt 1:是 2:否n);printf(ntt 请选择:);scanf(%d,&c);system(cls);if(c=1)goto AA;else printf(n); printf(tt *n); printf(tt * *n); printf(tt * 1:分类号 2:作者名 *n)
31、; printf(tt * *n); printf(tt * 3:出版单位 4:出版时间 *n); printf(tt * *n); printf(tt * 5:入库时间 6:单价 *n); printf(tt * *n); printf(tt *n);printf(ntt 请选择要修改的内容:n);printf(ntt 请选择:);scanf(%d,&b);if(b=1)int x; printf(ntt 请输入要修改的内容:); /*输入信息*/ scanf(%d,&x);system(cls); si.flh=x;else if(b=2)int k,j; char xg10; printf(ntt 请输入要修改的内容:); /*输入信息*/ scanf(%s,xg);system(cls); k=strlen(xg); for(j=0;jk;j+)si.znamej=xgj;si.znamej=0;else if(b=3)int k,j; char xg12;