C++图书管理系统课程设计76148.docx
《C++图书管理系统课程设计76148.docx》由会员分享,可在线阅读,更多相关《C++图书管理系统课程设计76148.docx(39页珍藏版)》请在冰豆网上搜索。
C++图书管理系统课程设计76148
《C++程序设计》
课程设计说明书
题目
图书信息管理系统
学号
姓名
指导教师
日期
内蒙古科技大学课程设计任务书
课程名称
面向对象程序设计A课程设计
设计题目
图书信息管理系统
指导教师
时间
一、教学要求
1.巩固和加深学生对C语言课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
图书信息管理系统
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
v图书信息录入功能(图书信息用文件保存)--输入
v图书信息浏览功能--输出
v查询或排序功能:
(至少两种种查询方式)--算法
●按书名查询●按作者名查询
v图书信息的删除与修改
v图书的借出与归还
三、设计要求及成果
1.分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2.写出详细设计说明(至少包括功能实现分析和模块流程图)
3.编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告(打印稿及电子稿)
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
六、建议参考资料
1.《C语言程序设计》,谭浩强,清华大学出版社
2.《C语言程序设计课程设计》,刘振安,机械工业出版社
第1章需求分析
用C++设计一个图书信息管理系统
图书信息管理系统
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
v图书信息录入功能(图书信息用文件保存)--输入
v图书信息浏览功能--输出
v查询或排序功能:
(至少两种种查询方式)--算法
●按书名查询●按作者名查询
v图书信息的删除与修改
v图书的借出与归还
第2章总体设计
1.用结构框图表示各个功能之间的关系。
图2.1
2.将框图中系统的各个功能用文字详细的描述。
图书信息管理系统功能:
图书信息添加功能:
向图书信息管理系统内添加图书信息,图书信息包括图书登录名、图书书名、图书作者名、图书类别、图书出版单位、图书出版时间、图书价格、图书数量等信息。
图书信息浏览功能:
将图书管理系统的图书全部显示出来。
图书信息查询功能:
分为两个功能。
第一个为书名查询功能,通过输入要查询图书书名来对图书信息库进行搜索查询,如果有该书则显示该书的信息,如果没有该书则显示“没有找到该书”。
第二个为作者查询,通过输入要查询图书作则名来对图书信息库进行搜索查询,如果有该书则显示该书的信息,如果没有该书则显示“没有找到该书”。
图书信息删除功能:
通过输入的图书登录号对图书信息库的该书进行删除操作,该书的信息将会在图书信息库中删除,以后无法找到。
图书信息修改功能:
通过输入图书登录号来查找该书,如果图书信息库中有该书,则通过输入图书的每一项信息来修改图书的信息,如果图书信息库中没有该书则显示“没有该图书信息”。
图书借出功能:
通过输入图书登录号来查找该书,如果图书信息库中没有该书,则显示“没有该书”,如果有该书则显示“借阅成功”,并且该书的数量减1,如果该书的数量为0,则显示“该书全部借出”,借阅不成功。
图书归还功能:
通过输入图书登录号来查找该书,如果图书信息库中没有该书,则显示“没有该书”,如果有该书则显示“归还成功”,如果该书的数量为图书信息库中原始数量,则显示“该书没有借出”。
退出图书信息管理系统功能:
退出图书信息管理系统程序。
第3章类的设计
3.1date类的设计(第一个类)
1.画出类图
表3.1
date
intyear
intmonth
date(inty=2000,intm=1)
~date()
voidset(inty=2000,intm=1)
intgety()
intgetm()
2.对类的函数成员的说明
date(inty=2000,intm=1)
说明:
输入参数时间年和参数时间月。
构造函数,对时间进行构造,方便数据的录入。
将用户输入的数据进行录入并赋值给类的数据成员。
~date()
说明:
析构函数,对构造函数申请的内存空间进行释放。
voidset(inty=2000,intm=1)
说明:
输入数据时间年和数据时间月。
成员函数,对时间年月的输入进行赋值。
intgety()
说明:
返回数据时间年。
intget()
说明:
返回数据时间月。
3.2book类的设计(第二个类)
1.画出类图
表3.2
book
charid[20]
charbookname[20]
charauthor[20]
charclassnum[20]
charpublisher[20]
doubleprice
intnum
intnum1
datetime
book()
~book()
voidset()
voidprintout()
friendclasslibrary()
2.对类的函数成员的说明
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.画出类图
表3.3
library
book*book1
library()
~library()
intidSeek()
voidNameSeek()
voidAuthor()
voidjudge()
voidjudge1()
voiddelee1()
2.对类的函数成员的说明
library()
说明:
申请分配动态内存空间,申请book1[N]数组。
构造函数,申请分配动态内存空间。
~library()
说明:
动态内存分配空间的撤销,将book1[N]占有的空间撤销。
析构函数,动态内存分配空间的撤销。
intidSeek(char*i)
说明:
查找函数,将形参传给该函数并对图书信息库进行查询,如果查到返回数组的序号值,没有查到则显示“没有该书”。
成员函数,对传递的形参值进行查询。
voidNameSeek()
说明:
书名查找函数,输入待查询值,通过与图书信息库进行对比,如果有该书则输出图书信息,否则显示“没有该书”。
成员函数,输入书名进行查询。
voidAuthorSeek()
说明:
作者名查找函数,输入待查询值,通过与图书信息库进行对比,如果有该书则输出图书信息,否则显示“没有该书”。
voidjudge(inta)
说明:
判断图书借阅是否成功函数,通过形参传入借阅图书的数组序号值,如果该书的库存数量大于0,则能够借阅,并显示“该书借阅成功”,否则显示“该书已经全部借出”。
成员函数,判断借阅的图书是否借阅成功。
voidjudge1(inta)
说明:
判断图书归还是否成功函数,通过形参传入归还图书的数组序号值,如果该书的库存量小于该书信息录入时的库存量,则显示该书归还成功,否则显示“该书没有借出”。
voiddelete1(inta)
说明:
图书信息删除函数,确定删除图书的数组序号值,并将数组序号值+1的值赋值给数组序号值来进行删除的操作。
成员函数,对给定的图书信息进行删除。
第4章详细设计
4.1工程视图
图4.1
4.2类图视图
图4.2.1
图4.2.2
图4.2.3
4.3主程序流程图
图4.3
4.4主要算法的流程图
1.添加算法
图4.4.1
2.查找算法
(1)书名查询
图4.4.2-1
(2)作者查询
输入作者
输出数据
作者查找
存在
是
结束
否
图4.4.2-2
3.浏览功能
图4.4.3
4.删除功能
图4.4.4
5.修改功能
图4.4.5
6.借出功能
图4.4.6
7.归还功能
图4.4.7
第5章测试
5.1信息录入
图5.1
5.2功能界面
图5.2
5.3添加功能
图5.3
5.4浏览功能
图5.4
5.5查找功能
图5.5
5.5.1书名查找
图5.5.1
5.5.2作者查找
图5.5.2
5.6删除功能
图5.6
5.7修改功能
图5.7.1
图5.7.2
5.8借出功能
图5.8.1
图5.8.2
5.9归还功能
图5.9.1
图5.9.2
5.10退出系统
图5.10
第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;
charcn;
system("cls");
cout<<"请输入图书信息库名:
";
cin>>stuf;
if((fp=fopen(stuf,"r"))==NULL)
{
cout<<"该文件"<(Y/N)";
cin>>cn;
if(cn=='Y'||cn=='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");
co