数据结构课程设计图书管理系统实验报告.docx
- 文档编号:6380740
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:23
- 大小:157.36KB
数据结构课程设计图书管理系统实验报告.docx
《数据结构课程设计图书管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书管理系统实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构课程设计图书管理系统实验报告
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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 管理 系统 实验 报告