图书馆信息管理系统含附源代码02.docx
- 文档编号:6808440
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:32
- 大小:224.24KB
图书馆信息管理系统含附源代码02.docx
《图书馆信息管理系统含附源代码02.docx》由会员分享,可在线阅读,更多相关《图书馆信息管理系统含附源代码02.docx(32页珍藏版)》请在冰豆网上搜索。
图书馆信息管理系统含附源代码02
西安郵電學院
软件设计课程设计报告
题目:
图书馆信息管理系统
系部名称
:
电信系
专业名称
:
电子科学与技术
班级
:
科技0701
学号
:
05072002
学生姓名
:
XXX
指导教师
:
黄茹
时间
:
2008年6月9日至2008年6月20日
一、 设计目的
通过本课程设计,强化上机动手能力,使我们在理论和实践的基础上进一步巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法
学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
为后续各门计算机课程的学习打下坚实基础。
为毕业设计和以后工作打下必要基础。
二、课程设计内容
本设计是一个能够实现基本功能(借阅图书登记等)的图书馆管理系统,由于所学知识有限,自然不能与真正的现代图书馆管理系统相比,但也是尽所之能了。
三、需求分析
对所开发系统功能、性能的描述,想要实现的目标。
系统功能:
1.现有图书按时间和类型查询
2.新书按时间和类型查询
3.借阅管理(普通用户查看自己的借书历史记录,管理员可实现借书、还书登记等)
4.图书管理(管理员可添加新书、删除丢失图书信息,将图书加入丢失图书)
5.统计图书信息
6.系统维护(新建用户、密码修改、更换用户)等六大功能。
性能的描述:
本系统总体分普通用户和管理员用户,其中管理员可实现添加新书、用户,登记借书、还书、统计等全部功能,普通用户只能实现图书查询、修改自身密码、查看自身借阅历史情况。
在查询方面分时间和类型两种(由于时间、技术等方面限制,将时间功能由原来的int型结构体改为char型,因此也没用到《C算法》中的各种较为高级的排列,实为遗憾,这也导致程序无法自己算出还书日期),界面比较简单,操纵容易。
想实现目标:
本程序的基础结构图借鉴于《VisualBasic设计信息管理系统实例》中的例子,以现代图书馆管理系统为蓝本,结合本校图书馆的规定,可惜的是目标虽远大,技术不过关,导致与原计划有较大偏差,将好些复杂的地方简单化,减少了计划中的好些功能。
四、概要设计
1.系统结构图(功能模块图)
对系统进行分析,给出系统结构图;
系统结构图:
2.功能模块说明
对各个模块进行功能的描述。
功能:
将结构体和需要大量引用的函数放于此模块。
模块0(非正式模块):
密码模块
功能:
建立密码体系,使程序面向管理员和普通用户这两方用户。
模块一:
现有图书信息
功能:
1.现有图书按时间排列2.现有图书按类型排列
模块二:
新书查询
功能:
1.新书按时间排列2.新书按类型排列
模块三:
借阅管理
功能:
1.借书登记管理2.续借登记管理(未完成)3.超期登记管理(未完成)4.还书登记管理
模块四:
图书管理
功能:
1.添加新书2.删除丢失图书信息3.加入丢失图书
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计及编码,运行结果。
main()函数:
1.nowbook_info()函数:
3.reader_manage()函数模块三:
1.borrow_register()函数
读取文件函数*readfile1(charfilename[])
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
评价:
对我自己来说,个人对本程序不完全满意,不能完全实现自己的想法。
合理和不足之处:
合理之处在于能够基本上实现图书馆管理系统的功能。
即合理又不足之处莫过于引用了链表,说它合理,是因为动态链表才是大型信息管理系统的核心,动态链表的能动性绝非静态数组所能相比的,但是对链表的不熟悉也是本程序最大的不足之处,在本程序运用链表也是为了熟练它。
改进的方案:
虽说链表远比数组难,但本人不支持本程序改为用数组,
最需要改进的是,前面说过,按原计划,基本上实现现代
化图书馆管理系统的所有功能(图形除外),运用上图型函数,加上快速排序等,同时最好将语句中的中文改为英文,虽然已经把大部分须多此使用的语句组改为函数来调用,但是有一两个的地方有些重复,为了使界面比较美观,大量重复使用了printf语句,不知道能不能改写为一个界面函数。
2、在设计过程中的感受。
感受最大的是无奈和成就感,由于过于强求自己,想把自己的第一个真正的程序完善化,功能尽量的齐全,可惜最后又把原计划打乱了,搞得特无奈,本程序花了我大量的心血,到头来还是要简化它。
不过收获也多多,其中能够训练自己的耐心和细心程度,培养自己拥有严谨的态度,而且每次靠自己发现错误或有了新的想法而且可以实现时,很有成就感的,这不会就是痛并快乐着吧,^_^。
而且也帮一些同学查找了一些错误,对查错方面有所提高。
同时也对那些当程序员深深的佩服,也许是自己的体会不够吧,无法理解那些编程狂人连续20多个小时编程如何顶得住?
七、参考文献
《C语言程序设计》(王曙燕著),《C语言程序设计》(谭浩强著),《VisualBasic信息系统开发实例精选》,《C算法》。
八、附录:
源代码
(000.h)
/*模块0(非正式模块):
结构体模块*/
typedefstructBook_info/*图书相关信息*/
{
charbook_type[3];/*图书类型代号*/
charbook_num[10];/*图书代号*/
charbook_name[30];/*书名*/
charlib_name[15];/*所属书库*/
charin_date[15];/*入库时间*/
charanthor[15];/*作者*/
charprice[6];/*价格*/
charborrow_date[15];/*借书日期*/
charback_date[15];/*还书日期*/
charreader_name[10];/*借书人姓名*/
charreader_num[10];/*借书人学号*/
structBook_info*next;/*用于链表*/
}book_info;/*把structBook_info定义为book_info*/
/*生成文件函数*/
voidbuild_file(charfilename[15])
{
FILE*fp;
fp=fopen(filename,"wb");
fclose(fp);
}
/*读取allbook,newbook,lostbook文件*/
book_info*readfile1(charfilename[])
{
book_info*s;
book_info*r,*p;
FILE*fp;
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\nCannotfindthefile:
%s\nNowbuildthefile:
%s",filename,filename);
build_file(filename);
getch();
returnNULL;
}
p=(book_info*)malloc(LEN);
p->next=NULL;
r=p;
s=(book_info*)malloc(LEN);
fread(s,LEN,1,fp);
while(!
feof(fp))/*读取文件结束退出循环*/
{
r->next=s;/*连接s结点*//*这几步为链表尾插法*/
r=s;/*将r移到s结点*/
s=(book_info*)malloc(LEN);
fread(s,LEN,1,fp);
}r->next=NULL;
fclose(fp);
returnp;
}
/*输出全链表信息*/
voidprint_info(book_info*p)
{
clrscr();
printf(booktype1);
for(p=p->next;;p=p->next)/*p点移到p的下一点*/
{
printf(booktype5,booktype4);
if(p->next==NULL)break;/*这样可以确保输到最后结点信息*/
}
printf("\npressanykey...");
getch();
}
/*根据类型代号输出链表信息*/
voidprint_info2(book_info*p)
{
intn=0;
chari[3];
clrscr();
printf("\n输入图书类型代号(1.计算机2.文艺...):
");
gets(i);
printf(booktype1);
for(p=p->next;;p=p->next)
{
if(strcmp(p->book_type,i)==0)
{
printf(booktype5,booktype4);n++;
}
if(p->next==NULL)
break;
}
printf("\n共找到该类图书:
%d本.",n);
getch();
printf("\npressanykey...");
getch();
}
/*图书排列*/
voidsort_book(charfilename[],charch)
{
book_info*p;
p=readfile1(filename);/*调用读取文件函数readfile1*/
if(p==NULL||p->next==NULL)/*文件内容为空*/
{
printf("\nNoinformationabout.pressanykey...");
getch();
return;
}
if(ch=='1')/*时间排列*/
print_info(p);
if(ch=='2')/*类型排列*/
print_info2(p);
printf("\n");
}
/*删除链表一结点*/
book_info*del_point(book_info*p,charbook_num[])
{
book_info*p1,*p2;
p1=p;
while(p1->next!
=NULL&&strcmp(book_num,p1->book_num)!
=0)
{
p2=p1;
p1=p1->next;/*将p1后移一个结点,p2指向p1原结点*/
}
if(strcmp(book_num,p1->book_num)==0)/*找到结点*/
{
if(p1==p)p=p1->next;/*为p1首结点,把第2结点地址赋给首结点*/
elsep2->next=p1->next;/*否则p1下个结点地址赋给p1前一地址*/
printf("\ndelete:
%s,OK.pressanykey...\n",p1->reader_num);
getch();
free(p1);
}
else
printf("\nTheentererror!
");
returnp;
}
/*将链表信息写入文件保存*/
voidsave_point(book_info*p,charfilename[])
{
FILE*fp;
book_info*s;
fp=fopen(filename,"wb");
s=p;
for(s=s->next;;s=s->next)/*将s指向它的下一个结点*/
{
fwrite(s,LEN,1,fp);/*写入信息*/
if(s->next==NULL)break;
}
fclose(fp);
}
/*将链表信息追加入文件保存*/
voidsave_point2(book_info*p,charfilename[])
{
FILE*fp;
book_info*s;
fp=fopen(filename,"ab");
s=p;
for(s=s->next;;s=s->next)/*将s指向它的下一个结点*/
{
fwrite(s,LEN,1,fp);/*写入信息*/
if(s->next==NULL)break;
}
fclose(fp);
}
(001.h)
/*模块一:
现有图书信息*/
voidnowbook_info()
{
charch;
for(;;)
{
clrscr();
printf("\n");
printf("\t\t***************************************************\n");
printf("\t\t******************现有图书信息*********************\n");
printf("\t\t***************************************************\n");
printf("\t\t**请选择服务种类**\n");
printf(star2);
printf(star2);
printf("\t\t**----------------1.按时间排列-------------------**\n");
printf(star2);
printf("\t\t**----------------2.按类型排列-------------------**\n");
printf(star2);
printf("\t\t**----------------3.返回上级-------------------**\n");
printf(star2);
printf(star1);
printf(star1);
printf("\n");
getch();
ch=getch();
if(ch=='3')return;
elseif(ch!
='1'&&ch!
='2')continue;/*返回循环,直到ch=1,2,3*/
sort_book("allbook",ch);
}
}
(002.h)
/*模块二:
新书查询*/
voidnew_book()
{
charch;
for(;;)
{
clrscr();
printf("\n");
printf("\n\t\t***************************************************\n");
printf("\t\t*********************新书查询**********************\n");
printf("\t\t***************************************************\n");
printf(star2);
printf("\t\t**请选择服务种类:
**\n");
printf(star1);
printf(star2);
printf("\t\t**----------------1.按时间排列-------------------**\n");
printf(star2);
printf("\t\t**----------------2.按类型排列-------------------**\n");
printf(star2);
printf("\t\t**----------------3.返回上级-------------------**\n");
printf(star2);
printf(star1);
printf(star1);
printf("\n");
ch=getch();
if(ch=='3')return;
elseif(ch!
='1'&&ch!
='2')continue;/*返回循环,直到ch=1,2,3*/
sort_book("newbook",ch);
}
}
(003.h)
/*模块三:
借阅管理*/
#include"003_1.h"
voidreader_manage()
{
FILE*fp;
charch;
charpassword[10];
if(flag==2)/*普通用户只能查看自身文件信息*/
{clrscr();
fp=fopen(username,"rb");fgets(password,9,fp);
printf(booktype1);
while(!
feof(fp))
putchar(getc(fp));
fclose(fp);
printf("\npressanykey...\n");
getch();
return;
}
for(;;)
{
clrscr();
printf("\n");
printf("\t\t***************************************************\n");
printf("\t\t*********************新书查询**********************\n");
printf("\t\t***************************************************\n");
printf("\t\t**请选择服务种类:
**\n");
printf(star2);
printf(star2);
printf("\t\t**---------------1.借书登记管理------------------**\n");
printf(star2);
printf("\t\t**---------------2.续借登记管理------------------**\n");
printf(star2);
printf("\t\t**---------------3.超期登记管理------------------**\n");
printf(star2);
printf("\t\t**---------------4.还书登记管理------------------**\n");
printf(star2);
printf("\t\t**----------------5.返回上级-------------------**\n");
printf(star2);
printf(star1);
printf(star1);
printf("\n");
ch=getch();
clrscr();
switch(ch)
{
case'1':
borrow_register();break;
case'2':
printf("本功能尚未完成,任意键...\n");getch();break;
case'3':
printf("本功能尚未完成,任意键...\n");getch();break;
case'4':
back_register();break;
case'5':
return;
}
}
}
(003_1.h)
/*模块三:
1.借书登记管理*/
voidborrow_register()
{
FILE*fp;
charch;
book_info*p,*p1;
charbook_num[10];
do
{p=readfile1("allbook");
p1=p;
printf("\nEnterbook_num:
");
gets(book_num);
for(p1=p1->next;strcmp(p1->book_num,book_num)!
=0;p1=p1->next)/*书号相同退出循环*/
if(p1->next==NULL)
{
printf("\n本馆无该书记录,pressanykey...");
getch();
return;
}
printf("\nBorrowdate(yy-mm-dd):
");gets(p1->borrow_date);
printf("\nBackdate(yy-mm-dd):
");gets(p1->back_date);
printf("\nreadername:
");gets(p1->reader_name);
printf("\nreadernumber:
");gets(p1->reader_num);
if((fp=fopen(p1->reader_num,"ab"))==NULL)
{
printf("\nError:
usernoexist.pressanykey...\n");
getch();return;
}
save_point(p,"allbook");
fwrite(p1,LEN,1,fp);
fclose(fp);
getch();
printf("\nInputotherdata(Y/N)?
:
");
ch=getch();
}while(ch=='y'||ch=='Y');
printf("\npressanykey...");
getch();
}
/*模块三:
4.还书登记管理*/
voidback_register()
{
FILE*fp;
charbook_num[10];
charch;
charpassword[10];
book_info*p,*p1,*s1,*s2,*s3;
do
{p=readfile1("allbook");
p1=p;
printf("\nEnterbooknumber:
");
gets(book_num);
for(p1=p1->next;strcmp(p1->book_num,book_num)!
=0;p1=p1->next)/*找到链表中的结点*/
if(p1->next==NULL)
{
printf("\n本馆无该书记录,pressanykey...");
getch();
return;
}
strcpy(p1->borrow_date,"00-00-00");/*将已还信息初始化*/
strcpy(p1->back_date,"00-00-00");
strcpy(p1->reader_num,"00000000");
strcpy(p1->reader_name,"0000");
save_point(p,"allbook");
getch();
printf("\nReturnthebook.otherbook?
(Y/N):
");/*还其它书
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 信息管理 系统 源代码 02