数据结构图书馆图书借阅信息管理系统.docx
- 文档编号:30189655
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:50
- 大小:223.69KB
数据结构图书馆图书借阅信息管理系统.docx
《数据结构图书馆图书借阅信息管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构图书馆图书借阅信息管理系统.docx(50页珍藏版)》请在冰豆网上搜索。
数据结构图书馆图书借阅信息管理系统
东北大学信息科学与工程学院
数据结构课程设计报告
题目图书馆图书借阅信息管理系统
课题组长王逸飞
课题组成员王嘉琦李聪
专业名称计算机科学与技术
班级计1307
指导教师杨雷
2015年1月
课程设计任务书
题目:
图书馆图书借阅信息管理系统
问题描述:
对图书馆的图书借阅业务管理作一个简单的模拟。
设计要求:
设计图书借阅信息管理的模拟程序。
(1)采用顺序表或结构体链表存储结构。
(2)实现图书的创建、分类、插入、删除、修改、借阅等管理功能。
(3)实现图书的各种借阅查询和统计功能。
(4)考虑采用优化的查询和排序算法。
(5)其它完善性功能。
指导教师签字:
年 月 日
1课题概述1
1.1课题任务1
1.2课题原理1
1.3相关知识3
2需求分析4
2.1课题调研4
2.2用户需求分析5
3方案设计7
3.1总体功能设计7
3.2数据结构设计8
3.3函数原型设计10
3.4主算法设计12
3.5用户界面设计14
4方案实现15
4.1开发环境与工具15
4.2程序设计关键技术16
4.3个人设计实现(按组员分工)
4.3.1王逸飞设计实现17
4.3.2王嘉琦设计实现17
4.3.3李聪设计实现17
5测试与调试23
5.1个人测试(按组员分工)23
5.1.1王逸飞测试23
5.1.2王嘉琦测试23
5.1.2李聪测试23
5.2组装与系统测试33
5.3系统运行36
6课题总结39
6.1课题评价39
6.2团队协作40
6.3团队协作41
6.4个人设计小结(按组员分工)42
6.4.1王逸飞设计小结42
6.4.2王嘉琦设计小结42
6.4.3李聪设计小结42
7附录A课题任务分工50
A-1课题程序设计分工50
A-2课题报告分工51
附录B课题设计文档(光盘)52
B-1课程设计报告(电子版)52
B-2源程序代码(*.H,*.CPP)52
B-3工程与可执行文件52
B-4屏幕演示录像文件(可选)52
附录C用户操作手册(可选)53
C.1运行环境说明53
C.2操作说明54
1课题概述
1.1课题任务
【问题描述】
对图书馆的图书借阅业务管理作一个简单的模拟。
【设计要求】
设计图书借阅信息管理的模拟程序。
(1)采用顺序表或结构体链表存储结构。
(2)实现图书的创建、分类、插入、删除、修改、借阅等管理功能。
(3)实现图书的各种借阅查询和统计功能。
(4)考虑采用优化的查询和排序算法。
(5)其它完善性功能。
1.2课题原理
以结构体链表为存储结构,则抽象数据类型即为用结构体链表表示的线性表,所以主要涉及到结构体链表的一些基本操作函数。
1.3相关知识
结构体链表表示的线性表的定义,表示,C语言实现,在对图书信息进行排序的过程涉及到了结构体链表的排序技术。
文件的读入与输出操作。
2需求分析
2.1课题调研
对东北大学图书馆进行考察,并在网络上搜集相关资料。
发现图书管理系统主要面向两类人群,一是图书馆管理员,二是普通用户。
而两类人群中,管理员应该拥有对该系统的最高权限,全面掌握普通用户的借阅信息,全面掌握所有图书的借阅信息。
权限较低的用户只有图书信息一般查询权限,经过注册的用户可有进一步对图书信息进行操作的权限。
2.2用户需求分析
进过以上课题调研,主要有一下需要:
(1)一般用户:
对图书信息进行查询,显示;
(2)注册用户:
可以对图书信息进行查询,显示,借书,还书,导出个人图书信息;
(3)管理员:
针对用户,可以进行用户信息增删,用户信息显示,用户信息的查询;针对图书,可以进行图书信息的查询,图书信息的显示,图书信息的录入,图书信息的删除,图书信息的排序。
故需要以下主要函数用户登录管理,登录信息确认,查询图书功能,显示图书信息功能,显示图书信息,借书功能,还书功能,个人图书管理功能,图书信息录入,图书信息删除,图书信息修改以及一些界面跳转
3方案设计
3.1总体功能设计
(1)实现一般用户对图书信息进行查询,显示功能;
(2)实现注册用户对图书信息进行查询,显示,借书,还书,导出个人图书信息功能;
(3)实现管理员针对用户,可以进行用户信息增删,用户信息显示,用户信息的查询;实现针对图书,可以进行图书信息的查询,图书信息的显示,图书信息的录入,图书信息的删除,图书信息的排序。
3.2数据结构设计
用户和管理员信息的节点:
structuser
{
charusername[Max_username_size];
charpassword[Max_password_size];
}USER
typedefstructuser1*UserPtr1;
图书信息节点:
typedefstructbook
{
charbookname[65];
charauther[65];
charchubanshe[65];
charprofession[65];
intbooknumber;
intprice;
intonof;
structbook*next;
}BOOK;
我们将结构的创建,初始化,插入删除等基本操作都封装在主界面函数,插入函数,注册函数等之中,后面还有详细的说明,在此不赘述。
3.3函数原型设计
intshow_function1_window(UserPtr1);显示普通用户界面
intshow_function2_window(UserPtr1);显示管理员用户界面
intshow_guanyue_window();普通用户观阅函数
intshow_zhuce_window(UserPtr1);显示注册界面
intshow_queren_window(UserPtr1);显示确认界面
intjiemian();通用界面
intJieshu(BookPtr);借书函数
intHuanshu(BookPtr);还书函数
intInsert(BookPtr*);增加图书函数
intShow(BookPtr);显示图书信息函数
intSerch(BookPtra);查找函数
intnumserch(BookPtr);编号查询
intadresserch(BookPtr);出版社查询
intautherserch(BookPtr);作者查询
intnameserch(BookPtr);书名查询
intonofserch(BookPtr);图书状态查询
intpriceserch(BookPtr);价格查询
intDelete(BookPtr);删除图书信息
intSave(BookPtr);保存图书信息
intmain1();主体函数
3.4主算法设计
3.5用户界面设计
由于时间原因,低级版本在没有实现可视化界面,采用DOS来显示得到的结果。
4方案实现
4.1开发环境与工具
编程环境为visualc++6.0。
工具为C语言。
4.2程序设计关键技术
结构体链表的创建,插入,删除,输出,排序;文件的读入读出,对文件进行重新编辑。
4.3个人设计实现(按组员分小节)
4.3.1王逸飞、王嘉琦、李聪设计实现
1.课题任务
(1)主函数函数界面
(2)管理员界面函数
(3)管理员主要功能实现
(4)登录确认函数
(5)图书信息录入
(6)图书信息删除
(7)图书信息显示
(8)图书信息修改
(9)图书信息排序
(10)图书信息保存
(11)普通用户观阅函数
2.程序源代码
#include
#include
#include
#include
#include
#defineMax_username_size64+1
#defineMax_password_size64+1
structuser1
{
charusername[65];
charpassword[65];
}USER1,dengl;
//登陆用账户信息
typedefstructuser1*UserPtr1;
typedefstructuser2
{
charusername[Max_username_size];
intsex;
longintstunumber;
}USER2;
//管理用账户信息
typedefUSER2*UserPtr2;
typedefstructbook
{
charbookname[65];
charauther[65];
charchubanshe[65];
charprofession[65];
intbooknumber;
intprice;
intonof;
structbook*next;
}BOOK;
typedefBOOK*BookPtr;
intshow_function1_window(UserPtr1);
intshow_function2_window(UserPtr1);
intshow_zhuce_window(UserPtr1);
intshow_queren_window(UserPtr1);
intjiemian();
intJieshu(BookPtr);
intHuanshu(BookPtr);
intHuankuan();
intInsert(BookPtr*);
intShow(BookPtr);
intnumserch(BookPtr);
intadresserch(BookPtr);
intautherserch(BookPtr);
intnameserch(BookPtr);
intadresserch(BookPtr);
intonofserch(BookPtr);
intpriceserch(BookPtr);
intDelete(BookPtr);
intSave(BookPtr);
voidshow_denglu_window(UserPtr1b);
intSerch(BookPtra);
BookPtrbookhead=NULL;
intmain1()
{
intcmd0;
{system("cls");
printf("*******************************************************************************\n");
printf("\n\n\n\n");
printf("欢迎来到东北大学图书馆\n");
printf("\n\n\n\n");
printf("1:
请输入您的学名号\n");
printf("2:
学号注册\n");
printf("3:
管理员登陆\n\n\n");
printf("选择0,然后按任意键关闭本程序\n\n\n");
printf("请选择执行命令:
");
BookPtrpb1,pb2;
FILE*pbook1;
intflag1=0;
bookhead=(BookPtr)malloc(sizeof(structbook));//将文件中的图书信息导出,并存放在链表中
bookhead->next=NULL;
if((pbook1=fopen("f:
\\book.din","rb"))!
=NULL)
{
rewind(pbook1);
if(!
feof(pbook1))
{
fread(bookhead,sizeof(structbook),1,pbook1);
pb1=(BookPtr)malloc(sizeof(structbook));
bookhead->next=pb1;
fread(pb1,sizeof(structbook),1,pbook1);
}
while(!
feof(pbook1))
{
pb2=(BookPtr)malloc(sizeof(structbook));
fread(pb2,sizeof(structbook),1,pbook1);
if(feof(pbook1))
break;
pb1->next=pb2;
pb1=pb2;
}
pb1->next=NULL;
}
fclose(pbook1);
intcmd,trytime,io=0;
scanf("%d",&cmd);
cmd0=cmd;
while(cmd>3||cmd<1)//进入主要功能选项
{io++;
if(cmd==0)break;
if(io>2)
{
printf("Sorry,wrongnumbermorethanthreetimes\n");
printf("系统自动退出\n");
printf("继续登录请重启程序。
");
system("pause");
return0;
}
printf("无效字符,无法识别\n");
if(io>1)
printf("最后一次机会!
");
printf("请重新选择:
");
scanf("%d",&cmd);
}
FILE*fp1;
if(cmd==1)//用户入口
{
inttrytime,m=1;
for(trytime=1;m!
=0&&trytime<4;trytime++)
{
show_denglu_window(&dengl);
m=show_queren_window(&dengl);
if(trytime==2&&m!
=0)
{
printf("最后一次机会!
");
system("pause");
}
}
if(trytime==4&&m!
=0)
{
printf("系统自动退出\n");
printf("继续登录请重启程序。
");
system("pause");
}
if(m==0)
show_function1_window(&dengl);
}
elseif(cmd==2)//注册入口
{
show_denglu_window(&dengl);
if((fp1=fopen("f:
\\zhucezhe.din","ab"))==NULL)
{
printf("\ncannotopenfile");
}
fwrite(&dengl,sizeof(dengl),1,fp1);
fclose(fp1);
printf("\n注册成功");
}
elseif(cmd==3)//管理员登陆入口
{
show_denglu_window(&dengl);
for(trytime=0;trytime<3;trytime++)
{
if(strcmp(dengl.username,"zaq")==0&&strcmp(dengl.password,"zaq")==0)
{
show_function2_window(&dengl);
break;
}
else
show_denglu_window(&dengl);
}
}
}
returncmd0;
}
voidshow_denglu_window(UserPtr1b)//登录函数,从终端获得数据
{
memset(b->password,0,65);
system("cls");
printf("*******************************************************************************\n");
printf("\n\n\n\n");
printf("欢迎来到东北大学图书馆\n");
printf("\n\n\n\n");
printf("1:
请输入您的学号:
\n");
scanf("%s",b->username);
printf("2:
请输入您的三级密码:
\n");
inti=0;
charch=0;
chara='y';
while((ch=getch())!
='\r')
{
putchar('*');
b->password[i]=ch;
i++;
}
printf("\n是否显示密码:
是(Y)/否(N)");
scanf("%d",&a);
a=getchar();
if(a=='Y'||a=='y')
{printf("\n您输入的密码是%s",b->password);
system("pause");}
}
intshow_queren_window(UserPtr1b)//确认是否为已注册用户
{
FILE*fp2;
structuser1u;
UserPtr1v=&u;
intm=1,n=1;
if((fp2=fopen("f:
\\zhucezhe.din","rb"))==NULL)
{
printf("\ncannotopenfile");
}
while((m*m+n*n)!
=0)
{
fread(v,sizeof(USER1),1,fp2);
m=strcmp(b->username,v->username);
n=strcmp(b->password,v->password);
if(m==0&&n==0)
{
printf("\n已注册,可借阅图书\n");
system("pause");
return0;
}
if(feof(fp2))
break;
}
fclose(fp2);
if(m!
=0)
{printf("\n非法侵入\n");
system("pause");
return1;
}
}
intInsert(BookPtr*bookhead)//录入图书信息
{
FILE*pbook2;
system("cls");
jiemian();
if((pbook2=fopen("f:
\\book.din","ab"))==NULL)
{
printf("\n不能打开文件");
}
BookPtrp1,p2,r;
p1=p2=*bookhead;
while(p1!
=NULL)
{
p2=p1;
p1=p1->next;
}
r=(BookPtr)malloc(sizeof(structbook));
r->next=NULL;
if(r==NULL)
{
printf("分配空间失败!
!
!
");
return0;
}
if(p2==NULL)
*bookhead=r;
else{
p2->next=r;
}
printf("请输入图书名称:
\n");
scanf("%s",&r->bookname);
printf("请输入图书作者:
\n");
scanf("%s",&r->auther);
printf("请输入出版社:
\n");
scanf("%s",&r->chubanshe);
printf("请输入图书编号:
\n");
scanf("%d",&r->booknumber);
printf("请输入图书价格:
\n");
scanf("%d",&r->price);
printf("请输入出状态:
\n");
scanf("%d",&r->onof);
fwrite(r,sizeof(structbook),1,pbook2);
fclose(pbook2);
charm;
printf("\n是否要继续录入:
");
scanf("%c",&m);
scanf("%c",&m);
if(m=='y'||m=='Y')
Insert(&r);
}
//
intchange(BookPtra)//修改图书信息
{
system("cls");
jiemian();
FILE*pbook3;
if((pbook3=fopen("f:
\\book.din","wb"))==NULL)
{
printf("\n不能打开文件");
}
BookPtrp1,p2;
p1=p2=a;
intchangenum;
BOOKlinshi;
printf("\n1,书名\n2,作者\n3,出版社\n4,编号\n5,单价\n6,状态\n");
printf("请选择要进行修改的图书信息所对应的序号");
scanf("%d",&changenum);
switch(changenum)
{
case1:
printf("请输入要进行修改的书的名字:
");
scanf("%s",linshi.bookname);
while(p1!
=NULL)
{
if(strcmp(linshi.bookname,p1->bookname)==0)
{
printf("请输入要修改之后的书名:
\n");
scanf("%s",&p1->bookname);
break;
}
p2=p1;
p1=p1->next;
}
break;
case2:
printf("请输入要进行修改的作者的名字:
");
scanf("%s",linshi.auther);
while(p1!
=NULL)
{
if(strcmp(linshi.auther,p1->auther)==0)
{
printf("请输入要修改之后的作者:
\n");
scanf("%s",&p1->auther);
break;
}
p2=p1;
p1=p1->next;
}
break;
case3:
printf("请输入要进行修改的书的出版社:
");
scanf("%s",linshi.chubanshe);
while(p1!
=NULL)
{
if(strcmp(linshi.chubanshe,p1->chubanshe)==0)
{
printf("请输入要修改之后的出版社:
\n");
scanf("%s",&p1->chubanshe);
break;
}
p2=p1;
p1=p1->next;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 图书馆 图书 借阅 信息管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)