数据结构课程设计图书管理系统实验报告.docx

上传人:b****5 文档编号:6380740 上传时间:2023-01-05 格式:DOCX 页数:23 大小:157.36KB
下载 相关 举报
数据结构课程设计图书管理系统实验报告.docx_第1页
第1页 / 共23页
数据结构课程设计图书管理系统实验报告.docx_第2页
第2页 / 共23页
数据结构课程设计图书管理系统实验报告.docx_第3页
第3页 / 共23页
数据结构课程设计图书管理系统实验报告.docx_第4页
第4页 / 共23页
数据结构课程设计图书管理系统实验报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据结构课程设计图书管理系统实验报告.docx

《数据结构课程设计图书管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书管理系统实验报告.docx(23页珍藏版)》请在冰豆网上搜索。

数据结构课程设计图书管理系统实验报告.docx

数据结构课程设计图书管理系统实验报告

 

BeijingInstituteofPetrochemicalTechnology

数据结构课程设计

 

课程设计实验报告

 

院(系、部):

信息工程学院

姓名:

计141范文虎

指导教师签名:

 

2016年6月29日·北京

 

一.设计题目····································

二.设计目的····································

三.实验分工····································

四.算法思想分析································

五.算法描述实现································

1.数据结构类型定义

2.算法流程图

3.程序代码

六.运行结果····································

七.结论········································

 

一.设计题目

图书管理基本业务模拟

图书管理一般包括图书采编、图书编目、图书查询及图书流通(借、还书)等基本业务。

要求设计一个图书管理信息系统,用计算机模拟实现上述系统功能。

(1)书的登记内容包括书号、书名、著作者、现存量和库存量等;学生信息包括借书证号、借阅信息等;

(2)以书号建立索引表(线性表)以提高查找效率;

(3)主要功能如下:

a)采编入库:

新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;

b)借阅:

如果一种书的现存量大于0,则借出一本,登记借阅者的书号和归还期限,改变现存量;

c)归还:

注销对借阅者的登记,改变该书的现存量。

(4)输出形式:

能按书号、书名、著作者查找库存的书籍信息

能按学生的借书证号显示学生信息和借阅信息

书籍入库

借书功能实现

还书功能实现

二.设计目的

1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

2.开发环境:

VC6.0或者DEVC++.

三.实验分工

范文虎:

总体程序框架构思,算法分析,主程序编写,子函数调用,图书信息记录存储子函数编写,结合,主控制面板编写,哈希函数,结构体定义。

算法实现,添加图书信息子函数编写,借阅图书字函数编写,查询子函数设计编写,还书子函数设计编写,最终程序调试,写报告。

算法实现,删除图书子函数设计编写,查找图书信息子函数编写,测试整体程序,程序缺陷纠正,最终修改后程序综合。

算法实现,查询图书信息子函数设计编写,程序缺陷修改和测试。

四.算法思想分析

用线性表进行存储,充分利用它易添加、易删除、查找方便的特点,进行程序的编写,符合题目的需求。

而线性表是最基本、最简单、也是最常用的一种数据结构。

五.算法描述实现

1.数据结构类型定义

typedefstruct

{intyear;

intmonth;

intday;

}data;

typedefstruct

{

charnum[5];//读者编号记录

databro;

databack;

}ReaderNode;

typedefstruct

{

chartitle[15];

charwriter[15];

intcurrent;

inttotal;

intkey;//书的编号

ReaderNodereader[10];//记录借读该书的读者记录

}BookNode;

typedefstruct

{

BookNode*elem;

intcount;//记录节点中的总数

}HashTable;

 

2.算法流程图

 

 

3.程序代码

#include"stdafx.h"

#include

#include

#include

#include

#include

#defineSUCCESS1

#defineUNSUCCESS0

#defineDUPLICATE-1

#defineNULL_KEY0//无记录元素

inthashsize[]={17,19,23,29};//存储容量

intm=0;//表长

typedefstruct

{intyear;

intmonth;

intday;

}data;

typedefstruct

{

charnum[5];//读者编号记录

databro;

databack;

}ReaderNode;

typedefstruct

{

chartitle[15];

charwriter[15];

intcurrent;

inttotal;

intkey;

intmore;//书的编号

ReaderNodereader[10];//记录借读该书的读者记录

}BookNode;

typedefstruct

{

BookNode*elem;

intcount;//记录节点中的总数

}HashTable;

voidInitHashTable(HashTable*H)

{

inti;

(*H).count=0;

m=hashsize[0];

(*H).elem=(BookNode*)malloc(m*sizeof(BookNode));

for(i=0;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

collision(p,*c);//下一地址

else

break;

}

if(K==H.elem[*p].key)

returnSUCCESS;

else

returnUNSUCCESS;

}

intInsertHash(HashTable*H,BookNodee)

{

intc,p;

c=0;

if(SearchHash(*H,e.key,&p,&c))

returnDUPLICATE;

elseif(c

{

(*H).elem[p]=e;

++(*H).count;

return1;

}

return0;

}

intDeleteHash(HashTable*H,BookNodee)

{

intc,p;

c=0;

if(SearchHash(*H,e.key,&p,&c))

{

(*H).elem[p].key=NULL_KEY;

--(*H).count;

return1;

}

else

{

printf("不好意思,不存在\n");

}

return0;

}

voidAddBook(HashTable*H)

{

BookNodee;

inti;

system("CLS");

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

printf("\t你能在此目录下添加图书信息");

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

printf("\n\t请输入书的编号(形如:

1***):

");

scanf("%d",&e.key);

getchar();

printf("\n\t请输入书名:

");

gets(e.title);

printf("\n\t请输入该书作者:

");

gets(e.writer);

printf("\n\t请输入该书现库存量:

");

scanf("%d",&e.current);

printf("\n\t请输入该书总库存量:

");

scanf("%d%*c",&e.total);

for(i=0;i<10;i++)

(e.reader[i]).num[0]='\0';//用'\0'来初始化借该书的读者证号,表示一开始时没人借书

if(InsertHash(&(*H),e))

printf("图书添加成功!

\n");

(*H).count++;

}

voidShowBook(HashTableH)

{

inti;

system("CLS");

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

printf("\t你能在此目录查看图书信息");

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

for(i=0;i

if(H.elem[i].key!

=NULL_KEY)/*有数据*/

{

printf("图书编号:

%d\n",H.elem[i].key);

printf("书名:

《%s》\n",H.elem[i].title);

printf("作者:

%s\n",H.elem[i].writer);

printf("图书现存量:

%d\n",H.elem[i].current);

printf("图书总量:

%d\n",H.elem[i].total);

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

}

}

voidBoSearch(HashTable*H)//借阅查询

{

inte,r,t;

system("CLS");

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

printf("\t你能在此目录下按借书证号查找图书信息");

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

printf("\n\t请输入你的借书证号:

");

scanf("%d%*c",&e);

if(SearchHash(*H,e,&r,&t))

{

printf("借书证编号:

%d\n",(*H).elem[e].key);

printf("书名:

《%s》\n",(*H).elem[e].title);

printf("作者:

%s\n",(*H).elem[e].writer);

printf("图书现存量:

%d\n",(*H).elem[e].current);

printf("图书总量:

%d\n",(*H).elem[e].total);

}

else

printf("您没有借过书!

");

}

voidFind(HashTable*H)

{

intx,p,c;

system("CLS");

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

printf("\t你能在此目录下按编号查找图书信息");

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

printf("\n\t请输入你想查找的书的编号:

");

scanf("%d%*c",&x);

if(SearchHash(*H,x,&p,&c))

{

printf("图书编号:

%d\n",(*H).elem[p].key);

printf("书名:

《%s》\n",(*H).elem[p].title);

printf("作者:

%s\n",(*H).elem[p].writer);

printf("图书现存量:

%d\n",(*H).elem[p].current);

printf("图书总量:

%d\n",(*H).elem[p].total);

}

else

printf("对不起,不存在该书!

\n");

}

voidBorrowBook(HashTable*H)

{

inti,k,x,f,t;

system("CLS");

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

printf("\t你能在此目录下按编号借阅图书");

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

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

");

scanf("%d%*c",&x);

if(SearchHash(*H,x,&k,&f))

{

printf("\n\t你想借这本书吗?

(y/n)");

printf("\n\t书名:

《%s》",(*H).elem[k].title);

printf("\n\t作者:

%s",(*H).elem[k].writer);

printf("\n\t现库存量:

%d",(*H).elem[k].current);

printf("\n\t总库存量:

%d",(*H).elem[k].total);

t=getch();

if(t=='y'||t=='Y')

{

if(((*H).elem[k].current)==0)printf("\n\t对不起,这本书已经被借光了...");

else

{

for(i=0;i<10;i++)

if(((*H).elem[k].reader[i]).num[0]=='\0')break;

printf("\n\t请输入你的借书证号:

");

scanf("%s",((*H).elem[k].reader[i]).num);

printf("\n\t请输入借书日期:

");//输入借书日期

printf("\n\t年:

");

scanf("%d",&(((*H).elem[k].reader[i]).bro.year));

printf("\t月:

");

scanf("%d",&(((*H).elem[k].reader[i]).bro.month));

printf("\t日:

");

scanf("%d",&(((*H).elem[k].reader[i]).bro.day));

printf("\n\t输入应还书日期:

");//输入应还书日期

printf("\n\t年:

");

scanf("%d",&(((*H).elem[k].reader[i]).back.year));

printf("\t月:

");

scanf("%d",&(((*H).elem[k].reader[i]).back.month));

printf("\t日:

");

scanf("%d%*c",&(((*H).elem[k].reader[i]).back.day));

(*H).elem[k].current--;//现存书量减1

printf("\n\t你已借了该书.");

}

}

}

elseprintf("\n\t这本书不存在!

\n");

}

voidReturnBook(HashTable*H)

{

inti,k,x,f,t,j;

intyear,month,day,d;

floatpay;

chartemp[20];

system("CLS");

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

printf("\t你能在此目录下按编号归还图书");

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

printf("\n\t请输入你还的书:

");

scanf("%d%*c",&x);

if(SearchHash(*H,x,&k,&f))

{

printf("\n\t你想还这本书吗?

(y/n)");

printf("\n\t书名:

《%s》",(*H).elem[k].title);

printf("\n\t作者:

%s",(*H).elem[k].writer);

printf("\n\t现库存量:

%d",(*H).elem[k].current);

printf("\n\t总库存量:

%d",(*H).elem[k].total);

t=getch();

if(t=='y'||t=='Y')

{

printf("\n\t请输入你的借书证号:

");

scanf("%s",temp);

j=0;

for(i=0;i<5;i++)

{

if(!

(strcmp(temp,((*H).elem[k].reader[i]).num))){j=1;break;}//查看是否有借书

}

if(j==0)

{printf("\n\t你没有借书.");return;}//该借书证号的人没借书

printf("\n\t今天是:

");

printf("\n\t年:

");

scanf("%d",&year);

printf("\t月:

");

scanf("%d",&month);

printf("\t日:

");

scanf("%d%*c",&day);

d=0;

if(year<((*H).elem[k].reader[i]).back.year)d=1;//判断是否已过了还书日期,d=1还没过期,d=0过期

if(year<=((*H).elem[k].reader[i]).back.year&&month<((*H).elem[k].reader[i]).back.month)d=1;

if(year<=((*H).elem[k].reader[i]).back.year&&month<=((*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);

printf("\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);

printf("\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);

printf("\n\t今天是%d-%d-%d",year,month,day);

printf("\n\n\t所以你超出了还书日期");

printf("\n\t你应该被罚款%2.1f元.",0.1*pay);//过期一天还1角钱

}

((*H).elem[k].reader[i]).num[0]='\0';//已还,清除该读者借书记录

(*H).elem[k].current++;//现存书量加1

printf("\n\t你已经还了这本书.\n");

}

}

elseprintf("\n\t你要还一本没库存的书?

?

?

\n");

}

voidSaveBook(HashTableH){

FILE*fp1;

inti;

fp1=fopen("C:

/record.txt","w");

fprintf(fp1,"===============图书信息记录表=================\n");

for(i=0;i

{

if(H.elem[i].key!

=NULL_KEY)

{

fprintf(fp1,"============================================\n");

fprintf(fp1,"图书编号:

%d\n",H.elem[i].key);

fprintf(fp1,"书名:

%s\n",H.elem[i].title);

fprintf(fp1,"作者:

%s\n",H.elem[i].writer);

fprintf(fp1,"现库存量:

%d\n",H.elem[i].current);

fprintf(fp1,"总库存量:

%d\n",H.elem[i].total);

}

}

fprintf(fp1,"**************************************************\n");

fclose(fp1);

printf(

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

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1