数据结构课程设计图书基本业务模拟.docx
《数据结构课程设计图书基本业务模拟.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书基本业务模拟.docx(42页珍藏版)》请在冰豆网上搜索。
数据结构课程设计图书基本业务模拟
数据结构课程设计
图书管理基本业务模拟
院(系、部):
信息工程学院
姓名:
刘歌楚晓兰
缴经纬刘博爱
年级:
2013级
专业:
计算机科学与技术
第一章设计任务书
1.1课程设计题目
1.2任务起止时间
1.3课程设计的主要内容与要求
1.4进度计划及指导安排
第二章小组成员及分工
1.1小组成员
1.2成员分工
第三章说明书正文
1.1课程设计设计题目
1.2设计目的
1.3算法思想分析
1.4算法描述与实现
1.4.1数据结构类型定义
1.4.2主要算法流程图及功能描述
1.4.3程序代码
1.5程序运行结果
1.6结论
课程设计任务书
1.1课程设计题目
图书管理基本业务模拟
1.2任务起止时间:
2015年6月29日至2015年7月8日
1.3课程设计主要内容与要求
主要内容:
图书管理一般包括图书采编、图书编目、图书查询及图书流通(借、还书)等基本业务。
要求设计一个图书管理信息系统,用计算机模拟实现上述系统功能。
基本要求:
(1)书的登记内容包括书号、书名、著作者、现存量和库存量等;学生信息包括借书证号、借阅信息等;
(2)以书号建立索引表(线性表)以提高查找效率;
(3)主要功能如下:
a)采编入库:
新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;
b)借阅:
如果一种书的现存量大于0,则借出一本,登记借阅者的书号和归还期限,改变现存量;
c)归还:
注销对借阅者的登记,改变该书的现存量。
(4)输出形式:
能按书号、书名、著作者查找库存的书籍信息
能按学生的借书证号显示学生信息和借阅信息
书籍入库
借书功能实现
还书功能实现
1.4进度计划及指导安排
周
日
实验内容
实验要求
18
周一
分析题目/查阅资料
实验室/图书馆
周二
算法分析设计/查阅资料
实验室
周三
算法分析设计
实验室
周四
算法分析设计
实验室
周五
调试运行
实验室
19
周一
调试运行
实验室
周二
调试运行
实验室
周三
撰写设计报告
实验室/图书馆
第二章小组成员及分工
1.1小组成员
缴经纬楚晓兰刘歌刘博爱(组长)
1.2成员分工
缴经纬:
算法设计与分析;图书入库、借阅记录函数编码,查询库存函数的文件操作;主菜单函数的设计与编码;
楚晓兰:
借阅图书函数、登陆界面的设计与编码;系统测试;
编写文档;
刘歌:
查询库存函数,释放图书、索引、借阅链表函数编码;
载入界面的设计与编码
刘博爱:
算法设计与分析;主函数、归还图书和查询图书函数
编码;编写文档;
说明书正文
1.1设计题目
图书基本业务模拟
1.2设计目的
随着社会的不断发展,技术的进步,业务的管理趋于自动化是大势所趋。
图书作为人类进步的阶梯,在人们学习生活中起着举足轻重的作用。
面对大量的书籍,管理是不可或缺的问题。
而在图书的运营中,不仅仅是大量的书籍信息,还有很多的读者信息,以及两者产生的借书还书信息,都需要一个正规化的管理。
人工记录的方式在目前这个信息量巨大的时代,已经明显显现出效率低下、出错率高、浪费大量的人力物力等缺点,大大影响图书管理工作。
图书管理系统就是旨在方便图书管理操作,实现自动化管理,方便服务。
本系统基本实现设计图书管理的基本业务操作,具体涉及到新图书入库、查询图书库存及库存图书信息打印、读者借阅图书、借阅图书记录、归还图书和分别根据书号、书名、作者信息进行图书查询功能。
1.3算法思想分析
本次课程设计使用的算法主要是对单链表的操作,主要涉及链表的建立和链表的查询;
单链表的建立采用尾插法建立;首先申请一个结点的存储空间,将需要入库的图书信息存到结点之中,并且对输入的入库数量进行判断;然后判断是否已存在图书信息的链表,存在的情况下进行尾插法插入链表,并且判断入库的新图书是否已经存在,存在的情况下只进行库存量和现存量的增加,否则尾插。
不存在图书信息的链表,则将表头指针指向结点形成链表。
链表的查询则是对链表的顺序查找;创建指针指向链表的头结点,用户输入需要查找的信息,与结点信息进行比较,不匹配则指向链表的下一个结点进行比较。
如果整个链表查找结束,则输出未找到。
单链表顺序查找时间取决于查找内容在表中的位置,最坏的情况为表长n,平均查找长度为(n+1)/2。
1.4算法描述与实现
1.4.1数据结构类型定义
/*图书结构*/
structBook
{
unsignedlongBookID;/*图书编号*/
charBookName[200];/*书名*/
charWriter[100];/*作者*/
intCurrentNumber;/*现存量*/
intAllNumber;//库存量
Book*Next;/*下一个图书信息*/
};
/*图书索引结构*/
structIndex
{
unsignedlongBookID;/*图书编号*/
Index*Next;/*下一个索引指针*/
};
/*借阅信息结构*/
structBorrow
{
unsignedlongBookID;/*借阅图书编号*/
charBookName[200];/*书名*/
unsignedlongCardID;/*图书证号*/
charReturnTime[200];/*归还日期*/
Borrow*Next;/*下一个借阅信息*/
};
1.4.2主要算法流程图及功能描述
图书借阅
图书入库
链表录入数据,图书名相同项合并叠加库存量,不相同的图书新建结点录入数据域,上一结点指针域指向新建结点,完成入库操作
1.4.3系统代码
#include
#include
#include
#include
#include
#include
/*图书结构*/
structBook
{
unsignedlongBookID;
charBookName[200];
charWriter[100];
intCurrentNumber;
intAllNumber;
Book*Next;
};
/*图书索引结构*/
structIndex
{
unsignedlongBookID;
Index*Next;
};
/*借阅信息结构*/
structBorrow
{
unsignedlongBookID;
charBookName[200];
unsignedlongCardID;
charReturnTime[200];
Borrow*Next;
};
intShowMainMenu();
voidInsertbook(Book**ListHead,Index**ListIndex);
voidQueryallbooks(Book*ListHead);
voidBorrowBook(Borrow**ListBorrow,Book*ListHead);
voidQueryBorrow(Borrow*ListBorrow);
voidReturnBook(Borrow**ListBorrow,Book*ListHead);
voidFreeBookList(Book**ListHead)
{
Book*pWork=*ListHead;
Book*Next=pWork;
while(NULL!
=pWork)
{
Next=pWork->Next;
free(pWork);
pWork=Next;
}
}
voidFreeIndexList(Index**ListIndex)
{
Index*pWork=*ListIndex;
Index*Next=pWork;
while(NULL!
=pWork)
{
Next=pWork->Next;
free(pWork);
pWork=Next;
}
}
voidFreeBorrowList(Borrow**ListBorrow)
{
Borrow*pWork=*ListBorrow;
Borrow*Next=pWork;
while(NULL!
=pWork)
{
Next=pWork->Next;
free(pWork);
pWork=Next;
}
}
voiddenglu()
{
intpasswd=0;
printf("\n\n\n\n\n");
printf("******************************************************************\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("*欢迎使用图书管理系统*\n");
printf("**\n");
printf("*用户登录*\n");
printf("**\n");
printf("*请于下方键入密码*\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("******************************************************************\n");
while
(1)
{
printf("请输入密码:
");
scanf("%d",&passwd);
system("cls");
if(passwd!
=12345)
{
printf("\n\n\n\n\n");
printf("******************************************************************\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("*欢迎使用图书管理系统*\n");
printf("**\n");
printf("*用户登录*\n");
printf("**\n");
printf("*请于下方键入密码*\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("******************************************************************\n");
printf("密码输入错误\n");
}
else
break;
}
}
voidloading()
{
system("color0c");
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("loading");
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
system("cls");
system("color0f");
}
voidSearchBookID(Book*ListHead);
voidSearchBookName(Book*ListHead);
voidSearchBookName(Book*ListHead);
voidSearchways(Book*ListBookHead);
intmain()
{
denglu();
loading();
Book*ListBookHead=NULL;
Index*ListIndexHead=NULL;
Borrow*ListBorrowHead=NULL;
intchoice=-1;
while(true)
{
choice=ShowMainMenu();
switch(choice)
{
case0:
{
FreeBookList(&ListBookHead);
FreeIndexList(&ListIndexHead);
FreeBorrowList(&ListBorrowHead);
return0;
break;
}
case1:
/*图书入库*/
{
Insertbook(&ListBookHead,&ListIndexHead);
break;
}
case2:
/*查询库存*/
{
Queryallbooks(ListBookHead);
printf("按回车键继续...");
fflush(stdin);
getchar();
system("cls");
break;
}
case3:
/*借阅图书*/
{
Queryallbooks(ListBookHead);
BorrowBook(&ListBorrowHead,ListBookHead);
break;
}
case4:
{
QueryBorrow(ListBorrowHead);
printf("按回车键继续...");
fflush(stdin);
getchar();
system("cls");
break;
}
case5:
/*归还图书*/
{
QueryBorrow(ListBorrowHead);
ReturnBook(&ListBorrowHead,ListBookHead);
break;
}
case6:
//查询图书方法
{
Searchways(ListBookHead);
printf("\n");
printf("按回车键继续...");
fflush(stdin);
getchar();
system("cls");
break;
}
}
}
fflush(stdin);
getchar();
return0;
}
intShowMainMenu()
{
intchoose;
Chooseagain:
printf("\n\n\n\n\n");
printf("******************************************************************\n");
Sleep(100);
printf("*图书管理系统*\n");
Sleep(100);
printf("******************************************************************\n");
Sleep(100);
printf("**\n");
Sleep(100);
printf("*1.图书入库*\n");
Sleep(100);
printf("*2.查询库存*\n");
Sleep(100);
printf("*3.借阅图书*\n");
Sleep(100);
printf("*4.借阅记录*\n");
Sleep(100);
printf("*5.归还图书*\n");
Sleep(100);
printf("*6.查询图书*\n");
Sleep(100);
printf("*0.退出*\n");
Sleep(100);
printf("**\n");
Sleep(100);
printf("******************************************************************\n");
Sleep(100);
printf("\t输入:
");
scanf("%d",&choose);
if(choose<0||choose>7)
{
system("cls");
gotoChooseagain;
}
returnchoose;
}
voidInsertbook(Book**ListHead,Index**ListIndex)
{
Book*pWork=*ListHead;
unsignedlongBookID;
charBookname[200];
charBookwriter[200];
intCurrentnumber;
Book*pTmpNewBook=(Book*)(malloc(sizeof(Book)));
memset(pTmpNewBook,0x0,sizeof(Book));
Index*pTmpIndex=(Index*)(malloc(sizeof(Index)));
memset(pTmpIndex,0x0,sizeof(Index));
system("cls");
printf("\n\n\n\n\n");
printf("******************************************************************\n");
printf("*图书入库*\n");
printf("******************************************************************\n\n");
printf("输入图书编号:
");
scanf("%d",&BookID);
pTmpNewBook->BookID=BookID;
printf("\n\n");
printf("输入图书名称:
");
scanf("%s",&Bookname);
strcpy(pTmpNewBook->BookName,Bookname);
printf("\n\n");
printf("图书作者:
");
scanf("%s",&Bookwriter);
strcpy(pTmpNewBook->Writer,Bookwriter);
printf("\n\n");
printf("入库数量:
");
scanf("%d",&Currentnumber);
pTmpNewBook->AllNumber=Currentnumber;
pTmpNewBook->CurrentNumber=pTmpNewBook->AllNumber;
printf("\n");
printf("******************************************************************\n");
if(pTmpNewBook->AllNumber<1)
{
system("cls");
printf("入库数量错误!
(按回车键继续...)");
getchar();
system("cls");
return;
}
if(NULL==*ListHead)
{
*ListHead=pTmpNewBook;
*ListIndex=pTmpIndex;
}
else
{
Book*pWork=*ListHead;
while(pWork!
=NULL)
{
if(strcmp(pWork->BookName,pTmpNewBook->BookName)==0&&strcmp(pWork->Writer,pTmpNewBook->Writer)==0)
{
pWork->AllNumber+=pTmpNewBook->AllNumber;
pWork->CurrentNumber+=pTmpNewBook->CurrentNumber;
printf("\n入库成功!
(按回车键继续...)");
fflush(stdin);
getchar();
system("cls");
return;
}
pWork=pWork->Next;
}
pWork=*ListHead;
while(pWork->Next!
=NULL)
{
pWork=pWork->Next;
}
pWork->Next=pTmpNewBook;
Index*pWork2=*ListIndex;
while(pWork2->Next!
=NULL)
{
pWork2=pWork2->Next;
}
pWork2->Next