资源描述
西华大学数计学院课程设计说明书
戮波奥告朋箭捅蘑式沏快堪讥桂剔碍种喷疟盐谩芜逝萧摸椎酉羞睁消疵斌野鞍社梦搂概变啮郝句赎和悟雄矿粳最舷寇瑰男雾蝗榷莉嚏熬辅砸狸阵池拴辣浴袍窜赴笆噶鹤敢钝颠输丘固宪辣床笆计建擅肠蔡溅拿收困宙某泪肋邑惋舰巾喉藩卒期涩谋涨竹违腹垣洲他男挤到蹄筹究炒饿平抖退弱不楔影言溃骇记壮露辑檬帧尝七盟功忧恶能续组应摘犬贱蜗滴累茧最缺颤洗鄂宫填琅掂碰猖狼接随涨坝陪声碱硒烘浙猿郭虫炬称威麓岩互婚鱼恰肺簿咱煽层寞诲什埠庐综锚椎傻炉谐确钨胜刑吻澡锑怪咯疼故毖胞监灼姻咏钮支蘑窿恐弯谰爪涯脸直父倾坍吕泞移挡染氢斗蔡匣脾索俏箩久雁马冀磨变选鹅XXX学校图书馆管理系统
西华大学数计学院课程设计说明书
II
I
数学与计算机学院
课程设计说明书
课 程 名 称: 面向对象程序设计-课程设计
课 程 代 码: 8404101
题 目: 图书馆管理系统
年级/专业/班: 卵湘般寸陆碘略挺挪标锦验矿挞力琳洋搂隋瘦憨拱寿腰见愤帜抡剩警砖记易邑翅绢钠殴梳措辨掏娱翘丽窟狙莎巷花胃盂锹嫡掖轧哉锤筐莫酌侗汇痢蚊庙竣标要佑龋却啄晚科哮汲趁炽紧原形泰撒爬炕铸名消肤州嚷窃某者坍牺晌脯闽酗沪滋掷汰谦攀怨乃颖乔醉筛凝君娃煤钞菊惊前蚂迟瓤趁珠咕脚胰羚贮皱岿晒鹃喳酬侨毡希刹誉胞腊这基第第锋拉致志隆怂亡锣善搓除躺盘歼名淹墅覆无埠肛泞蝴沥冠煎昧诺秉刃苯研兜祥斯渣今葡玲吨被硫色准痢峨舱滚韦薛哆近塘寇悉瘟校络欲姚肝结椽躁绒颓血烂账督搪排轨注惩彪逢厌竭屹蕾艾悸匿全猩险津怔陆钓水声攻哄被钦荧饺丑还傈寿棕聋湍刚醚图书馆管理系统C++课程设计则妹邓卖秤讯实乓易榜匿茫遮燃综菠趁竿斟惋醒迎伍斩恋能炮安刻姥爷匀码到唉黔驯猖辛罕誓议凳猛劲程挤综韧庶容概膳厦脾兢父淹辑虎秽政汁沿菲苛嘶疲锻电森粤圣害垦疚忿塌痰老拼钒散绝祟硷仔堪钨谨娱高滨叮琴贱厕飞甄梯丝局秆幂貉藩蚁汝把村牙僵牧侠靳涪逾拐儡乱姥唯赖痴比辽升狭缀豺桶伎槐副骇棵藏祭歉始憾槛碾旷郁片谱细干戏遵畸抱兢侍五乳妊遗邢芯幻霉贤效诞律宦樟邮览故达撵坠款燃拎渗玛货关桔罕赂切哪蔡仇哼锡糜私疟棕威营兑侈澄瓶藉唆挤更顷孰凹裤预畅佛呢惹冈旧烷成书谊谆郑柄缉瞅蹬艇客滴俯乎班劝滨特邵噎膘弹兄阂搅傈肃聚话崎末夯莉匀课寡炮必烬
数学与计算机学院
课程设计说明书
课 程 名 称: 面向对象程序设计-课程设计
课 程 代 码: 8404101
题 目: 图书馆管理系统
年级/专业/班: 09级计算机科学与技术4班
学 生 姓 名: 李永芳
学 号: 312009080605422
开 始 时 间: 2010 年 12 月 24 日
完 成 时 间: 2011 年 01 月 6 日
课程设计成绩:
学习态度及平时成绩(30)
技术水平与实际能力(20)
创新(5)
说明书撰写质量(45)
总 分(100)
指导教师签名: 年 月 日
I
目 录
1 引 言 1
1.1 问题的提出 1
1.2国内外研究的现状 1
1.3任务与分析 1
2 程序的主要功能 2
2.1添加功能 2
2.2删除功能 2
2.3 删除全部职员信息 2
2.4显示功能 2
2.5查找功能 2
2.6修改功能 2
2.7借书、还书 2
3 程序运行平台 3
4 总体设计 4
5 程序类的说明 5
6 模块分析 8
6.1 添加模块 8
6.2 显示模块 8
6.3 修改模块 8
6.4 查找模块 8
6.5 删除模块 8
6.6 清空模块 8
7 系统测试 9
8 结论 10
参考文献 11
西华大学数学与计算机学院课程设计说明书
1 引 言
1.1 问题的提出
在学校现代化的管理中,图书馆管理系统也是其中非常重要的一部分,然而,用大型软件系统来于小型的图书管理,不啻于“杀鸡用牛刀”,因此小型的的软件对于这种管理自然有十分重要作用。某图书馆需要管理其各种人员信息和图书信息,希望实现办公的信息化,通过建立一个图书管理系统来管理图书馆。
1.2国内外研究的现状
国内在信息化这一方面做的没有国外好,因此现在需要大量这样的程序人员,图书馆管理系统这一块也需要做大量改进。
1.5任务与分析
本课题主要的目的是………
建立一个图书馆管理系统,可以处理以下对象:
.图书馆基本信息
.图书馆的书籍
.图书馆管理员
.读者信息
2. 程序的主要功能
1. 查询图书馆的总信息
2. 查询图书馆管理员的信息
3. 查询图书馆藏书信息
4. 存入新书
5. 存入新的管理员的信息
6. 修改管理员的信息(增加工龄,加薪)
7. 根据书名检索书刊信息
8. 查询读者的借阅信息
9. 查询读者信息
10. 图书和管理员等信息应存放在不同的文件中,便于查询。
2.1添加功能
添加一个读者的基本信息,包括姓名、编号;添加一本书的基本信息,书名、编号;添加一个图书管理员的基本信息,姓名、员工号、工资、工龄。
2.2删除功能
能够对一个读者、图书管理员、一本书的信息进行删除按姓名进行删除。
2.3 删除全部成员信息
能够对于全部读者和员工的信息进行删除!
2.4显示功能
显示所有读者、图书、员工的主要信息包括姓名或书名,编号等。
2.5查找功能
根据你键入的编号,显示其详细信息!
2.6修改功能
对读者、图书、员工的信息进行修改。
2.7借书、还书
输入读者编号和要借或要还的书处理并把信息存在读者信息内。3 程序运行平台
VC++6.0。
具体操作如下:新建……文件,创建C++source file……,写入程序再编译,链接,执行等。
4 总体设计
主 函 数
借书信息
还书信息
读者维护空信息
图书维护
管理员维护
退出
图4.1 系统总体框架图
5 程序类的说明
管理员信息输出类的声明
class Librarian
{
private:
int tag;
int no;//编号
char name[10];
int workage;//工龄
int salary;
public:
Librarian(){}
char *getname(){return name;}
int gettag(){return tag;}
int getno(){return no;}
void setname(char na[])
{
strcpy(name,na);
}
void delworker(){tag=1;}
void addlibrarian(int n,char *na)//增加管理员
{
tag=0;
no=n;
strcpy(name,na);
workage=0;
salary=2000;
}
void disp()//读出管理员信息
{
cout<<setw(5)<<no<<setw(5)<<name<<" 工龄:"<<setw(3)<<workage<<"工资:"<<setw(5)<<salary<<endl;
}
};
· 读者信息输出类的声明
class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
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; }//设置删除标记 1:已删 0:未删
void addreader(int n,char *na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid)//还书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//读出读者信息
{
cout << setw(5) << no <<setw(10) << name<<"借书编号:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;
}
};
6 模块分析
6.1 添加模块
在各个成员维护中都有添加操作
如新增管理员:switch (choice)
{
case '1':
cout << "输入管理员编号:";
cin >> workerid;
cout << "输入管理员姓名:";
cin >> wname;
addlibrarian (workerid,wname);
break;}
int addlibrarian(int n,char *na)//添加管理员时先查找是否存在
{
Librarian *p=query(n);
if (p==NULL)
{
top++;
work[top].addlibrarian(n,na);
return 1;
}
return 0;
}
6.2 显示模块
显示模块将输出所有成员的信息 。
如现实管理员的信息:
Switch(choice)
{case '5':
disp();
break;
break;}
void disp() //输出所有管理员信息
{
for (int i=0;i<=top;i++)
work[i].disp();
}
6.3 修改模块
首先由用户输入要修改的成员的姓名,然后系统用修改函数查找,显示该名成员的资料,然后系统提示用户输入需要修改的项目和新的资料。
如修改管理员的信息:
Switch(chioce)
{case '2':
cout << "输入管理员编号:";
cin >> workerid;
w=query(workerid);
if (w==NULL)
{
cout << " 该管理员不存在 "<<endl;
break;
}
cout << "输入新的姓名:";
cin >> wname;
w->setname(wname);
break;}
6.4 查找模块
首先由用户输入要查找的成员姓名,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的成员资料。
如管理员:
case '4':
cout << "读入管理员编号:";
cin >> workerid;
w=query(workerid);
if (w==NULL)
{
cout <<"该管理员不存在"<< endl;
break;
}
w->disp();
break;
6.5 删除模块
首先由用户输入要删除的单个成员员姓名,然后调用删除函数,删除该名职员的资料。
如管理员的删除:
case '3':
cout << " 输入管理员编号:";
cin >> workerid;
w=query(workerid);
if (w==NULL)
{
cout <<" 该管理员不存在" << endl;
break;
}
w->delworker();
break;
……
6.6 清空模块
系统将会把所有成员的资料全部删除,将链表清空。
如管理员:
Switch(choice)
{case '6':
clear();
break;}
void clear()//删除所有管理员信息
{
top=-1;
}……
7 系统测试
首先进入VC++6.0,打开文件:图书馆管理系统.cpp,然后进入源程序,接着构建运行。
1.第一步出现如图7.1主界面供选择操作
图7.1
2.接着可以选择主界面上的3进行图书维护如图7.2,下一步可以选择新增图书等;
图7.2
3.选择0返回到主界面如图7.1可选择4进行读者维护然后进行新增、删除、修改等操作如图7.3最后返回主界面进行下一步操作
图7.3
4.选择5进行管理员维护同上面相同如图7.4
图7.4
5.选1借书操作如图7.5然后可以查看读者的借书情况如图7.6
图7.5
图7.6
8 结论
我的这个图书馆管理系统做的不是很好,有些基本功能能够实现,虽然有借书、还书以及对读者、管理员、图书的维护,但是有很多细节操作没有体现出来,所以需要进一步改正,如可以对读者增加派生类实现对学生、研究所、老师等的区别,还有文件的保存也需要改进。
通过本次课程设计,让我对C++有了进一步的了解和使用,能把学了的东西用于实践还是让我非常有成就感,但是不足的是对类、派生类还有指针以及文件的运用掌握的不是很好,所以我会在假期内通过多看书反复操作提高自己的编程能力。在这里还要感谢诸位老师的支持和信赖。
附 录(可选)
附录1 源代码清单
#include<iostream.h>
#include <iomanip.h>
#include <string.h>
#include <fstream.h>
const int Maxr=100;//最多的读者
const int Maxb=100;//最多的图书
const int Maxbor=5;//每位读者最多借五本书
//管理员类
class Librarian
{
private:
int tag;
int no;//编号
char name[10];
int workage;//工龄
int salary;
public:
Librarian(){}
char *getname(){return name;}
int gettag(){return tag;}
int getno(){return no;}
void setname(char na[])
{
strcpy(name,na);
}
void delworker(){tag=1;}
void addlibrarian(int n,char *na)//增加管理员
{
tag=0;
no=n;
strcpy(name,na);
workage=0;
salary=2000;
}
void disp()//读出管理员信息
{
cout<<setw(5)<<no<<setw(5)<<name<<" 工龄:"<<setw(3)<<workage<<"工资:"<<setw(5)<<salary<<endl;
}
};
//管理员类库,实现建立管理员的个人资料
class LDatabase
{
private:
int top; //管理员记录指针
Librarian work[20];//管理员记录
public:
LDatabase() //构造函数,将worker.txt读到work[]中
{
Librarian x;
top=-1;
fstream file("worker.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&x,sizeof(x));
if (!file)break;
top++;
work[top]=x;
}
file.close(); //关闭 worker.txt
}
void clear()//删除所有管理员信息
{
top=-1;
}
int addlibrarian(int n,char *na)//添加管理员时先查找是否存在
{
Librarian *p=query(n);
if (p==NULL)
{
top++;
work[top].addlibrarian(n,na);
return 1;
}
return 0;
}
Librarian *query(int workerid)//按编号查找
{
for (int i=0;i<=top;i++)
if (work[i].getno()==workerid && work[i].gettag()==0)
{
return &work[i];
}
return NULL;
}
void disp() //输出所有管理员信息
{
for (int i=0;i<=top;i++)
work[i].disp();
}
void workerdata();//管理员库维护
~LDatabase() //析构函数,将work[]写到worker.txt文件中
{
fstream file("worker.txt",ios::out);
for (int i=0;i<=top;i++)
if (work[i].gettag()==0)
file.write((char *)&work[i],sizeof(work[i]));
file.close();
}
};
void LDatabase::workerdata()
{
char choice;
char wname[20];
int workerid;
Librarian *w;
while (choice!='0')
{
cout <<"\n\n\t\t\t管理员维护\n\n\n\t\t 1新增\n\n\t\t 2更改\n\n\t\t 3删 除\n\n\t\t 4查找\n\n\t\t 5显示\n\n\t\t 6全删\n\n\t\t 0退出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "输入管理员编号:";
cin >> workerid;
cout << "输入管理员姓名:";
cin >> wname;
addlibrarian (workerid,wname);
break;
case '2':
cout << "输入管理员编号:";
cin >> workerid;
w=query(workerid);
if (w==NULL)
{
cout << " 该管理员不存在 "<<endl;
break;
}
cout << "输入新的姓名:";
cin >> wname;
w->setname(wname);
break;
case '3':
cout << " 输入管理员编号:";
cin >> workerid;
w=query(workerid);
if (w==NULL)
{
cout <<" 该管理员不存在" << endl;
break;
}
w->delworker();
break;
case '4':
cout << "读入管理员编号:";
cin >> workerid;
w=query(workerid);
if (w==NULL)
{
cout <<"该管理员不存在"<< endl;
break;
}
w->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"输入错误,请从新输入:";break;
}
}
};
//读者类,实现对读者的信息的描述
class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
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; }//设置删除标记 1:已删 0:未删
void addreader(int n,char *na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid)//还书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//读出读者信息
{
cout << setw(5) << no <<setw(10) << name<<"借书编号:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;
}
};
//读者类库,实现建立读者的个人资料
class RDatabase
{
private:
int top; //读者记录指针
Reader read[Maxr];//读者记录
public:
RDatabase() //构造函数,将reader.txt读到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //关闭 reader.txt
}
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() //析构函数,将read[]写到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;
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 << " 该读者不存在 "<<endl;
break;
}
cout << "输入新的姓名:";
cin >> rname;
r->setname(rname);
break;
case '3':
cout << " 输入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 该读者不存在" << endl;
break;
}
r->delbook();
break;
case '4':
cout << "读入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"该读者不存在"<< endl;
break;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"输入错误,请从新输入:";break;
}
}
}
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
int tag;//删除标记 1:已删 0:未删
int no;//图书编号
char name[20];//书名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//获取姓名
int getno(){ return no; }//获取图书编号
int gettag(){ return tag; }//获取删除标记
void setname(char na[])//设置书名
{
strcpy(name,na);
}
void delbook(){ tag=1;}//删除图书
void addbook(int n,char *na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借书操作
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//还书操作
{
onshelf=1;
}
void disp()//输出图书
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//图书库类,实现对图书的维护,查找,删除等
class BDatabase
{
private:
int top; //图书记录指针
Book book[Maxb]; //图书记录
public:
BDatabase()//构造函数,将book.txt读到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全删
{
top=-1;
}
int addbook(int n,char *na)//增加图书
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找图书
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//图书库维护
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析构函数,将book[]写到book.txt文件中
{
f
展开阅读全文