超市食品信息管理系统运用SQL 作为后台数据库,运用c++作为前台数据的c++代码

时间: 2023-12-08 14:03:24 浏览: 26
以下是一个简单的超市食品信息管理系统的 C++ 代码,使用 SQL 作为后台数据库: ```c++ #include <iostream> #include <windows.h> #include <sqlext.h> #include <sqltypes.h> #include <sql.h> using namespace std; void showMenu(); void addProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle); void searchProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle); void updateProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle); void deleteProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle); void showAllProducts(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle); int main() { // Initialize variables SQLHANDLE sqlEnvHandle; SQLHANDLE sqlConnHandle; SQLHANDLE sqlStmtHandle; SQLRETURN retcode; // Allocate an environment handle retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlEnvHandle); // Set the ODBC version environment attribute retcode = SQLSetEnvAttr(sqlEnvHandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); // Allocate a connection handle retcode = SQLAllocHandle(SQL_HANDLE_DBC, sqlEnvHandle, &sqlConnHandle); // Connect to the database using DSN retcode = SQLConnect(sqlConnHandle, (SQLCHAR*)"DSN", SQL_NTS, NULL, 0, NULL, 0); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { cout << "Connected to database." << endl; // Allocate a statement handle retcode = SQLAllocHandle(SQL_HANDLE_STMT, sqlConnHandle, &sqlStmtHandle); // Show the main menu showMenu(); // Free the statement handle SQLFreeHandle(SQL_HANDLE_STMT, sqlStmtHandle); // Disconnect from the database SQLDisconnect(sqlConnHandle); } else { cout << "Failed to connect to database." << endl; } // Free the connection handle SQLFreeHandle(SQL_HANDLE_DBC, sqlConnHandle); // Free the environment handle SQLFreeHandle(SQL_HANDLE_ENV, sqlEnvHandle); return 0; } void showMenu() { SQLHANDLE sqlConnHandle; SQLHANDLE sqlStmtHandle; SQLRETURN retcode; // Allocate an environment handle retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlConnHandle); // Set the ODBC version environment attribute retcode = SQLSetEnvAttr(sqlConnHandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); // Allocate a connection handle retcode = SQLAllocHandle(SQL_HANDLE_DBC, sqlConnHandle, &sqlConnHandle); // Connect to the database using DSN retcode = SQLConnect(sqlConnHandle, (SQLCHAR*)"DSN", SQL_NTS, NULL, 0, NULL, 0); int choice; do { cout << endl; cout << "1. Add a product" << endl; cout << "2. Search for a product" << endl; cout << "3. Update a product" << endl; cout << "4. Delete a product" << endl; cout << "5. Show all products" << endl; cout << "6. Exit" << endl; cout << endl; cout << "Enter your choice: "; cin >> choice; switch (choice) { case 1: addProduct(sqlConnHandle, sqlStmtHandle); break; case 2: searchProduct(sqlConnHandle, sqlStmtHandle); break; case 3: updateProduct(sqlConnHandle, sqlStmtHandle); break; case 4: deleteProduct(sqlConnHandle, sqlStmtHandle); break; case 5: showAllProducts(sqlConnHandle, sqlStmtHandle); break; case 6: cout << "Exiting..." << endl; break; default: cout << "Invalid choice. Please try again." << endl; break; } } while (choice != 6); // Disconnect from the database SQLDisconnect(sqlConnHandle); // Free the connection handle SQLFreeHandle(SQL_HANDLE_DBC, sqlConnHandle); // Free the environment handle SQLFreeHandle(SQL_HANDLE_ENV, sqlConnHandle); } void addProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle) { SQLRETURN retcode; char name[50]; float price; int quantity; cout << endl; cout << "Enter product name: "; cin.ignore(); cin.getline(name, 50); cout << "Enter product price: "; cin >> price; cout << "Enter product quantity: "; cin >> quantity; // Prepare the SQL statement retcode = SQLPrepare(sqlStmtHandle, (SQLCHAR*)"INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)", SQL_NTS); // Bind parameters SQLBindParameter(sqlStmtHandle, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, name, 0, NULL); SQLBindParameter(sqlStmtHandle, 2, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &price, 0, NULL); SQLBindParameter(sqlStmtHandle, 3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &quantity, 0, NULL); // Execute the SQL statement retcode = SQLExecute(sqlStmtHandle); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { cout << "Product added successfully." << endl; } else { cout << "Failed to add product." << endl; } } void searchProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle) { SQLRETURN retcode; char name[50]; cout << endl; cout << "Enter product name: "; cin.ignore(); cin.getline(name, 50); // Prepare the SQL statement retcode = SQLPrepare(sqlStmtHandle, (SQLCHAR*)"SELECT * FROM products WHERE name = ?", SQL_NTS); // Bind parameter SQLBindParameter(sqlStmtHandle, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, name, 0, NULL); // Execute the SQL statement retcode = SQLExecute(sqlStmtHandle); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { // Fetch the data SQLCHAR name[50]; float price; int quantity; SQLBindCol(sqlStmtHandle, 1, SQL_C_CHAR, name, 50, NULL); SQLBindCol(sqlStmtHandle, 2, SQL_C_FLOAT, &price, 0, NULL); SQLBindCol(sqlStmtHandle, 3, SQL_C_LONG, &quantity, 0, NULL); while (SQLFetch(sqlStmtHandle) == SQL_SUCCESS) { cout << "Product name: " << name << endl; cout << "Product price: " << price << endl; cout << "Product quantity: " << quantity << endl; cout << endl; } } else { cout << "Failed to search for product." << endl; } } void updateProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle) { SQLRETURN retcode; char name[50]; float price; int quantity; cout << endl; cout << "Enter product name: "; cin.ignore(); cin.getline(name, 50); cout << "Enter new product price: "; cin >> price; cout << "Enter new product quantity: "; cin >> quantity; // Prepare the SQL statement retcode = SQLPrepare(sqlStmtHandle, (SQLCHAR*)"UPDATE products SET price = ?, quantity = ? WHERE name = ?", SQL_NTS); // Bind parameters SQLBindParameter(sqlStmtHandle, 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &price, 0, NULL); SQLBindParameter(sqlStmtHandle, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &quantity, 0, NULL); SQLBindParameter(sqlStmtHandle, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, name, 0, NULL); // Execute the SQL statement retcode = SQLExecute(sqlStmtHandle); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { cout << "Product updated successfully." << endl; } else { cout << "Failed to update product." << endl; } } void deleteProduct(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle) { SQLRETURN retcode; char name[50]; cout << endl; cout << "Enter product name: "; cin.ignore(); cin.getline(name, 50); // Prepare the SQL statement retcode = SQLPrepare(sqlStmtHandle, (SQLCHAR*)"DELETE FROM products WHERE name = ?", SQL_NTS); // Bind parameter SQLBindParameter(sqlStmtHandle, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, name, 0, NULL); // Execute the SQL statement retcode = SQLExecute(sqlStmtHandle); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { cout << "Product deleted successfully." << endl; } else { cout << "Failed to delete product." << endl; } } void showAllProducts(SQLHANDLE& sqlConnHandle, SQLHANDLE& sqlStmtHandle) { SQLRETURN retcode; // Prepare the SQL statement retcode = SQLPrepare(sqlStmtHandle, (SQLCHAR*)"SELECT * FROM products", SQL_NTS); // Execute the SQL statement retcode = SQLExecute(sqlStmtHandle); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { // Fetch the data SQLCHAR name[50]; float price; int quantity; SQLBindCol(sqlStmtHandle, 1, SQL_C_CHAR, name, 50, NULL); SQLBindCol(sqlStmtHandle, 2, SQL_C_FLOAT, &price, 0, NULL); SQLBindCol(sqlStmtHandle, 3, SQL_C_LONG, &quantity, 0, NULL); while (SQLFetch(sqlStmtHandle) == SQL_SUCCESS) { cout << "Product name: " << name << endl; cout << "Product price: " << price << endl; cout << "Product quantity: " << quantity << endl; cout << endl; } } else { cout << "Failed to show all products." << endl; } } ``` 请注意,在使用此代码之前,需要先创建一个名为“DSN”的 ODBC 数据源,并在其中创建一个名为“products”的数据表,该数据表应包含三个列:name、price 和 quantity。

相关推荐

最新推荐

recommend-type

基于Java+sql教师信息管理系统课设报告

基于Java+sql教师信息管理系统课设报告,教师信息管理系统主要用于实现用户名的登陆,退出,教师信息的添加,查找, 删除,修改等功能。本系统的开发需要实现以下功能模块:对系统的图形界面化进行 操作,对sql...
recommend-type

SQL_数据库图书管理系统.docx

SQL_数据库图书管理系统,WORD文档较为规范,流程清楚,适合借鉴,0积分即可下载。
recommend-type

数据库系统原理- 学生信息管理系统-sql数据库实验+报告

学生信息管理系统,可用于学校等机构的学生信息管理,查询,更新与维护,使用方便,易用性强。该系统实现的大致功能;用户登陆。提供了学生学籍信息的查询,添加,修改,删除;学生成绩的录入,修改,删除,查询班级...
recommend-type

SQL提取数据库表名及字段名等信息代码示例

本文向大家介绍了使用SQL语句提取数据库所有表的表名、字段名的实例代码,在SQLserver 中进行了测试,具体内容如下: --查询所有用户表所有字段的特征 SELECT D.Name as TableName, A.colorder AS ColOrder, A.name...
recommend-type

论坛管理信息系统数据库系统设计

用来管理作者信息,包括作者昵称、贴子编号、性别、年龄、职业、爱好等; 1.2贴子信息模块 用来管理贴子信息,包括贴子编号、发贴日期、时间、等级等; 1.3回复日期模块 用来管理回复信息,包括作者昵称、回复时间、...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。