数据结构课程设计图书管理.docx

上传人:b****8 文档编号:11040972 上传时间:2023-02-24 格式:DOCX 页数:122 大小:426.77KB
下载 相关 举报
数据结构课程设计图书管理.docx_第1页
第1页 / 共122页
数据结构课程设计图书管理.docx_第2页
第2页 / 共122页
数据结构课程设计图书管理.docx_第3页
第3页 / 共122页
数据结构课程设计图书管理.docx_第4页
第4页 / 共122页
数据结构课程设计图书管理.docx_第5页
第5页 / 共122页
点击查看更多>>
下载资源
资源描述

数据结构课程设计图书管理.docx

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

数据结构课程设计图书管理.docx

数据结构课程设计图书管理

数据结构课程设计报告

题目:

图书管理

学院计算机学院

专业软件工程

年级班别2010级4班

学号

学生姓名

指导教师

成绩____________________

 

2012年6月

一、设计任务【DesignTasks】

1.1、图书管理系统中图书管理模块包括图书类型定义:

书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:

证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。

B树(2-3树)类型定义:

关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;B树查找结果类型定义:

节点指针、关键字序号和查找标志变量为整型。

1.2、演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。

该演示系统,没有使用文件,全部数据放在内存存放。

四项基本业务都以书号为关键字进行的,采用了B树(2-3树)对书号建立索引,以提高效率。

2、设计思路【DesignIdeas】

2.1、设计框图

2.2、结构体设计

/*-------------------四、所需结构体和类-------------------*/

//登陆类

classLogin

{

public:

Login();

voidamend(conststringst1,conststringst2);

boolIsLogin(string&str1,string&str2);

stringUserName;

stringUserID;

stringPassWord;

intErrorNum;

};

//个人信息结构体

typedefstructInformation

{

stringID;

stringName;

stringAcademy;

stringMajor;

stringEducation;

stringState;

intnumber;//超期数目

inttotal;//已借数目

}Inof;

//借阅信息结构体

typedefstructInofBook

{

//stringCheck_Data;

//stringReturn_Data;

intC_Year;

intC_Month;

intC_Day;

intR_Year;

intR_Month;

intR_Day;

intBook_Number;

stringBook_Name;

stringBook_Writer;

structInofBook*next;

 

}InofBook;

//图书信息类

typedefstruct{

KeyTypeindex;//书号

charB_name[1][20];//书名,可以为中文

charB_writer[1][20];//著者,可以中文

intstack;//现存量

inttotal;//总库存量

inttag;//标志是否被预约1是0否

}B_Record,*b_Record;//书目记录类型

//图书类

structbook

{

public:

Book();

elemtypeBook_Name;

elemtypeBook_Writer;

intBook_Number;

intExtant_Num;//该书现存量

intGross_Num;//该书总量

structbook*next;

};

typedefstructbook*book_Record;

typedefstructbookBook_Record;

 

typedefstructR_Record{

KeyTypecard;//卡号

charR_name[1][20];//姓名

chartel[11];//手机号码

char*PassWord;

structBorrow{

intyuyue;//存放预约的书号,最多一本

structbNode*R_book[N/4];//借阅书指针

char*term[N/4];//归还期限

intb_num;//已经借阅书的数量

}bor;//借阅记录类型

}R_Record,*r_Record;//读者记录类型

 

typedefstructbNode{

KeyTypeindex;//关键字向量

structB_Node*child;//子树指针向量

B_Recordrec;//记录指针向量

}bNode,*Bode;//书目结点向量类型

typedefstructrNode{

KeyTypecard;//卡号向量

structR_Node*child;//子树指针向量

R_Recordrec;//记录指针向量

}rNode,*Rode;//读者结点向量类型

 

typedefstructB_Node{

intBookNum;//结点中书目个数,即结点的大小

intlevel;

structB_Node*pa;//指向双亲结点

structB_Node*lBro,*rBro;

structbNodenode[m+1];//除child外,其它0号单元未用

}B_Node,*Book;//书树结点和书树的类型

typedefstructR_Node{

intReaderNum;//结点中读者个数,即结点的大小

intlevel;

structR_Node*pa;//指向双亲结点

structR_Node*lBro,*rBro;

structrNodenode[m+1];//除child外,0号单元未用

}R_Node,*Reader;//读者树结点和读者树的类型

 

typedefstruct{

B_Node*pb;//指向找到的结点

inti;//1..m,在结点中的关键字序号

inttag;//1:

查找成功,O:

查找失败

}B_Result;//书树的查找结果类型

typedefstruct{

R_Node*pr;//指向找到的结点

inti;//1..m,在结点中的关键字序号

inttag;//1:

查找成功,O:

查找失败

}R_Result;//读者树的查找结果类型

2.3、宏定义和常量

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineEQ(a,b)((a)==(b))

#defineLT(a,b)((a)<(b))

#defineHT(a,b)((a)>(b)

#definem3//2-3树的阶

#defineN20//每种书最大库存20本、读者最多每人借20/4=5本

typedefintStatus;//函数的类型,其值是函数结果状态代码

typedefintKeyType;//设关键字域为整型

typedefstringelemtype;

2.4、设计模块

主程序模块

图书管理模块

↓↓

图书管理模块我的图书馆管理模块

三、部分代码分析【CodeAnalysis】

3.1、图书管理模块选择

switch(i){

case1:

//添加图书

A_Add_Book(head);

save_printf(1,"\n\t\t书库现状态如下:

\n");

if(BK->BookNum!

=NULL)

Traverse_BK(BK,BK->level);

else

save_printf(1,"\n书库为空");

fprintf(fp,"\n\n");

printf("\n\n");

break;

case2:

//查找图书

A_Search_Book();

break;

case3:

//删除图书

A_Delete_Book(head);

save_printf(1,"\n\t\t书库现状态如下:

\n");

if(BK->BookNum!

=NULL)

Traverse_BK(BK,BK->level);

else

save_printf(1,"\n书库为空");

fprintf(fp,"\n\n");

printf("\n\n");

break;

case4:

//查看全部图书

Search_All_Book();

break;

case5:

//我的图书馆

Mylibrary(head);

break;

case0:

//返回系统登录界面

fprintf(fp,"\n\t\t\t☆\tAdmin_menu-->menu\t☆\n\n");

exit

(1);

break;

default:

save_printf(1,"\n\t您的操作有误,请重新选择(0→7):

");

break;

}

3.2.1、添加图书

/*-----------------------------A_Add_Book------------------------------*/

voidLoad(book_Recordq);

voidA_Add_Book(book_Recordhead){//添加图书

chars[2];

inti;

intj;

book_Recordq;

q=newBook_Record;

B_Recordr;

Init_Brec(r);

do{

book_Recordp=head;

save_printf(1,"\n\t书号:

");

save_gets(s);

r.index=atoi(s);

if(r.index<=NULL||r.index>9999999)

save_printf(1,"\n\t输入有误,请重新输入(1→9999999)!

\n");

/*

**主关键字是图书编号,是唯一的

**输入相同编号,重新输入

*/

while(p!

=NULL)

{

if(p->Book_Number==r.index)

{

r.index=NULL;

cout<<"\t该编号已存在!

"<

}

p=p->next;

}

}while(r.index<=NULL||r.index>9999999);

save_printf(1,"\n\t书名:

");

do{

save_gets(r.B_name[0]);

j=strlen(r.B_name[0]);

if(j<=0||j>20)

save_printf(1,"\n\t您输入的书名有误,请重新输入(1→20字符):

");

}while(j<=0||j>20);

save_printf(1,"\n\t著者:

");

do{

save_gets(r.B_writer[0]);

j=strlen(r.B_writer[0]);

if(j<=0||j>20)

save_printf(1,"\n\t您输入的著者有误,请重新输入(1→20字符):

");

}while(j<=0||j>20);

save_printf(1,"\n\t存入数量:

");

do{

save_gets(s);

r.stack=r.total=atoi(s);

if(r.total<=NULL||r.total>N)save_printf(1,"\n\t输入有误,请重新输入(1→20)!

:

");

}while(r.total<=NULL||r.total>N);

i=Add_Book(BK,r);

if(i)

{

/*读取信息*/

q->Book_Number=r.index;

q->Book_Name=r.B_name[0];

q->Book_Writer=r.B_writer[0];

q->Extant_Num=r.stack;

q->Gross_Num=r.total;

Load(q);//将新书添加到图书库中

q->next=head;

head=q;

Load_Book(head);//更新“librarydata.txt”图书信息

save_printf(1,"\n\t添加成功!

\n");

}

else

{

save_printf(1,"\n\t添加失败!

该书书库容量不足!

\n");

}

}

3.2.2、删除图书

/*-----------------------------A_Delete_Book------------------------------*/

book_RecordDell(intindex);

voidload_book(book_Recordh);

voidA_Delete_Book(book_Recordhead){//删除图书

chars[2];

inti;

intindex;

//book_Recordx;

//x=newBook_Record;

 

do{

save_printf(1,"\n\t请输入您要删除的书的书号:

");

book_Recordp=head;

save_gets(s);

index=atoi(s);

if(index<=0||index>9999999)save_printf(1,"\n\t输入有误,请重新输入(1→9999999)!

\n书号:

");

/*处理图书不出在的情况*/

while(p!

=NULL)

{

if(p->Book_Number==index)

break;

p=p->next;

}

if(p==NULL)

{

index=0;

cout<<"无此书!

"<

}

}while(index<=0||index>9999999);

i=Delete_Book(BK,index);

if(i)

{

//x->Book_Number=index;

head=Dell(index);//删除图书

load_book(head);//更新图书库图书信息

Load_Book(head);//更新图书库图书信息

save_printf(1,"\n\t删除成功!

\n");

}

elsesave_printf(1,"\n\t删除失败,馆内不存在该书!

\n");

}

3.2、我的图书馆管理模块选择

switch(n)

{

case1:

Information();break;//输出个人信息、状态

case2:

Amend(login);break;//修改密码

case3:

Checkdata();break;//当前借阅信息

case4:

Recall();break;//催还信息

case5:

Check_out(head);break;//借书

case6:

Return_book(head);break;//还书

case7:

Find_Book(head);break;//查找

case0:

Admin_menu();break;//还回首页

//

default:

printf("\t\t\t\t输入信息错误,请重新输入!

\n");break;

}

3.2.1、修改密码

/*采用*字符输入密码*/

while((c=getch())!

=13)

{

if(c!

='\b'&&c!

='\t'&&count<20)

{

pass[count++]=c;

putchar('*');

}

if(c=='\b'&&count>0)

{

printf("\b\b");

count--;

}

}

pass[count]='\0';

password=pass;

cout<

/*导入密码文件,读取密码和账号*/

char*file="password";

ofstreamfout;

fout.open(file,ios:

:

out);

if(!

fout.is_open())

{

cerr<

"<

exit

(1);

}

fout<

fout.close();

login.amend(username,password);

3.2.2、借书

/**************************借书********************************/

voidLibrary_card(book_Recordp);

voidLoad_Book(book_Recordhead);

voidCheck_out(book_Recordhead)

{

system("cls");

system("colorf9");

save_printf("\n\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

save_printf("\t※※\n");

save_printf("\t※****************借**书********界**面***************※\n");

save_printf("\t※※\n");

save_printf("\t※※\n");

save_printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

Traverse_Book(BK);

intst;

intsum,i=0;

book_Recordp;

intst1[3],st2[3];

intst3;

elemtypest4,st5;

ifstreamfin;

 

cout<<"\n\n请输入要借书的数目:

";

cin>>sum;

while(i

{

intflag=0;

intf=0;

printf("请输入要借第%d本书的编号:

",i+1);

cin>>st;

cout<

p=head;

/*

**查找借阅的书

*/

while(p!

=NULL)

{

if(p->Book_Number==st)

{

if(p->Extant_Num!

=0)

{

fin.open("librarydata.txt",ios:

:

in);

if(fin.is_open())

{

while(fin>>st1[0]&&fin>>st1[1]&&fin>>st1[2]

&&fin>>st2[0]&&fin>>st2[1]&&fin>>st2[2]

&&fin>>st3&&fin>>st4&&fin>>st5)

{

if(st3==st)

{

f=1;

flag=1;

cout<<"你已经借了这本书了!

"<

break;

}

}

}

else

{

cout<<"打开文件失败!

"<

}

///////////////////////////////////////////////////////

if(f==0)

{

p->Extant_Num--;

flag=1;

//添加到个人图书库中

Library_card(p);

}

fin.close();

}

break;

}

p=p->next;

}

if(flag==0)

{

if(p!

=NULL)

cout<<"该书已被借完!

"<

else

cout<<"图书馆无此书!

"<

}

i++;

}

//更新图书库信息

Load_Book(head);

system("pause");

}

3.2.2、还书

/**************************还书********************************/

voidReturn_Book(book_Recordp);

voidReturn_book(book_Recordhead)

{

system("cls");

system("colorf9");

save_printf(

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

当前位置:首页 > 人文社科 > 哲学历史

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

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