图书管理系统设计报告 个人部分解析文档格式.docx
《图书管理系统设计报告 个人部分解析文档格式.docx》由会员分享,可在线阅读,更多相关《图书管理系统设计报告 个人部分解析文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
6)查询图书信息7)查询读者信息可查询读者姓名书证号,借了几本书,都是什么书和还书日期,还可以借几本书。
8)退出退出读书管理系统并保存读者和图书信息。
四、主体内容图书管理系统总体情况如下图:
这个系统主要有四大模块,图书管理模块、读者管理模块、借阅操作模块、查询操作模块。
每个模块下又有几个分支模块。
1.问题分析主菜单模块需要设计一个可供选择的界面,在界面中通过选择不同的按键来实现不同的功能。
登记读者模块需要可以记录学生的书证号以及学生的姓名。
借书模块中学生可以通过书证号和所需要借的书的编号来借书,借书完成后图书数量减少。
查询读者模块需要随着读者借书、还书不断变化,总是能显示出当前读者的准确信息。
2.数据结构结构体定义图书文件:
typedefstructbookcharbook_num10;
charbook_name20;
定义图书的编号,名称,作者,charbook_writer10;
现有以及库存数量intbook_xy;
intbook_kc;
structbook*next;
定义图书结构体BK;
数据记录借阅文件:
typedefstructborrowcharborrow_book_num10;
定义借阅图书编号以charlimit_date8;
及还书日期BO;
数据记录读者文件:
typedefstructreadercharreader_num10;
定义读者书证号以charreader_name10;
及读者姓名intright;
BOborrowMax;
借书最大数量structreader*next;
定义读者结构体RD;
数据记录3.算法设计及程序流程图进入系统后,显示功能列表,可选择任意系统。
主菜单:
程序流程图:
源程序:
intMenu()/*主菜单*/intdm;
printf(ntt图书管理系统主菜单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(请选择相应的代码:
);
for(;
)scanf(%d,&
dm);
/dm输入的数字if(dm6)printf(n错误!
请重新输入:
elsebreak;
returndm;
voidMenu_select()/*主菜单选择函数*/for(;
)switch(Menu()/*功能选择*/case0:
system(cls);
Save();
printf(nnt文件保存成功!
n);
printf(nnt欢迎下次使用本系统!
getch();
exit(0);
case1:
Insert_New_Book();
break;
case2:
add_reader();
case3:
Borrow_Book();
case4:
Return_Book();
case5:
Print_book();
case6:
Print_reader();
default:
printf(n错误!
登记读者:
voidadd_reader()/*添加读者*/RD*p0;
inti;
printf(n读者初始化开始,请输入读者信息.n包括书证号.姓名.n);
p0=(RD*)malloc(sizeof(RD);
/*申请新结点存储空间*/h_reader=p0;
printf(n请输入读者的信息:
printf(读者书证号:
scanf(%s,p0-reader_num);
printf(读者姓名:
scanf(%s,p0-reader_name);
p0-right=0;
for(i=0;
iborrowi.borrow_book_num,0);
/*所借图书直接置为(即没有借书)*/strcpy(p0-borrowi.limit_date,0);
p0-next=NULL;
printf(n读者信息初始化完毕!
按任意键继续下一步操作.n);
借阅图书:
否是否否是是否是否源程序:
voidBorrow_Book()/*借书模块*/BK*p0;
RD*p1;
charbo_num10,rea_num10,lim_date8;
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&
=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此图书编号不存在!
elseif(p0-book_xyrightMax|p1-right=Max)printf(n不好意思,借书数目已满!
不能借书!
n按任意键返回.);
elseif(strcmp(p1-borrow0.borrow_book_num,0)!
=0)for(i=0;
iborrowi.borrow_book_num,bo_num)=0)printf(n抱歉!
同一个读者不能同借两本相同的书!
n按任意键返回.);
elseif(strcmp(p1-borrowi.borrow_book_num,0)=0)printf(n请输入你要归还图书的日期:
scanf(%s,lim_date);
strcpy(p1-borrowp1-right+.borrow_book_num,bo_num);
strcpy(p1-borrowp1-right-1.limit_date,lim_date);
p0-book_xy-;
p0-book_kc-;
printf(n读者编号%s借书完毕!
按任意键继续下步操作.,p1-reader_num);
elseprintf(n请输入你要归还图书的日期:
END:
查询读者:
程序流程图:
否源程序:
voidPrint_reader()/*查询读者信息*/RD*p;
p=h_reader;
printf(n读者信息如下:
nn);
printf(读者书证号tt读者姓名n);
printf(n);
while(p!
=NULL)printf(t%stt%s,p-reader_num,p-reader_name);
iborrowi.borrow_book_num);
printf(tt%s,p-borrowi.limit_date);
p=p-next;
printf(n读者信息打印完毕!
按任意键继续下一步操作.);
4.运行结果和调试分析同一本新书入库的运行结果图不同的新书采编入库采编入库后查询图书信息的运行结果图登记读者信息借书借书后查询图书信息的运行结果图借同一本书的运行结果图借不同的书借两本书后查询读者信息的运行结果图还书运行结果图还书之后再查询读者信息的运行结果图还书后查询图书信息退出5.附录voidLogin()进入界面函数intMenu()主菜单函数voidInit()初始化函数voidInit_book()初始化图书信息函数voidMenu_select()主菜单选择函数voidFind_Book()查找图书函数voidInsert_New_Book()新书入库函数voidadd_reader()添加读者函数voidPrint_reader()查询读者信息函数voidPrint_book()查询图书信息函数voidBorrow_Book()借书函数voidReturn_Book()还书函数voidSave()保存信息函数voidSave_Book()保存图书信息函数voidSave_Reader()保存读者信息函数voidLoad()加载信息函数voidLoad_Reader()加载读者信息voidLoad_Book()加载图书信息参考文献:
C语言程序设计(何钦铭版)数据结构(耿国华版)数据结构课程设计(苏仕华版)六、心得体会本次课程设计,使我对数据结构这门课程有了更深入的理解。
数据结构是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
刚开始做这个程序的时候,感到完全无从下手,甚至让我觉得完成这次程序设计根本就是不可能的,于是开始查阅各种资料以及参考文献,之后便开始着手写程序,写完运行时有很多问题,通过同学间的帮助最终基本解决问题。
但是其中还有写瑕疵无法去除,可能是我的水平还不够好,还需要更多的实践操作才能写的更好吧。
通过这段时间的课程设计,我认识到数据结构是一门比较难的课程。
需要多花时间上机练习。
这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。
总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。
图书管理系统源程序#include#include#include#include#defineMax4typedefstructbookcharbook_num10;
charbook_writer10;
charbook_cbs10;
intbook_xy;
BK;
charlimit_date8;
BO;
charreader_name10;
intright;
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(nnntt*n);
printf(nnnttt欢迎使用图书管理系统n);
printf(nntt程序制作人王攀圆李柱柱nntt学号:
10603130140421060313014047);
printf(nnntt按任意键进入系统.);
/*dm输入的数字*/if(dm6)printf(n错误!
voidInit()/*初始化*/BK*p0;
p0=(BK*)malloc(sizeof(BK);
/*分配一个sizeof(BK)大小的空间,并且把该空间的地址赋给BK指针类型的p0*/h_book=p0;
printf(n请输入图书信息:
printf(图书编号:
/*输入图书编号(唯一)*/scanf(%s,p0-book_num);
printf(图书名称:
/*输入图书名称*/scanf(%s,p0-book_name);
printf(图书作者:
/*输入图书作者*/scanf(%s,p0-book_writer);
printf(图书出版社:
scanf(%s,p0-book_cbs);
printf(图书数量:
/*输入图书数量*/scanf(%d,&
p0-book_kc);
p0-book_xy=p0-book_kc;
/*开始时图书现有量和库存量相等*/p0-next=NULL;
printf(n图书信息初始化完毕!
voidInsert_New_Book()/*新书入库*/BK*p,*p0,*p1;
p=p1=h_book;
printf(n新书入库模块.n);
printf(n请输入新书信息.n包括书号.书名.数量.出版社.n);
scanf(%s,p0-book_num);
while(strcmp(p0-book_num,p1-book_num)!
p1-next!
=NULL)p1=p1-next;
if(strcmp(p0-book_num,p1-book_num)=0)/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/printf(n此编号图书已存在!
直接入库!
scanf(%d,&
p1-book_kc+=p0-book_kc;
p1-book_xy+=p0-book_kc;
else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/printf(图书名称:
scanf(%s,p0-book_name);
scanf(%s,p0-book_writer);
/*库存数量*/while(p-next)p=p-next;
if(h_book=NULL)h_book=p0;
/*此处分两种情况,链表中没有数据,head直接指向p0处*/elsep-next=p0;
/*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/p0-next=NULL;
printf(n新书入库完毕!
/*所借图书直接置为0(即没有借书)*/strcpy(p0-borrowi.limit_date,0);
strcmp(rea_num,p1-reader_num)=0)p1=p1-next;
p0-next=NULL)p0=p0-next;
voidReturn_Book()/*还书模块*/BK*p;
RD*q;
inti,j,find=0;
charreturn_book_num10,return_reader_num10;
p=h_book;
q=h_reader;
printf(n还书模块.n);
printf(n请输入要还书的读者编号:
scanf(%s,return_reader_num);
while(q-next!
st