我得到了Qt作业,我似乎无法开始工作。
这里是作业说明:
使用名称,价格和供应商描述产品。该 供应商和制造商对于产品可以是相同的。
使用名称和价格初始化
Product
。供应商详细信息使用函数setSupplier()
设置,该函数调用 适当的Vendor
功能来设置供应商的详细信息。如果 一个为其制造商请求产品,它返回的名称 供应商存储在m_Supplier
中,如果它被设置为制造商。 否则返回Unknown
字符串。toString()
的{{1}} 返回其中数据成员的值的字符串表示形式 可读格式。Vendor
的{{1}}始终返回一个字符串 产品的代表。如果toString()
中的Product
supplierDetails
为toString()
,它会返回供应商和产品详细信息。 否则只返回产品详细信息。将其实现为控制台应用程序,产品和suuplier 从键盘输入详细信息。显示结果
Product
和true
(适用于getManufacturerName()
和toString()
控制台上的参数值。
不幸的是,我真的无法找到我在哪里出错,所以我会将我所有文件的所有代码都放在下面,希望有人能够发现出错的地方。
的main.cpp
true
product.h
false
product.cpp
#include <QCoreApplication>
#include "vendor.h"
#include "product.h"
#include <QString>
#include <QTextStream>
#include <QDebug>
QTextStream cout(stdout);
QTextStream cin(stdin);
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//Declare variables
QString productName;
QString productPriceStr;
double productPrice;
QString supplierName;
QString supplierEmail;
QString supplierIsManufacturerStr;
bool supplierIsManufacturer;
//Get user input
cout << "Enter the product name:" << endl;
productName = cin.readLine();
cout << "Enter the product price:" << endl;
productPriceStr = cin.readLine();
cout << "Enter the supplier name:" << endl;
supplierName = cin.readLine();
cout << "Enter the supplier email:" << endl;
supplierEmail = cin.readLine();
cout <<"Is the supplier a manufacturer (y/n):\t" << endl;
supplierIsManufacturerStr = cin.readLine();
productPrice = productPriceStr.toDouble();
if(supplierIsManufacturerStr.at(0).toLower() == 'y') {
supplierIsManufacturer = true;
} else {
supplierIsManufacturer = false;
}
//Implement classes
Vendor vendor;
Product product(productName, productPrice, vendor);
product.setSupplier(supplierName, supplierEmail, supplierIsManufacturer);
cout << product.toString(supplierIsManufacturer) << endl;
return a.exec();
}
vendor.h
#ifndef PRODUCT_H
#define PRODUCT_H
#include "vendor.h"
#include <QString>
class Product {
public:
Product(QString name, double price, Vendor vendor);
void setSupplier(QString name, QString email, bool isManufacturer);
QString getManufacturerName();
QString toString(bool SupplierDetails);
private:
QString m_Name;
double m_Price;
Vendor m_Supplier;
};
#endif // PRODUCT_H
vendor.cpp
#include <QString>
#include "product.h"
#include "vendor.h"
Product::Product(QString name, double price, Vendor vendor) {
m_Name = name;
m_Price = price;
m_Supplier = vendor;
}
void Product::setSupplier(QString name, QString email, bool isManufacturer) {
Vendor vendor;
vendor.setDetails(name, email, isManufacturer);
}
QString Product::getManufacturerName() {
if(m_Supplier.isManufacturer()) {
return m_Supplier.getName();
} else {
return "Unknown";
}
}
QString Product::toString(bool supplierDetails) {
QString output;
output = "\nProduct name:\t\t" + m_Name + "\nProduct price:\t\tR" + m_Price + "\nProduct Supplier:\t" + getManufacturerName();
if(supplierDetails) {
return m_Supplier.toString() + output;
} else {
return output;
}
}
那就是它。
没有编译错误,这纯粹是算法错误。到目前为止,无论我给它输入什么,它总是只显示产品名称,有时产品价格的非数值,然后其他一切都是空的。 #ifndef VENDOR_H
#define VENDOR_H
#include <QString>
class Vendor {
public:
Vendor();
void setDetails(QString name, QString email, bool isManufacturer);
bool isManufacturer();
QString getName();
QString toString();
private:
QString m_Name;
QString m_Email;
bool m_IsManufacturer;
};
#endif // VENDOR_H
函数似乎仍在运行。
如果有人能够看出你做错了什么是错的!
答案 0 :(得分:0)
这一行
output = "\nProduct name:\t\t" + m_Name + "\nProduct price:\t\tR" + m_Price + "\nProduct Supplier:\t" + getManufacturerName();
应该是:
output = "\nProduct name:\t\t" + m_Name + "\nProduct price:\t\tR" + QString::number(m_Price) + "\nProduct Supplier:\t" + getManufacturerName();
您应该在“+”之前将数字转换为QString。
供应商类中的重载运算符“=”
Vendor operator=(const Vendor& other)
{
m_Name = other.m_Name;
m_Email = other.m_Email;
m_IsManufacturer = other.m_IsManufacturer;
}
答案 1 :(得分:0)
我发现了什么是错的。在我的product.cpp文件中,我在setDetails函数中创建了一个新的供应商,这使我的所有供应商详细信息都空白。我应该使用我在Product构造函数中设置的m_Supplier变量...