【附源码 C语言与SQL server联合编写的大学期末设计:仓储管理系统】


在此提醒:本系统为作者的大学期末课程设计,仅用于学术参考,无法商用,违者后果自负


前言

该仓储管理系统运用了C语言和SQL server2019数据库联合编写,需要同步建立对应的SQL server数据库来存放管理数据,数据库的连接方式采用ODBC数据源连接,该系统分为4大模块,拥有简易的储位查询、物料上下架处理、和报错日志管理,实现最基础的仓储管理


一、C语言连接SQL server2019

1、ODBC连接

ODBC简介:开放数据库连接(Open Database Connectivity,ODBC),主要的功能是提供了一组用于数据库访问的编程接口,其主要的特点是,如果应用程序使用ODBC做数据源,那么这个应用程序与所使用的数据库或数据库引擎是无关的,为应用程序的跨平台和可移植奠定了基础。

创建ODBC数据源:控制面板——管理工具——ODBC数据源(32位)

请添加图片描述

可以看到,这里存在三种类型的DSN(数据源名),其中:

用户DSN:只允创建该DSN的用户使用该数据源;

系统DSN:所有登陆该服务器的用户都能使用该数据源;

文件DSN:配置信息保存在文件中,所有登陆的用户均可使用;

在本实验中,采用系统DSN:

点击添加,然后选择SQL Server

请添加图片描述

然后输入数据源的名称和所在服务器,我们的数据库是安装在本机上的。

请添加图片描述

选择以sql server用户的方式进行验证,下图所示:

请添加图片描述

这里可以设置默认连接的数据库,保持不变,使用master作为默认的数据库。

请添加图片描述

然后点击下一步,然后完成。

请添加图片描述

2、进行数据库的代码处理

1、头文件书写

代码如下(示例):

#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include<math.h>
#include<conio.h>
#include <iostream>
#include <locale> 

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#define sno_length 11
#define sname_length 10
#define sdepart_length 30
#define ssex_length 5

2、字符转为宽字符

#pragma region 字符转为宽字符

wchar_t* trstring2wchar(const  char* str)
{

	int mystringsize = (int)(strlen(str) + 1);
	WCHAR* wchart = new wchar_t[mystringsize];
	MultiByteToWideChar(CP_ACP, 0, str, -1, wchart, mystringsize);
	return wchart;

}

#pragma endregion

3、宽字符转换为字符串

#pragma region 宽字符转换为字符串

void wchar2strstring(string& szDst, WCHAR* wchart)
{
	wchar_t* wtext = wchart;
	DWORD dwNmu = WideCharToMultiByte(CP_OEMCP, NULL, wtext, -1, NULL, 0, NULL, FALSE);
	char* psTest;
	psTest = new char[dwNmu];
	WideCharToMultiByte(CP_OEMCP, NULL, wtext, -1, psTest, dwNmu, NULL, FALSE);
	szDst = psTest;
	delete[]psTest;
}

#pragma endregion

4、错误处理

#pragma region 错误处理

void handleResult(SQLHANDLE hHandle, SQLSMALLINT hType, RETCODE  RetCode)
{
	SQLSMALLINT iRec = 0;
	SQLINTEGER iError;
	WCHAR wszMessage[1000];
	WCHAR wszState[SQL_SQLSTATE_SIZE + 1];
	//处理无效
	if (RetCode == SQL_INVALID_HANDLE)
	{
		fwprintf(stderr, L"Invalid handle!\n");
		return;
	}
}

#pragma endregion

5、输出错误

#pragma region 输出错误

void error(SQLRETURN err) 
{
	printf("相关信息输出: ");
	switch (err) {
	case	SQL_SUCCESS:puts("****sql server数据库成功运行*****\n"); break;
	case	SQL_SUCCESS_WITH_INFO:puts("SQL_SUCCESS_WITH_INFO"); break;
	case	SQL_ERROR:puts("SQL_ERROR"); break;
	case	SQL_INVALID_HANDLE:puts("SQL_INVALID_HANDLE"); break;
	case	SQL_NO_DATA_FOUND:puts("SQL_NO_DATA_FOUND"); break;
	case	SQL_NEED_DATA:puts("SQL_NEED_DATA"); break;
	default:puts("err");
	}
}

#pragma endregion

3、进行数据库的创建

1、建立一个名为TEXT的数据库

在这里插入图片描述

2、创建4张表来记录数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


二、C语言代码部分书写

1.主函数的写入

代码如下(示例):

#pragma region 主函数

int main()
{
	Start();
	system("cls");
	system("color F");
	Passwords();
	system("cls");
	Sleep(1500);
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);//申请环境句柄
	retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
	retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//申请数据库连接句柄
	retcode = SQLConnect(hdbc, (SQLCHAR*)"mytest", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"123456", SQL_NTS);
	if (!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
	{
		printf("连接数据库失败!   程序中止运行!\n");
		return -1;
	}
	else
	{
		printf("集团数据库连接成功! 欢迎您的使用!\n");
	}

	system("cls");
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄
	SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄

	while (1)
	{
		int choice;
		menu();
		printf("请选择功能菜单(0-4): \n");	
		scanf_s("%d", &choice);
		switch (choice)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			StorageTableSelect();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Material();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Error();
			break;
		}
		case 4:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Help();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                          您即将退出存储管理系统,感谢您的使用!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			exit(0);
			break;
		}
		}
	}
	return 0;
}

#pragma endregion

主函数进行了多层次子函数嵌套


2.欢迎界面

代码如下(示例):

#pragma region 欢迎界面

int Start()
{
	system(" color 0c");
	printf("                 欢迎使用集团仓储管理系统!!!\n");

	float x, y, a;//定义变量x,y,a 

	for (y = 1.5f; y > -1; y -= 0.1f)
	{
		for (x = -1.5f; x < 1.5f; x += .05f) {
			a = x * x + y * y - 1;
			putchar(a * a * a - x * x * y * y * y < 0.0f ? 'x' : ' ');
		}

		Sleep(150);
		putchar('\n');
	}

	return 0;
}

#pragma endregion

3.密码设计界面

代码如下(示例):

#pragma region 密码设计界面

int Passwords()
{
	char pwd[10] = { 0 };
	int i = 0;
	printf("请输入您的密钥:\n");
	for (i = 0; i < 3; i++)
	{
		scanf_s("%s", pwd,10);
		if (strcmp(pwd, "123456") == 0)
		{
			printf("密钥输入正确,登录成功!\n");
			break;
		}
		else
		{
			printf("密钥输入错误,请重新输入:\n");
		}
	}
	if (3 == i)
	{
		printf("登录失败,程序退出。\n");
		exit(0);
	}
	system("pause");
	return 0;
}

#pragma endregion

4.储位查询界面

代码如下(示例):

#pragma region 储位查询界面

void StorageTableSelect()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char LocNo[101] = { 0 };
	printf("请输入您需要查询的LocNo:\n");
	scanf_s("%s", LocNo, 101);
	char str2[1001] = "select[PPID],[MaterialNo],[ProductionBatch],[Number],[DataOfManufacture],[Supplier],[CreateUser],[CreateTime],[Lncon]from [Bas_Loc]inner join [dbo].[BindBatchSchedule] on [Bas_Loc].ID = [dbo].[BindBatchSchedule].ID where [Lncon] = '";
	char str3[50] = "'";
	strcat(LocNo, str3);
	strcat(str2, LocNo);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50], str5[50], str6[50], str7[50], str8[50], str9[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4, sqlLen5, sqlLen6, sqlLen7, sqlLen8, sqlLen9;
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			SQLGetData(hstmt, 5, SQL_C_CHAR, str5, 50, &sqlLen5);
			SQLGetData(hstmt, 6, SQL_C_CHAR, str6, 50, &sqlLen6);
			SQLGetData(hstmt, 7, SQL_C_CHAR, str7, 50, &sqlLen7);
			SQLGetData(hstmt, 8, SQL_C_CHAR, str8, 50, &sqlLen8);
			SQLGetData(hstmt, 9, SQL_C_CHAR, str9, 50, &sqlLen9);
			system("cls");
			printf("-----------------【物料查询】----------------------\n");
			printf("PPID             物料编号      生产批次        数量     生产日期      供应商   收料人   收料时间      储位位置\n");
			printf("\n%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4, str5, str6, str7, str8, str9);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

5.物料查询界面

代码如下(示例):

#pragma region 物料查询界面

void Base_Select()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入您需要查询的PPID:\n");
	scanf_s("%s", PPID, 101);
	char str2[101] = "select * from [BindBatchSchedule] where [PPID] = '";
	char str3[50] = "'";
	strcat(PPID, str3);
	strcat(str2, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50],str5[50],str6[50], str7[50], str8[50], str9[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4, sqlLen5, sqlLen6, sqlLen7, sqlLen8, sqlLen9;
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			SQLGetData(hstmt, 5, SQL_C_CHAR, str5, 50, &sqlLen5);
			SQLGetData(hstmt, 6, SQL_C_CHAR, str6, 50, &sqlLen6);
			SQLGetData(hstmt, 7, SQL_C_CHAR, str7, 50, &sqlLen7);
			SQLGetData(hstmt, 8, SQL_C_CHAR, str8, 50, &sqlLen8);
			SQLGetData(hstmt, 9, SQL_C_CHAR, str9, 50, &sqlLen9);
			system("cls");
			printf("-----------------【物料查询】----------------------\n");
			printf("        PPID             物料编号      生产批次        数量     生产日期      供应商   收料人   收料时间\n");
			printf("\n%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4,str5,str6,str7,str8,str9);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

6.物料上架界面

代码如下(示例):

#pragma region 物料上架界面

void MaterialOnShelf()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入PPID:\n");
	scanf_s("%s", PPID, 101);
	char LocNo[101] = { 0 };
	printf("请输入对应储位号:\n");
	scanf_s("%s", LocNo, 101);
	char CreateUser[101] = { 0 };
	printf("请输入上架人:\n");
	scanf_s("%s", CreateUser, 101);
	char CreateTime[101] = { 0 };
	printf("请输入上架时间:\n");
	scanf_s("%s", CreateTime, 101);
	char str1[101] = "insert into [TEXT].[dbo].[Material_in]values ('";
	char str3[50] = "','";
	char str5[50] = "','";
	char str7[50] = "','";
	char str9[50] = "','";
	char str10[50] = "上架";
	char str11[50] = "')";
	strcat(str10, str11);
	strcat(str9, str10);
	strcat(CreateTime, str9);
	strcat(str7, CreateTime);
	strcat(CreateUser, str7);
	strcat(str5, CreateUser);
	strcat(LocNo, str5);
	strcat(str3, LocNo);
	strcat(PPID, str3);
	strcat(str1, PPID);
	
	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("物料上架成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("物料上架失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

7.物料下架界面

代码如下(示例):


#pragma region 物料下架界面

void MaterialRemoval()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入PPID:\n");
	scanf_s("%s", PPID, 101);
	char LocNo[101] = { 0 };
	printf("请输入对应储位号:\n");
	scanf_s("%s", LocNo, 101);
	char CreateUser[101] = { 0 };
	printf("请输入下架人:\n");
	scanf_s("%s", CreateUser, 101);
	char CreateTime[101] = { 0 };
	printf("请输入下架时间:\n");
	scanf_s("%s", CreateTime, 101);
	char str1[101] = "insert into [TEXT].[dbo].[Material_in]values ('";
	char str3[50] = "','";
	char str5[50] = "','";
	char str7[50] = "','";
	char str9[50] = "','";
	char str10[50] = "下架";
	char str11[50] = "')";
	strcat(str10, str11);
	strcat(str9, str10);
	strcat(CreateTime, str9);
	strcat(str7, CreateTime);
	strcat(CreateUser, str7);
	strcat(str5, CreateUser);
	strcat(LocNo, str5);
	strcat(str3, LocNo);
	strcat(PPID, str3);
	strcat(str1, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("物料下架成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("物料下架失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

8.物料收料界面

代码如下(示例):

#pragma region 物料收料界面

void Base_operaMtl()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入PPID:\n");
	scanf_s("%s", PPID, 101);
	char MaterialNo[101] = { 0 };
	printf("请输入MaterialNo:\n");
	scanf_s("%s", MaterialNo, 101);
	char ProductionBatch[101] = { 0 };
	printf("请输入ProductionBatch:\n");
	scanf_s("%s", ProductionBatch, 101);
	char Number[101] = { 0 };
	printf("请输入Number:\n");
	scanf_s("%s", Number, 101);
	char DataOfManufacture[101] = { 0 };
	printf("请输入DataOfManufacture:\n");
	scanf_s("%s", DataOfManufacture, 101);
	char Supplier[101] = { 0 };
	printf("请输入Supplier:\n");
	scanf_s("%s", Supplier, 101);
	char CreateUser[101] = { 0 };
	printf("请输入收料人:\n");
	scanf_s("%s", CreateUser, 101);
	char CreateTime[101] = { 0 };
	printf("请输入收料时间:\n");
	scanf_s("%s", CreateTime, 101);
	char str1[500] = "insert into [BindBatchSchedule] values('";
	char str3[500] = "','";
	char str5[500] = "','";
	char str7[500] = "','";
	char str9[500] = "','";
	char str11[500] = "','";
	char str13[500] = "','";
	char str15[500] = "','";
	char str17[500] = "')";
	strcat(CreateTime, str17);
	strcat(str15, CreateTime);
	strcat(CreateUser, str15);
	strcat(str13, CreateUser);
	strcat(Supplier, str13);
	strcat(str11, Supplier);
	strcat(DataOfManufacture, str11);
	strcat(str9, DataOfManufacture);
	strcat(Number, str9);
	strcat(str7, Number);
	strcat(ProductionBatch, str7);
	strcat(str5, ProductionBatch);
	strcat(MaterialNo, str5);
	strcat(str3, MaterialNo);
	strcat(PPID, str3);
	strcat(str1, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("收料成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("收料失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

9.收料主界面

代码如下(示例):

#pragma region 收料主界面

void MaterialFeeding()
{
	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【物料处理】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.物料投料                                    ||\n");
		printf("\t\t||*                                 2.物料查询                                    ||\n");
		printf("\t\t||*                                 0.返回上一级菜单                              ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-2): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Base_operaMtl();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Base_Select();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回上一界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

10.物料上下架查询

代码如下(示例):

#pragma region 物料上下架查询

void QueryOfMaterial()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入您需要查询的PPID:\n");
	scanf_s("%s", PPID, 101);
	char str2[101] = "select * from [TEXT].[dbo].[Material_in] where [PPID] = '";
	char str3[50] = "'";
	strcat(PPID, str3);
	strcat(str2, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50], str5[50], str6[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4, sqlLen5, sqlLen6;
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			SQLGetData(hstmt, 5, SQL_C_CHAR, str5, 50, &sqlLen5);
			SQLGetData(hstmt, 6, SQL_C_CHAR, str6, 50, &sqlLen6);
			system("cls");
			printf("-----------------【物料查询】----------------------\n");
			printf("        PPID          储位号   操作人   操作时间      目前状态\n");
			printf("\n%s\t%s\t%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4, str5, str6);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

11.物料处理主界面

代码如下(示例):

#pragma region 物料处理主界面

void Material()
{
	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【物料处理】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.物料收料                                    ||\n");
		printf("\t\t||*                                 2.物料上架                                    ||\n");
		printf("\t\t||*                                 3.物料下架                                    ||\n");
		printf("\t\t||*                                 4.物料上下架查询                              ||\n");
		printf("\t\t||*                                 0.返回主菜单                                  ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-4): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			MaterialFeeding();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			MaterialOnShelf();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			MaterialRemoval();
			break;
		}
		case 4:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			QueryOfMaterial();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回主界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

12.程序主菜单

代码如下(示例):

#pragma region 程序主菜单

void menu(void)
{
	printf("\t\t||--------------------------------------------------------------------------------||\n");
	printf("\t\t||               ****************【仓储管理系统】***************                  ||\n");
	printf("\t\t||--------------------------------------------------------------------------------||\n");
	printf("\t\t||*                                 1.储位查询                                    ||\n");
	printf("\t\t||*                                 2.物料处理                                    ||\n");
	printf("\t\t||*                                 3.报错日志                                    ||\n");
	printf("\t\t||*                                 4.程序帮助                                    ||\n");
	printf("\t\t||*                                 0.退出程序                                    ||\n");
	printf("\t\t||--------------------------------------------------------------------------------||\n");
}

#pragma endregion

13.报错日志删除

代码如下(示例):

#pragma region 报错日志删除

void ErrorDelete()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char ErrorId[10] = { 0 };
	printf("请输入您需要删除的ErrorId(1-N):\n");
    scanf_s("%s", ErrorId, 10);
	char str2[101] = "delete from [ErrorLog] where [ErrorID] = '";
	char str3[50] = "'";
	strcat(ErrorId, str3);
	strcat(str2, ErrorId);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("删除成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("删除失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

14.报错日志插入

代码如下(示例):

#pragma region 报错日志插入

void ErrorInsert()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char ErrorBackThings[101] = { 0 };
	char ErrorBackName[101] = { 0 };
	printf("请输入报错人姓名:\n");
	scanf_s("%s", ErrorBackName, 101);
	printf("请输入报错事件:\n");
	scanf_s("%s", ErrorBackThings, 101);
	char str1[101] = "insert into [ErrorLog] values (GETDATE(),'";
	char str3[50] = "','";
	char str5[50] = "')";
	strcat(ErrorBackThings, str5);
	strcat(str3, ErrorBackThings);
	strcat(ErrorBackName, str3);
	strcat(str1, ErrorBackName);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("插入成功\n");
	}
	else 
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("插入失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

15.报错日志查询

代码如下(示例):

#pragma region 报错日志查询

void ErrorSelect()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

	SQLCHAR sql1[] = "use TEXT";//使用名为"TEXT"数据库
	SQLCHAR sql2[] = "select * from [dbo].[ErrorLog]";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);//SQLExecDirect,此函数用于执行SQL语句,执行sql1语句
	retcode = SQLExecDirect(hstmt, sql2, SQL_NTS);

	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4;
		//	SQLLEN len_str1, len_str2, len_str3;
        /*SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录;*/
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			/*SQLGetData函数的功能是提取结果集中当前记录的某个字段值*/
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			//	retcode = SQLBindCol(hstmt, 1, SQL_C_CHAR, sCustID, 100, &cbCustID);
			printf("\n%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

16.报错日志主界面

代码如下(示例):

#pragma region 报错日志主界面

void Error()
{
	
	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【报错日志】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.查询日志                                    ||\n");
		printf("\t\t||*                                 2.增加日志                                    ||\n");
		printf("\t\t||*                                 3.删除日志                                    ||\n");
		printf("\t\t||*                                 0.返回主菜单                                  ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-3): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在查询日志中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			printf("-----------------【查询日志】----------------------\n");
			printf("序号              报错时间      报错人  报错事件\n");
			ErrorSelect();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			ErrorInsert();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			ErrorDelete();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回主界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

17.程序运行帮助

代码如下(示例):

#pragma region 程序运行帮助

void Helpprogamme()
{
	printf("重启SQL server全部服务\n");
	printf("重新确认PPID的输入\n");
	printf("重新确认操作界面数字的输入\n");
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

18. 代码调试帮助

代码如下(示例):

#pragma region 代码调试帮助

void Helpcode()
{
	printf("常见的中文编码 GB2312(国标简体中文字符集)和 GBK(国标扩展)使用 2 个字节编码来表示一个汉字,不常用的 GB18030 使用 4 个字节编码来表示一个汉字,更通用的 UTF-8 编码使用 3 个字节编码来表示一个汉字。\n");
	printf("服务器在正常运行的情况下突然断电,导致数据库文件严重损坏。附加或还原数据库无果,在附加数据库过程中出现823字样的错误\n");
	printf("停止SQL Server服务,将损坏的数据库文件 data_db.mdf 替换掉刚刚新建好的数据库文件,并删除该数据库的日志文件 data_db.mdf _log.ldf\n");
	printf("ret = SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄\n");
	printf("ret = SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄\n");
	printf("/*SQLGetData函数的功能是提取结果集中当前记录的某个字段值*/\n");
	printf("/*SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录;*/\n");
	printf("temp中name数组的长度,在scanf_s中需要添加,在scanf中不需要\n");
	printf("无论是sql语句连接,sqlprepare还是sqlexecute顺序基本一致,同样采用了动态sql的方式。\n");
	printf("查询功能分为精确查询和模糊查询,精确查询可以采用动态sql的方式,但是由于动态sql的?传进去后将被直接识别为一个元素,因此模糊查询只能用字符串连接的方式来完成。\n");
	printf("sqlbindcol函数,是用于查询完后绑定c语言中定义的变量当中,嵌入式sql也是这样的原理,只不过操作更为的直接一些。同样的,绑定的顺序也需要与数据库中你所查询的列相匹配。\n");
	printf("在错误代码地方加入断点,发现变量已经为空\n");
	printf("查看发现是已经将StdioFile 变量已经关闭,继续写入导致报错\n");
	printf("将StdioFile 变量close 放置在完成写入动作之后,程序运行正常。\n");
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

19.查询制作人员

代码如下(示例):

#pragma region 查询制作人员

void Number()
{
    printf("制作地址:广州航海学院\n");
	printf("总制作人:浩『』皓\n");
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

20.帮助主界面

代码如下(示例):

#pragma region 帮助主界面

void Help()
{

	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【帮助界面】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.程序运行帮助                                ||\n");
		printf("\t\t||*                                 2.代码调试帮助                                ||\n");
		printf("\t\t||*                                 3.查询制作人员                                ||\n");
		printf("\t\t||*                                 0.返回主菜单                                  ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-3): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在查询日志中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Helpprogamme();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Helpcode();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Number();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回主界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

三、附上源码

#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include<math.h>
#include<conio.h>
#include <iostream>
#include <locale> 

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#define sno_length 11
#define sname_length 10
#define sdepart_length 30
#define ssex_length 5

using namespace std;

SQLHENV henv;//环境句柄
SQLHDBC hdbc;//连接句柄
SQLHSTMT hstmt;//语句句柄
SQLRETURN retcode;//返回值

#pragma region 字符转为宽字符

wchar_t* trstring2wchar(const  char* str)
{

	int mystringsize = (int)(strlen(str) + 1);
	WCHAR* wchart = new wchar_t[mystringsize];
	MultiByteToWideChar(CP_ACP, 0, str, -1, wchart, mystringsize);
	return wchart;

}

#pragma endregion

#pragma region 宽字符转换为字符串

void wchar2strstring(string& szDst, WCHAR* wchart)
{
	wchar_t* wtext = wchart;
	DWORD dwNmu = WideCharToMultiByte(CP_OEMCP, NULL, wtext, -1, NULL, 0, NULL, FALSE);
	char* psTest;
	psTest = new char[dwNmu];
	WideCharToMultiByte(CP_OEMCP, NULL, wtext, -1, psTest, dwNmu, NULL, FALSE);
	szDst = psTest;
	delete[]psTest;
}

#pragma endregion

#pragma region 错误处理

void handleResult(SQLHANDLE hHandle, SQLSMALLINT hType, RETCODE  RetCode)
{
	SQLSMALLINT iRec = 0;
	SQLINTEGER iError;
	WCHAR wszMessage[1000];
	WCHAR wszState[SQL_SQLSTATE_SIZE + 1];
	//处理无效
	if (RetCode == SQL_INVALID_HANDLE)
	{
		fwprintf(stderr, L"Invalid handle!\n");
		return;
	}
}

#pragma endregion

#pragma region 输出错误

void error(SQLRETURN err) 
{
	printf("相关信息输出: ");
	switch (err) {
	case	SQL_SUCCESS:puts("****sql server数据库成功运行*****\n"); break;
	case	SQL_SUCCESS_WITH_INFO:puts("SQL_SUCCESS_WITH_INFO"); break;
	case	SQL_ERROR:puts("SQL_ERROR"); break;
	case	SQL_INVALID_HANDLE:puts("SQL_INVALID_HANDLE"); break;
	case	SQL_NO_DATA_FOUND:puts("SQL_NO_DATA_FOUND"); break;
	case	SQL_NEED_DATA:puts("SQL_NEED_DATA"); break;
	default:puts("err");
	}
}

#pragma endregion

#pragma region 爱心欢迎界面

int Start()
{
	system(" color 0c");
	printf("                 欢迎使用集团仓储管理系统!!!\n");

	float x, y, a;//定义变量x,y,a 

	for (y = 1.5f; y > -1; y -= 0.1f)
	{
		for (x = -1.5f; x < 1.5f; x += .05f) {
			a = x * x + y * y - 1;
			putchar(a * a * a - x * x * y * y * y < 0.0f ? 'x' : ' ');
		}

		Sleep(150);
		putchar('\n');
	}

	return 0;
}

#pragma endregion

#pragma region 密码设计界面

int Passwords()
{
	char pwd[10] = { 0 };
	int i = 0;
	printf("请输入您的密钥:\n");
	for (i = 0; i < 3; i++)
	{
		scanf_s("%s", pwd,10);
		if (strcmp(pwd, "123456") == 0)
		{
			printf("密钥输入正确,登录成功!\n");
			break;
		}
		else
		{
			printf("密钥输入错误,请重新输入:\n");
		}
	}
	if (3 == i)
	{
		printf("登录失败,程序退出。\n");
		exit(0);
	}
	system("pause");
	return 0;
}

#pragma endregion

#pragma region 储位查询界面

void StorageTableSelect()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char LocNo[101] = { 0 };
	printf("请输入您需要查询的LocNo:\n");
	scanf_s("%s", LocNo, 101);
	char str2[1001] = "select[PPID],[MaterialNo],[ProductionBatch],[Number],[DataOfManufacture],[Supplier],[CreateUser],[CreateTime],[Lncon]from [Bas_Loc]inner join [dbo].[BindBatchSchedule] on [Bas_Loc].ID = [dbo].[BindBatchSchedule].ID where [Lncon] = '";
	char str3[50] = "'";
	strcat(LocNo, str3);
	strcat(str2, LocNo);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50], str5[50], str6[50], str7[50], str8[50], str9[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4, sqlLen5, sqlLen6, sqlLen7, sqlLen8, sqlLen9;
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			SQLGetData(hstmt, 5, SQL_C_CHAR, str5, 50, &sqlLen5);
			SQLGetData(hstmt, 6, SQL_C_CHAR, str6, 50, &sqlLen6);
			SQLGetData(hstmt, 7, SQL_C_CHAR, str7, 50, &sqlLen7);
			SQLGetData(hstmt, 8, SQL_C_CHAR, str8, 50, &sqlLen8);
			SQLGetData(hstmt, 9, SQL_C_CHAR, str9, 50, &sqlLen9);
			system("cls");
			printf("-----------------【物料查询】----------------------\n");
			printf("PPID             物料编号      生产批次        数量     生产日期      供应商   收料人   收料时间      储位位置\n");
			printf("\n%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4, str5, str6, str7, str8, str9);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 物料查询界面

void Base_Select()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入您需要查询的PPID:\n");
	scanf_s("%s", PPID, 101);
	char str2[101] = "select * from [BindBatchSchedule] where [PPID] = '";
	char str3[50] = "'";
	strcat(PPID, str3);
	strcat(str2, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50],str5[50],str6[50], str7[50], str8[50], str9[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4, sqlLen5, sqlLen6, sqlLen7, sqlLen8, sqlLen9;
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			SQLGetData(hstmt, 5, SQL_C_CHAR, str5, 50, &sqlLen5);
			SQLGetData(hstmt, 6, SQL_C_CHAR, str6, 50, &sqlLen6);
			SQLGetData(hstmt, 7, SQL_C_CHAR, str7, 50, &sqlLen7);
			SQLGetData(hstmt, 8, SQL_C_CHAR, str8, 50, &sqlLen8);
			SQLGetData(hstmt, 9, SQL_C_CHAR, str9, 50, &sqlLen9);
			system("cls");
			printf("-----------------【物料查询】----------------------\n");
			printf("        PPID             物料编号      生产批次        数量     生产日期      供应商   收料人   收料时间\n");
			printf("\n%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4,str5,str6,str7,str8,str9);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 物料上架界面

void MaterialOnShelf()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入PPID:\n");
	scanf_s("%s", PPID, 101);
	char LocNo[101] = { 0 };
	printf("请输入对应储位号:\n");
	scanf_s("%s", LocNo, 101);
	char CreateUser[101] = { 0 };
	printf("请输入上架人:\n");
	scanf_s("%s", CreateUser, 101);
	char CreateTime[101] = { 0 };
	printf("请输入上架时间:\n");
	scanf_s("%s", CreateTime, 101);
	char str1[101] = "insert into [TEXT].[dbo].[Material_in]values ('";
	char str3[50] = "','";
	char str5[50] = "','";
	char str7[50] = "','";
	char str9[50] = "','";
	char str10[50] = "上架";
	char str11[50] = "')";
	strcat(str10, str11);
	strcat(str9, str10);
	strcat(CreateTime, str9);
	strcat(str7, CreateTime);
	strcat(CreateUser, str7);
	strcat(str5, CreateUser);
	strcat(LocNo, str5);
	strcat(str3, LocNo);
	strcat(PPID, str3);
	strcat(str1, PPID);
	
	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("物料上架成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("物料上架失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 物料下架界面

void MaterialRemoval()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入PPID:\n");
	scanf_s("%s", PPID, 101);
	char LocNo[101] = { 0 };
	printf("请输入对应储位号:\n");
	scanf_s("%s", LocNo, 101);
	char CreateUser[101] = { 0 };
	printf("请输入下架人:\n");
	scanf_s("%s", CreateUser, 101);
	char CreateTime[101] = { 0 };
	printf("请输入下架时间:\n");
	scanf_s("%s", CreateTime, 101);
	char str1[101] = "insert into [TEXT].[dbo].[Material_in]values ('";
	char str3[50] = "','";
	char str5[50] = "','";
	char str7[50] = "','";
	char str9[50] = "','";
	char str10[50] = "下架";
	char str11[50] = "')";
	strcat(str10, str11);
	strcat(str9, str10);
	strcat(CreateTime, str9);
	strcat(str7, CreateTime);
	strcat(CreateUser, str7);
	strcat(str5, CreateUser);
	strcat(LocNo, str5);
	strcat(str3, LocNo);
	strcat(PPID, str3);
	strcat(str1, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("物料下架成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("物料下架失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 物料收料界面

void Base_operaMtl()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入PPID:\n");
	scanf_s("%s", PPID, 101);
	char MaterialNo[101] = { 0 };
	printf("请输入MaterialNo:\n");
	scanf_s("%s", MaterialNo, 101);
	char ProductionBatch[101] = { 0 };
	printf("请输入ProductionBatch:\n");
	scanf_s("%s", ProductionBatch, 101);
	char Number[101] = { 0 };
	printf("请输入Number:\n");
	scanf_s("%s", Number, 101);
	char DataOfManufacture[101] = { 0 };
	printf("请输入DataOfManufacture:\n");
	scanf_s("%s", DataOfManufacture, 101);
	char Supplier[101] = { 0 };
	printf("请输入Supplier:\n");
	scanf_s("%s", Supplier, 101);
	char CreateUser[101] = { 0 };
	printf("请输入收料人:\n");
	scanf_s("%s", CreateUser, 101);
	char CreateTime[101] = { 0 };
	printf("请输入收料时间:\n");
	scanf_s("%s", CreateTime, 101);
	char str1[500] = "insert into [BindBatchSchedule] values('";
	char str3[500] = "','";
	char str5[500] = "','";
	char str7[500] = "','";
	char str9[500] = "','";
	char str11[500] = "','";
	char str13[500] = "','";
	char str15[500] = "','";
	char str17[500] = "')";
	strcat(CreateTime, str17);
	strcat(str15, CreateTime);
	strcat(CreateUser, str15);
	strcat(str13, CreateUser);
	strcat(Supplier, str13);
	strcat(str11, Supplier);
	strcat(DataOfManufacture, str11);
	strcat(str9, DataOfManufacture);
	strcat(Number, str9);
	strcat(str7, Number);
	strcat(ProductionBatch, str7);
	strcat(str5, ProductionBatch);
	strcat(MaterialNo, str5);
	strcat(str3, MaterialNo);
	strcat(PPID, str3);
	strcat(str1, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("收料成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("收料失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 收料主界面

void MaterialFeeding()
{
	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【物料处理】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.物料投料                                    ||\n");
		printf("\t\t||*                                 2.物料查询                                    ||\n");
		printf("\t\t||*                                 0.返回上一级菜单                              ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-2): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Base_operaMtl();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Base_Select();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回上一界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

#pragma region 物料上下架查询

void QueryOfMaterial()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char PPID[101] = { 0 };
	printf("请输入您需要查询的PPID:\n");
	scanf_s("%s", PPID, 101);
	char str2[101] = "select * from [TEXT].[dbo].[Material_in] where [PPID] = '";
	char str3[50] = "'";
	strcat(PPID, str3);
	strcat(str2, PPID);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50], str5[50], str6[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4, sqlLen5, sqlLen6;
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			SQLGetData(hstmt, 5, SQL_C_CHAR, str5, 50, &sqlLen5);
			SQLGetData(hstmt, 6, SQL_C_CHAR, str6, 50, &sqlLen6);
			system("cls");
			printf("-----------------【物料查询】----------------------\n");
			printf("        PPID          储位号   操作人   操作时间      目前状态\n");
			printf("\n%s\t%s\t%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4, str5, str6);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 物料处理主界面

void Material()
{
	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【物料处理】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.物料收料                                    ||\n");
		printf("\t\t||*                                 2.物料上架                                    ||\n");
		printf("\t\t||*                                 3.物料下架                                    ||\n");
		printf("\t\t||*                                 4.物料上下架查询                              ||\n");
		printf("\t\t||*                                 0.返回主菜单                                  ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-4): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			MaterialFeeding();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			MaterialOnShelf();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			MaterialRemoval();
			break;
		}
		case 4:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			QueryOfMaterial();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回主界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

#pragma region 程序主菜单

void menu(void)
{
	printf("\t\t||--------------------------------------------------------------------------------||\n");
	printf("\t\t||               ****************【仓储管理系统】***************                  ||\n");
	printf("\t\t||--------------------------------------------------------------------------------||\n");
	printf("\t\t||*                                 1.储位查询                                    ||\n");
	printf("\t\t||*                                 2.物料处理                                    ||\n");
	printf("\t\t||*                                 3.报错日志                                    ||\n");
	printf("\t\t||*                                 4.程序帮助                                    ||\n");
	printf("\t\t||*                                 0.退出程序                                    ||\n");
	printf("\t\t||--------------------------------------------------------------------------------||\n");
}

#pragma endregion

#pragma region 报错日志删除

void ErrorDelete()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char ErrorId[10] = { 0 };
	printf("请输入您需要删除的ErrorId(1-N):\n");
    scanf_s("%s", ErrorId, 10);
	char str2[101] = "delete from [ErrorLog] where [ErrorID] = '";
	char str3[50] = "'";
	strcat(ErrorId, str3);
	strcat(str2, ErrorId);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str2, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("删除成功\n");
	}
	else
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("删除失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 报错日志插入

void ErrorInsert()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	SQLCHAR sql1[] = "use TEXT";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);

	char ErrorBackThings[101] = { 0 };
	char ErrorBackName[101] = { 0 };
	printf("请输入报错人姓名:\n");
	scanf_s("%s", ErrorBackName, 101);
	printf("请输入报错事件:\n");
	scanf_s("%s", ErrorBackThings, 101);
	char str1[101] = "insert into [ErrorLog] values (GETDATE(),'";
	char str3[50] = "','";
	char str5[50] = "')";
	strcat(ErrorBackThings, str5);
	strcat(str3, ErrorBackThings);
	strcat(ErrorBackName, str3);
	strcat(str1, ErrorBackName);

	retcode = SQLExecDirect(hstmt, (SQLCHAR*)str1, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		printf("插入成功\n");
	}
	else 
	{
		handleResult(hstmt, SQL_HANDLE_STMT, retcode);
		printf("插入失败\n");
	}
	error(retcode);
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 报错日志查询

void ErrorSelect()
{
	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

	SQLCHAR sql1[] = "use TEXT";//使用名为"TEXT"数据库
	SQLCHAR sql2[] = "select * from [dbo].[ErrorLog]";
	retcode = SQLExecDirect(hstmt, sql1, SQL_NTS);//SQLExecDirect,此函数用于执行SQL语句,执行sql1语句
	retcode = SQLExecDirect(hstmt, sql2, SQL_NTS);

	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		SQLCHAR str1[50], str2[50], str3[50], str4[50];
		SQLLEN sqlLen1, sqlLen2, sqlLen3, sqlLen4;
		//	SQLLEN len_str1, len_str2, len_str3;
        /*SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录;*/
		while (SQLFetch(hstmt) != SQL_NO_DATA)
		{
			/*SQLGetData函数的功能是提取结果集中当前记录的某个字段值*/
			SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &sqlLen1);//获取第一列数据
			SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &sqlLen2);
			SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &sqlLen3);
			SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &sqlLen4);
			//	retcode = SQLBindCol(hstmt, 1, SQL_C_CHAR, sCustID, 100, &cbCustID);
			printf("\n%s\t%s\t%s\t%s\n\n", str1, str2, str3, str4);
		}
	}
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 报错日志主界面

void Error()
{
	
	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【报错日志】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.查询日志                                    ||\n");
		printf("\t\t||*                                 2.增加日志                                    ||\n");
		printf("\t\t||*                                 3.删除日志                                    ||\n");
		printf("\t\t||*                                 0.返回主菜单                                  ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-3): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在查询日志中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			printf("-----------------【查询日志】----------------------\n");
			printf("序号              报错时间      报错人  报错事件\n");
			ErrorSelect();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			ErrorInsert();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			ErrorDelete();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回主界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

#pragma region 程序运行帮助

void Helpprogamme()
{
	printf("重启SQL server全部服务\n");
	printf("重新确认PPID的输入\n");
	printf("重新确认操作界面数字的输入\n");
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 代码调试帮助

void Helpcode()
{
	printf("常见的中文编码 GB2312(国标简体中文字符集)和 GBK(国标扩展)使用 2 个字节编码来表示一个汉字,不常用的 GB18030 使用 4 个字节编码来表示一个汉字,更通用的 UTF-8 编码使用 3 个字节编码来表示一个汉字。\n");
	printf("服务器在正常运行的情况下突然断电,导致数据库文件严重损坏。附加或还原数据库无果,在附加数据库过程中出现823字样的错误\n");
	printf("停止SQL Server服务,将损坏的数据库文件 data_db.mdf 替换掉刚刚新建好的数据库文件,并删除该数据库的日志文件 data_db.mdf _log.ldf\n");
	printf("ret = SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄\n");
	printf("ret = SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄\n");
	printf("/*SQLGetData函数的功能是提取结果集中当前记录的某个字段值*/\n");
	printf("/*SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录;*/\n");
	printf("temp中name数组的长度,在scanf_s中需要添加,在scanf中不需要\n");
	printf("无论是sql语句连接,sqlprepare还是sqlexecute顺序基本一致,同样采用了动态sql的方式。\n");
	printf("查询功能分为精确查询和模糊查询,精确查询可以采用动态sql的方式,但是由于动态sql的?传进去后将被直接识别为一个元素,因此模糊查询只能用字符串连接的方式来完成。\n");
	printf("sqlbindcol函数,是用于查询完后绑定c语言中定义的变量当中,嵌入式sql也是这样的原理,只不过操作更为的直接一些。同样的,绑定的顺序也需要与数据库中你所查询的列相匹配。\n");
	printf("在错误代码地方加入断点,发现变量已经为空\n");
	printf("查看发现是已经将StdioFile 变量已经关闭,继续写入导致报错\n");
	printf("将StdioFile 变量close 放置在完成写入动作之后,程序运行正常。\n");
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 查询制作人员

void Number()
{
    printf("制作地址:广州航海学院\n");
	printf("总制作人:浩『』皓\n");
	printf("查询完毕!!!\n");
	system("pause");
	system("cls");
}

#pragma endregion

#pragma region 帮助主界面

void Help()
{

	while (1)
	{
		int choose;
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||                 ****************【帮助界面】***************                    ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("\t\t||*                                 1.程序运行帮助                                ||\n");
		printf("\t\t||*                                 2.代码调试帮助                                ||\n");
		printf("\t\t||*                                 3.查询制作人员                                ||\n");
		printf("\t\t||*                                 0.返回主菜单                                  ||\n");
		printf("\t\t||--------------------------------------------------------------------------------||\n");
		printf("请选择功能菜单(0-3): ");
		scanf_s("%d", &choose);

		switch (choose)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在查询日志中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Helpprogamme();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Helpcode();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在加载页面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Number();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在返回主界面,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			return;
		}
		}
	}
}

#pragma endregion

#pragma region 主函数

int main()
{
	Start();
	system("cls");
	system("color F");
	Passwords();
	system("cls");
	Sleep(1500);
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);//申请环境句柄
	retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
	retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//申请数据库连接句柄
	retcode = SQLConnect(hdbc, (SQLCHAR*)"mytest", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"123456", SQL_NTS);
	if (!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
	{
		printf("连接数据库失败!   程序中止运行!\n");
		return -1;
	}
	else
	{
		printf("集团数据库连接成功! 欢迎您的使用!\n");
	}

	system("cls");
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄
	SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄

	while (1)
	{
		int choice;
		menu();
		printf("请选择功能菜单(0-4): \n");	
		scanf_s("%d", &choice);
		switch (choice)
		{
		case 1:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			StorageTableSelect();
			break;
		}
		case 2:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Material();
			break;
		}
		case 3:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Error();
			break;
		}
		case 4:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                                 正在跳转界面中,请等候!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			Help();
			break;
		}
		default:
		{
			system("cls");
			printf("===========================================================================================\n");
			printf("                          您即将退出存储管理系统,感谢您的使用!\n");
			printf("===========================================================================================\n");
			Sleep(1000);
			system("cls");
			exit(0);
			break;
		}
		}
	}
	return 0;
}

#pragma endregion

总结

以上就是该仓储管理系统的全部内容,由于是博主三天内赶完的东西,做工相对比较粗糙,还望各位海涵


参考文献

本文参考了以下作者的文章,在此特别鸣谢,望各位熟知

1、掺杂躁动的选手

C语言连接SQL Server数据库并且完成一次简易操纵

掺杂躁动的选手
————————————————
版权声明:本文为CSDN博主「掺杂躁动的选手」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a1174792073/article/details/115211195

2、yeee你啊啦

使用c语言对sql server进行增删改查操作

yeee你啊啦

————————————————
版权声明:本文为CSDN博主「yeee你啊啦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45029615/article/details/112870791

3、史迪奇奇龙

语言最全爱心代码大全

史迪奇奇龙

已于 2022-12-27 14:
————————————————
版权声明:本文为CSDN博主「史迪奇奇龙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_58045538/article/details/127415337

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: VS和SQL仓库管理系统代码是两种不同的软件工具,其中VS全称为Visual Studio,是一款Microsoft公司开发的IDE(集成开发环境)软件工具,常用于软件开发、应用程序开发和网站开发等。而SQL仓库管理系统代码则是指一种用于管理数据库的软件系统,具有数据库管理、数据备份和恢复、数据安全等功能。 在使用上,VS主要用于代码编写和程序开发,提供了丰富的代码编辑和调试工具,可以帮助开发者快速编写、调试和部署各种应用程序。而SQL仓库管理系统代码则主要用于管理数据库和数据,包括创建数据表、插入、删除、修改数据、备份和恢复数据等操作,并且提供了完整的数据安全保障措施。 在开发过程中,使用VS可以编写针对SQL仓库管理系统的软件程序,使用SQL仓库管理系统代码可以优化数据库管理,两者相辅相成,协同发展。同时,VS支持多种编程语言,如C#、VB、C++等,使用方便灵活,而SQL仓库管理系统代码则可进行定制开发,满足不同用户的需求。 总之,在软件开发中,VS和SQL仓库管理系统代码是两个不可或缺的工具,通过相互协作可以帮助开发者更加高效、方便地完成软件开发和数据管理任务。 ### 回答2: VS和SQL仓库管理系统代码都是软件开发工具,但它们的作用侧重点不同。 首先,VS(Visual Studio)是一个集成开发环境(IDE),用于开发和维护多种应用程序。它支持多种编程语言,包括C#,VB.NET,F#等,可以轻松地创建和编辑代码,进行调试和部署。通过VS,开发者可以创建桌面应用程序、Web应用程序、控制台应用程序和移动应用程序。此外,VS还具有强大的调试工具和代码重构功能,可以大大提高开发工作效率。 而SQL仓库管理系统代码主要用于存储和管理数据。它基于SQL(结构化查询语言)数据库管理系统,提供了一种有效的数据存储和检索方式。通过SQL仓库管理系统代码,开发者可以创建和管理数据库,定义数据表结构,进行数据插入、查询、更新和删除,以及备份和还原数据库等操作。此外,SQL仓库管理系统代码还具有数据安全性较强的特点,可以防止数据库被非法访问或破坏。 总的来说,VS和SQL仓库管理系统代码两者都非常重要。VS是一个强大的开发工具,可以帮助开发者快速创建和维护多种应用程序。SQL仓库管理系统代码则提供了一种可靠的数据存储和管理方式,为企业的业务运营提供了保障。两者结合使用,可以实现更完善的软件开发和运营管理。 ### 回答3: VS和SQL仓库管理系统代码是两种不同的工具,其中VS是一个集成开发环境,可以用来编写、测试和调试各种应用程序,包括仓库管理系统代码。SQL是一种关系型数据库管理系统,可以用于存储和管理大量数据。 仓库管理系统代码是指一个用于管理仓库库存和流程的程序代码,可以使用任何编程语言编写,如C#、Java、Python等。VS可以为开发人员提供各种工具和功能,以方便编写代码和调试程序。此外,VS还具有版本控制系统,可以帮助开发人员管理代码并跟踪代码的版本和更改。 SQL仓库管理系统代码是一种使用SQL语言编写的数据库管理系统。与普通的仓库管理系统不同,它可以处理更大的数据量并提供更高效的数据处理。SQL也可以为仓库管理系统提供安全性和可靠性,例如备份和数据恢复功能。 总之,VS和SQL是两种不同的工具,都可以用来帮助开发人员编写管理仓库管理系统代码。VS主要是一个开发环境,可以为开发人员提供各种工具和功能,而SQL是一种数据库管理系统,可以处理大量的数据和提供更高效的数据处理。使用这两个工具,开发人员可以编写出更可靠和高效的仓库管理系统代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃饭团的饭桶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值