1、 课 程 设 计 报 告 课程名称 C语言程序设计 课题名称 图书借阅管理系统 专 业 建筑环境和设备工程 班 级 1101班 学 号 09010112 姓 名 黄斌 指导老师 唐北平 6 月 20 日 湖南工程学院 课 程 设 计 任 务 书 课程名称 C语言程序设计 课
2、 题 图书借阅管理系统 专业班级 建环1101班 学生姓名 黄斌 学 号 09010112 指导老师 唐北平 审 批 任务书下达日期 年 6 月20 日 任务完成日期 年 7 月 03 日 一、设计内容和设计要求 1.设计内容:对一个有N本图书图书馆,经过该系统实现对该班级学生基础信息进行录入、显示、修改、删除、保留等操作管理。 (1)、
3、本系统采取一个包含N个数据结构体数组,每个数据结构应该包含:书号、书名、作者、出版社、出版日期、单价、是否借出等。 (2)、本系统显示这么菜单: a. 图书基础信息录入 b. 图书基础信息显示 c. 图书基础信息删除 d. 图书基础信息修改 e. 图书基础信息查询(按书号查询、书名等) g. 退出系统 (3)、实施一个具体功效以后,程序将重新显示菜单。 2.设计要求:掌握结构化程序设计主体思想,以自顶向下逐步求精方法编制程序处理部分实际问题,为未来编写软件积累部分经典案例处理经验。 1. 设计正确,方案合理。 2. 界面友好,使用方便。
4、3. 程序精炼,结构清楚。 4. 设计汇报5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。 5. 上机演示。 6. 按学号次序选课题号,并在要求时间内独自完成相关课题C源程序编写、调整和运行。源程序及编译生成各文件均保留在软盘中; 7. 按本任务书要求,按附录要求编写《课程设计汇报》(Word文档格式)。并用A4复印纸打印并装订; 二、进度安排 第 十九 周 星期1 8时00分——11时30分 星期2 14时00分——18时15分 星期4 14时00分——18时15分 星期6 8时00分—
5、—12时15分 目录 一、 课程设计汇报.................................2 二、 功效模块划分...............................6 三、 关键功效实现..............................12 四、 程序代码清单................................13 五、 程序调试详情................................19 六、 总结....................................
6、24 七、 附件........................................25 八、评分表......................................25 三、课程设计汇报 1.程序设计准备 做系统前,首先,自己具体看了《C程序设计》(教科书),基础自学会了文件相关内容,了解了相关函数使用方法和作用;另,上网查询了很多相关资料,还有找了很多相关系统,全部具体看了一遍,加深了对C了解和对文件相关内容深入了解。学习了C语言内容,图书信息管理系统有利于C语言学习深入巩固,在本系统能
7、够增强对指针、文件、函数、结构体变量等基础知识深入了解。另外图书信息管理系统也是学校常见基础系统之一,它有利于学校对图书馆书籍基础管理。 2.程序设计说明 依据题目要求,应该把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序运行,然后把图书信息送到文件中去,所以应该提供下个结构体和文件输入等操作:在程序中需要实现图书信息录入,浏览,查询,删除和修改等功效操作,所以需要建立对应模块来实现:另外还需提供选择菜单实现功效,在运行时达成所要求目标。 3.程序关键功效 图书管理在生活中利用很广泛,所以需要用很多程序来对它们进行管理。图书借阅管理系统是对图书信息基础管理,它包含
8、图书信息录入、图书信息显示、图书信息删除、图书信息修改、图书信息查询。 经过编译一个C语言函数,其中包含一个主函数,多个子函数,主函数调用其它子函数实现大家能够简易、快捷了解并找到自己所学要信息功效。 1、图书基础信息录入:对新到图书馆图书信息(编号、书名、出版社、作者、价格)进行录入。 2、图书基础信息显示:显示已被录入图书全部信息。 3、图书基础信息删除:经过输入书名,判定此图书是否存在,若存在, 则删除该图书全部信息,若不存在则提醒用户重新输入图书书名。 4、图书基础信息修改:经过输入书名,判定此图书是否存在,若不存在则提醒用户重新输入图书书名,若存在,则可对图书各项信息进行
9、修改。 5、图书基础信息查询:将全部图书信息包含编号、书名、出版社、作者、价格等显示在屏幕上。 6、退出系统:即退出图书借阅管理系统。 使用模块化编程方法每项功效有一个或多个函数组合来完成,其中菜单选项模块对应以下: 图书基础信息录入==> void insert() 图书基础信息显示==> void print() 图书基础信息删除==> void del() 图书基础信息修改==> void modify() 图书基础信息查询==> void find() 这份代码中各个变量定义以下: num
10、 图书编号 name 书名 author 作者 pub 出版社 where 出版日期 count 单价 四.功效模块划分 1.主函数模块 依据图书馆信息管理系统要求,可设计一个主函数,及定义多个用户自定义函数。在主函数中定义全局变量,即是在函数外部定义变量,其不属于某一个函数,而属于一个源程序文件,在整个程序内能够数次被引用。 1.图书基础信息录入模块 首先输入图书录入编号(不为0)判定是否有反复编号,若有,则提醒用户该书已存在,若无则继续录入书名、作
11、者、出版社、单价。 2.图书基础信息显示模块 当用户选择图书基础信息显示时,程序会将全部图书信息列出。 3.图书基础信息输入模块 在程序开始运行,创建文件库时,调动此模块,提醒用户输入新图书编号(编号为0时结束输入),然后继续输入图书书名,作者,出版社,出版日期,单价等信息。结束输入时提醒用户图书输入完成 4.图书基础信息删除模块 用户输入所要删除图书书名,先查找该图书是否存在,若存在,则删除该图书全部信息,若不存在则提醒无此图书信息。 5.图书基础信息修改模块 用户输入要修改书名,判定该书是否存在,若不存在,则提醒用户无此
12、图书信息;若存在,则提醒用户选择修改项目,然后提醒用户图书信息修改完成。 6.图书基础信息查询模块 用户先选择图书查询方法(按书名查找或按书号查找)输入图书书名或书号后,查找出该图书是否存在,若存在,则显示该图书信息,若不存在则提醒用户无此图书信息。 7.读文件模块 在运行该程序时,程序会自动检测是否存在图书信息,若存在,则会显示图书信息,若不存在,则会提醒用户创建文件库,录入图书信息。 8.文件保留模块 当用户对图书信息有录入,修改,删除等操作时,程序会自动保留操作和新图书信息。
13、
五.关键功效实现
程序运行步骤:但每个模块运行完即会回到主函数,然后选择其它或退出。
程序代码清单以下:
#include
14、def struct { int count;//书本数 mbook book[100];//最大可有100本书 }mlibrary; mlibrary library; void save()//保留图书信息。 { FILE *fp; if((fp=fopen("library.doc","w"))==NULL) { printf("\n不能保留图书信息\n"); return; } fwrite(&library.count,sizeof(int),1,fp); fwrite(library.book,sizeof(library.b
15、ook[0]),library.count,fp); } void putin() /*定义录入函数*/ { int y=1; system("cls"); while(y) { printf("\t请输入您书籍书号:"); scanf("%s",library.book[library.count].number); printf("\t请输入书名:"); scanf("%s",library.book[library.count].name); printf("\t请输入作者名:"); scanf("%s",lib
16、rary.book[library.count].author); printf("\t请输入出版社:"); scanf("%s",library.book[library.count].publish); printf("\t请输入出版时间:"); scanf("%s",library.book[library.count].time); printf("\t请输入该书价格:"); fflush(stdin); scanf("%f",&library.book[library.count].price); library.count++;
17、 printf("\n是否继续录入(1.继续;0,退出录入):");
fflush(stdin);
scanf("%d",&y);
if (y!=1)
{
y=0;
break;
}
}
save();
}
void print()
{
system("cls");
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for (int i=0;i 18、ibrary.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
fflush(stdin);
getchar();
}
void search_by_name() /*定义按书名查询*/
{
char s2[20];
int flag=1;
printf("\n请输入要查询书名: ");
fflush(stdin);
19、 scanf("%s",s2);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(int i=0;i 20、book[i].time,library.book[i].price);
}
if (flag)
{
printf("cannot found!");
}
fflush(stdin);
getchar();
}
void search_by_author() /*定义按作者名查询*/
{
char s3[20];
int flag=1;
printf("请输入要查询书作者: ");
fflush(stdin);
scanf("%s",s3);
printf("图书号\t图书名\t作者名\t出版社\t 21、出版日期\t图书价格\n");
for(int i=0;i 22、 if (flag)
{
printf("cannot found!");
}
fflush(stdin);
getchar();
}
void del () /*定义删除函数*/
{
char number[10];
system("cls"); /*清屏*/
printf("\n Please type in the number of the book you want to delete:");
fflush(stdin);
scanf("%s",number);
23、int i;
for (i=0;i 24、ry.book[i].publish,library.book[i+1].publish);
strcpy(library.book[i].author,library.book[i+1].author);
strcpy(library.book[i].time,library.book[i+1].time);
library.book[i].price=library.book[i+1].price;
}
library.count--;
}
else
printf("\n cannot found!\n");
save();
ffl 25、ush(stdin);
getchar();
}
void modify()//修改图书信息
{
char number[10];
system("cls"); /*清屏*/
printf("\n Please type in the number of the book you want to delete:");
fflush(stdin);
scanf("%s",number);
int i;
for (i=0;i 26、ok[i].number)==0)
{
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
break;
}
}
if (i!=library.count 27、)
{
mbook book;
printf("\n\t\t请输入修改后此图书信息\n");
printf("\t请输入图书号:");
scanf("%s",book.number);
printf("\t请输入图书名:");
scanf("%s",book.name);
printf("\t请输入作者名:");
scanf("%s",book.author);
printf("\t请输入出版社:");
scanf("%s",book.publish);
printf("\t请输入出版时间:");
scanf("%s" 28、book.time);
printf("\t请输入该书价格:");
fflush(stdin);
scanf("%f",&book.price);
strcpy(library.book[i].name,book.name);
strcpy(library.book[i].number,book.number);
strcpy(library.book[i].publish,book.publish);
strcpy(library.book[i].author,book.author);
strcpy(library.book[i].ti 29、me,book.time);
library.book[i].price=book.price;
save();
}
else
printf("\n cannot found!\n");
fflush(stdin);
getchar();
}
void main()
{
FILE *fp;
if((fp=fopen("library.doc","r"))==NULL)
{
printf("\n不能打开图书信息库\n");
fp=fopen("library.doc","w+");
printf("\n初始化图书信息库,初始化 30、以后要重启程序\n");
library.count=0;
fwrite(&library.count,sizeof(int),1,fp);
fclose(fp);
return;
}
fread(&library.count,sizeof(int),1,fp);
fread(library.book,sizeof(library.book[0]),library.count,fp);
fclose(fp);
int a;
do
{
system("cls");
printf("\n\n\n\n\n\t\t\t\t图书信息管理 31、系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t1 ------------------图书信息录入\n");
printf("\t\t\t2 ------------------图书信息显示\n");
printf("\t\t\t3 ------------------图书信息查询\n");
printf("\t\t\t4 ------------------图书信息删除\n");
printf("\t\t\t5 32、图书信息修改\n");
printf("\t\t\t0 -----------------退出图书信息系统\n");
printf("\t\t*********************************************\n");
printf("\t\tPlease Enter Choose: ");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case 1:
putin();
break;
case 2:
lookup 33、);
break;
case 3:
search();
break;
case 4:
del();
break;
case 5:
update();
break;
case 0:
printf("\n\n退出\n\n");
break;
default:
printf("\n序号不对\n");
}
}while(a!=0);
save();
}
void find() /*定义查询函数*/
{
int a;
system("c 34、ls"); /*进行清屏*/
printf("\t\t******************************\n");
printf("开始查询\n");
printf("\t\t\t1---------------search_by_name\n");
printf("\t\t\t2---------------search_by_writer\n");
printf("\t\t\t0---------------exit\n");
printf("\t\t****************************** 35、\n") ;
printf("\t\t请选择你想要查询方法:");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case 1:
search_by_name();
break;
case 2:
search_by_author();
break;
case 0:
return;
}
}
六.程序调试
1.第一次运行程序时,库文件不存在图书信息,于是录入图书信息。
图书编号
书名
作者
出版社
出版日期
单价
1
36、英语
张三
人民教育出版社
.06
30
2.主界面。
3. 在主界面选择1,开始录入新图书信息。
图书编号
书名
作者
出版社
出版日期
单价
2
数学
李四
高等教育出版社
.06
28
4. 在主界面选择2,查询图书信息,按1或2分别选择按书名或书号查询。(以《英语》为例)
选择2,按书号查找,输入书号:1,即可查询图书《英语》全部信息。
选择1,按书名查找,输入书名:英语,即可取得图书《英语》全部信息。
5.在主界面选择3,对图书资料进行删除(以《数学》为例),在后续图书信息显示 37、时无《数学》图书信息。
6.在主界面选择4,对图书进行修改(以《英语》为例,修改图书作者,将作者更换为王五),在后续图书基础信息显示时,作者不将是张三,而是王五。
7.在主界面选择5,图书基础信息显示,此时图书信息经过删除和修改,和初始信息不一样。
七.总结
C语言课程设计和现代计算机技术实际应用相结合,是我们在本阶段学完理论课程以后对自己该方面能力一次很好检验,从开始算法思绪到运行调试后美观图形界面和另人兴奋可用程序,全部是一个很好学习和锻炼过程。使我们巩固了原有理论知识,培养了我们灵活利用和组合集成所学过知识及技能来分析、处理实际问题能力。使我 38、们体会到本身知识和能力能在实际中应用和发挥。不仅能够激发创新意识,还能够开发发明能力、培养沟通能力。这次实习时间即使仅有一个星期,但确实使我受益非浅。经过实习我丰富了计算机操作经验,愈加深了对C语言了解,熟悉了其环境,更增强了对Turbo C使用技巧。
另外,实习中老师对我们进行了细心、耐心指导,激励我们对程序进行合理改善,培养了我们创新意识和创新能力。原来是我认为可怕课程设计,就在种种辅助条件下完成了,心里有说不出快乐。
一个多礼拜中,我们有过山穷水尽迷惑;有过柳暗花明惊喜;有过唇枪舌剑辩论;有过相互激励抚慰。一个多礼拜时间我们经历了很多,也收获了很多。和其说它是体力和脑 39、力作业,不如说它是合作精神和毅力考验。经过这次课程设计,我不仅学到了很多知识和技能,更关键是我们学会了怎样利用所学知识去处理实际问题.
八.附件
第五步关键功效实现模块已包含程序代码清单,这里就不再呈述。
附:
课程设计汇报装订次序:封面、任务书、目录、正文、评分、附件(A4大小图纸及程序清单)。
正文格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文内容:一、课题关键功效;二、课题功效模块划分(要求画出模块图);三、关键功效实现(最少要有一个关键模块步骤图);四、程序调试;五、总结;六、附件(全部 40、程序原代码,要求对程序写出必需注释)。
正文总字数要求在5000字以上(不含程序原代码)。
计算机科学和技术系课程设计评分表
课题名称:
项 目
评 价
设计方案合理性和发明性
设计和调试结果
设计说明书质量
答辩陈说和回复问题情况
课程设计周表现情况
综合成绩
老师署名:
日 期:
(注:1.此页附在课程设计汇报以后;2.综合成绩按优、良、中、及格和不及格五级评定。)






