整理图书信息管理的设计与实现C课程设计.docx
《整理图书信息管理的设计与实现C课程设计.docx》由会员分享,可在线阅读,更多相关《整理图书信息管理的设计与实现C课程设计.docx(30页珍藏版)》请在冰豆网上搜索。
整理图书信息管理的设计与实现C课程设计
图书信息管理的设计与实现
1.课程设计的目的与要求
1.1课程设计的需求分析
为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。
使用c语言编写了图书管理系统。
本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。
实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。
所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。
图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。
图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。
整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。
1.2课程设计的目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度
(1)进一步巩固加强《C语言程序设计教程》中所学习的内容。
(2)将《C语言程序设计教程》中学到的内容付诸实践,提高学生的实际解决问题的能力。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力
(4)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
1.3课程设计的实验环境
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
1.4课程设计的预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.5课程设计的要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.积极和小组内同学合作,听从指导老师的意见,确保课程设计顺利完成。
2.课程设计的内容
2.1C++语言程序设计------《图书馆信息管理系统》问题分析
2.1.1功能分析
(1)图书信息:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
(2)系统以菜单方式工作:
图书信息录入功能:
可以输入图书的相关信息,例如关键字,书名等。
图书信息浏览功能:
可以了解图书作者以及书的大体内容等。
查询和排序功能:
按书名查询,按作者名查询。
图书信息的删除与修改:
可以删除与修改图书的相关信息。
2.1.2算法设计及程序设计中的技术重点
1.采用VisualC++6.0编写程序,使用文本文件保存数据。
2.定义读者类,保存单个读者信息。
3.定义读者库类,实现建立读者的个人资料。
4.定义图书类,保存单个图书信息。
5.定义图书库类,实现对图书的维护,查找,删除等。
6.编制主函数main()完成函数调用过程。
7.使用文本文件利用输入输出流留保存和提取数据。
读者类:
Reader
表2-1读者类设计参数
名称
说明
类别
inttag;
删除标记
成员变量
intno;
读者编号
成员变量
charname[10];
读者姓名
成员变量
intborbook[Maxbor]
所借图书
成员变量
Reader();
构造函数
char*getname();
获取姓名
成员函数
intgettag();
获取删除标记
成员函数
intgetno();
获取读者编号
成员函数
voiddelbook();
设置删除标记
成员函数
voidaddreader();
增加读者
成员函数
voidborrowbook();
借书操作
成员函数
intretbook();
还书操作
成员函数
voiddisp();
输出读者信息
成员函数
读者库类:
RDataBase
表2-2读者库类设计参数
名称
说明
类别
inttop;
读者记录指针
成员变量
Readerread[Maxr];
图书记录
成员变量
RDatabase();
构造函数,将reader.txt读到read[]
构造函数
voidclear();
全删
成员函数
intaddreader(intn,char*na)
添加读者
成员函数
Reader*query(intreaderid);
按编号查找读者
成员函数
voidreaderdata();
读者库维护
成员函数
voiddisp();
输出所有读者信息
成员函数
~RDatabase();
析构函数,将read[]写到reader.txt
成员函数
图书类:
Book
表2-3图书类设计参数
名称
说明
类别
inttag;
删除标记
成员变量
intno;
图书编号
成员变量
charname[20];
书名
成员变量
intonshelf;
是否在架
成员变量
Book();
构造函数
char*getname();
获取书名
成员函数
intgetno();
获取图书编号
成员函数
intgettag();
获取删除标记
成员函数
voidsetname(charna[]);
设置书名
成员函数
voiddelbook();
删除图书
成员函数
voidaddbook(intn,char*na)
增加图书
成员函数
intborrowbook();
借书操作
成员函数
voidretbook();
还书操作
成员函数
voiddisp();
输出图书
成员函数
图书库类:
BDataBase
表2-4图书库类设计参数
名称
说明
类别
inttop;
图书记录指针
成员变量
Bookbook[Maxb];
图书记录
成员变量
BDatabase();
构造函数,将book.txt读到book[]
构造函数
voidclear();
全删
成员函数
intaddbook(intn,char*na)
增加图书
成员函数
Book*query(intbookid);
按编号查找图书
成员函数
voidbookdata();
图书库维护
成员函数
voiddisp();
显示
成员函数
~BDatabase();
析构函数,将book[]写到book.txt
成员函数
系统流程图
2.2源程序代码
#include
#include
#include
#include//输入/输出文件流类
usingnamespacestd;
constintMaxr=100;//最多的读者
constintMaxb=100;//最多的图书
constintMaxbor=5;//每位读者最多借五本书
//读者类,实现对读者的信息的描述
classReader
{
private:
inttag;//删除标记1:
已删0:
未删
intno;//读者编号
charname[10];//读者姓名
intborbook[Maxbor];//所借图书
public:
Reader(){}
char*getname(){returnname;}//获取姓名
intgettag(){returntag;}//获取删除标记
intgetno(){returnno;}//获取读者编号
voidsetname(charna[])//设置姓名
{
strcpy(name,na);
}
voiddelbook(){tag=1;}//设置删除标记1:
已删0:
未删
voidaddreader(intn,char*na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(inti=0;i}
voidborrowbook(intbookid)//借书操作
{
for(inti=0;i{
if(borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
intretbook(intbookid)//还书操作
{
for(inti=0;i{
if(borbook[i]==bookid)
{
borbook[i]=0;
return1;
}
}
return0;
}
voiddisp()//读出读者信息
{
cout<[";
for(inti=0;iif(borbook[i]!
=0)
cout<cout<<"]"<}
};
//读者类库,实现建立读者的个人资料
classRDatabase
{
private:
inttop;//读者记录指针
Readerread[Maxr];//读者记录
public:
RDatabase()//构造函数,将reader.txt读到read[]中
{
Readers;
top=-1;
fstreamfile("reader.txt",ios:
:
in);//打开一个输入文件
while
(1)
{
file.read((char*)&s,sizeof(s));
if(!
file)break;
top++;
read[top]=s;
}
file.close();//关闭reader.txt
}
voidclear()//删除所有读者信息
{
top=-1;
}
intaddreader(intn,char*na)//添加读者时先查找是否存在
{
Reader*p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return1;
}
return0;
}
Reader*query(intreaderid)//按编号查找
{
for(inti=0;i<=top;i++)
if(read[i].getno()==readerid&&read[i].gettag()==0)
{return&read[i];}
returnNULL;
}
voiddisp()//输出所有读者信息
{
for(inti=0;i<=top;i++)
read[i].disp();
}
voidreaderdata();//读者库维护
~RDatabase()//析构函数,将read[]写到reader.txt文件中
{
fstreamfile("reader.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
};
voidRDatabase:
:
readerdata()
{
charchoice;
charrname[20];
intreaderid;
Reader*r;
while(choice!
='0')
{
cout<<"\n\n\t\t\t读者维护\n\n\n\t\t1新增\n\n\t\t2更改\n\n\t\t3删除\n\n\t\t4查找\n\n\t\t5显示\n\n\t\t6全删\n\n\t\t0退出"<cin>>choice;
switch(choice)
{
case'1':
cout<<"输入读者编号:
";
cin>>readerid;
cout<<"输入读者姓名:
";
cin>>rname;
addreader(readerid,rname);
break;
case'2':
cout<<"输入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<break;
}
cout<<"输入新的姓名:
";
cin>>rname;
r->setname(rname);
break;
case'3':
cout<<"输入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<break;
}
r->delbook();
break;
case'4':
cout<<"读入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<break;
}
r->disp();
break;
case'5':
disp();
break;
case'6':
clear();
break;
default:
cout<<"输入错误,请从新输入:
";break;
}
}
}
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
classBook
{
private:
inttag;//删除标记1:
已删0:
未删
intno;//图书编号
charname[20];//书名
intonshelf;//是否再架1:
再架2:
已借
public:
Book(){}
char*getname(){returnname;}//获取姓名
intgetno(){returnno;}//获取图书编号
intgettag(){returntag;}//获取删除标记
voidsetname(charna[])//设置书名
{
strcpy(name,na);
}
voiddelbook(){tag=1;}//删除图书
voidaddbook(intn,char*na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
intborrowbook()//借书操作
{
if(onshelf==1)
{
onshelf=0;
return1;
}
return0;
}
voidretbook()//还书操作
{
onshelf=1;
}
voiddisp()//输出图书
{
cout<<<(onshelf==1?
"在架":
"已借")<}
};
//图书库类,实现对图书的维护,查找,删除等
classBDatabase
{
private:
inttop;//图书记录指针
Bookbook[Maxb];//图书记录
public:
BDatabase()//构造函数,将book.txt读到book[]中
{
Bookb;
top=-1;
fstreamfile("book.txt",ios:
:
in);
while
(1)
{
file.read((char*)&b,sizeof(b));
if(!
file)break;
top++;
book[top]=b;
}
file.close();
}
voidclear()//全删
{
top=-1;
}
intaddbook(intn,char*na)//增加图书
{
Book*p=query(n);
if(NULL==p)
{
top++;
book[top].addbook(n,na);
return1;
}
return0;
}
Book*query(intbookid)//查找图书
{
for(inti=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
{
return&book[i];
}
returnNULL;
}
voidbookdata();//图书库维护
voiddisp()
{
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析构函数,将book[]写到book.txt文件中
{
fstreamfile("book.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
voidBDatabase:
:
bookdata()
{
charchoice;
charbname[40];
intbookid;
Book*b;
while(choice!
='0')
{
cout<<"\n\n\n\t\t\t图书维护"<cout<<"\t\t1新增\n\t\t2更改\n\t\t3删除\n\t\t4查找\n\t\t5显示\n\t\t6全删\n\t\t0退出"<cin>>choice;
switch(choice)
{
case'1':
cout<<"输入图书编号:
"<cin>>bookid;
cout<<"输入图书书名:
"<cin>>bname;
addbook(bookid,bname);
break;
case'2':
cout<<"输入图书编号:
"<cin>>bookid;
b=query(bookid);
安全评价可针对一个特定的对象,也可针对一定的区域范围。
if(b==NULL)
{
cout<<"该图书不存在"<影响支付意愿的因素有:
收入、替代品价格、年龄、教育、个人独特偏好以及对该环境物品的了解程度等。
break;
②既包括天然的自然环境,也包括人工改造后的自然环境。
}
cout<<"输入新的书名:
"<环境影响的经济损益分析,也称环境影响的经济评价,即估算某一项目、规划或政策所引起的环境影响的经济价值,并将环境影响的经济价值纳入项目、规划或政策的经济费用效益分析中去,以判断这些环境影响对该项目:
规划或政策的可行性会产生多大的影响。
对负面的环境影响估算出的是环境费用,对正面的环境影响估算出的是环境效益。
cin>>bname;
b->setname(bname);
break;
case'3':
cout<<"读入图书编号:
"<一、环境影响评价的发展与管理体系、相关法律法规体系和技术导则的应用cin>>bookid;
b=query(bookid);
环境总经济价值=环境使用价值+环境非使用价值if(b==NULL)
{
(3)总经济价值的组成。
我们可以用下式表示环境总经济价值的组成:
cout<<"该图书不存在"<1.规划环境影响评价的技术依据break;
『正确答案』A}
b->delbook();break;
(三)规划环境影响评价的公众参与case'4':
cout<<"读入图书编号:
"<cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"