图书馆信息管理系统含附源代码02Word文件下载.docx
《图书馆信息管理系统含附源代码02Word文件下载.docx》由会员分享,可在线阅读,更多相关《图书馆信息管理系统含附源代码02Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。
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;
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结点*/
}r->
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;
/*这样可以确保输到最后结点信息*/
\npressanykey..."
/*根据类型代号输出链表信息*/
voidprint_info2(book_info*p)
intn=0;
chari[3];
\n输入图书类型代号(1.计算机2.文艺...):
"
gets(i);
next)
if(strcmp(p->
book_type,i)==0)
n++;
next==NULL)
break;
\n共找到该类图书:
%d本."
n);
/*图书排列*/
voidsort_book(charfilename[],charch)
book_info*p;
p=readfile1(filename);
/*调用读取文件函数readfile1*/
if(p==NULL||p->
next==NULL)/*文件内容为空*/
\nNoinformationabout.pressanykey..."
return;
if(ch=='
1'
)/*时间排列*/
print_info(p);
2'
)/*类型排列*/
print_info2(p);
\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->
/*将p1后移一个结点,p2指向p1原结点*/
if(strcmp(book_num,p1->
book_num)==0)/*找到结点*/
if(p1==p)p=p1->
/*为p1首结点,把第2结点地址赋给首结点*/
elsep2->
next=p1->
/*否则p1下个结点地址赋给p1前一地址*/
\ndelete:
%s,OK.pressanykey...\n"
p1->
reader_num);
free(p1);
else
\nTheentererror!
returnp;
/*将链表信息写入文件保存*/
voidsave_point(book_info*p,charfilename[])
s=p;
for(s=s->
s=s->
next)/*将s指向它的下一个结点*/
fwrite(s,LEN,1,fp);
/*写入信息*/
if(s->
/*将链表信息追加入文件保存*/
voidsave_point2(book_info*p,charfilename[])
ab"
(001.h)
/*模块一:
现有图书信息*/
voidnowbook_info()
charch;
for(;
)
\t\t***************************************************\n"
\t\t******************现有图书信息*********************\n"
\t\t**请选择服务种类**\n"
printf(star2);
\t\t**----------------1.按时间排列-------------------**\n"
\t\t**----------------2.按类型排列-------------------**\n"
\t\t**----------------3.返回上级-------------------**\n"
printf(star1);
ch=getch();
3'
)return;
elseif(ch!
='
ch!
)continue;
/*返回循环,直到ch=1,2,3*/
sort_book("
allbook"
ch);
(002.h)
/*模块二:
新书查询*/
voidnew_book()
\n\t\t***************************************************\n"
\t\t*********************新书查询**********************\n"
\t\t**请选择服务种类:
**\n"
newbook"
(003.h)
/*模块三:
借阅管理*/
#include"
003_1.h"
voidreader_manage()
charpassword[10];
if(flag==2)/*普通用户只能查看自身文件信息*/
{clrscr();
fp=fopen(username,"
fgets(password,9,fp);
printf(booktype1);
feof(fp))
putchar(getc(fp));
\npressanykey...\n"
\t\t**---------------1.借书登记管理------------------**\n"
\t\t**---------------2.续借登记管理------------------**\n"
\t\t**---------------3.超期登记管理------------------**\n"
\t\t**---------------4.还书登记管理------------------**\n"
\t\t**----------------5.返回上级-------------------**\n"
switch(ch)
case'
:
borrow_register();
printf("
本功能尚未完成,任意键...\n"
getch();
break;
4'
back_register();
5'
return;
(003_1.h)
/*模块三:
1.借书登记管理*/
voidborrow_register()
book_info*p,*p1;
do
{p=readfile1("
\nEnterbook_num:
gets(book_num);
for(p1=p1->
strcmp(p1->
book_num,book_num)!
=0;
p1=p1->
next)/*书号相同退出循环*/
if(p1->
\n本馆无该书记录,pressanykey..."
return;
\nBorrowdate(yy-mm-dd):
gets(p1->
borrow_date);
\nBackdate(yy-mm-dd):
back_date);
\nreadername:
reader_name);
\nreadernumber:
if((fp=fopen(p1->
reader_num,"
\nError:
usernoexist.pressanykey...\n"
save_point(p,"
fwrite(p1,LEN,1,fp);
\nInputotherdata(Y/N)?
}while(ch=='
y'
||ch=='
Y'
4.还书登记管理*/
voidback_register()
book_info*p,*p1,*s1,*s2,*s3;
\nEnterbooknumber:
next)/*找到链表中的结点*/
\n本馆无该书记录,pressanykey..."
strcpy(p1->
borrow_date,"
00-00-00"
/*将已还信息初始化*/
back_date,"
00000000"
reader_name,"
0000"
\nReturnthebook.otherbook?
(Y/N):
/*还其它书