C++图
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
管理系统课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
课 程 设 计
课程名称 C++课程设计 题目名称 C++图书管理系统设计
学生学院
专业班级
学 号
学生姓名
指导老师
2015 年 7 月 2 日
目录
一、课程设计题目„„„„„„„„„„„„„„„„„„„2 二、课程设计目的„„„„„„„„„„„„„„„„„„„2 三、设计内容及设计思路„„„„„„„„„„„„„„„„2
3.1 设计内容 „„„„„„„„„„„„„„„„„„„2
3.2 设计思路 „„„„„„„„„„„„„„„„„„„3 四、实验主要代码„„„„„„„„„„„„„„„„„„„4
4.1 Books类主要代码 „„„„„„„„„„„„„„„5
4.2 图书管理函数代码 „„„„„„„„„„„„„„„5 五、课程设计实验结果„„„„„„„„„„„„„„„„„20 六、课程设计心得„„„„„„„„„„„„„„„„„„„21
七、参考文献„„„„„„„„„„„„„„„„„„„„„22
1
一、课程设计题目
C++图书管理系统设计
二、课程设计目的
《C++面向对象程序设计》是电子信息专业中一门重要的专业课。这次课程设计的目的是以程序设计语言为基础,通过完成一些程序设计,运用所学理论知识掌握面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
问题、解决问题的能力。通过课程设计,我们应该得到了一些有利锻炼:
1.进一步加深我们对所学知识的理解、分析以及运用的灵活性。全面提高我们的综合能力,解决问题的能力。
2.理论与实际相互交涉,既检验了对理论的掌握又检验了理论与实际相结合使用的能力。这不仅可以使我们充分理解理论,还可以提高我们的思考能力。 3.掌握类与对象的知识,熟练使用指针。
4.掌握面向对象程序的设计方法。
5.进一步掌握编写、调试、运行各种能力的综合运用。
三、设计内容及设计思路
3.1 设计内容
定义图书类,属性有:书名、出版社、ISBN号、作者、库存量、价格等信息和相关的行为
基本要求:
销售功能:输入相应的ISBN号,并在书库中查找该书的相关信息。如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出
提示
春节期间物业温馨提示小区春节期间温馨提示物业小区春节温馨提示春节物业温馨提示物业春节期间温馨提示
信息,结束购买
添加功能:主要完成图书信息的添加,要求ISBN号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加。
2
查询功能:可按书名、ISBN号、作者、出版社进行查询。若存在相应信息,输出所查询的信息,若不存在该
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
,则提示“该标题不存在~” 修改功能:可根据查询结果对相应的记录进行修改,修改时注意ISBN号的唯一性。
删除功能:主要完成图书信息的删除。输入要删除的ISBN号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在” 统计功能:输出当前书库中所有图书的总数及详细信息;可按书的价格、库存量、作者、出版社进行统计,输出统计信息时,要按从大到小进行排序 图书存盘:将当前程序中的图书信息存入文件中
读出信息:从文件中将图书信息读入程序
3.2 设计思路
3.2.1程序设计步骤:
(1)在book.h文件中创建一个图书管理类Books,然后在books.cpp文件
中实现图书管理函数的定义,使用链表连接每一本书,便于查找和操
作。
(2)在c++课程设计.cpp文件中编写主函数,用于测试。 3.2.2 程序流程图:
(1)类的设计:
Class Books
添统查修删图销
加计询改除书售
图图图记操存功
书 书 书 录 作 盘 能
(2)程序总体设计流程图:
3
开始
读取上次文
件,保留上
次操作
显示初始
界面
否
是否有选项
输入
是
执行相应的操作:1表示查询图书,2表示
添加图书,3表示删除图书,4表示销售图
书,5表示统计图书,6表示修改图书,7
表示图书存盘,8表示读取磁盘的图书,9
表示退出系统
结束
四、实验主要代码
4.1 Books类主要代码
public:
//销售功能
void sale(int ISBN);
4
//添加操作
void add(Books &b);
//统计操作
void sum();
//查询操作用了函数重载(使用函数模本一直说链接错误,没办法了,只
能写多些代码)
void seek(int ISBN);
void seek(string t);
//修改操作用了函数重载(使用函数模本一直说链接错误,没办法了,只
能写多些代码)
void modified(int ISBN);
void modified(string t);
//删除操作
void remove(int ISBN);
//图书存盘
void save();
// 读出信息:从文件中将图书信息读入程序
void read(string t = "D:\bookSaveFile.txt");
//字符串转换函数,把字符串转换为float型数据
float temp(string s);
//链表使用的指针,使每一本书链接起来
Books * next; private:
string _book; //书名
string _publish; //出版社
string _author; //作者
int _ISBN; //ISBN号
int _num; //库存量
float _price; //图书价格
4.2 图书管理函数代码
//添加功能:主要完成图书信息的添加,要求ISBN号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加。
void Books::add(Books &b)
{
bool flag = true;
5
cout << "请分别输入添加书的ISBN号、书名、作者、出版社、储存数量、价
格" << endl;
cin >> b._ISBN;
while (1)
{
if (b._ISBN > 99999)
{
cout << "输入错误,请输入ISBN号在1~99999之间的图书~" << endl;
cin >> b._ISBN;
}
else
{
break;
}
}
cin >> b._book;
cin >> b._author;
cin >> b._publish;
cin >> b._num;
cin >> b._price;
Books *p;
p = this;
while (p)
{
if (b._ISBN == p->_ISBN)// 判断ISBN号唯一性
{
cout << "添加的书已经存在,添加失败~" << endl;
break;
}
if (b._ISBN > p->_ISBN && b._ISBN < p->next->_ISBN)//插入
{
b.next = p->next;
p->next = &b;
cout << "添加成功~" << endl;
break;
}
p = p->next;
}
}
//删除功能:主要完成图书信息的删除。输入要删除的ISBN号,根据编号删除该
物品的记录,
//如果该编号不在物品库中,则提示“该编号不存在”
6
void Books::remove(int ISBN) {
Books *p;
p = this;
while (p)
{
if (p->next->_ISBN == ISBN) //查找删除的ISBN号
{
p->next = p->next->next;
cout << "删除成功" << endl;
break;
}
p = p->next;
if (!(p->next))
{
cout << "该编号不存在,删除失败~" << endl;
break;
}
}
}
//销售功能:输入相应的ISBN号,并在书库中查找该书的相关信息。 //如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出提示
信息,结束购买
void Books::sale(int ISBN) {
int num;
Books *p;
p = this;
while (p)
{
if (p->_ISBN == ISBN)//查找销售的ISBN号
{
if (p->_num > 0)
{
cout << "请输入购买册数~" << endl;
cin >> num;
}
else
{
cout << "没有库存量,结束购买~" << endl;
break;
}
if (p->_num < num)
7
{
cout << "库存量不够,结束购买~" << endl;
break;
}
else
{
cout << "您购买的图书:" << next->_book << endl;
cout << "单价:" << next->_price << endl;
cout << "您应该支付:" << next->_price*num << endl;
cout << "谢谢惠顾,欢迎下次光临~" << endl;
break;
}
}
p = p->next;
if (!p)
{
cout << "不存在该ISBN号的图书,结束购买~" << endl;
break;
}
}
}
//查询功能:根据ISBN号进行查询。
//若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该标题不存在~” void Books::seek(int ISBN)
{
Books *p = this;
while (p)
{
if (p->_ISBN == ISBN)
{
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
cout << "价格:" << p->_price << endl;
break;
}
p = p->next;
if (!p)
{
cout << "该标题不存在~" << endl;
break;
8
}
}
}
//查询功能:根据书名、作者、出版社进行查询。
//若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该标题不存在~” void Books::seek(string t)
{
Books *p = this;
bool flag = false;//判断查找是否存在标签
while (p)
{
if (p->_author == t)
{
flag = true;
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
cout << "价格:" << p->_price << endl;
}
else if (p->_book == t)
{
flag = true;
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
cout << "价格:" << p->_price << endl;
}
else if (p->_publish == t)
{
flag = true;
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
cout << "价格:" << p->_price << endl;
}
p = p->next;
9
if (!p&&!flag) //确保查询所有存在的图书
{
cout << "该标题不存在~" << endl;
break;
}
}
}
//修改功能:可根据查询结果对相应的记录进行修改,修改时注意ISBN号的唯一性。
void Books::modified(int ISBN) {
Books *p = this;
Books *q = this;
bool flag = false;
while (p)
{
if (p->_ISBN == ISBN)
{
flag = true;
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
cout << "价格:" << p->_price << endl;
string book;
string publish;
string author;
int ISB;
int num;
float price;
int choice;
cout << "请输入修改内容:1 表示修改作者,2表示修改书名,3表示修改出版社,4表示修改库存量,5表示修改图书价格,6表示修改ISBN号" << endl;
cin >> choice;
switch (choice)
{
case 1:
cout << "请输入新的作者名字:" << endl;
cin >> author;
p->_author = author;
cout << "修改成功~" << endl;
break;
10
case 2:
cout << "请输入新的书名:" << endl;
cin >> book;
p->_book = book;
cout << "修改成功~" << endl;
break;
case 3:
cout << "请输入新的出版社:" << endl;
cin >> publish;
p->_publish = publish;
cout << "修改成功~" << endl;
break;
case 4:
cout << "请输入新的存库量:" << endl;
cin >> num;
p->_num = num;
cout << "修改成功~" << endl;
break;
case 5:
cout << "请输入新的图书价格:" << endl;
cin >> price;
p->_price = price;
cout << "修改成功~" << endl;
break;
case 6:
{
cout << "请输入新的ISBN号:" << endl;
cin >> ISB;
while (q)//判断ISBN号是否唯一
{
if (q->_ISBN == ISB)
{
cout << "该ISBN号已经存在,修改失败~" << endl;
break;
}
q = q->next;
if (!q)
{
p->_ISBN = ISB;
cout << "修改成功~" << endl;
}
}
}
break;
11
default:
break;
}
}
p = p->next;
if (!p&&!flag)
{
cout << "该标题不存在~" << endl;
break;
}
}
}
//修改功能:可根据查询结果对相应的记录进行修改,修改时注意ISBN号的唯一性。
void Books::modified(string t) {
Books *p = this;
Books *q = this;
bool flag = false;
while (p)
{
if (p->_author== t)
{
flag = true;
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
cout << "价格:" << p->_price << endl;
string book;
string publish;
string author;
int ISB;
int num;
float price;
int choice;
cout << "请输入修改内容:1 表示修改作者,2表示修改书名,3表示修改出版社,4表示修改库存量,5表示修改图书价格,6表示修改ISBN号" << endl;
cin >> choice;
switch (choice)
{
case 1:
12
cout << "请输入新的作者名字:" << endl;
cin >> author;
p->_author = author;
cout << "修改成功~" << endl;
break;
case 2:
cout << "请输入新的书名:" << endl;
cin >> book;
p->_book = book;
cout << "修改成功~" << endl;
break;
case 3:
cout << "请输入新的出版社:" << endl;
cin >> publish;
p->_publish = publish;
cout << "修改成功~" << endl;
break;
case 4:
cout << "请输入新的存库量:" << endl;
cin >> num;
p->_num = num;
cout << "修改成功~" << endl;
break;
case 5:
cout << "请输入新的图书价格:" << endl;
cin >> price;
p->_price = price;
cout << "修改成功~" << endl;
break;
case 6:
cout << "请输入新的ISBN号:" << endl;
cin >> ISB;
while (q)//判断ISBN号是否唯一
{
if (q->_ISBN == ISB)
{
cout << "该ISBN号已经存在,修改失败~" << endl;
break;
}
q = q->next;
if (!q)
{
p->_ISBN = ISB;
cout << "修改成功~" << endl;
13
}
}
break;
default:
break;
}
}
else if (p->_book == t)
{
flag = true;
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
cout << "价格:" << p->_price << endl;
string book;
string publish;
string author;
int ISB;
int num;
float price;
int choice;
cout << "请输入修改内容:1 表示修改作者,2表示修改书名,3表示修改出版社,4表示修改库存量,5表示修改图书价格,6表示修改ISBN号" << endl;
cin >> choice;
switch (choice)
{
case 1:
cout << "请输入新的作者名字:" << endl;
cin >> author;
p->_author = author;
cout << "修改成功~" << endl;
break;
case 2:
cout << "请输入新的书名:" << endl;
cin >> book;
p->_book = book;
cout << "修改成功~" << endl;
break;
case 3:
cout << "请输入新的出版社:" << endl;
cin >> publish;
p->_publish = publish;
14
cout << "修改成功~" << endl;
break;
case 4:
cout << "请输入新的存库量:" << endl;
cin >> num;
p->_num = num;
cout << "修改成功~" << endl;
break;
case 5:
cout << "请输入新的图书价格:" << endl;
cin >> price;
p->_price = price;
cout << "修改成功~" << endl;
break;
case 6:
cout << "请输入新的ISBN号:" << endl;
cin >> ISB;
while (q)//判断ISBN号是否唯一
{
if (q->_ISBN == ISB)
{
cout << "该ISBN号已经存在,修改失败~" << endl;
break;
}
q = q->next;
if (!q)
{
p->_ISBN = ISB;
cout << "修改成功~" << endl;
}
}
break;
default:
break;
}
}
else if (p->_publish == t)
{
flag = true;
cout << "ISBN号:" << p->_ISBN << endl;
cout << "作者:" << p->_author << endl;
cout << "书名:" << p->_book << endl;
cout << "出版社" << p->_publish << endl;
cout << "储存量:" << p->_num << endl;
15
cout << "价格:" << p->_price << endl;
string book;
string publish;
string author;
int ISB;
int num;
float price;
int choice;
cout << "请输入修改内容:1 表示修改作者,2表示修改书名,3表示修改出版社,4表示修改库存量,5表示修改图书价格,6表示修改ISBN号" << endl;
cin >> choice;
switch (choice)
{
case 1:
cout << "请输入新的作者名字:" << endl;
cin >> author;
p->_author = author;
cout << "修改成功~" << endl;
break;
case 2:
cout << "请输入新的书名:" << endl;
cin >> book;
p->_book = book;
cout << "修改成功~" << endl;
break;
case 3:
cout << "请输入新的出版社:" << endl;
cin >> publish;
p->_publish = publish;
cout << "修改成功~" << endl;
break;
case 4:
cout << "请输入新的存库量:" << endl;
cin >> num;
p->_num = num;
cout << "修改成功~" << endl;
break;
case 5:
cout << "请输入新的图书价格:" << endl;
cin >> price;
p->_price = price;
cout << "修改成功~" << endl;
break;
case 6:
16
cout << "请输入新的ISBN号:" << endl;
cin >> ISB;
while (q)//判断ISBN号是否唯一
{
if (q->_ISBN == ISB)
{
cout << "该ISBN号已经存在,修改失败~" << endl;
break;
}
q = q->next;
if (!q)
{
p->_ISBN = ISB;
cout << "修改成功~" << endl;
}
}
break;
default:
break;
}
}
p = p->next;
if (!p&&!flag)
{
cout << "不存在与该标题匹配的图书~" << endl;
break;
}
}
}
//统计功能:输出当前书库中所有图书的总数及详细信息; //可按书的价格、库存量、作者、出版社进行统计,输出统计信息时,要按从大到小进行排序
void Books::sum()
{
int sum = 0; //统计所有图书总库存量
int n = 0; //统计现存图书的所有种类
Books *p = this;
cout << setiosflags(ios::left) << setw(10) << "ISBN号:" << setw(16) << "书名:"
<< setw(16) << "作者:" << setw(20) << "出版社:" << setw(10) << "价格: "
<< setw(8) << "库存量:" << endl;
while (p)
{
sum += p->_num;
17
n++;
cout << setw(10) << p->_ISBN;
cout << setw(16) << p->_book;
cout << setw(16) << p->_author;
cout << setw(20) << p->_publish;
cout << setw(10) << p->_price;
cout << setw(8) << p->_num;
cout << endl;
p = p->next;
}
cout << "图书种类共有:" << n << "总的库存量:" << sum << endl;
cout << resetiosflags(ios::left) << endl; }
//图书存盘:将当前程序中的图书信息存入文件中
void Books::save()
{
Books *p = this;
ofstream outFile("D:/bookSaveFile.txt");
if (!outFile)
{
cerr << "open error!" << endl;
return;
}
outFile << setiosflags(ios::left)<
_ISBN;
outFile << setw(20) << p->_book;
outFile << setw(20) << p->_author;
outFile << setw(20) << p->_publish;
outFile << setw(15) << p->_price;
outFile << setw(15) << p->_num;
outFile << endl;
p = p->next;
}
outFile << resetiosflags(ios::left) << endl;
outFile.close();
cout << "存盘成功!" << endl;
}
// 读出信息:从文件中将图书信息读入程序,参数t为文件名
18
void Books::read(string t) {
Books *p = this;
int ISBN;
int num;
int price;
int m = 0;
bool flag = false;
string read;
ifstream inFile(t);
if (!inFile)
{
cerr << "打开文件失败,读取失败~";
return;
}
streambuf* old_buffer = cin.rdbuf(inFile.rdbuf());
while (cin >> read) // 逐词读取方法一
{
if (m > 5)
{
Books *book = new Books;
ISBN = temp(read);
book->_ISBN = ISBN;
cin >> read;
book->_book = read;
cin >> read;
book->_author = read;
cin >> read;
book->_publish = read;
cin >> read;
price = temp(read);
book->_price = price;
cin >> read;
num = temp(read);
book->_num = num;
while (p)
{
if (book->_ISBN == p->_ISBN)
{
break;
}
if (book->_ISBN > p->_ISBN && book->_ISBN < p->next->_ISBN)
{
flag = true;
19
book->next = p->next;
p->next = book;
break;
}
p = p->next;
}
}
m++;
}
cin.rdbuf(old_buffer); // 修复buffer
inFile.close();
if (flag)
{
cout << "读取成功" << endl;
}
if (flag)
{
cout << "所读取的文件内容格式和本系统不符合,读取失败!" << endl;
cout << "请认真检查文件内容或输入的文件名~" << endl;
}
}
五、课程设计实验结果
执行程序,就会弹出下面的窗口:
以下为选择1所弹出来的界面以及相关操作:
20
文件保存截图:
六、课程设计心得
在接近两周的课程设计中,我学会了很多,收获了很多,也明白了很多。在小组同学的帮助下,通过努力终于成功的完成了这次的课程设计。我在此次课程设计中负责部分图书管理函数的编写,从函数构思,再到编程,再到最后的调试编程,面对各种各样的困难与挫折,我都通过仔细研究和查找资料成功解决。我坚信,只要不放弃我一定会成功的。看到它成功运行后,感觉很是有成就感,通过这次的课程设计让我对C++的理论有了更加深入的了解,同时发现书本上的知识与实际存在着差异。书本知识就是理论后的结论,它忽略了很多对于我们来说更直接更具有实用性的东西。也许如大家所明白的书中自有黄金屋书中自有颜如玉一样,我并不否认书中给予的知识,但我更想说,书本重要但远不如实际重要。即使你在怎么懂得理论,对它理解多么独特、深刻,如果不能与实践联系起来,对我们来说没有很大的意义,对社会也不会有太大的推动作用。纸上得来终觉浅,深知此事要躬行。我们在今后的学习工作中要更加注重实际,更加勤于实际操作切莫只会纸上谈兵。
21
七、参考文献
[1]郑莉,傅仕星 《C++面向对象程序设计》 清华大学出版社 [2]谭浩强 《C++面向对象程序设计》 清华大学出版社
[3]李师贤 《C++精髓》 机械工业出版社
[4]郑莉 傅仕星 C++语言面向对象程序设计习题与实验指导,清华大学出社
22