图书信息管理课设报告.docx
《图书信息管理课设报告.docx》由会员分享,可在线阅读,更多相关《图书信息管理课设报告.docx(41页珍藏版)》请在冰豆网上搜索。
图书信息管理课设报告
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2011年春季学期
C程序设计课程设计
题目:
图书信息管理系统
专业班级:
计算机1班
姓名:
ZWZ
学号:
10240136
指导教师:
周小健
成绩:
_______________
摘要
图书信息管理系统是一个图书馆不可缺少的管理工具,它能够实现图书的查询、借阅、管理、归还等操作。
使用计算机对图书信息进行管理,具有手工管理所无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高图书管理的效率。
本系统利用C语言开发,运用相对比较复杂的函数实现了图书信息管理。
通过本系统的开发,我们熟悉了面向过程的程序设计的基本方法和步骤,对于C语言有了更深入的理解,并且较好地掌握了C语言的编程方法和技术。
关键词:
C语言;图书;信息管理系统
一、需求分析
经过简单的调研分析,我确定图书信息管理系统主要包括查阅图书、借阅图书、图书管理系统、会员管理系统等一系列的功能。
1、查阅图书系统
(1)读者可以通过书名来查找有需要的书籍。
(2)读者可以通过作者来查找有需要的书籍。
2、借阅图书系统
读者输入卡号可以借阅有需要的书籍。
3、图书管理系统
(1)通过输入图书的书号、书名、作者增加图书。
(2)直接输入图书的书号删除相关图书。
(3)发现图书相关信息有问题可通过书号进行修改。
(4)可以查看系统中一共有多少本书。
4、会员管理系统
(1)读者可以通过输入姓名、性别等相关信息申请新的会员卡。
(2)如有遗失、损坏会员卡通过输入卡号直接删除该会员卡。
(3)进入会员系统查看借书统计的相关信息。
(4)管理员进入系统可以查看会员总数、会员相关的卡号等信息,便于管理。
二、总体设计
根据需求分析,为了实现系统功能,我确定图书信息管理系统总体模块如图1所示。
图1图书信息管理系统总体模块图
三、详细设计
3.1数据定义
3.1.1图书的数据结构
structbook
{
intbooknum;//书号
charbookname[20];//书名
charbookcreat[10];//书的作者
intturefalse;//用于借书和还书模块判断一本书是否借出的条件
}book[1000];//定义一个比较大的1000本书
3.1.2会员卡的数据类型structcar{intcarnum;//卡号charstudentsex[4];//性别charstudentname[20];//姓名intstudentclass;//所在班级}car[1000];//定义一千个会员
3.1.3定义学生类型,用于存放借出的书籍structstudent{intcarnum;//卡号charlendbook[10];//借出的书数}student[1000];//定义一千个学生
3.2函数设计
3.2.1main()主函数模块
主函数是程序入口,采用模块化设计。
首先在主程序中打印欢迎界面,定义一些必要变量,作一无限循环程序,循环体为一开关语句,该语句设置一个断点,其条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的功能函数,同时设置一个断点,当返回值为一定条件时结束程序。
3.2.2chabook()查询图书函数模块
在这个模块中又分为两个子模块:
按书名查找模块和按作者查找。
按书名查找模块:
在这个子函数里使用指向文件的指针变量,定义指针变量fp,fp指向文件名为“book.txt”的首地址,如果不存在,则自动建立。
从键盘输入书名,依次移动指针地址,直到找到输入的文件名,找到后显示图书信息,再判断状态值是否为1,真的话就显示“此书现在无人借阅”,假就显示“这本书已经有人借出!
”,关闭文件,然后按任意键返回。
如果找到最后一个地址仍没找到,就显示“没有你要查询的书籍!
”。
关闭文件。
3.2.3lendbook()借书函数模块
定义文件指针变量fp,fp2。
fp指向“car.txt(会员卡记录文件)”首地址,从键盘输入卡号,与文件中保存的依次比较,如果一致,就找到这个地址,并赋给变量i。
关闭这个文件。
开始借书,输入要借的书,这时指针地址指向“book.txt”,以只读的方式打开,依次找与输入书名一致的图书,如果找到,又分两种情况:
状态值为1,则把书借出,把此书的状态值改为0.否则,显示“书已被借出”。
如果找不到,显示“不存在这样的书”,关闭文件。
返回。
3.2.4huanbook()还书函数模块
同样定义两个指针变量:
fp,fp2。
先从键盘输入要还图书者会员卡卡号,然后是还书人名字,与文件中的相对照,都一致就进入还书过程,删除掉所还图书的借书记录,将还的书的原来状态设为无人借阅的。
如果没找到图书就显示“你没有借这样的书,任意键返回...”,如果没找到所输卡号,则显示“没这样的卡,和管理员联系,按任意键返回...”。
还书过程结束。
3.2.5lendcount()借书统计函数模块
定义指向文件的指针变量fp,并使fp指向“record.txt”,以只写的方式打开文件,从首地址读取,找到借书信息,就把统计借出书个数的变量i的值加1。
并显示借出的每一本书的信息。
3.2.6addcar()增加会员卡函数模
义指向文件的指针变量fp,并使fp指向“car.txt”的首地址,以追加的方式打开文件“car.txt”,从键盘输入会员信息,并写入文件。
3.2.7delcar()删除会员卡函数模块
定义指向文件的指针变量fp,和fp2。
分别以写入的方式打开“car.txt”,和“bookl.txt”。
从键盘输入要删除的会员卡卡号,然后把有关信息删除。
3.2.8carcount()会员统计函数模块
定义指向文件的指针变量fp,使其指向“car.txt”,以只读的方式打开,依次读取里面数据,把会员个数赋给表示会员个数的变量n,并输出每个会员信息。
3.2.9addbook()增加图书函数模块
定义指向文件的指针变量fp,使其指向“book.txt”并以追加的方式打开文件,依次从键盘读入图书的各个信息,写入文件,然后关闭文件。
3.2.10delbook()删除图书函数模块
定义两个文件指针,fp,fp2.从键盘输入图书名字。
然后在文件中查找,找到后删除掉有关记录,找不到则报错。
3.2.11changebook()修改图书信息函数模块
定义两个文件指针,fp,fp2.从键盘输入要修改的图书名。
然后从文件中找一致的,找到后询问修改哪一部分。
在进入修改。
完成后关闭文件。
3.2.12bookcount()图书统计函数模块
定义文件指针fp,并使之指向“book.txt”依次从里面读取数据,并输出。
3.2.13end()结束函数模块
定义退出界面。
3.3算法流程图
3.3.1按照作者名查找算法流程图如图2所示。
图2按照作者名查找算法流程图
3.3.2保存函数Save()的算法流程图如图3所示。
图3保存函数Save()的算法流程图
3.3.3增加会员卡的算法流程图如图4所示。
图4增加会员卡的算法流程图
四、编码
本系统源代码详见附录1,主要编码实现了以下模块:
1.图书查询:
实现对图书馆所有馆藏图书的精确查询。
2.借阅图书:
完成学生对指定图书的借阅。
3.查询个人借阅信息:
完成对指定学生个人借阅图书记录的查询,显示该学生借阅的所有图书的信息。
4.归还图书:
完成学生对自己已借阅的指定图书的归还。
5.超期图书归还:
对超期的情况能自动给出提示信息。
6.图书管理:
能够实现图书基本情况的录入、修改、删除等基本操作。
通过运用该系统,实现对图书馆图书的图书的信息管理,学生的查寻、借阅、归还等操作,达到对图书信息管理的功能。
五、测试
5.1系统主菜单界面
在VisualC++6.0中运行本系统,可以得到图5所示的主菜单界面。
图5系统主菜单界面
5.2图书查阅界面
在图5中,选择1,进入图6所示的图书查阅界面。
图6图书查阅界面
在图6中,选择1,进入“按书名查找”的界面。
例如输入书名“”,得到图7所示的显示。
图7按书名查找
在图6中,选择2,进入“按作者查找”的界面。
例如输入作者“”,得到图8所示的显示。
图8按作者查找
5.3借书系统界面
在图5中,选择2,进入图9所示的借书系统界面。
图9借书系统界面
5.4还书界面
在图5中,选择4,进入图10所示的还书界面。
图10还书界面
5.5管理系统
在图5中输入3,进入图11所示的管理系统界面。
图11管理系统界面
在图11中输入1,进入图12所示的增加图书界面。
图12增加图书界面
在图11中输入2,进入图13所示的删除图书界面。
图13删除图书界面
在图11中输入3,进入图14的修改图书界面。
图14修改图书界面
在图6中输入3,进入图15的管理系统界面。
图15管理系统界面包
六、设计总结
第一次做课设,第一次接触这么庞大的c程序,首先读懂它就有很大的难度,所以我们查阅了很多的资料,接触了很多的新的东西,遇到一些看不懂的东西时,我们会在一起互相探讨,互相沟通。
编程看起来似乎是一件很枯燥、乏味的事情,但是经历了这次大程序的编辑之后,但是其实里面还是充满乐趣的,一旦真的钻研下去什么事情都可以放下,来认真研究。
编程尤其是调试是一项细致深入的工作,需要下工夫、动脑子、善于积累经验,这往往能反映出一个人的水平、经验和科学态度。
C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。
好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。
在这里,我作为其中的参与者,感触良多。
在这次课程设计中我对C语言有了一个更深的了解和认识,也对这个学期学的知识得到巩固,还尝试运行编程,每次运行程序成功,让我对下面的项目就充满信心。
通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。
这次的课程设计使我对C语言的学习产生浓厚的兴趣。
还是这次课程设计最令人激动的就是合作做项目,虽然那只是一个很小很小的项目,大家在一起学习,取长补短,我们很好的在课设中长知识,提高我们的学习热情。
对于以后的学习及我们的专业知识的学习我都有了很大的信心。
只要我们努力,所有的事就像我们的C程序一样,只要我们编好了程序,就能正确的运行的。
致谢
结束了一周的课程设计,首先要感谢周老师在课程设计上给予我的指导,支持与帮助。
这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,要感谢和我共同做同一个课程设计的任飞翔同学,他为我解决了很多我不明白的知识以及技术上的难题,让我们共同完成了这个课程设计。
参考文献
1.姜灵芝,余健.C语言课程设计案例精编.北京:
清华大学出版社,2008
2.王新,孙雷.C语言课程设计.北京:
清华大学出版社,2009
3.游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.北京:
清华大学出版社,2011
4.王连相.C/C++程序设计上机指导与测试.北京:
中国铁道出版社,2006
5.C语言函数手册,机械工业出版社,1999
附录1
#include
#include
#include
#include
#include
#defineSTACK_INIT_SIZE10
#defineOK1
#defineTRUE1
#defineERROR0
/*定义学生类型,用于存放借出的书籍*/
structstudent{
intcarnum;
charlendbook[10];
}student[1000];
/*定义书的类型*/
structbook
{
intbooknum;
charbookname[20];
floatbookprice;
charbookcreat[20];
intturefalse;/*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];
/*借书卡的数据类型*/
structcar
{
intcarnum;
charsex[5];
charstudentname[20];
intstudentclass;
}car[1000];
//////////////////////////////////查询图书信息模块//////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
//////
(1)按书名查找
findbook()
{
FILE*fp;
charbookname[10];
inti;
fp=fopen("book.txt","r");
printf("请输入你要查找的书名:
\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("此书现在无人借阅\n按任意键返回\n");}
else{printf("这本书已经有人借出\n");fclose(fp);return0;}
fclose(fp);
return0;
}
}
printf("没有你要查询的书籍!
\n");
fclose(fp);
return0;
}
//////////
(2)按作者查找
findbook1()
{
FILE*fp;
charbookcreat[10];
inti;
fp=fopen("book.txt","r");
printf("请输入你要查找的作者名:
\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("此书现在无人借阅\n按任意键返回\n");
}
else{printf("这本书已经有人借出!
\n");
fclose(fp);
return0;
}
fclose(fp);
return0;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
return0;
}
chabook()/////查找图书主模块
{
charch5;
do
{
printf("◎◎◎欢迎进入图书查询系统◎◎◎\n");
printf("1:
按书名查找\n");
printf("2:
按作者查找\n");
printf("0:
返回\n");
printf("请输入0━2:
\n");
ch5=getch();
switch(ch5)
{
case'1':
findbook();getch();break;
case'2':
findbook1();getch();break;
case'0':
break;
default:
printf("无此操作!
\n");getch();break;
}
}while(ch5!
='0');
return0;
}
/////////////////////////////////////////////////////////////////
//////////借书与还书模块
/////
(1).借书模块
lendbook()
{
FILE*fp,*fp2;
inti,n;
intcarnum;
system("cls");
printf("\t\t◎◎◎欢迎进入借书系统◎◎◎\n\n");
printf("请输入借书人的:
\n卡号:
\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf("书名:
\n");
scanf("%s",student[n].lendbook);
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
if(book[i].turefalse==0){printf("对不起,此书有人借出,请借其他书\n");fclose(fp);getch();return0;}
else
fclose(fp);
fp=fopen("record.txt","a+");
student[n].carnum=carnum;
fwrite(&student[n],sizeof(structstudent),1,fp);
fclose(fp);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
book[i].turefalse=0;
fwrite(&book[i],sizeof(structbook),1,fp2);
continue;
}
fwrite(&book[i],sizeof(structbook),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");
fclose(fp2);
printf("借书完毕,按任意键返回...\n");
getch();
return0;
}
}
printf("不存在这样的书,任意键返回...\n");
fclose(fp);
getch();
return0;
}
}
printf("你的卡号不存在,请申请新卡,按任意键返回...\n");
fclose(fp);
getch();
return0;}
///////
(2).还书函数
huanbook()
{
FILE*fp,*fp2;/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
inti,n;
intcarnum;
charlendbook[10];
system("cls");
printf("\t\t◎◎◎欢迎进入还书界面◎◎◎");
printf("\n请你输入你的\n卡号:
\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");/*读取卡号记录*/
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)/*for循环判断卡号是否存在*/
{
if(car[i].carnum==carnum)/*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf("请输入你要还的书的名字:
\n");
scanf("%s",lendbook);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)/*判断是否借阅了输入的书*/
{
if(strcmp(student[i].lendbook,lendbook)==0)/*借阅了该书,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue;/*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(structstudent),1,fp2);/*写入原来没还的书的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w