是数据库的课设,自己写完后就发上来了
先放个思维导图

E-R图也放一个

通过ODBC连接SQL Server数据库,实现了在命令行内执行订餐系统的管理
注意!!:数据库中的中文数据输出正常,但是无法读取命令行中输入的中文字符(读取到的是乱码,应该是没有转换字符导致),请尽量使用英文 ; 且在命令行中有概率出现自动换行,但是不影响使用
!!必看!!:将代码中 连接 块的 TEST 换成ODBC数据源的名字, UserName 换成SQL Server的登录名, PassWord 换成登录名的密码(SQL Server不支持太弱的密码远程登录,请至少包含英文小写字符和数字且不小于8位)
环境:VS2022,Mircosoft SQLserver2019,Windows10 最新的SDK,在ODBC数据源中已将OrderingSystem设为默认数据库
直接放功能代码和运行图吧
目录
1.使用ODBC连接SQL Server数据库:
void Link()
{
ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);//申请环境句柄
ret = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//申请数据库连接句柄
ret = SQLConnect(hdbc, (SQLWCHAR*)L"TEST", SQL_NTS, (SQLWCHAR*)L"UserName", SQL_NTS, (SQLWCHAR*)L"PassWord", SQL_NTS);
if (!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)) {
cout << "Failed to connect to database!" << endl << endl;
}
else {
cout << "Database connection succeeded!" << endl << endl;
}
}

2.主界面

3.功能实现顾客方面
(1)有注册与登录两个选项

(2)注册
void Insert_Customer() {
//sql语句:INSERT INTO customer VALUES ('John','D7-209',123456,124)
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
string str1 = "INSERT INTO customer VALUES ('";
cout << "Please enter your name, address, telephone number and password in sequence." << endl;
string cname, cplace,ctel,ccode;
cin >> cname >> cplace >> ctel >> ccode;
string str2 = str1 + cname + "','" + cplace + "'," + ctel +"," + ccode + ")";
wchar_t* wc = new wchar_t[str2.size()];
swprintf(wc, 100, L"%S", str2.c_str());
ret = SQLExecDirect(hstmt, wc, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
cout << "User added successfully!" << endl;
}
else {
cout << "Failed to add user! Or user phone number already exists." << endl;
handleResult(hstmt, SQL_HANDLE_STMT, ret);
error(ret);
}
free();
cout << endl << endl;
}

接下来可以继续进行顾客的操作
(3)登录
void CustomerLogin() {
//SQL:SELECT * FROM customer WHERE ctel = 12345 AND ccode = 123
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
string str01 = "SELECT * FROM customer WHERE ctel = ";
cout << "Please enter the customer tel and password." << endl;
string ctel, ccode;
cin >> ctel >> ccode;
string str02 = str01 + ctel + " AND ccode = " + ccode;
wchar_t* wc = new wchar_t[str02.size()];
swprintf(wc, 100, L"%S", str02.c_str());
ret = SQLExecDirect(hstmt, wc, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO && ret != NULL) {
SQLCHAR str1[50], str2[50], str3[50], str4[50];
SQLLEN len_str1, len_str2, len_str3, len_str4;
while (SQLFetch(hstmt) != SQL_NO_DATA)
{
SQLGetData(hstmt, 1, SQL_C_CHAR, str1, sizeof(str1), &len_str1);
SQLGetData(hstmt, 2, SQL_C_CHAR, str2, sizeof(str2), &len_str2);
SQLGetData(hstmt, 3, SQL_C_CHAR, str3, sizeof(str3), &len_str3

本文介绍了如何使用C++通过ODBC连接SQL Server数据库,创建一个命令行订餐系统。系统包括顾客注册、登录、点单、查询订单及管理员管理功能。在开发过程中遇到命令行中文输入问题,需注意字符转换。源码已上传至GitHub。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



