-
一、
需求分析
p>
图书系统在生活中运用相当广泛,因此需要很多程序对他进行管理。本系统有四个类,
Book
类,
BDatebase
类、
Reader
类、
R
Datebase
类,存储借阅者的个人信息、借阅信息以及预定信息。持有
借阅卡的借阅者可以借阅书刊、返还书刊、查询书刊信息、预定书刊并取消预定等功能。< p>
二、
系统总框图
图书管理系统
四个类
程序实现功能
图
书
类
p>
图
书
库
类
读
者
类
读
者
库
类
< br>文
件
录
入
输
出
显
示
查
询
信
息
删
p>
除
信
息
退
出
程
序
三、
模块的设计分析
4.1
图书入库管理模块设计
设定了书籍总数,定义了新图书的增加和书籍编号。
Book p[1000];
void
inlibrary()
int sort_add
4.2
图书借书管理模块设计
定义了图书的借书系统,和借出书籍编号。
int Book::borrow()
int
number_out;
4.3
图书还书管理模块设计
定义了图书的还书系统,和还出书籍编号。
int Book::restore()
int
number_in;
4.4
图书查询管理模块设计
无专门模块,同借还书系统。
在借书和还书的同时,进行查询。
四、
程序中出现的函数
看看该类定义了借书操作,还书操作,设置读者姓名等功能。
Reader
+name[20]:char
+no:int
+tag:int
+borbook:int
+ getname():char
+gettag():int
+ getno():int
+setname(char na[]):void
+
delbook():void
+ addreader(int n,char
*na):void
+ borrowbook(int bookid):void
+ retbook(int bookid):int
+
disp():void
该类实现了建立读者的个人资料,
删除读者信息,输出读者信息等功能。
RDatebase
+ top:int
+
rname[20]:char
+readerid:int
+readerdata():void
+choice:char
+addreader(int
n,char *na):int
+clear():void
+disp():void
图书类的设计
Book
+no:int
+name[20]:char
+onshelf:int
+getname():char
+getno():int
+gettag():int
+setname(char
na[]):void
+delbook():void
+addbook():void
+borrowbook():int
+retbook():void
+disp
():void
图书库类的设计
Xingzhengrenyuan
+top:int
+clear():void
+addbook(int n,char *na):int
+bookdata():void
+bookdata():void
+
disp():void
五、
特色的函数实现
void
BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
Book
*b;
while (choice!='0')
{
cout <<
图书维护
cout<<
新
增
n
tt2
更
改
ntt3
删
除
ntt4
查
找
ntt5
显
示
ntt6
全
删
ntt0
退
出
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)
{
cout
<<
该图书不存在
break;
}
b->delbook();
break;
case '4':
cout <<
读入图书编号
:
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout
<<
该图书不存在
break;
}
b->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:c
out<<
输入错误,请从新输入
:
}
}
}
六、
存在的问题与不足及对策
由于设计者
水平有限及时间等方面的原因,该系统的功能比较简单,查错能力也不强,对于一
些不正
确的输入可能会造成一些难以预料的结果,因此,请不要故意输入错误信息。这些不足请老
师多多谅解。今后设计者会更多的学习编程技巧,不断的提高程序设计水平。
七、心得体会
通过这次的课程设计,让我充分的感觉到了要自己设计一个程序是多么的难,这个程序的设计
过程中,我清楚的意识到自己的水平有多么的薄弱,每增加一个函数就要调试好久,有时候应为少
了一个大括号或是分号,导致要找很久很久。虽然系统可以运行,也具有了一些基本的功能,但
我
意识到了自己有太多的不足。
以后
还会有很多的课程设计,
一定要吸取这次的教训,
把知识学懂学
透学精,
真正的为我所用,
这样走上社会我才能真正的发挥所长
。
源程序
#include
#include
#include
#include
using
namespace std;
const int Maxr=100;
const int Maxb=100;
const
int Maxbor=5;
class Reader
{
private:
int
tag;
int no;
char
name[10];
int borbook[Maxbor];
public:
Reader() {}
char *getname() {return name;}
int gettag() {return tag;}
int getno() {return no;}
void setname(char na[])
{
strcpy(name,na);
}
void delbook(){ tag=1; }
void addreader(int n,char *na)
{
tag=0;
no=n;
strcpy(name,na);
for(int
i=0;i
borbook[i]=0;
}
void borrowbook(int
bookid)
{
for(int
i=0;i
{
if
(borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int
retbook(int bookid)
{
for(int i=0;i
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()
{
cout << setw(5) << no <
借书编号:
[
for(int
i=0;i
if(borbook[i]!=0)
cout << borbook[i] <<
cout
<<
}
};
class RDatabase
{
private:
int
top;
Reader read[Maxr];
public:
RDatabase()
{
Reader s;
top=-1;
fstream
file(
while (1)
{
((char *)&s,sizeof(s));
if
(!file)break;
top++;
read[top]=s;
}
();
}
void
clear()
{
top=-1;
}
int addreader(int n,char
*na)
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader *query(int readerid)
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp()
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();
~RDatabase()
{
fstream file(
for (int
i=0;i<=top;i++)
if
(read[i].gettag()==0)
((char
*)&read[i],sizeof(read[i]));
();
}
};
void RDatabase::readerdata()
{
char choice;
char rname[20];
int
readerid;
Reader *r;
while
(choice!='0')
{
cout
<<
读者维护
nnntt 1
新增
nntt 2
更改
nntt 3
删除
nntt 4
查
找
nntt 5
显示
nntt 6
全删
nntt 0
退出
cin >> choice;
switch (choice)
{
case '1':
cout <<
输入读者编号
:
cin >>
readerid;
cout <<
输入读者姓名
:
cin >>
rname;
-
-
-
-
-
-
-
-
-
上一篇:各种材料热膨胀系数
下一篇:PIC单片机各寄存器汇总要点