⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printinv.cpp

📁 BigC++的源码
💻 CPP
字号:
#include <iostream>
#include <iomanip>

#include <string>
#include <mysql.h>

using namespace std;

#include "sutil.h"

/**
   Prints a customer with a given customer number.
   @param connection the database connection
   @param custnum the customer number
*/
void print_customer(MYSQL* connection, string custnum)
{
   string query = "SELECT Name, Address, City, State, Zip "
      "FROM Customer WHERE Customer_Number = '" + custnum + "'";
   if (mysql_query(connection, query.c_str()) != 0) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return;
   }
   MYSQL_RES* result = mysql_store_result(connection);
   if (result == NULL) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return;
   }
   int rows = mysql_num_rows(result);
   if (rows == 0) 
   {
      cout << "Customer not found.\n";
      return;
   }

   MYSQL_ROW row = mysql_fetch_row(result);  
   string name = row[0];
   string street = row[1];
   string city = row[2];
   string state = row[3];
   string zip = row[4];
   mysql_free_result(result);

   cout << name << "\n" << street << "\n"
      << city << ", " << state << " " << zip << "\n"; 
}

/**
   Prints all items of an invoice.
   @param connection the database connection
   @param invnum the invoice number
*/
void print_items(MYSQL* connection, string invnum)
{
   string query = "SELECT Item.Quantity, Product.Description, "
      "Product.Unit_Price FROM Item, Product WHERE Item.Invoice_Number = '" 
      + invnum + "'AND Item.Product_Code = Product.Product_Code";
   if (mysql_query(connection, query.c_str()) != 0) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return;
   }
   MYSQL_RES* result = mysql_store_result(connection);
   if (result == NULL) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return;
   }
   int rows = mysql_num_rows(result);

   const int COLUMN_WIDTH = 30;
           
   cout << 
      "\n\nDescription                   Price  Qty  Total\n";

   for (int r = 1; r <= rows; r++)
   {
      MYSQL_ROW row = mysql_fetch_row(result);  
      int quantity = string_to_int(row[0]);
      string description = row[1];
      double price = string_to_double(row[2]);

      cout << description;

      // Pad with spaces to fill column
      
      int pad = COLUMN_WIDTH - description.length();
      for (int i = 1; i <= pad; i++)
         cout << " ";
   
      cout << price
         << "   " << quantity 
         << "   " << price * quantity << "\n";
   }

   mysql_free_result(result);
}

/**
   Gets the amount due on all items of an invoice.
   @param connection the database connection
   @param invnum the invoice number
*/
double get_amount_due(MYSQL* connection, string invnum)
{
   string query = "SELECT SUM(Item.Quantity * Product.Unit_Price) "
      "FROM Item, Product WHERE Item.Invoice_Number = '" 
      + invnum + "' AND Item.Product_Code = Product.Product_Code";
   if (mysql_query(connection, query.c_str()) != 0) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return 0;
   }
   MYSQL_RES* result = mysql_store_result(connection);
   if (result == NULL) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return 0;
   }
   int rows = mysql_num_rows(result);
   if (rows == 0) return 0;
   MYSQL_ROW row = mysql_fetch_row(result);  
   double amount_due = string_to_double(row[0]);
   mysql_free_result(result);
   return amount_due;
}

/**
   Prints an invoice.
   @param connection the database connection
   @param invnum the invoice number
*/
void print_invoice(MYSQL* connection, string invnum)
{
   string query = "SELECT Customer_Number, Payment FROM Invoice "
      "WHERE Invoice_Number = '" + invnum + "'";
   if (mysql_query(connection, query.c_str()) != 0) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return;
   }
   MYSQL_RES* result = mysql_store_result(connection);
   if (result == NULL) 
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return;
   }
   int rows = mysql_num_rows(result);
   if (rows == 0) 
   {
      cout << "Invoice not found.\n";
      return;
   }

   MYSQL_ROW row = mysql_fetch_row(result);  
   string custnum = row[0];
   double payment = string_to_double(row[1]);
   mysql_free_result(result);

   cout << "                     I N V O I C E\n\n";

   print_customer(connection, custnum);
   print_items(connection, invnum);

   double amount_due = get_amount_due(connection, invnum);

   cout << "\nAMOUNT DUE: $" << amount_due - payment << "\n";
}

int main()
{
   MYSQL* connection = mysql_init(NULL);

   if(mysql_real_connect(connection, NULL, NULL, NULL, 
         "bigcpp", 0, NULL, 0) == NULL)
   {
      cout << "Error: " << mysql_error(connection) << "\n";
      return 1;
   }

   cout << "Enter invoice number: ";
   string invnum;

   getline(cin, invnum);
   print_invoice(connection, invnum);

   mysql_close(connection);
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -