C++课程设计报告图书信息管理系统设计.docx

上传人:b****6 文档编号:8670380 上传时间:2023-02-01 格式:DOCX 页数:35 大小:604.99KB
下载 相关 举报
C++课程设计报告图书信息管理系统设计.docx_第1页
第1页 / 共35页
C++课程设计报告图书信息管理系统设计.docx_第2页
第2页 / 共35页
C++课程设计报告图书信息管理系统设计.docx_第3页
第3页 / 共35页
C++课程设计报告图书信息管理系统设计.docx_第4页
第4页 / 共35页
C++课程设计报告图书信息管理系统设计.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

C++课程设计报告图书信息管理系统设计.docx

《C++课程设计报告图书信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告图书信息管理系统设计.docx(35页珍藏版)》请在冰豆网上搜索。

C++课程设计报告图书信息管理系统设计.docx

C++课程设计报告图书信息管理系统设计

 

信息科学与技术学院

程序设计基础课程设计报告

 

题目名称:

图书信息管理系统设计

 

2012年6月21日

 

1.课程设计目的

1.1.课程设计的题目

图书信息管理系统设计

1.2.课程设计的要求

1.2.1问题描述(功能要求):

图书信息包括:

登录号、书名、作者名、分类号、出版单位、出版时间、价格等。

试设计一图书信息管理系统,使之能提供以下功能:

(1)系统以菜单方式工作

(2)图书信息录入功能(图书信息以文件保存)——输入

(3)图书信息浏览功能——输出

(4)查询和排序功能:

(至少一种查询方式)——算法

(5)图书信息的删除与修改(可选项)

1.2.2问题的解决方案:

(1)分析系统中的各个实体之间的关系及其属性和行为;

(2)根据问题描述,设计系统的类层次;

(3)完成类层次中的各个类的描述(包括属性和方法)

(4)完成类中各个成员函数的定义;

(5)完成系统的应用模块;

(6)功能调试

(7)完成系统总结报告以及系统使用说明书。

1.2.3其他要求:

(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读

(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)

(3)学生可自动增加新功能模块

2.总体设计

图书信息管理系统设计

信息查询

还书管理

借书登记

新书入库

打印读者信息

打印图书信息

图书信息查询

读者信息查询

2.1.新书入库模块

功能:

登记入库的新书信息

2.2.信息查询模块

2.2.1读者信息查询模块

功能:

查询某一读者的信息

2.2.2图书信息查询模块

功能:

查询某一图书的信息

2.2.3打印图书信息

功能:

打印所有图书的信息

2.2.4打印读者信息

功能:

打印所有读者的信息

2.3.借书模块

功能:

登记读者的借书信息

2.4.还书模块

功能:

登记读者的还书信息

3.详细设计

3.1.类设计

typedefstructBOOK//声明图书结构体变量BOOK,表示图书信息

{

charnumber[10];//书号

chartitle[20];//书名

charwriter[10];//作者

charpublish[20];//出版社

intyear;//出版年份

intmonth;//出版月份

intday;//出版日期

floatprice;//出版价格

intstorage;//库存量

intremain;//现存量

structBOOK*next;//下一个节点指针

}BOOK;

typedefstructBORROW//借书信息

{

charbook_number[10];//书号

}BORROW;

typedefstructREADER//读者信息

{

charnumber[3];//读者编号

charname[10];//读者名字

intborrow_amount;//当前借书量

BORROWborrow[Max];//借书信息

structREADER*next;

}READER;

3.2.基本操作函数

intDisplayMenu();//显示主菜单

voidInitialize();//初始化(初始化读者和图书的信息)

voidInit_reader();//初始化读者信息

voidInit_book();//初始化图书信息

voidInsert_New_Book();//新书入库模块

intFind();//查找菜单

voidFind_Select();//查找菜单选择函数

voidFind_Reader();//查找某个读者信息

voidFind_Book();//查找某个图书信息

voidPrint_reader();//打印所有读者信息

voidPrint_book();//打印所有图书信息

voidBorrow_Book();//借书函数

voidReturn_Book();//还书函数

voidSave();//保存到文件

voidSelectmenu();//主菜单选择函数

3.3.程序流程图

3.3.1主函数流程图

图3.3.1主函数流程图

 

3.3.2初始化模块

图3.2初始化模块流程图

 

3.3.3借书模块

图3.3借书模块流程图

 

3.3.4新书入库模块

图3.4新书入库模块

3.3.5信息查询模块

图3.5信息查询模块流程图

 

3.3.6还书模块

图3.6还书模块流程图

4.运行结果

 

5.设计源码

/*StandardTemplateLibrary,标准模板库*/

#include//数据流输入/输出

#include//字符串类

usingnamespacestd;

#defineMax3

typedefstructBOOK//声明图书结构体变量BOOK,表示图书信息

{

charnumber[10];//书号

chartitle[20];//书名

charwriter[10];//作者

charpublish[20];//出版社

intyear;//出版年份

intmonth;//出版月份

intday;//出版日期

floatprice;//出版价格

intstorage;//库存量

intremain;//现存量

structBOOK*next;//下一个节点指针

}BOOK;

typedefstructBORROW//借书信息

{

charbook_number[10];//书号

}BORROW;

typedefstructREADER//读者信息

{

charnumber[3];//读者编号

charname[10];//读者名字

intborrow_amount;//当前借书量

BORROWborrow[Max];//借书信息

structREADER*next;

}READER;

BOOK*h_book=NULL;//图书链表头结点

READER*h_reader=NULL;//读者链表头结点

intDisplayMenu();//显示主菜单

voidInitialize();//初始化(初始化读者和图书的信息)

voidInit_reader();//初始化读者信息

voidInit_book();//初始化图书信息

voidInsert_New_Book();//新书入库模块

intFind();//查找菜单

voidFind_Select();//查找菜单选择函数

voidFind_Reader();//查找某个读者信息

voidFind_Book();//查找某个图书信息

voidPrint_reader();//打印所有读者信息

voidPrint_book();//打印所有图书信息

voidBorrow_Book();//借书函数

voidReturn_Book();//还书函数

voidSave();//保存到文件

voidSelectmenu();//主菜单选择函数

//显示主菜单

intDisplayMenu()

{

intchoice;

cout<

cout<

cout<<"*\t0----退出系统*"<

cout<<"*\t1----新书入库*"<

cout<<"*\t2----信息查询*"<

cout<<"*\t3----借书登记*"<

cout<<"*\t4----还书管理*"<

cout<

cout<<"请选择相应选项:

";

while

(1)

{

cin>>choice;

if(choice<0||choice>4)

cout<<"\n错误!

请重新输入:

";

else

break;

}

returnchoice;

}

voidInitialize()//初始化(初始化读者和图书的信息)

{

Init_book();

Init_reader();

}

voidInit_book()//初始化图书信息

{

BOOK*pBook;//创建指向BOOK类的指针

pBook=(BOOK*)malloc(sizeof(BOOK));

/*sizeof是C/C++中的一个操作符(operator),作用是返回一个对象或者类型所占的内存字节数。

*/

/*Malloc向系统申请分配指定size个字节的内存空间。

返回类型是void*类型。

*/

/*void*类型可以强制转换为任何其它类型的指针。

*/

memset(pBook,0,sizeof(BOOK));//函数原型void*memset(void*s,intch,size_tn);

/*memset函数的作用是将s中前n个字节替换为ch并返回s;*/

h_book=pBook;

//打开文件

if(freopen("book.txt","r",stdin)==NULL)

{

fclose(stdin);

freopen("CON","r",stdin);

return;

}

while

(1)

{

//读取读者信息

cin>>pBook->number;

if(strcmp(pBook->number,"0")==0)//读到了文件末尾

//strcmp是字符串比较函数

{

//关闭文件输入流,恢复标准输入流

fclose(stdin);

freopen("CON","r",stdin);

return;

}

cin>>pBook->title>>pBook->writer>>pBook->publish>>pBook->year>>pBook->month

>>pBook->day>>pBook->price>>pBook->storage>>pBook->remain;

//创建下一个节点

BOOK*temp=(BOOK*)malloc(sizeof(BOOK));

memset(temp,0,sizeof(BOOK));

pBook->next=temp;

pBook=temp;

}

//关闭文件输入流,恢复标准输入流

fclose(stdin);

freopen("CON","r",stdin);

}

//初始化读者信息

voidInit_reader()

{

READER*pReader;

pReader=(READER*)malloc(sizeof(READER));/*向系统申请分配指定size个字节的内存空间,返回类型是void*类型。

*/

memset(pReader,0,sizeof(READER));/*把pReader清零*/

h_reader=pReader;

if(freopen("reader.txt","r",stdin)==NULL)//打开文件

{

fclose(stdin);

freopen("CON","r",stdin);

return;

}

while

(1)

{

//读取读者信息

cin>>pReader->number;

if(strcmp(pReader->number,"0")==0)//如果读到了文件末尾

{

fclose(stdin);

freopen("CON","r",stdin);

return;

}

cin>>pReader->name>>pReader->borrow_amount;

for(inti=0;iborrow_amount;i++)

{

cin>>pReader->borrow[i].book_number;

}

//创建下一个节点

READER*temp=(READER*)malloc(sizeof(READER));

memset(temp,0,sizeof(READER));

pReader->next=temp;

pReader=temp;

}

//关闭文件输入流,恢复标准输入流

fclose(stdin);//函数原型:

intfclose(FILE*stream);

freopen("CON","r",stdin);

/*重新分配文件指针,实现重定向。

如果stream流已经打开,则先关闭该流。

如果该流已经定向,则freopen将会清除该定向。

*/

/*函数原型:

FILE*freopen(constchar*filename,constchar*type,FILE*stream);*/

/*功能:

关闭一个流。

注意:

使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。

*/

}

voidInsert_New_Book()//新书入库模块

{

BOOK*p,*p0,*p1;

p=p1=h_book;

cout<<"\n\t\t新书入库\n";

cout<

cout<<"\n请输入新书信息:

\n";

p0=(BOOK*)malloc(sizeof(BOOK));

cout<<"BookNo.:

";

cin>>p0->number;

while(strcmp(p0->number,p1->number)!

=0&&p1->next!

=NULL)

p1=p1->next;

if(strcmp(p0->number,p1->number)==0)

/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/

{

cout<<"\n此编号图书已存在!

!

直接入库!

\n";

cout<<"请输入入库的图书数量:

";

cin>>p0->storage;

p1->storage+=p0->storage;

p1->remain+=p0->storage;

cin.clear();

cin.ignore(200,'\n');

}

else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/

{

cout<<"图书名:

";

chartmp[20]={0};

cin>>tmp;

memcpy(p0->title,tmp,20);//函数原型void*memcpy(void*dest,constvoid*src,intn);

/*从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中*/

cout<<"图书作者:

";

chartmp0[10]={0};

cin>>tmp;

memcpy(p0->writer,tmp,20);

cout<<"图书出版社:

";

chartmp1[20]={0};

cin>>tmp;

memcpy(p0->publish,tmp,20);

cout<<"图书的出版年份:

";

cin>>p0->year;

cout<<"图书的出版月份:

";

cin>>p0->month;

cout<<"图书的出版日期:

";

cin>>p0->day;

cout<<"图书价格:

";

cin>>p0->price;

cout<<"图书入库量:

";

cin>>p0->remain;

p0->storage=p0->remain;

while(strcmp(p->next->number,"0")!

=0)

{

p=p->next;

}

if(h_book==NULL)h_book=p0;/*此处分两种情况,链表中如果没有数据,head则直接指向p0处*/

else

{

p0->next=p->next;

p->next=p0;/*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/

}

p0->remain=p0->storage;

}

cout<<"\n新书入库完毕!

\n";

getchar();

}

//查找菜单

intFind()

{

intchoice;

cout<<"\n\t\t信息查询菜单\n";

cout<

cout<<"*\t0----返回上级\t*\n";

cout<<"*\t1----查找图书\t*\n";

cout<<"*\t2----查找读者\t*\n";

cout<<"*\t3----打印所有图书\t*\n";

cout<<"*\t4----打印所有读者\t*\n";

cout<

cout<<"请选择相应代码:

";

for(;;)/*循环调用模式,保证能进行重复操作*/

{

cin>>choice;

if(choice<0||choice>4)

{

cin.clear();

cin.ignore(200,'\n');

cout<<"\n错误!

请重新输入:

";

}

else

break;

}

returnchoice;

}

//查找菜单选择函数

voidFind_Select()

{

while

(1)/*循环调用模式,保证能进行重复操作*/

{

switch(Find())/*功能选择*/

{

case0:

return;

case1:

Find_Book();break;

case2:

Find_Reader();break;

case3:

Print_book();break;

case4:

Print_reader();break;

default:

cout<<"\n错误!

";

cin.clear();

cin.ignore(200,'\n');

exit(0);

}

}

}

voidFind_Reader()//查找某个读者信息

{

READER*p;

inti;

charfind_reader[10];

p=h_reader;

cout<<"\n读者信息查询模块\n";

cout<

cout<<"\n请输入你要查询读者编号:

";

cin>>find_reader;

while(strcmp(p->number,find_reader)!

=0&&p->next)

p=p->next;

if(strcmp(p->number,find_reader)==0)

{

cout<<"\n读者编号:

"<

\n";

cout<<"编号:

"<number<

cout<<"姓名:

"<name<<"\n";

/*此处这样处理,是为了能实现一个读者能借多本书,

而Max的数值可以随需要修正*/

for(i=0;i

{

cout<<"借的第"<

";

cout<borrow[i].book_number<

}

}

else

cout<<"\n此读者编号不存在,请核对!

";

getchar();

}

voidFind_Book()//查找图书信息

{

BOOK*p;

charfind_book[10];/*读者编号唯一,查找只须一次遍历*/

p=h_book;

cout<<"\n图书信息查询模块\n";

cout<

cout<<"请输入你要查询图书编号:

";

cin>>find_book;

while(strcmp(p->number,find_book)!

=0&&p->next)

p=p->next;

if(strcmp(p->number,find_book)==0)/*找到了就打印,否则提示不存在,或出错*/

{

cout<<"\n图书编号"<

"<

cout<<"图书名:

"<title<

cout<<"作者:

"<writer<

cout<<"出版社:

"<publish<

cout<<"出版日期:

"<year<<"年"<month<<"月"<day<<"日"<

cout<<"图书价格:

"<price<<"元"<

cout<<"现存量:

"<remain<

cout<<"库存量:

"<storage<

}

else

cout<<"\n此图书编号不存在,请核对并检查你的信息是否有误!

";

getchar();

}

voidPrint_reader()//打印所有读者信息

{

READER*p;

inti;

p=h_reader;

cout<<"\

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

当前位置:首页 > 求职职场 > 自我管理与提升

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

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