C++:构建一个Book类,用于统计购买的图书,其中book类有6个私有数据成员:书名(string)、作者(string)、购入册数(int),价格(double),当前购入总册数(static int) 和当前购书总花费(static double)。建立一个有5个元素的Book对象数组,并定义对象指针,通过指针访问对象数组,依次从键盘输入购入图书的相关信息。输入完成后按照要求打印出当前购入图书的总册数与总花费以及所购图书的具体信息。具体输入输出格式参考下方给出的格式。(所有的冒号均为中文冒号!)
这道题我之前在网上搜只有一个类似题《包含5个同学数据的对象数组》这种,这个代码是我以那道题为例子结合自己学过的打出来的,希望能对你有帮助
题目要求
代码一
这是自己手打的代码,c++新手,可以有一些可以优化,如果有什么不对和可以改正的地方欢迎评论区讨论
#include<iostream>
#include<string>
using namespace std;
class Book
{
public:
Book(string bookname, string writer, int number, double price)//构造函数
{
this->bookname = bookname;
this->writer = writer;
this->number = number;
this->price = price;
}
Book()
{
bookname=" ";
writer= " ";
number=0;
price=0;
allPrice = 0;
allNumber = 0;
}
int getnum();
double getprice();
void print();
void input();
void show();
private:
string bookname;
string writer;
int number;
double price;
static int allNumber;
static double allPrice;
};
int Book::allNumber = 0; //赋予初始值
double Book::allPrice = 0;
int Book::getnum()
{
allNumber = number; //这两行代码可以用return number;替代
return allNumber; //只是题目要求要用static int式的数就多此一举而已
}
double Book::getprice()
{
allPrice = number * price; //同理可以用return number*price;等量替代这两行代码
return allPrice; //说起来等量替代了的话allNumber和allPrice其实没啥存在必要
}
void Book::input()
{
cin >> bookname >> writer >> number >> price ;
}
void Book::print()
{
cout << "书名:" << bookname<< endl;
cout << "作者:" << writer << endl;
cout << "购入册数:" << number << endl;
cout << "价格:" << price << endl;
}
void show(int x,double y) //注意一个是int一个是double
{
cout << "当前采购图书总册数为" << x << "本,总共花费了" << y << "元。" << endl;
cout << "具体信息如下:" << endl;
}
int main()
{
Book book[5],*p;
int i,j=0; //i用作循环,j表示册数
double k = 0; //k代表总价
p = book; //指针p指向对象数组book
for (i = 0; i < 5; i++)
{
p[i].input();
}
for (i = 0; i < 5; i++)
{
j += p[i].getnum();
k += p[i].getprice();
}
show(j, k);
for (i = 0; i < 5; i++)
{
cout << i + 1 << ":" << endl;
p[i].print();
cout << endl;
}
return 0;
}
代码二
这里是完成作业后学长给出的代码,作对比参考之用
#include<iostream>
#include<cstring>
using namespace std;
class Book {
public:
Book(char* name1, char* writer1, int number1, double price1)
{
name = new char[strlen(name1) + 1];
strcpy(name, name1);
writer = new char[strlen(writer1) + 1];
strcpy(writer, writer1);
number = number1;
price = price1;
s_number += number;
s_price += price * number;
}
~Book()
{
delete[]name;
delete[]writer;
s_number -= number;
s_price -= price * number;
}
void show()
{
cout << "书名:" << name << endl;
cout << "作者:" << writer << endl;
cout << "购入册数:" << number << endl;
cout << "价格:" << price << endl;
}
void show_s_number_s_price()
{
cout << "当前采购图书总册数为" << s_number << "本,总共花费了" << s_price << "元。" << endl;
cout << "具体信息如下:" << endl;
}
private:
char* name;
char* writer;
int number;
double price;
static int s_number;
static double s_price;
};
int Book::s_number = 0;
double Book::s_price = 0;
int main()
{
Book* a[5];
char name1[30];
char writer1[30];
int number1;
double price1;
for (int i = 0; i < 5; i++)
{
cin >> name1 >> writer1 >> number1 >> price1;
a[i] = new Book(name1, writer1, number1, price1);
}
a[4]->show_s_number_s_price();
for (int i = 0; i < 5; i++)
{
cout << i + 1 << ":" << endl;
a[i]->show();
cout << endl;
}
return 0;
}