1、图书馆信息管理系统实验报告 作者: 日期:28 个人收集整理 勿做商业用途集美大学诚毅学院软件工程课设计报告题目:图书管理系统系部名称:计算机信息工程专业:软件工程学生姓名:余传贵班 级:软件1271学号:201242059027时间: 2013年 12月 23 日 至 2013年 12 月 27日指导老师:王宗跃课程设计题目:图书管理系统一、 实验目的:1、通过系统分析、系统设计、编程调试,写实验报告等环节,初步掌握软件系统设计的方法和步骤。2、熟悉C语言程序的编辑、编译、链接和运行的过程,掌握C语言的数据类型。3、掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读写等文件基
2、本操作函数.4、 训练自己灵活运用程序设计语言进行软件开发的能力,提高分析问题和解决问题的能力,培养必要的工程实践能力,从而提高程序设计水平。二、 实验内容:1、 键盘输入密码。2、 键盘按照提示进行操作.3、 键盘按照提示实现对图书信息的输入.4、 查询模块,实现按编号、名称、类型进行查询5、 更新模块,实现对图书信息的删除、更改和添加。.6、 排序模块,实现按编号、名称、类型进行排序。7、 统计模块,实现按名称、类型出版社进行数量统计。三、 需求分析:程序实现以菜单形式进入并操作,对图书信息的查询、更新、排序、统计功能,为此可以做出一系列操作函数,以链表保存图书的图书编号、图书名称、图书作
3、者、图书类型、图书出版社、图书出版时间、图书数量,并用文件指针对信息进行保存和以实现对图书信息的录入、保存、修改、删除、添加、查询、排序和统计等功能。四、 概要设计1、 方案设计读取 信息查询 信息更新信息排序信息统计信息保存信息修改信息添加信息名称排序输出信息录入信息输入密码编号排序类型排序名称统计类型统计出版社统计类型查询名称查询编号查询删除信息设 计 图2、模块功能说明。对各个模块进行功能描述:1) 各模块间通过菜单切换和调用。2) 主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。3) 程序能够保证各模块功能的独立和数据共享。4) 可以保存到文件,可以从文件
4、读入已有的文件。5) 录入模块可以用来录入图书信息。6) 输出模块可以用来输出已经录入的图书信息.7) 查询模块可以用来查询图书的信息,包括按编号查询、按名称查询和按类型查询.8) 更新模块可以用来更新图书信息,包括添加信息,删除信息和修改信息。9) 统计模块可以用来统计图书的具体信息,包括按名称统计,按类型统计,按出版社统计。10) 排序模块可以用来对图书信息进行排序,包括按编号排序、按名称排序和按类型排序。五、 详细设计及运行结果:功能模块流程图如下: 主 函 数void main() int i,choice; char a7=123456”,b7; printf(”nn 请输入密码(六
5、位):); for(i=0;i6;i+) bi=getch(); printf(*”); getch(); b6=0; if(!strcmp(a,b)) do system(color 7e”); 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、(” 6。 更新图书信息n); printf( *n”); printf(” 7。 排序图书信息n); printf( *n”); printf(” 8。 统计图书信息n); printf(” *n”); printf(” 0. 退出系统nn); printf(” 请选择(08):”); scanf(”d”,choice); switch(choice) case 1: input(); break; case 2: save(); break; case 3: read(); break; case 4: output(); break; case 5: inquire(); break;
7、case 6: renew(); break; case 7: sort(); break; case 8: count(); break; case 0: break; while(choice!=0);exit(0); else printf(nn *密码错误!*n);Choice=3Choice=4Choice=5读取信息输出信息查询信息是Y否NNYYYNChoice=8N否统计信息是YChoice=6更新信息是YNChoice=7排序信息是YNChoice=0NChoice=2保存信息YNChoice=1录入信息保存输入提示信息开 始结 束输 入 模 块 输 出 模 块输出图书信息i+
8、Nnum=0开 始num=0NY开 始输入图书信息结束NYChoice将图书信息存盘结束Y查 询 模 块 更 新 模 块按编号查询Y是Choice=3NY是Y开 始NYY是否 开 始Y修改信息保 存Choice=0NChoice=2NChoice=1Choice=0Choice=3Y按类型查询NNChoice=2按名称查询Choice=1输入提示信息输入提示信息删除信息添加信息返 回返 回统 计 模 块 排 序 模 块否否否是是是返 回输入提示信息输入提示信息按类型排序按名称排序按编号排序Choice=1Choice=3Choice=4Choice=0开 始按名称统计按类型统计按出版社统计否C
9、hoice=2Choice=1否Choice=3Choice=0是是是开 始返 回否修 改 模 块 添 加 模 块 删 除 模 块开 始开 始开 始选择删除项输入新信息选择修改项是否删除是是否修改是否继续否是否是输出剩余信息输出修改信息否否输出新信息否是否继续是否继续是是结 束结 束结 束六、 设计体会及调试情况:在这两个星期里,我们专业的学生在宋辉老师的带领下进行了c语言课程设计.在这之前,我们已经对c语言这门课程学习了一年,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手。起初由于上机实践太少,经验很是不足,遇到错误就犯晕,
10、经过几天连续编程,我也积累了不少以前没有的经验,遇到错误也不那么惧怕了,还从一些同学那里学到了不少编程技巧和好习惯,不得不说我得感谢学校给我们这样一个连续足够的实践来强化C语言编程能力。而且我越来越对编程有兴趣了,当程序正常运行那一刻真恨不得对全世界人说我成功了。 现在我再说说本次课程设计我的心得体会:课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它.通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上
11、机实践中才发现问题很多。也只有上机操作才能认识到自己课本学的与实践的差距.然而学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。也就是把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解决问题。也只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。 一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓环境”就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作.通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就
12、会触类旁通,很快掌握新系统的使用。 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦.如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。上机是学好程序语言的必经之路,也是最快捷的,即使花费一整天时间来看书可能还不如安安心心在那里编写几个程序更能理解所学的东西。通过本次课程
13、设计我认识到学习是个积累的过程,只有有了量的积累才可能会有质的飞跃,多实践远胜于空想,没有做不到,只有不想做。附录:源代码(略,详见电子版实验报告)includestdio.hincludestdlib。h#include#includeconio.h#define PRINT1 printf(*n”)define PRINT2 printf(图书编号图书名称图书作者-图书类型图书出版社-图书出版时间(年-月-日)-图书数量n)define PRINT3 printf( d s %s %s s %d%d%d %dn”,booki。num, booki。name,booki。writer,boo
14、ki。type,booki.publish,booki.publish_time。year,booki。publish_time.month,booki.publish_time。day,booki.amount)define PAGE 3define MAX 300int sum; /用来记录图书数目(全局变量)struct DATE/定义日期结构体类型 int year; int month; int day;;struct BOOK/定义图书结构体类型 int num; /图书编号 char name10; /图书名称 char writer8; /图书作者 char type10; /
15、图书类型 char publish40; /图书出版社 struct DATE publish_time; /图书出版时间 int amount; /图书数量bookMAX;/存放MAX个图书信息记录的结构体数组/录入模块void input() int i=0,s=MAX; char choice; printf(”nn * 录入图书信息* (最多d种)n”,s); printf( *n”); do printf(”n 第%d种图书”,i+1); printf(”n 输入图书编号:”); scanf(%d,&booki.num); if(booki。num=0) break; printf(
16、”n 输入图书名称:”); scanf(”%s”,booki。name); printf(n 输入图书作者:); scanf(”%s”,booki。writer);printf(n 输入图书类型:);scanf(s,booki。type); printf(n 输入出版社:); scanf(”%s”,booki。publish); printf(n 出版时间(yyyymmdd):); scanf(%ddd”,&booki。publish_time。year,&booki.publish_time.month,booki.publish_time。day); printf(”n 输入图书总量:);
17、 scanf(”d”,booki.amount);i+;printf(n 要继续输入吗?(Y/N):”); choice=getch(); if(choice=N|choice=n) break; while(iMAX); printf(”n *d种图书信息输入完毕!n”,i); sum=i; printf(”n 按任意键返回主菜单!”);/保存模块void save() FILE *fp; int i=0; char filename10; printf(”n 输入要保存的文件名称:); scanf(”s”,filename); if ( (fp=fopen(filename, wb”))
18、= NULL) printf(nn*写文件错误!*nn); if(fwrite(&booki,sizeof(bookMAX),1,fp)!=1) printf(”*写文件错误!*n”); fclose(fp);/读取模块void read() FILE fp; int i=0;char filename10; printf(n 输入要保存的文件名称:); scanf(”%s”,filename); if ( (fp=fopen(filename, r”) = NULL) printf(”nn*读文件错误!*nn”); while(!feof(fp) fread(booki,sizeof(boo
19、kMAX),1,fp); if(booki。num=0) break; else i+; fclose(fp); sum=i;/输出模块void output() int i=0,j=0,page=1; system(”cls); /清屏 printf(”nn *图书信息表* 第d页nn”,page); PRINT2; PRINT1; do if(booki.num!=0) j+; if(j%PAGE!=0) PRINT3; PRINT1; else PRINT3; PRINT1; if(booki+1.num!=0) printf(按任意键继续!); printf(nn *图书信息表* 第%
20、d页nn,+page); PRINT2; PRINT1; i+; while(booki。num!=0);printf(”n”); printf(”按任意键返回主菜单!); /*更新图书信息模块/删除模块void del() int i,j,del_num,b=0; read(); printf( 输出要删除的图书编号:”); scanf(”%d”,&del_num); for(i=0;isum;i+) if(booki。num=del_numbooki。num!=0) for(j=i;jsum;j+) bookj=bookj+1; sum; break; else b+; PRINT1; P
21、RINT2; for(i=0;isum;i+) PRINT3; printf(n); if(sum=b) printf(” 该图书不存在); printf( 按任意键返回); /添加模块void append() int i,flag=0; char choice; i=sum; read(); printf(nn 添加一种新图书n); do printf(n 新图书编号:”);scanf(”%d”,booki.num); printf(n 图书名称:”); scanf(s”,booki.name); printf(n 作者名称:”); scanf(%s”,booki.writer);prin
22、tf(”n 图书类型:”);scanf(%s”,booki。type); printf(n 出版社名称:); scanf(%s”,booki。publish); printf(”n 出版时间(yyyymm-dd):”); scanf(”d%d%d,&booki.publish_time.year,booki。publish_time.month,booki。publish_time。day); printf(”n 图书数量:”); scanf(%d,&booki.amount);i+; printf(n 要继续添加吗?(Y/N)); choice=getch(); if(choice=Y|ch
23、oice=y) printf(”n 继续!n); flag=1; /继续添加的标志 else flag=0; while(flag=1); sum=i;printf(n 按任意键返回主菜单!);/修改模块void modify() int i=0,choice,modify_num,flag; read(); do printf(”n 输出要修改的图书编号:”); scanf(”%d,&modify_num); for(i=0;isum;i+) if(booki。num=modify_num) printf(”n *图书信息* nn); PRINT1; PRINT2; PRINT3; prin
24、tf(n 您要修改哪一项?n”); printf(”n 1。图书名称n); printf(n 2。图书作者n);printf(”n 3.图书类型n”); printf(n 4.图书出版社n); printf(”n 5.图书出版时间n); printf(”n 6。图书数量n”); printf(”n 请选择(1-6):”); scanf(d,&choice); switch(choice) case 1: printf(n 输入修改后的书名:); scanf(”%s”,booki.name);break; case 2: printf(n 输入修改后的作者名:”); scanf(%s”,book
25、i。writer);break; case 3: printf(”n 输入修改后的图书类型:”); scanf(”%s,booki.type);break; case 4: printf(n 输入修改后的出版社:); scanf(”%s”,booki。publish);break; case 5: printf(”n 输入修改后的出版时间:”); scanf(d%d-%d”,&booki。publish_time.year,&booki.publish_time.month,booki。publish_time.day);break; case 6: printf(”n 输入修改后的图书数量:
26、”); scanf(”d,&booki.amount);break; PRINT1; PRINT2; PRINT3; break; if(i=sum) printf(n 该图书不存在!); printf(”nn 要继续修改吗?(Y/N)”); choice=getch(); if(choice=Y|choice=y) flag=1; /继续添加的标志 printf(”n 继续!n”); else flag=0; while(flag=1); printf(n 按任意键返回主菜单!”);/更新模块void renew() int choice; do printf(”nnn *更新图书信息*nn
27、); printf(” 1.删除图书信息nn); printf( 2。添加图书信息nn”); printf(” 3。修改图书信息nn”); printf( 0。返回主菜单nn); printf( 请选择(03):”); scanf(”%d”,choice); switch(choice) case 1: del();break; case 2: append();break; case 3: modify();break; case 0: break; while(choice!=0); /*查询模块*/按图书编号查询void inquire_num() int inquire_num,i,j
28、=0; read(); printf(n *输入要查询的书的编号:”); scanf(”%d”,inquire_num); for(i=0;isum;i+) if(booki。num=inquire_num) printf(n *图书信息* nn); PRINT1; PRINT2; PRINT3; else j+; if(j=sum) printf(”n 该图书不存在!”);/按图书名称查询void inquire_name() int i,j=0; read(); char inquire_name20; printf(n *输入要查询的图书名称:); scanf(s,inquire_name); for(i=0;isum;i+) if(strcmp(booki。name,inquire_name)=0&booki.num!=0) printf(”n *图书信息* n); PRINT1; PRINT2; PRINT3; else j+;
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100