资源描述
《C++程序设计》课程设计
设计说明书
课程名称: 《C++程序设计》课程设计
设计题目: 图书管理程序
指导教师:
班 级:
学 号:
学生姓名:
同组人员:
成 绩:
评 语:
计算机科学与工程学院
2014年06月 20 日
《图书管理程序》课程设计实验报告 - 15 -
目 录
第1章 概述 2
1。1 选题 2
1.2选题的背景和意义 2
1.3团队分工和个人贡献 3
第2章 系统分析(需求分析) 3
2.1系统的整体需求 3
2.2 系统的功能需求 3
2.3系统主要模块流程图 3
第3章 系统设计 5
3.1 系统的整体设计 5
3.2 系统的主要模块设计 5
第4章 系统实现 6
第5章 结束语 12
参考文献 12
第1章 概述
1.1 选题
第十题:图书管理程序
图书信息的组成部分为:书号、书名、作者名、出版社、出版时间、价格等。要求用类和对象实现:
1) 新书上架:添加图书信息
2) 图书浏览:输出所有图书信息
3) 图书查询:可按书号、书名或作者名查询(按书号查询时,因书号唯一,结果仅为一条记录;按书名或作者名查询时,结果可能为多条记录)
4)图书下架:删除指定图书信息,如按书号
1。2选题的背景和意义
选题背景:图书馆是我们日常生活中必不可少的学习、阅读的场所,借阅图书则是我们进入图书馆进行阅读的首要行为。为了能够借阅到我们想要借阅的图书,我们需要借助电脑查询需要借阅的图书的具体信息,然后找出图书后再去借阅处刷卡登记。如今我们处于一个知识大爆炸的时代,图书种类数量剧增,工作人员每天不仅要登记借阅者借阅的图书,还要登记新购进的图书,工作量繁重。而随着科学技术的进步,计算机日益进入我们的生活工作之中,我们能否利用计算机技术,取代原来的手工登记,提高图书管理的效率呢?答案是肯定的。
选题意义:借助计算机C++中的知识,编写相应的图书管理程序就可以实现这一功能.利用图书管理程序记录图书信息,不仅能节省我们大量的工作时间,减轻巨大的工作量,提高工作效率,还能够减少工作失误。
1。3团队分工和个人贡献
第一章 概述
第四章 系统实现
源代码中:
(1) 图书浏览功能
(2) 图书删除功能
第2章 系统分析(需求分析)
2。1系统的整体需求
该系统需要完成的内容:
用类和对象实现新书上架、 图书浏览、 图书查询、图书下架。
该系统需要完成的整体目标:
系统能够正常运行,基本上实现添加、删除图书信息,显示所有信息,能够由相应条件查阅图书信息这四种功能。
2.2 系统的功能需求
必须完成的模块:
(1)界面模块:当进入该管理系统时候,提示相应的说明,引导如何操作
(2) 新书上架模块:能够添加书号、书名、作者名、出版社、出版时间、价格这些图书信息.
(3) 图书浏览模块:能够输出所有图书信息。
(4) 图书查询模块:可按条件查询图书信息,当输入书号或书名或作者名时候,相对应的图书信息便可自动搜索出来.
(5) 图书下架模块:可按书号删除指定图书信息。
创新模块:
2.3系统主要模块流程图
显示
主界面
y
y
y
操作6
退出系统
显示所有
图书信息
1
按书号
2
按书名
3
按作者
结束
结束
y
y
y
y
n
n
n
结束
n
n
判断进行1—6中的哪项操作
操作1
操作2
操作3
输入
图书信息
按书号
删除图书
图书信息
图书
信息查询
操作4
结束
注:数字代表相应操作下的子操作
第3章 系统设计
3。1 系统的整体设计
图书查询
调用所
有信息
调用
书号
调用书号、书名或作者
保存
图书信息录入
录入图书信息到txt
删除信息
显示所有图书信息
显示操作信息
退出系统
保存
保存
3。2 系统的主要模块设计
(1)登陆界面模块。该模块显示管理程序的名称,提示相应的操作。
(2)信息录入模块.
登陆界面
录入ISBN、书名、书号、作者、出版社、出版时间、价格
保存到txt文件中
(2)图书浏览模块
调用txt文件中所有图书信息
输入浏览所有图书信息指令
显示所有图书信息
(3)图书查询模块
登陆界面
输入相应查询指令
图书查询界面
调用图书信息文件
显示图书信息
(4)图书下架模块
登陆界面
输入删除指令
根据删除提示输
入要删除的图书号
提示删除内容,并删除
第4章 系统实现
1登入界面
实现方式:
调用主函数,利用Book。read ()读入数据,同时定义功能选项按钮char function=’0’;,对function的真假进行判断,若function为真,即与初值相同,实现while循环内语句。
界面主要程序语句:
cout〈〈endl;
cout〈〈”\t******************************************************************\n";
cout〈〈”\t\t\t\t欢迎使用图书管理系统”〈<endl;
cout〈<”\t\t\t\t\t请选择操作\n”〈<endl;
cout〈〈”\t\t\t\t1 创建新书信息”<<endl;
cout〈<"\t\t\t\t2 显示所有图书"〈<endl;
cout<〈"\t\t\t\t3 按指定条件查询书目"〈<endl;
cout〈<"\t\t\t\t4 按书号删除书目”〈〈endl;
cout<<"\t\t\t\t5 退出系统并保存修改"<<endl;
cout〈<”\t\t\t(查询可按书号/ 作者/ 书名查询)”〈〈endl;
cout<<"\t******************************************************************\n”;
调试运行代码后结果如下:
2、创建图书信息
当选择按钮1,执行main函数中function=='1'的条件语句,首先定义字符串string a,b,c,d,e,f; 然后调用#include<iostream〉,根据提示输入相应的书本信心,建立对象book newbook(a,b,c,d,e,f);,利用添加函数Book。add(newbook)把数据添加到新建对象里,然后调用display()函数显示此次输入的信息。
输入数字1后按提示输入相应信息,结果如下:
3、 显示所有图书信息
当选择按钮2,执行function==’2’的条件语句。Main函数调用#include<iostream>,利用如下语句:
cout<<"这是所有藏书:"<<endl;
cout〈〈"*********************************"<〈endl;
输出相应的提示信息和图案,然后调用函数display_all (),显示出所有信息。
4、 按条件查询
当选择按钮3,执行function=='3’的条件语句。main函数调用#include<iostream〉,输出相应选择的提示,执行如下代码:
cout〈〈"请选择查询方式”〈〈endl;
cout<〈”1 按ISBN查询”〈<endl;
cout〈〈"2 按书名查询”〈<endl;
cout<<”3 按作者查询”〈<endl;
然后定义字符j和字符串search,此时j是作为按钮使用,search是为了输入你要查询的内容。子按钮功能的实现再次调用#include〈iostream>文件,当输入好相应的信息,执行如下语句:
cout〈<"以下是查询结果”〈〈endl;
cout<<”*********************************”〈〈endl;
给出提示后执行搜索函数search_by_isbn(),同理利用search_by_name()、search_by_writer()实现书名查找,按作者查找的功能。
(1)按书号查询
查询书号为001的图书
步骤一:在主界面选择3
步骤二:回车后点击“1”,然后输入001,回车。
(2)按书名查询
查询书名为“考研英语”这本书
步骤一:在主界面选择3
步骤二:回车后点击“2”,然后输入“考研英语”,回车
(3)按作者名查询
步骤一:在主界面选择3
步骤二:回车后点击“3”,然后输入“宫东风”,回车
5、 按书号删除图书信息
当选择按钮4,执行function=='4'的条件语句。首先定义字符串a,然后main函数调用#include〈iostream〉,输入相应的书号,接下来建立对象del(a,” ”," "," "," ”," ”),调用删除函数delete_by_isbn(),实现删除功能.
例如删除001号图书
步骤一:在登陆界面输入“4",回车;
步骤二:按提示输入要删除的书号“001”,回车。
6、 退出图书管理系统
当选择按钮5,执行function=='5'的条件语句。此时执行空操作,跳出while循环,执行main函数后续语句,利用system(”CLS”);清屏后由写函数Book.write ();把操作后的数据读入到文件中,最后调用头文件#include〈iostream>输出相应的提示信息后退出系统.
在登录界面输入“5”,回车。
第5章 结束语
这次课程设计历时数个星期,通过课程设计,我发现了自己的很多不足,知识上还存在很多漏洞,我看到了自己的实践经验还比较缺乏,理论联系实际的能力还急需提高。
为完成这次课程设计我确实付出很多,有苦有乐,这十几天的工作日子,怎么形容呢,每次在实验室回来就会心情不好,感觉自己什么都没有做成,慢慢的摸索着,开始入门,而且有了一点成就感,就这样每一次都比前一次收获多,心情也慢慢好了,而且我的系统也一天比一天的完善。毕竟没有白费心血,以艰辛的付出最终还是获得不少回报!
总之,计算机是一门实践性很强的学科,要想学好,就必须多练习,多总结,只有这样,才能够更加深入地了解,才能够学会如何去运用它。
参考文献
[1]郑莉,董渊,何江舟。C++程序设计[M].清华大学出版社,2010.
[2]谭浩强.C程序设计[M]。清华大学出版社.2007
[3]李强,贾云霞。Visual C++项目开发实践。北京:中国铁道出版社,2004.
[4]李书贤。《C++Primer中文版》[M]。人民邮电出版社
附录
源代码:
#include<iostream>
#include〈cstdio>
#include〈stdlib。h> //cstdio是将stdio。h的内容用C++头文件的形式表示出来。
using namespace std;
#include<string>
class book
{ private:
string isbn; //书号
string name; //书名
string writer; //作者
string publisher; //出版社
string time; //出版时间
string price; //图书价格
public:
book(){}
book(string a,string b,string c,string d,string e,string f)
{ isbn=a;
name= b;
writer=c;
publisher=d;
time=e;
price=f;
}
string get_name()
{return name;}
string get_isbn()
{return isbn;}
string get_writer()
{return writer;}
void display() //图书内容的显示
{
cout<<”书号:"〈〈isbn<〈endl〈〈"书名:”<<name〈〈endl<<”作者:”<<writer<<endl<<”出版社:"〈<publisher〈<endl<<”出版时间:”〈<time<<endl〈〈”价格:"<〈price<〈"元"<<endl<<"*********************************”〈<endl;
}
};
class database:public book //公有继承(public)的定义class B:public A{ < 派生类新定义成员> };
{private:
book shumu[100];
int sum;
public:
database(){sum=0;}
void add(book a)
{
if(sum>=100)
{ cout〈<"添加失败,内存已满!”<<endl;
}
else
{shumu[sum]=a;
sum++;
cout<<”添加新书目成功,以下是本书信息"<〈endl;
cout<〈”*********************************”<<endl;
}
}
void delete_by_isbn(book a)
{ int flag=0;
if(sum==0)
{cout〈〈”删除失败,已经没有存档了!”<<endl;
}
else
{
for(int i=0;i<sum;i++)
{ if(shumu[i].get_isbn()==a.get_isbn())
{ cout<〈”删除书目成功,以下是删除的书信息”〈<endl;
shumu[i]。display ();
for(int j=i;j<sum-1;j++)
{ shumu[j]=shumu[j+1]; }
flag=1;
sum——;
break;}
}
if(!flag)
{cout〈<”the book does't exist!”〈〈endl;
}
}
}
void search_by_name(string names) //按书名查找
{ int flag=0;
for(int i=0;i〈sum;i++)
{if(shumu[i]。get_name()==names)
{ shumu[i]。display ();
flag=1;}
}
if(flag==0)
{cout〈<”the book does't exist!”〈〈endl;
}
}
void search_by_isbn(string names) //按书号查找
{ int flag=0;
for(int i=0;i<sum;i++)
{if(shumu[i].get_isbn()==names)
{ shumu[i].display ();
flag=1;}
}
if(flag==0)
{cout〈<"the book does’t exist!"〈〈endl;
}
}
void search_by_writer(string names) //按作者查找
{int flag=0;
for(int i=0;i〈sum;i++)
{if(shumu[i]。get_writer()==names)
{ shumu[i].display ();
flag=1;}
}
if(flag==0)
{cout〈〈"the book does’t exist!"〈〈endl;
}
}
void display_all() //显示全部信息
{
for(int i=0;i<sum;i++)
{shumu[i].display (); }
}
void read()
{ FILE *fp;
if((fp=fopen(”C:\\Users\\fei\\Desktop\\图书馆.txt","rb+"))==NULL)//注意路径; rb+读写打开一个二进制文件,只允许读写数据。
{cout<<"文件打开失败\n”;
system("PAUSE");
exit(0);
}
fread(&sum,2,1,fp); //从一个文件中读数据&sum:用于接收数据的地址(指针);4:单个元素的大小,单位是字节;1:.元素个数,每次读取个元素;fp:提供数据的文件指针
for(int i=0;i〈sum;i++)
{
fread(&shumu[i],sizeof(shumu[i]),1,fp);}
fclose(fp);
}
void write()
{
FILE *fp2;
if((fp2=fopen(”C:\\Users\\fei\\Desktop\\图书馆.txt","wb+”))==NULL)//注意路径;wb+只写打开或新建一个二进制文件;只允许写数据。
{cout<〈"文件打开失败\n";
system("PAUSE”);
exit(0);//exit(0)表示正常退出
}
fwrite(&sum,2,1,fp2);
for(int i=0;i<sum;i++)
{
fwrite(&shumu[i],sizeof(shumu[i]),1,fp2);}//sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
fputc(’EOF’,fp2);//将字符ch写到文件指针fp所指向的文件的当前写指针的位置;EOF是End Of File 的缩写,表示“文件结束"。
fclose(fp2);
}
};
//主函数
int main()
{ database Book;
char function='0’;
Book。read ();
//界面
while (function!= ’5')
{
cout〈<endl;
cout<<"\t******************************************************************\n”;
cout<〈"\t\t\t\t欢迎使用图书管理系统"<〈endl;
cout<〈”\t\t\t\t\t请选择操作\n”<〈endl;
cout〈〈”\t\t\t\t1 创建新书信息"〈〈endl;
cout<<”\t\t\t\t2 显示所有图书”〈〈endl;
cout〈<”\t\t\t\t3 按指定条件查询书目"〈<endl;
cout〈<”\t\t\t\t4 按书号删除书目”<<endl;
cout〈<"\t\t\t\t5 退出系统并保存修改”〈<endl;
cout<<"\t\t\t(查询可按书号/ 作者/ 书名查询)”〈<endl;
cout〈<"\t******************************************************************\n";
cin〉>function;
//图书书号、书名、作者、出版社、出版时间、价格信息的录入
换码符'\t',表示水平制表位(horizeontal tab),它的作用是将光标移到最接近8的倍数的位置,使得后面的输入从此开始。换句话说,让所有的数据都紧跟在制表符后面输出。
//换码符'\t’,表示水平制表位,它的作用是将光标移到最接近8的倍数的位置,使得后面的输入从此开始。换句话说,让所有的数据都紧跟在制表符后面输出。
if(function==’1’)
{ string a,b,c,d,e,f; //定义字符串
cout<〈”请输入书的isbn编号”〈〈endl;
cin〉>a;
cout<〈"请输入书名”<〈endl;
cin>〉b;
cout〈<”请输入书作者名”〈〈endl;
cin>〉c;
cout〈〈"请输入书的出版社"〈〈endl;
cin〉〉d;
cout<<"请输入书的出版时间"<〈endl;
cin〉〉e;
cout〈<”请输入书的价格"<<endl;
cin〉>f;
book newbook(a,b,c,d,e,f);
Book.add(newbook);
newbook。display();
system("PAUSE");
system(”CLS”);
}
//显示所有图书信息
else if(function=='2')
{cout〈<"这是所有藏书:"<<endl;
cout〈〈”*********************************"<<endl;
Book。display_all ();
system(”PAUSE");
system(”CLS”);
}
//按条件查询图书,输入按书号查询,输入按书名查询,输入按作者查询
else if(function=='3’)
{ cout〈〈”请选择查询方式"<〈endl;
cout<〈”1 按ISBN查询"<〈endl;
cout<<”2 按书名查询”<<endl;
cout〈〈”3 按作者查询"〈<endl;
char j;
string search;
cin〉〉j;
if(j=='1')
{ cout<<”请输入ISBN号"<<endl; //按书号查询
cin>>search;
cout<〈"以下是查询结果”<〈endl;
cout<〈”*********************************"<〈endl;
Book.search_by_isbn (search); //按书号查询图书信息函数的调用
system(”PAUSE”);
system(”CLS”);
}
else if(j==’2’)
{ cout〈〈"请输入书名"<<endl; //按书名查询
cin〉〉search;
cout〈<”以下是查询结果”〈〈endl;
cout〈<"*********************************"〈<endl;
Book.search_by_name (search); //按书名查询图书信息函数的调用
system("PAUSE");
system("CLS”);
}
else if(j==’3’) //按作者查询
{ cout<〈”请输入作者名”<<endl;
cin>〉search;
cout<<"以下是查询结果"〈〈endl;
cout<<”*********************************”<<endl;
Book.search_by_writer (search); //按作者名查询图书信息函数的调用
system("PAUSE”);
system(”CLS");
}
else
{ cout<〈"输入错误,请重新操作!"〈<endl; //错误提示
system("PAUSE”);
system("CLS");
}
}
//按书名删除图书
else if(function=='4’)
{ string a;
cout<〈"请输入要删除的书号”<〈endl;
cin〉〉a;
book del(a,” ”," ”," ”," ”,” ”);
Book。delete_by_isbn (del); //按书名删除函数的调用
system(”PAUSE");
system("CLS");
}
// 退出系统并保存修改
else if(function==’5')
{}
//未按照主界面提示信息操作,提示错误
else
{cout<〈”输入错误,请重新选择!"<〈endl;
system("PAUSE");
system(”CLS");
}
}
//退出系统
system("CLS”);
Book.write ();
for(int i=0;i〈8;i++)
{cout<<” ”<〈endl;}
for(int i=0;i<55;i++)
{cout〈<"*”;}
cout<〈endl;
cout<〈”您已退出本图书管理系统,您的修改已经保存,欢迎再次使用!”〈<endl;
for(int i=0;i〈55;i++)
{cout<<”*";}
cout〈<endl;
system("PAUSE");
exit(0);
}
展开阅读全文