利用C++和mfc写一个基于c++MySQL的超市商品管理软件
时间: 2024-05-01 13:20:54 浏览: 125
基于C++ MFC框架的超市管理系统(源码+数据库).zip
5星 · 资源好评率100%
好的,以下是一个简单的基于C和MFC的超市商品管理软件,使用MySQL数据库:
1. 创建MySQL数据库
首先,您需要创建一个MySQL数据库以存储商品信息。您可以使用MySQL Workbench等工具创建数据库和表,或者使用以下SQL语句创建:
```
CREATE DATABASE supermarket;
USE supermarket;
CREATE TABLE products (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
price FLOAT NOT NULL,
quantity INT(11) NOT NULL,
PRIMARY KEY (id)
);
```
2. 配置MySQL连接
接下来,您需要在您的代码中配置MySQL连接。在MFC应用程序中,您可以在初始化函数中使用以下代码:
```c++
CDatabase db;
CString dbDriver = _T("MySQL ODBC 8.0 Unicode Driver");
CString dbSource = _T("your_database_name");
CString dbUser = _T("your_username");
CString dbPass = _T("your_password");
if (!db.OpenEx(dbDriver, dbSource, dbUser, dbPass))
{
AfxMessageBox(_T("Failed to connect to database"));
AfxAbort();
}
```
请将 `your_database_name`,`your_username` 和 `your_password` 替换为您的MySQL数据库的名称、用户名和密码。
3. 创建MFC应用程序界面
您可以使用MFC应用程序向导创建一个基本的界面,包括一个菜单栏和一个列表框来显示商品信息。您还可以添加一些对话框来允许用户添加、编辑和删除商品。
4. 实现商品信息的查询和显示
在您的代码中,您可以使用SQL查询从数据库中检索商品信息,并将其显示在列表框中。以下是一个示例:
```c++
CString sql = _T("SELECT id, name, price, quantity FROM products");
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, sql);
while (!rs.IsEOF())
{
CString id, name, price, quantity;
rs.GetFieldValue(_T("id"), id);
rs.GetFieldValue(_T("name"), name);
rs.GetFieldValue(_T("price"), price);
rs.GetFieldValue(_T("quantity"), quantity);
CString row;
row.Format(_T("%s\t%s\t%s\t%s"), id, name, price, quantity);
m_listbox.AddString(row);
rs.MoveNext();
}
rs.Close();
```
这将从 `products` 表中检索所有商品信息,并将其添加到列表框中。
5. 实现商品信息的添加、编辑和删除
您可以在对话框上添加一些文本框来允许用户输入商品信息,并使用SQL查询将其添加到数据库中。以下是一个示例:
```c++
CString name, price, quantity;
m_name_edit.GetWindowText(name);
m_price_edit.GetWindowText(price);
m_quantity_edit.GetWindowText(quantity);
CString sql;
sql.Format(_T("INSERT INTO products (name, price, quantity) VALUES ('%s', '%s', '%s')"),
name, price, quantity);
CDBVariant id;
db.ExecuteSQL(sql);
db.ExecuteSQL(_T("SELECT LAST_INSERT_ID()"), &id);
CString row;
row.Format(_T("%s\t%s\t%s\t%s"), (LPCTSTR)id.m_pszVal, name, price, quantity);
m_listbox.AddString(row);
```
这将从对话框中获取商品信息,将其添加到 `products` 表中,并将其添加到列表框中。
您还可以添加一些按钮来允许用户编辑和删除商品信息。以下是一个示例:
```c++
// Edit button
int index = m_listbox.GetCurSel();
if (index != LB_ERR)
{
CString row;
m_listbox.GetText(index, row);
CString id, name, price, quantity;
_stscanf_s(row, _T("%s\t%s\t%s\t%s"), id.GetBuffer(10), name.GetBuffer(50),
price.GetBuffer(10), quantity.GetBuffer(10));
id.ReleaseBuffer();
name.ReleaseBuffer();
price.ReleaseBuffer();
quantity.ReleaseBuffer();
CEditProductDialog dlg;
dlg.m_name_edit.SetWindowText(name);
dlg.m_price_edit.SetWindowText(price);
dlg.m_quantity_edit.SetWindowText(quantity);
if (dlg.DoModal() == IDOK)
{
dlg.m_name_edit.GetWindowText(name);
dlg.m_price_edit.GetWindowText(price);
dlg.m_quantity_edit.GetWindowText(quantity);
CString sql;
sql.Format(_T("UPDATE products SET name='%s', price='%s', quantity='%s' WHERE id='%s'"),
name, price, quantity, id);
db.ExecuteSQL(sql);
row.Format(_T("%s\t%s\t%s\t%s"), id, name, price, quantity);
m_listbox.DeleteString(index);
m_listbox.InsertString(index, row);
}
}
// Delete button
int index = m_listbox.GetCurSel();
if (index != LB_ERR)
{
CString row;
m_listbox.GetText(index, row);
CString id;
_stscanf_s(row, _T("%s"), id.GetBuffer(10));
id.ReleaseBuffer();
CString sql;
sql.Format(_T("DELETE FROM products WHERE id='%s'"), id);
db.ExecuteSQL(sql);
m_listbox.DeleteString(index);
}
```
这将允许用户选择要编辑或删除的商品,并在数据库中进行相应的更改或删除。
这只是一个简单的示例,您可以根据您的需求进行修改和扩展。
阅读全文