图书管理系统实验报告.doc

上传人:wj 文档编号:586736 上传时间:2023-04-29 格式:DOC 页数:37 大小:349.59KB
下载 相关 举报
图书管理系统实验报告.doc_第1页
第1页 / 共37页
图书管理系统实验报告.doc_第2页
第2页 / 共37页
图书管理系统实验报告.doc_第3页
第3页 / 共37页
图书管理系统实验报告.doc_第4页
第4页 / 共37页
图书管理系统实验报告.doc_第5页
第5页 / 共37页
图书管理系统实验报告.doc_第6页
第6页 / 共37页
图书管理系统实验报告.doc_第7页
第7页 / 共37页
图书管理系统实验报告.doc_第8页
第8页 / 共37页
图书管理系统实验报告.doc_第9页
第9页 / 共37页
图书管理系统实验报告.doc_第10页
第10页 / 共37页
图书管理系统实验报告.doc_第11页
第11页 / 共37页
图书管理系统实验报告.doc_第12页
第12页 / 共37页
图书管理系统实验报告.doc_第13页
第13页 / 共37页
图书管理系统实验报告.doc_第14页
第14页 / 共37页
图书管理系统实验报告.doc_第15页
第15页 / 共37页
图书管理系统实验报告.doc_第16页
第16页 / 共37页
图书管理系统实验报告.doc_第17页
第17页 / 共37页
图书管理系统实验报告.doc_第18页
第18页 / 共37页
图书管理系统实验报告.doc_第19页
第19页 / 共37页
图书管理系统实验报告.doc_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

图书管理系统实验报告.doc

《图书管理系统实验报告.doc》由会员分享,可在线阅读,更多相关《图书管理系统实验报告.doc(37页珍藏版)》请在冰点文库上搜索。

图书管理系统实验报告.doc

图书管理系统实验报告

一、问题描述

有一个小型书库保管了大量图书,关于图书有大量信息需要处理,这些信息包括图书的分类、书名、作者名、购买日期、价格等。

现要求编写一个程序以便于对图书的管理。

基本要求:

a.建立图书信息。

b.提供想找功能,按照多种关键字查找需要的书籍。

例如按书名查找,输入书名后,将显示出该图书的所有信息,或显示指定信息。

c.提供排序功能,按照多种关键字对所有的书籍进行排序,例如按出版日期进行排序。

d.提供维护功能,可以对图书信息进行添加、修改、删除等功能。

数据结构与算法分析

数据存储结构可根据需要自选。

如:

顺序表、单链表、双链表、栈等。

算法主要要求用到对数据的查询与排序算法。

二、概要设计

有四个模块

1)图书初始化

输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。

2)新书入库

新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。

3)查询图书信息

4)退出

退出读书管理系统并保存图书信息。

图书管理系统

  

借阅操作模块

图书管理模块

查询操作模块

借书系统

还书系统

读者信息查询

图书信息查询

采编入库

初始化图书信息

三、算法设计

进入系统后首先进行图书初始化,输入图书的信息。

开始

输入图书编号、名称、作者和图书数量

进入系统

1)采编入库

录入图书信息

判断是否有此图书

在原有的纪录上加上现有的图书数量

向系统中加入新纪录

2)查询图书信息

判断图书信息是否为空

输出图书信息:

编号、名称、作者、现有和库存

结束

四、运行结果和调试分析

图书信息初始化

同一本新书入库的运行结果图

不同的新书采编入库

采编入库后查询图书信息的运行结果图

借书

借书后查询图书信息的运行结果图

借同一本书的运行结果图

退出

五、总结体会

虽然这次的程序是通过上网查出来的,但是通过这次的实验使我知道了图书管理系统的流程,知道了一些以前不知道的知识,在运行程序时也遇到了一些问题,借书时只能借一本书,再借书就不能显示是借了还是不能借,把最多能借书的数量改了一下还是不行,最后在每一个判断输出之后都加了gotoEND借书,就能正常借书了。

程序有点长,本来一个函数就能完成一个功能,他用了两个函数就我把自己能改成一个的改了。

借书系统比较复杂,不容易懂,和同学交流了一下自己看了看才明白。

这次的实验还让我复习了数据结构的一些知识,如数组,while语句,switch语句,链表,还知道了如何使用system("cls")清屏,还知道了strcmp是用来比较字符串s1和s2大小的,strcpy使用来把字符串s2的值赋给s1的。

这次的实验增加了我们自己动手动脑的能力,希望多做一些这样的实验,很有意义,和现实生活结合的程序增加了我的兴趣。

源代码

#include

#include

#include

#include

#defineMax4

typedefstructbook

{

charbook_num[10];

charbook_name[20];

charbook_writer[10];

intbook_xy;

intbook_kc;

structbook*next;

}BK;

typedefstructborrow

{

charborrow_book_num[10];

charlimit_date[8];

}BO;

typedefstructreader

{

charreader_num[10];

charreader_name[10];

intright;

BOborrow[Max];

structreader*next;

}RD;

BK*h_book;

RD*h_reader;

voidLogin();

intMenu();

voidInit();

voidInit_book();

voidMenu_select();

voidInsert_New_Book();

voidFind_Book();

voidadd_reader();

voidPrint_reader();

voidPrint_book();

voidBorrow_Book();

voidReturn_Book();

voidSave();

voidSave_Book();

voidSave_Reader();

voidLoad();

voidLoad_Reader();

voidLoad_Book();

voidLogin()

{

system("cls");

printf("\n\n\n\t\t***************************************\n");

printf("\n\n\n\t\t\t欢迎使用图书管理系统\n");

printf("\n\n\n\t\t***************************************\n");

printf("\n\n\t\t本程序制作人王学号:

\n\n\n\n\n\n\n");

printf("\n\n\n\t\t按任意键进入系统...");

getch();system("cls");

}

intMenu()/*主菜单*/

{intdm;

printf("\n\t\t图书管理系统主菜单\n");

printf("=================================================\n");

printf("*\t0----退出系统\n");

printf("*\t1----采编入库\n");

printf("*\t2----登记读者\n");

printf("*\t3----借阅登记\n");

printf("*\t4----还书管理\n");

printf("*\t5----查询图书信息\n");

printf("*\t6----查询读者信息\n");

printf("=================================================\n");

printf("请选择相应的代码:

");

for(;;)

{scanf("%d",&dm);//dm输入的数字

if(dm<0||dm>6)

printf("\n错误!

请重新输入:

");

elsebreak;

}

returndm;

}

voidMenu_select()/*主菜单选择函数*/

{

for(;;)

{

switch(Menu())/*功能选择*/

{case0:

system("cls");

Save();

printf("\n\n\t文件保存成功!

\n");

printf("\n\n\t欢迎下次使用本系统!

\n");

getch();

exit(0);

case1:

Insert_New_Book();break;

case2:

add_reader();break;

case3:

Borrow_Book();break;

case4:

Return_Book();break;

case5:

Print_book();break;

case6:

Print_reader();break;

default:

printf("\n错误!

");

exit(0);}

}

}

voidInit()/*初始化*/

{

BK*p0;

printf("\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n");

p0=(BK*)malloc(sizeof(BK));

h_book=p0;

printf("\n请输入图书信息:

\n");

printf("图书编号:

");/*输入图书编号(唯一)*/

scanf("%s",p0->book_num);

printf("图书名称:

");/*输入图书名称*/

scanf("%s",p0->book_name);

printf("图书作者:

");/*输入图书作者*/

scanf("%s",p0->book_writer);

printf("图书数量:

");/*输入图书数量*/

scanf("%d",&p0->book_kc);

p0->book_xy=p0->book_kc;/*开始时图书现有量和库存量相等*/

p0->next=NULL;

printf("\n图书信息初始化完毕!

按任意键继续下一步操作..\n");

getch();

system("cls");

}

voidInsert_New_Book()/*新书入库*/

{

BK*p,*p0,*p1;

p=p1=h_book;

printf("\n新书入库模块...\n");

printf("\n请输入新书信息..\n包括书号.书名.数量..\n");

p0=(BK*)malloc(sizeof(BK));

printf("图书编号:

");

scanf("%s",p0->book_num);

while(strcmp(p0->book_num,p1->book_num)!

=0&&p1->next!

=NULL)

p1=p1->next;

if(strcmp(p0->book_num,p1->book_num)==0)/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/

{

printf("\n此编号图书已存在!

!

直接入库!

\n");

printf("图书数量:

");

scanf("%d",&p0->book_kc);

p1->book_kc+=p0->book_kc;

p1->book_xy+=p0->book_kc;

}

else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/

{

printf("图书名称:

");

scanf("%s",p0->book_name);

printf("图书作者:

");

scanf("%s",p0->book_writer);

printf("图书数量:

");

scanf("%d",&p0->book_kc);//库存数量

while(p->next)

{p=p->next;}

if(h_book==NULL)h_book=p0;/*此处分两种情况,链表中没有数据,head直接指向p0处*/

elsep->next=p0;/*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/

p0->next=NULL;

p0->book_xy=p0->book_kc;

}

printf("\n新书入库完毕!

按任意键继续下一步操作..\n");

getch();

system("cls");

}

voidadd_reader()/*添加读者*/

{RD*p0;

inti;

printf("\n读者初始化开始,请输入读者信息..\n包括书证号.姓名..\n");

p0=(RD*)malloc(sizeof(RD));/*申请新结点存储空间*/

h_reader=p0;

printf("\n请输入读者的信息:

\n");

printf("读者书证号:

");

scanf("%s",p0->reader_num);

printf("读者姓名:

");

scanf("%s",p0->reader_name);

p0->right=0;

for(i=0;i

{

strcpy(p0->borrow[i].borrow_book_num,"0");/*所借图书直接置为(即没有借书)*/

strcpy(p0->borrow[i].limit_date,"0");

}

p0->next=NULL;

printf("\n读者信息初始化完毕!

按任意键继续下一步操作..\n");

getch();

system("cls");

}

voidBorrow_Book()/*借书模块*/

{

BK*p0;RD*p1;

charbo_num[10],rea_num[10],lim_date[8];

inti;

p0=h_book;p1=h_reader;

printf("\n借书模块...\n");

printf("\n请输入借书的读者书证号:

");

scanf("%s",rea_num);

while(p1->next!

=NULL&&strcmp(rea_num,p1->reader_num)!

=0)

p1=p1->next;

if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!

=0)

{

printf("\n此读者编号不存在!

按任意键返回..\n");

gotoEND;

}

printf("\n请输入你要借的书的编号:

");

scanf("%s",bo_num);

while(strcmp(bo_num,p0->book_num)!

=0&&p0->next!

=NULL)

p0=p0->next;

if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!

=0)

{

printf("\n此图书编号不存在!

按任意键返回..\n");

gotoEND;

}

elseif(p0->book_xy<=0)

{

printf("\n抱歉,此书已借完!

请等待新书的到来!

!

\n按任意键返回....");

gotoEND;

}

elseif(p1->right>Max||p1->right==Max)

{

printf("\n不好意思,借书数目已满!

不能借书!

\n按任意键返回....");

gotoEND;

}

elseif(strcmp(p1->borrow[0].borrow_book_num,"0")!

=0)

{

for(i=0;i

{

if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0)

{

printf("\n抱歉!

同一个读者不能同借两本相同的书!

\n按任意键返回....");

gotoEND;

}

elseif(strcmp(p1->borrow[i].borrow_book_num,"0")==0)

{

printf("\n请输入你要归还图书的日期:

");

scanf("%s",lim_date);

strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);

strcpy(p1->borrow[p1->right-1].limit_date,lim_date);

p0->book_xy--;

p0->book_kc--;

printf("\n读者编号%s借书完毕!

按任意键继续下步操作..",p1->reader_num);

gotoEND;

}

}

}

else

{

printf("\n请输入你要归还图书的日期:

");

scanf("%s",lim_date);

strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);

strcpy(p1->borrow[p1->right-1].limit_date,lim_date);

p0->book_xy--;

p0->book_kc--;

printf("\n读者编号%s借书完毕!

按任意键继续下步操作..",p1->reader_num);

}

END:

getch();system("cls");

}

voidReturn_Book()/*还书模块*/

{

BK*p;RD*q;

inti,j,find=0;

charreturn_book_num[10],return_reader_num[10];

p=h_book;q=h_reader;

printf("\n还书模块...\n");

printf("\n请输入要还书的读者编号:

");

scanf("%s",return_reader_num);

while(q->next!

=NULL&&strcmp(return_reader_num,q->reader_num)!

=0)

q=q->next;

if(q->next==NULL&&strcmp(return_reader_num,q->reader_num)!

=0)

{

find=2;

printf("\n此读者编号不存在!

按任意键返回..\n");

gotoend;

}

printf("\n请输入读者还书的编号:

");

scanf("%s",return_book_num);

while(p->next!

=NULL&&strcmp(return_book_num,p->book_num)!

=0)

p=p->next;

if(p->next==NULL&&strcmp(return_book_num,p->book_num)!

=0)

{

find=2;

printf("\n错误!

此图书编号不存在!

按任意键返回..\n");

gotoend;

}

for(i=0;i

if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0)/*如果此读者借了此书*/

{

find=1;

for(j=i;j

{

strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num);

strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date);

}

strcpy(q->borrow[Max-1].borrow_book_num,"0");

strcpy(q->borrow[Max-1].limit_date,"0");

p->book_xy++;

p->book_kc++;

q->right--;

printf("\n编号%s的读者还书完毕!

按任意键继续下步操作..",return_reader_num);

}

if(find==0)

printf("\n错误!

此读者未借此书!

按任意键返回..\n");

end:

getch();system("cls");

}

voidPrint_book()/*查询图书信息*/

{

BK*p;

p=h_book;

printf("\n图书信息如下:

\n\n");

printf("图书编号\t图书名称\t图书作者\t现有\t\t库存\n");

while(p!

=NULL)

{

printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",p->book_num,p->book_name,p->book_writer,p->book_xy,p->book_kc);

p=p->next;

}

printf("\n图书信息打印完毕!

按任意键继续下一步操作..");

getch();

system("cls");

}

voidPrint_reader()/*查询读者信息*/

{

RD*p;

inti;

p=h_reader;

printf("\n读者信息如下:

\n\n");

printf("读者书证号\t\t读者姓名\n");

printf("\n");

while(p!

=NULL)

{

printf("\t%s\t\t%s",p->reader_num,p->reader_name);

for(i=0;i

{

printf("\n");

printf("图书编号",i+1);

printf("\t还书日期",i+1);

printf("\n");

printf("\t%s

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2