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

📄 printinv.cpp.html

📁 《Big C++ 》Third Edition电子书和代码全集-Part1
💻 HTML
字号:
<html>

<head>
	<title>printinv.cpp</title>
</head>

<body>
<pre>  1  #include &lt;iostream&gt;
  2  #include &lt;iomanip&gt;
  3  
  4  #include &lt;string&gt;
  5  #include &lt;mysql.h&gt;
  6  
  7  using namespace std;
  8  
  9  #include "sutil.h"
 10  
 11  <font color='#0000cc'>/**
 12     Prints a customer with a given customer number.
 13     @param connection the database connection
 14     @param custnum the customer number
 15  */</font>
 16  void print_customer(MYSQL* connection, string custnum)
 17  {
 18     string query = "SELECT Name, Address, City, State, Zip "
 19        "FROM Customer WHERE Customer_Number = '" + custnum + "'";
 20     if (mysql_query(connection, query.c_str()) != 0)
 21     {
 22        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
 23        return;
 24     }
 25     MYSQL_RES* result = mysql_store_result(connection);
 26     if (result == NULL)
 27     {
 28        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
 29        return;
 30     }
 31     int rows = mysql_num_rows(result);
 32     if (rows == 0)
 33     {
 34        cout &lt;&lt; "Customer not found.\n";
 35        return;
 36     }
 37  
 38     MYSQL_ROW row = mysql_fetch_row(result);
 39     string name = row[0];
 40     string street = row[1];
 41     string city = row[2];
 42     string state = row[3];
 43     string zip = row[4];
 44     mysql_free_result(result);
 45  
 46     cout &lt;&lt; name &lt;&lt; "\n" &lt;&lt; street &lt;&lt; "\n"
 47        &lt;&lt; city &lt;&lt; ", " &lt;&lt; state &lt;&lt; " " &lt;&lt; zip &lt;&lt; "\n";
 48  }
 49  
 50  <font color='#0000cc'>/**
 51     Prints all items of an invoice
 52     @param connection the database connection
 53     @param invnum the invoice number
 54  */</font>
 55  void print_items(MYSQL* connection, string invnum)
 56  {
 57     string query = "SELECT Item.Quantity, Product.Description, "
 58        "Product.Unit_Price FROM Item, Product WHERE Item.Invoice_Number = '"
 59        + invnum + "'AND Item.Product_Code = Product.Product_Code";
 60     if (mysql_query(connection, query.c_str()) != 0)
 61     {
 62        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
 63        return;
 64     }
 65     MYSQL_RES* result = mysql_store_result(connection);
 66     if (result == NULL)
 67     {
 68        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
 69        return;
 70     }
 71     int rows = mysql_num_rows(result);
 72  
 73     const int COLUMN_WIDTH = 30;
 74  
 75     cout &lt;&lt;
 76        "\n\nDescription                   Price  Qty  Total\n";
 77  
 78     for (int r = 1; r &lt;= rows; r++)
 79     {
 80        MYSQL_ROW row = mysql_fetch_row(result);
 81        int quantity = string_to_int(row[0]);
 82        string description = row[1];
 83        double price = string_to_double(row[2]);
 84  
 85        cout &lt;&lt; description;
 86  
 87        <font color='#0000cc'>// Pad with spaces to fill column</font>
 88  
 89        int pad = COLUMN_WIDTH - description.length();
 90        for (int i = 1; i &lt;= pad; i++)
 91           cout &lt;&lt; " ";
 92  
 93        cout &lt;&lt; price
 94           &lt;&lt; "   " &lt;&lt; quantity
 95           &lt;&lt; "   " &lt;&lt; price * quantity &lt;&lt; "\n";
 96     }
 97  
 98     mysql_free_result(result);
 99  }
100  
101  <font color='#0000cc'>/**
102     Gets the amount due on all items of an invoice.
103     @param connection the database connection
104     @param invnum the invoice number
105  */</font>
106  double get_amount_due(MYSQL* connection, string invnum)
107  {
108     string query = "SELECT SUM(Item.Quantity * Product.Unit_Price) "
109        "FROM Item, Product WHERE Item.Invoice_Number = '"
110        + invnum + "' AND Item.Product_Code = Product.Product_Code";
111     if (mysql_query(connection, query.c_str()) != 0)
112     {
113        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
114        return 0;
115     }
116     MYSQL_RES* result = mysql_store_result(connection);
117     if (result == NULL)
118     {
119        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
120        return 0;
121     }
122     int rows = mysql_num_rows(result);
123     if (rows == 0) return 0;
124     MYSQL_ROW row = mysql_fetch_row(result);
125     double amount_due = string_to_double(row[0]);
126     mysql_free_result(result);
127     return amount_due;
128  }
129  
130  <font color='#0000cc'>/**
131     Prints an invoice.
132     @param connection the database connection
133     @param invnum the invoice number
134  */</font>
135  void print_invoice(MYSQL* connection, string invnum)
136  {
137     string query = "SELECT Customer_Number, Payment FROM Invoice "
138        "WHERE Invoice_Number = '" + invnum + "'";
139     if (mysql_query(connection, query.c_str()) != 0)
140     {
141        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
142        return;
143     }
144     MYSQL_RES* result = mysql_store_result(connection);
145     if (result == NULL)
146     {
147        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
148        return;
149     }
150     int rows = mysql_num_rows(result);
151     if (rows == 0)
152     {
153        cout &lt;&lt; "Invoice not found.\n";
154        return;
155     }
156  
157     MYSQL_ROW row = mysql_fetch_row(result);
158     string custnum = row[0];
159     double payment = string_to_double(row[1]);
160     mysql_free_result(result);
161  
162     cout &lt;&lt; "                     I N V O I C E\n\n";
163  
164     print_customer(connection, custnum);
165     print_items(connection, invnum);
166  
167     double amount_due = get_amount_due(connection, invnum);
168  
169     cout &lt;&lt; "\nAMOUNT DUE: $" &lt;&lt; amount_due - payment &lt;&lt; "\n";
170  }
171  
172  int main()
173  {
174     MYSQL* connection = mysql_init(NULL);
175  
176     if(mysql_real_connect(connection, NULL, NULL, NULL,
177           "bigcpp", 0, NULL, 0) == NULL)
178     {
179        cout &lt;&lt; "Error: " &lt;&lt; mysql_error(connection) &lt;&lt; "\n";
180        return 1;
181     }
182  
183     cout &lt;&lt; "Enter invoice number: ";
184     string invnum;
185  
186     getline(cin, invnum);
187     print_invoice(connection, invnum);
188  
189     mysql_close(connection);
190     return 0;
191  }</pre>
</body>
</html>

⌨️ 快捷键说明

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