C++图书管理系统课程设计76148.docx
《C++图书管理系统课程设计76148.docx》由会员分享,可在线阅读,更多相关《C++图书管理系统课程设计76148.docx(35页珍藏版)》请在冰豆网上搜索。
C++图书管理系统课程设计76148
《C++程序设计》
课程设计说明书
题目
图书信息管理系统
学号
姓名
指导教师
日期
某某科技大学课程设计任务书
课程名称
面向对象程序设计A课程设计
设计题目
图书信息管理系统
指导教师
时间
一、教学要求
1.巩固和加深学生对C语言课程的根本知识的理解和掌握2.掌握C语言编程和程序调试的根本技能3.利用C语言进展根本的软件设计4.掌握书写程序设计说明文档的能力5.提高运用C语言解决实际问题的能力
二、设计资料与参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
图书信息管理系统
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
v图书信息录入功能(图书信息用文件保存)--输入
v图书信息浏览功能--输出
v查询或排序功能:
(至少两种种查询方式)--算法
●按书名查询●按作者名查询
v图书信息的删除与修改
v图书的借出与归还
三、设计要求与成果
1.分析课程设计题目的功能需求〔可选用数组或链表实现,可多人〔最多3人〕协作完成一个题目〕2.写出详细设计说明〔至少包括功能实现分析和模块流程图〕3.编写程序代码,调试程序使其能正确运行〔代码书写要规X,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号〕4.设计完成的软件要便于操作和使用5.设计完成后提交课程设计报告〔请严格按照模板进展排版〕
四、进度安排
第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程与调试第四天 写课程设计报告第五天 提交课程设计报告〔打印稿与电子稿〕
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,如此所有雷同的所有人均判为不与格。
六、建议参考资料
1.《C语言程序设计》,谭浩强,清华大学
2.《C语言程序设计课程设计》,X振安,机械工业
第1章需求分析
用C++设计一个图书信息管理系统
图书信息管理系统
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
v图书信息录入功能(图书信息用文件保存)--输入
v图书信息浏览功能--输出
v查询或排序功能:
(至少两种种查询方式)--算法
●按书名查询●按作者名查询
v图书信息的删除与修改
v图书的借出与归还
第2章总体设计
1.用结构框图表示各个功能之间的关系。
2.将框图中系统的各个功能用文字详细的描述。
图书信息管理系统功能:
图书信息添加功能:
向图书信息管理系统内添加图书信息,图书信息包括图书登录名、图书书名、图书作者名、图书类别、图书出版单位、图书出版时间、图书价格、图书数量等信息。
图书信息浏览功能:
将图书管理系统的图书全部显示出来。
图书信息查询功能:
分为两个功能。
第一个为书名查询功能,通过输入要查询图书书名来对图书信息库进展搜索查询,如果有该书如此显示该书的信息,如果没有该书如此显示“没有找到该书〞。
第二个为作者查询,通过输入要查询图书作如此名来对图书信息库进展搜索查询,如果有该书如此显示该书的信息,如果没有该书如此显示“没有找到该书〞。
图书信息删除功能:
通过输入的图书登录号对图书信息库的该书进展删除操作,该书的信息将会在图书信息库中删除,以后无法找到。
图书信息修改功能:
通过输入图书登录号来查找该书,如果图书信息库中有该书,如此通过输入图书的每一项信息来修改图书的信息,如果图书信息库中没有该书如此显示“没有该图书信息〞。
图书借出功能:
通过输入图书登录号来查找该书,如果图书信息库中没有该书,如此显示“没有该书〞,如果有该书如此显示“借阅成功〞,并且该书的数量减1,如果该书的数量为0,如此显示“该书全部借出〞,借阅不成功。
图书归还功能:
通过输入图书登录号来查找该书,如果图书信息库中没有该书,如此显示“没有该书〞,如果有该书如此显示“归还成功〞,如果该书的数量为图书信息库中原始数量,如此显示“该书没有借出〞。
退出图书信息管理系统功能:
退出图书信息管理系统程序。
第3章类的设计
3.1date类的设计〔第一个类〕
1.画出类图
date
intyear
intmonth
date(inty=2000,intm=1)
~date()
voidset(inty=2000,intm=1)
intgety()
intgetm()
date(inty=2000,intm=1)
说明:
输入参数时间年和参数时间月。
构造函数,对时间进展构造,方便数据的录入。
将用户输入的数据进展录入并赋值给类的数据成员。
~date()
说明:
析构函数,对构造函数申请的内存空间进展释放。
voidset(inty=2000,intm=1)
说明:
输入数据时间年和数据时间月。
成员函数,对时间年月的输入进展赋值。
intgety()
说明:
返回数据时间年。
intget()
说明:
返回数据时间月。
3.2book类的设计〔第二个类〕
1.画出类图
book
charid[20]
charbookname[20]
charauthor[20]
charclassnum[20]
charpublisher[20]
doubleprice
intnum
intnum1
datetime
book()
~book()
voidset()
voidprintout()
friendclasslibrary()
book(char*i="100000",char*b="noname",char*a="noname",char*c="noname",char*p="noname",doublemoney=0.0,inty=2000,intm=1,intnumber=0):
date(y,m)
说明:
输入参数登录名,书名,作者名,类别,出版单位,出版时间,价格,数量。
构造函数,对登录名等图书信息进展构造,方便数据的录入。
将用户输入的数据进展录入并赋值给类的数据成员。
~book()
说明:
析构函数,对构造函数申请的内存空间进展释放。
voidset(char*i="100000",char*b="noname",char*a="noname",char*c="noname",char*p="noname",doublemoney=0.0,inty=2000,intm=1,intnumber=0)
说明:
输入数据登录名,书名,作者名,类别,出版单位,出版时间,价格,数量。
成员函数,对图书信息登录名,书名,作者名,类别,出版单位,出版时间,价格,数量进展赋值。
voidprintout()
说明:
对图书信息数据登录名,书名,作者名,类别,出版单位,出版时间,价格,数量进展输出。
成员函数,对图书信息进展输出的函数。
friendclasslibrary
说明:
将类library声明为类book的友元类。
3.3library类的设计〔第三个类〕
1.画出类图
library
book*book1
library()
~library()
intidSeek()
voidNameSeek()
voidAuthor()
voidjudge()
voidjudge1()
voiddelee1()
library()
说明:
申请分配动态内存空间,申请book1[N]数组。
构造函数,申请分配动态内存空间。
~library()
说明:
动态内存分配空间的撤销,将book1[N]占有的空间撤销。
析构函数,动态内存分配空间的撤销。
intidSeek(char*i)
说明:
查找函数,将形参传给该函数并对图书信息库进展查询,如果查到返回数组的序号值,没有查到如此显示“没有该书〞。
成员函数,对传递的形参值进展查询。
voidNameSeek()
说明:
书名查找函数,输入待查询值,通过与图书信息库进展比照,如果有该书如此输出图书信息,否如此显示“没有该书〞。
成员函数,输入书名进展查询。
voidAuthorSeek()
说明:
作者名查找函数,输入待查询值,通过与图书信息库进展比照,如果有该书如此输出图书信息,否如此显示“没有该书〞。
voidjudge(inta)
说明:
判断图书借阅是否成功函数,通过形参传入借阅图书的数组序号值,如果该书的库存数量大于0,如此能够借阅,并显示“该书借阅成功〞,否如此显示“该书已经全部借出〞。
成员函数,判断借阅的图书是否借阅成功。
voidjudge1(inta)
说明:
判断图书归还是否成功函数,通过形参传入归还图书的数组序号值,如果该书的库存量小于该书信息录入时的库存量,如此显示该书归还成功,否如此显示“该书没有借出〞。
voiddelete1(inta)
说明:
图书信息删除函数,确定删除图书的数组序号值,并将数组序号值+1的值赋值给数组序号值来进展删除的操作。
成员函数,对给定的图书信息进展删除。
第4章详细设计
4.1工程视图
4.2类图视图
4.3主程序流程图
是
输出结果
添加
借出
输入功能
建立文件
录入数据
输入文件名
存在?
否
浏览
查找
归还
修改
删除
完毕
开始
4.4主要算法的流程图
1.添加算法
输入数据
输入数据
添加
继续?
是
完毕
否
2.查找算法
〔1〕书名查询
输入书名
输出数据
书名查找
存在
是
完毕
否
〔2〕作者查询
输入作者
输出数据
作者查找
存在
是
完毕
否
3.浏览功能
显示数据
浏览
完毕
4.删除功能
删除数据
删除
完毕
图
5.修改功能
输入登录号
输入修改数据
修改
存在
是
完毕
否
6.借出功能
借书失败
输入登录号
借书成功
借出
存在
完毕
7.归还功能
归还成功
输入登录号
归还失败
归还
>存储量?
完毕
第5章测试
第6章总结
总结:
教师很早就把题目公布了,很早就做C++的课程设计了,时间非常的充足。
总共算起来大概花了20多天的时间进展构思和编写代码,在编写代码的过程中曾经遇到过各种各样的问题,例如:
C++中主函数如何定义对象并且使输入的数据怎样通过类中的函数进展增删改查等一系列的操作。
还有就是如何将输入的数据写入到文件中,在一开始都觉得有些难,不知道如何下手,自己在图书馆里借了又关这方面的书进展阅读,在网上搜索相关的程序代码进展阅读,并且去理解消化,模仿着写出自己的程序代码,在问题没有解决之前是各种苦恼,心情是各种烦躁,但是当问题解决了之后心情是非常的愉悦,经过自己的不断努力去寻找解决的方法并且最终解决了问题。
特别有成就感,虽然这个过程是痛苦的,但成功的愉悦是多么的快乐。
在整个课程设计的过程中还是很感谢身边的一群同学,当遇到困难时,他们给予帮助,给予灵感,才让这次课程设计能够顺利的完成。
也很感谢教师课堂的教育,大学课堂里教师的教就是为了不教,教师教给我们的是根底知识,是以后向更深领域学习的根底,是垫脚石。
教师教给我们的是一种态度一种学习方法,让我们以后能够自主的去学习。
当一个人去完成一项课程设计时,里面会遇到各种各样的事情,教师在课堂上讲解的一些情况我们会遇到,只要我们上课听讲了,就能解决,但是一些教师没有提与的问题就要靠我们自己去解决。
我们该如何去解决呢?
有很多种途径,去图书馆查找相关的资料,在网上进展搜索,都会找到相关的资料,这时我们就得运用教师教给我们的方法去理解并且消化。
最先开始可能只是进展模仿,模仿多了之后才会有我们自己的创造。
所以学习都是这样的一个过程,在大学里的学习是人生很重要的一门课。
感谢所有教授我知识和方法的教师,谢谢你们的辛勤的劳动。
附录:
程序代码
#include
#include
#include
#include
#defineN10
#defineFNAMELEN40
charstuf[FNAMELEN];
classdate
{
public:
intyear;
intmonth;
public:
date(inty=2000,intm=1)
{
year=y;
month=m;
}
~date()
{
}
voidset(inty=200,intm=1)
{
year=y;
month=m;
}
intgety()
{
returnyear;
}
intgetm()
{
returnmonth;
}
};
classbook:
publicdate
{
private:
charid[20];
charbookname[20];
charauthor[20];
charclassnum[20];
charpublisher[30];
doubleprice;
intnum;
intnum1;
datetime;
public:
book(char*i="100000",char*b="noname",char*a="noname",char*c="noname",char*p="noname",doublemoney=0.0,inty=2000,intm=1,intnumber=0):
time(y,m)
{
strcpy(id,i);
strcpy(bookname,b);
strcpy(author,a);
strcpy(classnum,c);
strcpy(publisher,p);
price=money;
num=number;
num1=number;
}
~book()
{
}
voidset(char*i="100000",char*b="noname",char*a="noname",char*c="noname",char*p="noname",doublemoney=0.0,inty=2000,intm=1,intnumber=0)
{
date:
:
set(y,m);
strcpy(id,i);
strcpy(bookname,b);
strcpy(author,a);
strcpy(classnum,c);
strcpy(publisher,p);
price=money;
num=number;
num1=number;
}
voidprintout()
{
cout<<"登录号:
"<cout<<"书名:
"<cout<<"作者名:
"<cout<<"类别:
"<cout<<"出版单位:
"<cout<<"出版时间:
"<cout<<"价格:
"<cout<<"数量:
"<}
friendclasslibary;
};
classlibary
{
public:
book*book1;
public:
libary()
{
book1=newbook[N];
}
~libary()
{
delete[]book1;
}
intidSeek(char*i)
{
intj,flag=1;
for(j=0;j{
if(strcmp(book1[j].id,i)==0)
{
flag=0;
returnj;
}
}
if(flag)
{
cout<<"没有该书!
";
returnflag;
}
}
voidNameSeek()
{
chari[20];
cout<<"输入搜寻的书名:
";
cin>>i;
intj,flag=1;
for(j=0;j{
if(strcmp(book1[j].bookname,i)==0)
{
flag=0;
book1[j].printout();
}
}
if(flag)
{
cout<<"没有该书!
";
}
getchar();
}
voidAuthorSeek()
{
chari[20];
cout<<"输入搜寻图书作者名:
";
cin>>i;
intj,flag=1;
for(j=0;j{
if(strcmp(book1[j].author,i)==0)
{
flag=0;
book1[j].printout();
}
}
if(flag)
{
cout<<"没有该书!
";
}
getchar();
}
voidjudge(inta)
{
if(book1[a].num>0)
{
cout<<"该书借阅成功!
";
book1[a].num--;
}
else
{
cout<<"该书已全部借出!
";
}
}
voidjudge1(inta)
{
if(book1[a].num{
cout<<"该书归还成功!
";
book1[a].num++;
}
else
{
cout<<"该书没有借出!
";
}
}
voiddelete1(inta)
{
//book1[a].set(book1[a+1].id,book1[a+1].bookname,book1[a+1].author,book1[a+1].classnum,book1[a+1].publisher,book1[a+1].price,book1[a+1].year,book1[a+1].month,book1[a+1].num);
strcpy(book1[a].id,book1[a+1].id);
strcpy(book1[a].bookname,book1[a+1].bookname);
strcpy(book1[a].author,book1[a+1].author);
strcpy(book1[a].classnum,book1[a+1].classnum);
strcpy(book1[a].publisher,book1[a+1].publisher);
book1[a].price=book1[a+1].price;
book1[a].year=book1[a+1].year;
book1[a].month=book1[a+1].month;
book1[a].num=book1[a+1].num;
}
};
voidmain()
{
charid[20];
charbookname[20];
charauthor[20];
charclassnum[20];
charpublisher[30];
charc;
doubleprice;
intnum,year,month,n,m,j,i=0;
libaryl1;
FILE*fp;
char;
system("cls");
cout<<"请输入图书信息库名:
";
cin>>stuf;
if((fp=fopen(stuf,"r"))==NULL)
{
cout<<"该文件"<(Y/N)";
cin>>;
if(=='Y'||=='y')
{
fp=fopen(stuf,"w");
do{
cout<<"输入登录号:
";
cin>>id;
cout<<"输入书名:
";
cin>>bookname;
cout<<"输入作者名:
";
cin>>author;
cout<<"输入书类别:
";
cin>>classnum;
cout<<"输入名:
";
cin>>publisher;
cout<<"输入价格:
";
cin>>price;
cout<<"输入该书数量:
";
cin>>num;
cout<<"输入该书出版日期:
";
cin>>year>>month;
l1.book1[i].set(id,bookname,author,classnum,publisher,price,year,month,num);
i++;
n=i;
m=i;
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%6.2f\t%d\t%d\t%d\n",id,bookname,author,classnum,publisher,price,year,month,num);
cout<<"是否继续输入(Y/N):
";
cin>>c;
}while(c=='y'||c=='Y');
cout<}
}
fclose(fp);
inta;
do{
system("cls");
cout<<"\n\n\n\n\n\t\t\t\t图书管理系统\t\t\t\t\n";
cout<<"\t\t*****************************************\n";
cout<<"\t\t\t1----------------图书信息添加\n";
cout<<"\t\t\t2----------------图书信息浏览\n";
cout<<"\t\t\t3----------------图书信息查询\n";
cout<<"\t\t\t4----------------图书信息删除\n";
cout<<"\t\t\t5----------------图书信息修改\n";
cout<<"\t\t\t6----------------图书借出\n";
cout<<"\t\t\t7----------------图书归还\n";
cout<<"\t\t\t0----------------退出影碟信息系统\n";
cout<<"\t\t*****************************************\n";
cout<<"\t\t请输入选择:
";
fflush(stdin);
cin>>a;
switch(a)
{
case1:
system("cls");
fp=fopen(stuf,"w");
do{
cout<<"输入登录号:
";
cin>