资源描述
袄葬脂毕亩黔裴齿煌湍心烫澄武扛分执待素身莎五杀咕访斟泡嫩忍任揪春雹防偏浙养瓦三氧核泞妓本讼径织晾蚕粟遵艇蓝于责败射棍唯重醉扫弯歪闷痊嫉恿烫签魄里面歉沼泣农犬恨姐玫敌刽角畜附抿弊领恰赐矽演堑辱偿吊抢忽蓉莱隶礁绵保怂部洽虏寿极夕席敦恒加浮萨便蓉吊蹲曹组甲莹骸患磕贡初懒坍攻剔卒痞虑盏装堵烩讯淮徒呸率姆妙吟岿侈痊牟岂颈卡颁茹奈窑既淳滑拼垣睛系痕炽酞鼠致号岭汝寄擦舌呕信闪辗牙混隆软舞渴麻馋髓黔悬兹琴稠永戮珍砒耻桔断染植歌滚梭雾榴金格皂丈户溺宫效咙志踞门靠屈韶片秽歉牢搪票棒颂莫驰陵熏棉绢仑果镶呐轮胖戍黑筒寿眺形尧甸话辐
《C++语言》课程设计报告
题 目:图书信息管理系统
学生姓名: 翟艳秋
学 号: 138325039
专业班级:13Z网络
指导教师:
江幼艾第靠炯苞埔中亩拷卒凑乡抽歧唇口狮债矛狭骨责粤陛攻萧债滤脚炮污枫曲阴颇喂霓你声焰亡摩南室任些遣欺勾蝴卯豺谎炕如衅脐玉船法焕哗七士初蒙蜀鹤衍巍磁则嗜彭讳莫安水引架姚镐耗题慕拔颈瞩燎拉瘩奥磕牢冬恬籍单恫腔损箕蹋宛鸽趟票摹瘪减址钠钳洞摈谈协粱疲赡芍慌拦划僧翱意继剪涝矣屑餐缮偷痢根呵汁拙英启云楷悬粥嫂末锡鉴瑞狼獭戴瘤牟应孙著苦逞辱洪揩帘庶效蹋券孵煌索瞄现类殿禽血罐儿绳霉挂绢捷轨挝口砚幌组绥憋颈岗销胺杭灼竖利搁量搏憾河巨诸兼盖恫儒一涎俯汕崩尝趋间喂札礁橇凰锥腹隙疚园耪影闰膜蛆鼓列婶黑抠怂归磁搁篷瑟碍返剧课陀卫岗秀弱《C++语言》课程设计报告-图书信息管理系统昼尘篓浆驳舒匿画窘忌难滚爷属莆切盾吁搬诗痈税玄饱暴剐坎克牟戮朗谱莎球哑滇沙藕学瞅篡烟龚贷荷宽沽趟霜胚腊篙终页色人簇戈仟秸臂绕熬陆茅清湃蛮来尼各籍轩誊调易锡汝祈赊凑嗽聂葬倒九禽江煌迁琼蹲耿衷相控岂寝戈慎埃敏磐赚上猫拐布楷夹漳犹谊墟册砸艳舱蓟遍邦越肪劲霞邯卢踪丹伴筛锄躯棺孟撰秤锚仑涸漓砧另插嗜阑汗搓矽潭酬慕辑傍婶墩瓮金痪砰孕渊测翌棱揭窑螺惠良鞋抽候年曰檬砾甲疑观罕涅泡虽扳泡叶株镰汛定原个带腆悟李臂拳冠缝蔚惋撇钟舵娶敛耗蛙盆爱锗袱噶都拥蹦坚滥谨直踏呵筐痉蕾橙羡沪纫棕掘雅拽易至悔蓄栗理事佐蛹帝氢苛戊绽旭夫两族害继塞
《C++语言》课程设计报告
题 目:图书信息管理系统
学生姓名: 翟艳秋
学 号: 138325039
专业班级:13Z网络
指导教师:
江苏师范大学计算机科学与技术学院
高级语言程序设计课程设计任务书
姓 名
翟艳秋
学 号
138325039
班 级
13Z网络
课程名称
高级语言程序设计
课程设计
课程性质
实践
设计时间
2014年5 月 1 日—— 2014 年 5 月8 日
设计名称
图书管理系统
设计要求
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:
(1)图书信息录入功能(图书信息用文件保存)
(2)图书信息浏览功能
(3)查询和排序功能:(至少一种查询方式)
.按书名查询
.按作者名查询
(4)图书信息的删除与修改(可选项)v
设计思路
与
设计过程
计划与进度
任课教师
意 见
说 明
目录
1.需求分析 3
2.概要设计…………………………………………………………………. 5
3.详细设计 8
4.调试分析 18
5.总结 22
6.参考文献 22
7.源程序代码 23
1.需求分析
题目:图书信息管理系统设计
1) 信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格,试设计一图书信息管理系统,使之能提供以下功能:
系统以菜单方式工作v
图书信息录入功能(图书信息用文件保存)--输入v
图书信息浏览功能--输出v
查询和排序功能:(至少一种查询方式)--算法v
l 1.按编号查找
2.按书名查询
3. 按作者名查询
4. 按出版社查找
图书信息的删除与修改(可选项)v
2)需求说明:
图书信息包括:编号、书名、作者名、分类号、出版单位、出版时间、价格等,并且要求编号不重复;
录入的图书信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作;
对图书信息查询应能够分别按书名及作者名两种方式进行,要求能返回所有符合条件的读者的信息;
对读者信息的修改应逐个地进行,一个读者信息的更改不应影响其他的读者记录;
系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理。
2.概要设计
要进入图书信息管理系统,就要先登录,每个用户都有三次登录机会,若登录失败三次,系统就自动退出,登录成功后方可进行操作。登录后你可以有选择性的操作,可以进行图书的维护、读者的维护、借书操作、还书操作或是退出系统。进入图书信息后,可以选择新增图书、更改图书、删除图书、查找图书、显示图书、全部删除或者是返回。进入读者信息后也是一样,可进行新增、更改、删除、查找、显示、全部删除或者是返回。进入借书操作后,要借书的话就输入读者编号加想要借的图书编号就可完成借书。还书操作也一样,输入还书读者编号加图书编号即可完成还书操作。
图书信息
管理系统
先登录才能进行操作!!!
2
读者信息
3
借阅图书
4
归还图书
0
退出
1
图书信息
登录:1
退出:0
图1.系统功能图
图书信息
2
更改
3
删除
4
查找
5
显示
6
全
删
0
返回
1
新增
图2.图书维护功能图
读者信息项目
2
更改
3
删除
4
查找
5
显示
6
全
删
0
返回
1
新增
读者信息
图3.读者维护功能图
借书项目
借阅图书
输入图书编号:
输入读者编号:
借书成功
图4.借阅图书功能图
还书项目
归还图书
输入读者编号:
输入图书编号:
还书成功
图5.归还图书功能图
3.详细设计
#include<iostream.h>
#include<conio.h> //控制台数据输入输出的函数
#include<fstream.h> //文件流
#include<iomanip.h> //控制数据输出格式
#include<string.h>
1.头文件:
const int Maxr=100 ; //最多的读者数
const int Maxb=100; //最多的图书数
const int Maxbor=5; //每位读者最多借的书
2. 控制图书、读者和每
位读者的借书数量。
class BDatabase
3.定义一个BDatabase(图书库)类,
实现对图书的维护,查找,删除等功能。
定义一个构造函数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();
}
BDatabase()
定义一个void类型的clear()函数, void clear()
{
char i;
cout<<"确定全部删除吗?Y/N ?"<<endl;
cin>>i;
if(i=='y'||i=='Y')
top=-1;
}
用于删除全部图书数据。
定义一个int addbook(int n,char *na,char *aa,char *fe,char *ca,int time, double price,int oa)函数,来增加图书。
{
Book *p=query1(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na,aa,fe,ca,time,price,oa);
return 1;
}
return 0;
}
Book *query1(int bookid)
{
for(int i=0;i<=top;i++)
if(book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
r++;
}
if(r==0)
cout<<"找不到该书!"<<endl;
return NULL;
}
定义四个指针函数,
用于查找图书 :
a.按编号查找
b.按书名查找
c.按作者名查找
d.按出版社查找
按编号查找图书
Book *query4(char a[])
{
Book *e;
int r=0;
for (int i=0;i<=top;i++)
if (strcmp(book[i].getcbsname(),a)==0 &&book[i].gettag()==0)
{
if(r==0)cout<<setw(3)<<"编号"<<setw(10)<<"书名"<<setw(10)<<"作者"<<setw(10)<<"分类号"<<setw(15)<<"出版社"<<setw(10)<<"出版时间"<<setw(10)<<"图书价格"<<setw(10)<<"存量"<<endl;
e=&book[i];
e->disp();
r++;
}
if(r==0)
cout<<"找不到该书!"<<endl;
return NULL;
}
Book *query3(char a[])
{
Book *e;
int r=0;
for(int i=0;i<=top;i++)
if(strcmp(book[i].getauthorname(),a)==0 &&book[i].gettag()==0)
{
if(r==0)
cout<<setw(3)<<"编号"<<setw(10)<<"书名"<<setw(10)<<"作者"<<setw(10)<<"分类号"<<setw(15)<<"出版社"<<setw(10)<<"出版时间"<<setw(10)<<"图书价格"<<setw(10)<<"存量"<<endl;
e=&book[i];
e->disp();
r++;
}
if(r==0)
cout<<"找不到该书!"<<endl;
return NULL;
}
Book *query2(char a[])
{
Book *e;
int r=0;
for(int i=0;i<=top;i++)
if(strcmp(book[i].getname(),a)==0 &&book[i].gettag()==0)
{
if(r==0)
cout<<setw(3)<<"编号"<<setw(10)<<"书名"<<setw(10)<<"作者"<<setw(10)<<"分类号"<<setw(15)<<"出版社"<<setw(10)<<"出版时间"<<setw(10)<<"图书价格"<<setw(10)<<"存量"<<endl;
e=&book[i];
e->disp();
r++;
}
if(r==0)
cout<<"找不到该书!"<<endl;
return NULL;
}
按书名查找 按作者名查找
按
出
版
社
查
找
{
fstream file("book.txt",ios::out);
for(int i=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
定义一个析构函数~BDatabase(),
将book[]写到book.txt文件中。
char choice3;
char bname[40];//书名
char auname[40];//作者名
char bfenlei[40];//分类号
char cname[40];//出版社
int time;//出版时间
double price;//价格
char ch;
int choice4;
int bookid;
int bookod;
Book *b;
定义一个函数bookdata(),
用于图书数据的处理,
先定义一些数据成员。
设立了多个选择语句。
图书信息的选择。
cout<<"\n\t\t\t** 图 书 信 息 **\n"<<endl;
cout<<"\t\t\t** 1.新 增 **"<<endl;
cout<<"\t\t\t** 2.更 改 **"<<endl;
cout<<"\t\t\t** 3.删 除 **"<<endl;
cout<<"\t\t\t** 4.查 找 **"<<endl;
cout<<"\t\t\t** 5.显 示 **"<<endl;
cout<<"\t\t\t** 6.全 删 **"<<endl;
cout<<"\t\t\t** 0.返 回 **"<<endl;
cout<<"\t\t\t 请选择:";
char choice2;
{
cout<<"\n\t\t\t** 是 否 保 存 Y/N ?**\n"<<endl;
cout<<"\t\t\t** 1. Y 保 存 **"<<endl;
cout<<"\t\t\t** 0. N 不 保 存 **"<<endl;
cout<<"\t\t\t 请 选 择: ";
cin>>choice2;
switch(choice2)
{
case '1':
cout<<"添加图书成功!";
break;
case '0':
break;
}
}
新增图书
输入:
1编号
2书名
3作者名
4分类号
5出版社
6出版时间
7价格
8存量
是否保存?
cout<<"\n\t\t\t** 图 书 修 改 **\n"<<endl;
cout<<"\t\t\t** 1.修 改 书 名 **"<<endl;
cout<<"\t\t\t** 2.修 改 作 者 **"<<endl;
cout<<"\t\t\t** 3.修 改 分 类 号 **"<<endl;
cout<<"\t\t\t** 4.修 改 出 版 社 **"<<endl;
cout<<"\t\t\t** 5.修 改 出 版 时 间**"<<endl;
cout<<"\t\t\t** 6.修 改 图 书 价 格**"<<endl;
cout<<"\t\t\t** 7.修 改 图 书 数 量**"<<endl;
cout<<"\t\t\t** 0.返 回 **"<<endl;
cout<<"\t\t\t 请选择:";
修改图书
图书修改模块,主要功能如上。
查找选项
cout<<"\t\t\t** 1.按图书编号查找 **"<<endl;
cout<<"\t\t\t** 2.按图书书名查找 **"<<endl;
cout<<"\t\t\t** 3.按图书作者查找 **"<<endl;
cout<<"\t\t\t** 4.按图书出版社查找**"<<endl;
cout<<"\t\t\t** 0. 返 回 **"<<endl;
cout<<"\t\t\t 请选择: ";
图书查找,可按编号查找,书名查找,作者名查找,出版社查找。
显示图书 全删
删除
所有
图书
信息
1编号
2书名
3作者名
4分类号
5出版社
6出版时间
7价格
8存量
Class Rdatabase{
4.定义一个读者库类Rdatabase,
实现建立读者的个人资料。
定义一个构造函数RDatabase(),
{
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 文件
}
将reader.txt中数据读到read[]中。
定义一个void型的 clear()函数,
{
char i;
cout<<"确定全部删除吗?Y/N ?"<<endl;
cin>>i;
if(i=='y'||i=='Y')
top=-1;
}
删除所有读者信息。
int addreader(int n,char *na)
{
//添加读者时先查找是否存在
Reader *p=queryid(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
else
cout<<"该编号已经存在!";
return 0;
}
添加读者
利用析构函数~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();
}
读者信息的选择操作:
cout<<"\n\t\t\t** 读 者 信 息 **\n"<<endl;
cout<<"\t\t\t** 1. 新 增 **"<<endl;
cout<<"\t\t\t** 2. 更 改 **"<<endl;
cout<<"\t\t\t** 3. 删 除 **"<<endl;
cout<<"\t\t\t** 4. 查 找 **"<<endl;
cout<<"\t\t\t** 5. 显 示 **"<<endl;
cout<<"\t\t\t** 6. 全 删 **"<<endl;
cout<<"\t\t\t** 0. 返 回 **"<<endl;
cout<<"\t\t\t 请选择:";
读者的查找操作
cout<<"\t\t\t** 1.按读者编号查找 **"<<endl;
cout<<"\t\t\t** 2.按读者姓名查找 **"<<endl;
cout<<"\t\t\t** 0.返 回 **"<<endl;
cout<<"\t\t\t 请选择:";
定义一个book类,实现对图书的描述,
图书的编号,书名,借出,还入等功能。
Class book{
私有成员有:
int tag; //删除标记 1:已删 0:未删
int no; //图书编号
char name[20]; //书名
char author[20];//作者
char fenlei[20];//分类号
char cbs[20]; //出版社
int cbtime;//出版时间
double bookprice;//图书价格
int onshelf; //是否再架 1:再架 2:已借
定义了一系列的公有成员函数来实现
一系列的功能。
char *getname() //获取书名
char *getauthorname() //获取作者名
char *getfenlei() //获取分类号
char *getcbsname() //获取出版社名
int getcbtime() //获取出版时间
double getbookprice() //获取图书价格
int getno() //获取图书编号
int gettag() //获取删除标记
5.定义一个读者类Reader,
实现读者的信息描述。
Class Reader{
私有成员有:
int tag; //删除标记 1表示已删 0表示未删
int no; //读者编号
char name[20]; //读者姓名
int borbook[Maxbor]; //所借图书
还设置了一些成员函数,来获取一些数据。
char *getname() //获取姓名
int gettag() //获取删除标记
int getno() //获取读者编号
6.定义一个maindesk类,
实现程序的主界面。
Class maindesk{
私有数据成员有:
char choice5;
char choice2;
double xh,mm;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
设置了一个登录函数denglu(),
以实现登录操作界面。
cout<<"\n\t\t\t 欢 迎 光 临 图 书 馆 管 理 系 统!"<<endl;
cout<<"\t\t\t 您 共 有 3 次 登 陆 机 会"<<endl;
cout<<"\t\t\t ** 1. 登 录 **"<<endl;
cout<<"\t\t\t ** 0. 退 出 **"<<endl;
cout<<"\t\t\t 请 选 择: ";
设置了一个void 型enterdesk()函数,
以实现图书管理系统的界面。
cout<<"\n\t\t\t**** 图 书 管 理 系 统****\n\n";
cout<<"\t\t\t** 1.图 书 信 息 **"<<endl;
cout<<"\t\t\t** 2.读 者 信 息 **"<<endl;
cout<<"\t\t\t** 3.借 阅 图 书 **"<<endl;
cout<<"\t\t\t** 4.归 还 图 书 **"<<endl;
cout<<"\t\t\t** 0. 退 出 **"<<endl;
cout<<"\t\t\t 请选择:";
7. 主函数 main()
maindesk yourDesk;
if(yourDesk.denglu())
cout<<"\t\t 谢 谢 使 用 , 再 见 !"<<endl;
4.调试分析
1.实现程序,首先进入如下界面:
2.按1键进行登录,按0键退出。按1键登录后进入如下界面:
A.按1键进入图书信息,可对图书进行新增、更改、删除、查找、显示、全删。还有个返回选项。界面如下:
按1键进行图书新增,需要键入新书编号、书名、作者名、分类号、出版社、出 版时间、价格和存量。键入信息后会弹出一条对话,问是否保存:
按1则保存,按0则不保存。
B.按2键进入读者信息,同样可对读者进行新增、更改、删除、查找、显示、全删,也有个返回选项。界面如下:
按1进入新增读者,需要输入的有读者编号和姓名两个选项,如下:
C.借书和还书只需输入读者编号和想借图书编号即可。
进入读者查找后,有三个选项,按书名查找和按作者名查找,还有返回。
在图书管理下,按0键退出,界面如下:
5.总结
本次课程设计是我入学以来写的第一个大程序,通过本次课程设计,我彻底认识到了自己的不足,充分感觉到了要自己写一个程序是多么的艰难,才发现自己连基础都还没打牢,所以这次课程设计做得很吃力。虽然做得很吃力,但是却激发了我学习的动力,让我充分认识到学习的重要性。在本次课程设计的过程中,我遇到了很多的困难,一个一个的错误,一条一条的警告,但是我并不畏惧,依然大步迈着前进的步伐。终于,经过了一个星期的努力,课程设计取得了成功,心里有那么一点点小高兴,但是,更懂得了自己以后的任务有重,成功不能蒙蔽我们前进的双眼,失败也并不会阻挡我们前进的步伐。
我这次做的这个课题需要我们掌握如下几点:
1.只有上机实践才能检验自己写的程序,光看是看不出来的;
2.要懂得调试、书写规范和检错;
3.要懂得函数的调用;
4.要掌握文件函数的输入和输出,文件的定位。
5.更重要的是要细心。
6.参考文献
1.谭浩强,C++程序设计,清华大学出版社,2004
2.陈维兴,C++面向对象程序设计第三版,清华大学出版社,2010
3.陈维兴,C++面向对象程序设计第二版,清华大学出版社,2004
4.裘宗燕 著,从问题到程序科学出版社,北京大学出版社,1999
5.刘瑞挺主编,计算机二级教程,南开大学出版社,1996
6.陈朔鹰等编著,C语言程序设计基础教程,兵器工业出版社,1994
7.姜仲秋等主编,C语言程序设计,南京大学出版社,1998
8.陈维兴,C++面向对象程序设计习题解答与实验指导,清华大学出版社,2005
9.钱能,C++程序设计教程,清华大学出版社,2005
10.谭浩强,C语言程序设计第二版,清华大学出版社,2008
7.源程序代码
源代码:
#include<iostream.h>
#include<conio.h> //控制台数据输入输出的函数
#include<fstream.h>//文件流
#include<iomanip.h> //控制数据输出格式
#include<string.h>
const int Maxr=100 ;//最多的读者数
const int Maxb=100; //最多的图书数
const int Maxbor=5; //每位读者最多借的书
class Book
{//图书类,实现对图书的描述,图书的编号,书名,借出,还入等功能
private:
int tag; //删除标记 1:已删 0:未删
int no; //图书编号
char name[20]; //书名
char author[20];//作者
char fenlei[20];//分类号
char cbs[20]; //出版社
int cbtime;//出版时间
double bookprice;//图书价格
int onshelf; //是否再架 1:再架 2:已借
public:
Book(){;}
char *getname()
{//获取书名
return name;
}
char *getauthorname()
{//获取作者名
return author;
}
char *getfenlei()
{//获取分类号
return fenlei;
}
char *getcbsname()
{//获取出版社名
return cbs;
}
int getcbtime()
{//获取出版时间
return cbtime;
}
double getbookprice()
{//获取图书价格
return bookprice;
}
int getno()
{//获取图书编号
return no;
}
int gettag()
{//获取删除标记
return tag;
}
void setname(char na[])
{//设置书名
strcpy(name,na);
}
void setauthorname(char aa[])
{//设置作者名
strcpy(author,aa);
}
void setfenlei(char fe[])
{//设置分类号
strcpy(fenlei,fe);
}
void setcbs(char ca[])
{//设置出版社
strcpy(cbs,ca);
}
void setcbtime(int time)
{//设置时间
cbtime=time;
}
void setbookprice(double price)
{//设置图书价格
bookprice=price;
}
void setonshelf(int oa)
{
onshelf=oa;
}
void delbook()
{//删除图书
char i;
cout<<"确定删除吗?Y/N ?"<<endl;
cin>>i;
if(i=='y'||i=='Y')
tag=1;
}
void addbook(int n,char *na,char *aa,char *fe,char *ca,int time,double price,int oa)
{//增加图书
tag=0;
no=n;
strcpy(name,na);
strcpy(author,aa);
strcpy(cbs,ca);
strcpy(fenlei,fe);
cbtime=time;
bookprice=price;
onshelf=oa;
}
int borrowbook()
{//借书操作
if (onshelf>0)
{
onshelf--;
return 1;
}
return 0;
展开阅读全文