图书馆信息管理系统含附源代码02.docx

上传人:b****5 文档编号:6808440 上传时间:2023-01-10 格式:DOCX 页数:32 大小:224.24KB
下载 相关 举报
图书馆信息管理系统含附源代码02.docx_第1页
第1页 / 共32页
图书馆信息管理系统含附源代码02.docx_第2页
第2页 / 共32页
图书馆信息管理系统含附源代码02.docx_第3页
第3页 / 共32页
图书馆信息管理系统含附源代码02.docx_第4页
第4页 / 共32页
图书馆信息管理系统含附源代码02.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

图书馆信息管理系统含附源代码02.docx

《图书馆信息管理系统含附源代码02.docx》由会员分享,可在线阅读,更多相关《图书馆信息管理系统含附源代码02.docx(32页珍藏版)》请在冰豆网上搜索。

图书馆信息管理系统含附源代码02.docx

图书馆信息管理系统含附源代码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):

");/*还其它书

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1