数据结构课程设计图书管理系统实验报告Word文档下载推荐.docx
- 文档编号:22900938
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:26
- 大小:120KB
数据结构课程设计图书管理系统实验报告Word文档下载推荐.docx
《数据结构课程设计图书管理系统实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书管理系统实验报告Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
能按书号、书名、著作者查找库存的书籍信息
能按学生的借书证号显示学生信息和借阅信息
书籍入库
借书功能实现
还书功能实现
二.设计目的
1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2.开发环境:
VC6.0或者DEVC++.
三.实验分工
范文虎:
总体程序框架构思,算法分析,主程序编写,子函数调用,图书信息记录存储子函数编写,结合,主控制面板编写,哈希函数,结构体定义。
算法实现,添加图书信息子函数编写,借阅图书字函数编写,查询子函数设计编写,还书子函数设计编写,最终程序调试,写报告。
算法实现,删除图书子函数设计编写,查找图书信息子函数编写,测试整体程序,程序缺陷纠正,最终修改后程序综合。
算法实现,查询图书信息子函数设计编写,程序缺陷修改和测试。
四.算法思想分析
用线性表进行存储,充分利用它易添加、易删除、查找方便的特点,进行程序的编写,符合题目的需求。
而线性表是最基本、最简单、也是最常用的一种数据结构。
五.算法描述实现
1.数据结构类型定义
typedefstruct
{intyear;
intmonth;
intday;
}data;
{
charnum[5];
//读者编号记录
databro;
databack;
}ReaderNode;
chartitle[15];
charwriter[15];
intcurrent;
inttotal;
intkey;
//书的编号
ReaderNodereader[10];
//记录借读该书的读者记录
}BookNode;
BookNode*elem;
intcount;
//记录节点中的总数
}HashTable;
2.算法流程图
建立哈希表
删除函数
添加函数
查找函数
添加图书增量子函数
借阅书子函数
添加书子函数
查看已添加书子函数
归还书子函数
查看已借阅书子函数
查找书子函数
主函数
完成
3.程序代码
#include"
stdafx.h"
#include<
stdio.h>
stdlib.h>
malloc.h>
string.h>
conio.h>
#defineSUCCESS1
#defineUNSUCCESS0
#defineDUPLICATE-1
#defineNULL_KEY0//无记录元素
inthashsize[]={17,19,23,29};
//存储容量
intm=0;
//表长
typedefstruct
intmonth;
intday;
//读者编号记录
databro;
databack;
chartitle[15];
charwriter[15];
intcurrent;
inttotal;
intkey;
intmore;
//书的编号
ReaderNodereader[10];
//记录借读该书的读者记录
typedefstruct
BookNode*elem;
intcount;
//记录节点中的总数
voidInitHashTable(HashTable*H)
{
inti;
(*H).count=0;
m=hashsize[0];
(*H).elem=(BookNode*)malloc(m*sizeof(BookNode));
for(i=0;
i<
m;
i++)
(*H).elem[i].key=NULL_KEY;
}
unsignedHash(intK)//哈希函数,自己设定
returnK%m;
}
voidcollision(int*p,intd)//开放定址法处理冲突
{
*p=(*p+d)%m;
intSearchHash(HashTableH,intK,int*p,int*c)//p为数据的地址位置,返回
*p=Hash(K);
while(H.elem[*p].key!
=NULL_KEY&
&
(K!
=H.elem[*p].key))
(*c)++;
if(*c<
m)
collision(p,*c);
//下一地址
else
break;
if(K==H.elem[*p].key)
returnSUCCESS;
returnUNSUCCESS;
intInsertHash(HashTable*H,BookNodee)
intc,p;
c=0;
if(SearchHash(*H,e.key,&
p,&
c))
returnDUPLICATE;
elseif(c<
hashsize[0]/2)
(*H).elem[p]=e;
++(*H).count;
return1;
return0;
intDeleteHash(HashTable*H,BookNodee)
{
(*H).elem[p].key=NULL_KEY;
--(*H).count;
printf("
不好意思,不存在\n"
);
voidAddBook(HashTable*H)
BookNodee;
system("
CLS"
\n\n**************************************************\n"
\t你能在此目录下添加图书信息"
\n**************************************************\n"
\n\t请输入书的编号(形如:
1***):
"
scanf("
%d"
&
e.key);
getchar();
\n\t请输入书名:
gets(e.title);
\n\t请输入该书作者:
gets(e.writer);
\n\t请输入该书现库存量:
e.current);
\n\t请输入该书总库存量:
%d%*c"
e.total);
10;
(e.reader[i]).num[0]='
\0'
;
//用'
来初始化借该书的读者证号,表示一开始时没人借书
if(InsertHash(&
(*H),e))
图书添加成功!
\n"
(*H).count++;
voidShowBook(HashTableH)
\t你能在此目录查看图书信息"
if(H.elem[i].key!
=NULL_KEY)/*有数据*/
图书编号:
%d\n"
H.elem[i].key);
书名:
《%s》\n"
H.elem[i].title);
作者:
%s\n"
H.elem[i].writer);
图书现存量:
%d\n"
H.elem[i].current);
图书总量:
H.elem[i].total);
***************************************************\n"
voidBoSearch(HashTable*H)//借阅查询
inte,r,t;
\t你能在此目录下按借书证号查找图书信息"
\n\t请输入你的借书证号:
e);
if(SearchHash(*H,e,&
r,&
t))
借书证编号:
(*H).elem[e].key);
(*H).elem[e].title);
(*H).elem[e].writer);
(*H).elem[e].current);
(*H).elem[e].total);
您没有借过书!
!
"
voidFind(HashTable*H)
intx,p,c;
\t你能在此目录下按编号查找图书信息"
\n\t请输入你想查找的书的编号:
x);
if(SearchHash(*H,x,&
c))
(*H).elem[p].key);
(*H).elem[p].title);
(*H).elem[p].writer);
(*H).elem[p].current);
(*H).elem[p].total);
对不起,不存在该书!
voidBorrowBook(HashTable*H)
inti,k,x,f,t;
\t你能在此目录下按编号借阅图书"
\n\t请输入你想借的书编号:
k,&
f))
\n\t你想借这本书吗?
(y/n)"
\n\t书名:
《%s》"
(*H).elem[k].title);
\n\t作者:
%s"
(*H).elem[k].writer);
\n\t现库存量:
%d"
(*H).elem[k].current);
\n\t总库存量:
(*H).elem[k].total);
t=getch();
if(t=='
y'
||t=='
Y'
)
if(((*H).elem[k].current)==0)printf("
\n\t对不起,这本书已经被借光了..."
i++)
if(((*H).elem[k].reader[i]).num[0]=='
)break;
%s"
((*H).elem[k].reader[i]).num);
\n\t请输入借书日期:
//输入借书日期
\n\t年:
(((*H).elem[k].reader[i]).bro.year));
\t月:
(((*H).elem[k].reader[i]).bro.month));
\t日:
(((*H).elem[k].reader[i]).bro.day));
\n\t输入应还书日期:
//输入应还书日期
(((*H).elem[k].reader[i]).back.year));
(((*H).elem[k].reader[i]).back.month));
(((*H).elem[k].reader[i]).back.day));
(*H).elem[k].current--;
//现存书量减1
\n\t你已借了该书."
elseprintf("
\n\t这本书不存在!
voidReturnBook(HashTable*H)
inti,k,x,f,t,j;
intyear,month,day,d;
floatpay;
chartemp[20];
\t你能在此目录下按编号归还图书"
\n\t请输入你还的书:
f))
\n\t你想还这本书吗?
temp);
j=0;
5;
if(!
(strcmp(temp,((*H).elem[k].reader[i]).num))){j=1;
break;
}//查看是否有借书
if(j==0)
{printf("
\n\t你没有借书."
return;
}//该借书证号的人没借书
\n\t今天是:
year);
month);
day);
d=0;
if(year<
((*H).elem[k].reader[i]).back.year)d=1;
//判断是否已过了还书日期,d=1还没过期,d=0过期
=((*H).elem[k].reader[i]).back.year&
month<
((*H).elem[k].reader[i]).back.month)d=1;
=((*H).elem[k].reader[i]).back.month&
day<
((*H).elem[k].reader[i]).back.day)d=1;
if(d==0)
pay=(year-((*H).elem[k].reader[i]).back.year)*365+(month-((*H).elem[k].reader[i]).back.month)*30+(day-((*H).elem[k].reader[i]).back.day);
\n\t你在%d-%d-%d借了这本书"
((*H).elem[k].reader[i]).bro.year,((*H).elem[k].reader[i]).bro.month,((*H).elem[k].reader[i]).bro.day);
\n\t你应该在%d-%d-%d还这本书"
((*H).elem[k].reader[i]).back.year,((*H).elem[k].reader[i]).back.month,((*H).elem[k].reader[i]).back.day);
\n\t今天是%d-%d-%d"
year,month,day);
\n\n\t所以你超出了还书日期"
\n\t你应该被罚款%2.1f元."
0.1*pay);
//过期一天还1角钱
((*H).elem[k].reader[i]).num[0]='
//已还,清除该读者借书记录
(*H).elem[k].current++;
//现存书量加1
\n\t你已经还了这本书.\n"
\n\t你要还一本没库存的书?
?
voidSaveBook(HashTableH){
FILE*fp1;
fp1=fopen("
C:
/record.txt"
"
w"
fprintf(fp1,"
===============图书信息记录表=================\n"
=NULL_KEY)
============================================\n"
图书编号:
书名:
%s\n"
作者:
现库存量:
总库存量:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 管理 系统 实验 报告