/************************************************************************/
/* Function:对“电话联系人”系统进行数据库的增删查改功能 */
/* Editor:王丞 */
/* Time:2017年10月3日11:26:42 */
/* Notes:vs一些配置:字符集(无设置)和 命令行(/D_CRT_SECURE_NO_WARNINGS) */
/************************************************************************/
#include<stdio.h>
#include<stdlib.h> //include system() function
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h>
/************************************************************************/
/* 函数声明 */
/************************************************************************/
void display_contact(void);
void add_contact(void);
void search_contact(void);
void update_contact(void);
void delete_contact(void);
/************************************************************************/
/* 数据结构 */
/************************************************************************/
SQLCHAR name[50], company[50], phone[50], office_tel[50], family_tel[50], email[50], groups[50];//buffer
SQLINTEGER len_nam, len_com, len_pho, len_off, len_fam, len_ema, len_gro;//length_now_word
/************************************************************************/
/* 主函数 */
/************************************************************************/
int main()
{
system("title Phone_number_manager");
int choice = 0;
int flag = 1;//indicate exitting system
char *menu[6] =
{
"添加联系人",
"查找联系人",
"修改联系人",
"删除联系人",
"显示所有联系人",
"退出系统"
};
while (flag)
{
//if flag equal 0,exit system
printf(" Phone number manager \n");
printf("*************************\n");
for (int i = 0; i < 6; i++)
{
printf("%d.%s\n", i + 1, menu[i]);//printf("%d.%s\n",i+1,*(menu+i));
}
printf("Please input the number of your choice:\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
add_contact();
system("pause");
system("cls");
break;
case 2:
search_contact();
system("pause");
system("cls");
break;
case 3:
update_contact();
system("pause");
system("cls");
break;
case 4:
delete_contact();
system("pause");
system("cls");
break;
case 5:
display_contact();
system("pause");
system("cls");
break;
case 6:
flag = 0;
system("cls");
break;
default:
system("cls");
printf("input error:please input the number of your choice again:\n");
}
}
return 0;
}
/************************************************************************************************/
void add_contact()
{//添加联系人
SQLRETURN ret;
SQLHENV henv;//SQLHANDLE henv
SQLHDBC hdbc;//SQLHANDLE hdbc
SQLHSTMT hstmt;//SQLHANDLE hstmt
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, (SQLCHAR*)"phonesql", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"ww123456", SQL_NTS);//连接数据库
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请SQL语句句柄
//SQLCHAR name[50],company[50],phone[50],office_tel[50],family_tel[50],email[50],groups[50];//buffer
//SQLINTEGER len_nam,len_com,len_pho,len_off,len_fam,len_ema,len_gro;//length_now_word
SQLCHAR sql[] = "INSERT INTO contacts VALUES(?,?,?,?,?,?,?)";
SQLINTEGER P = SQL_NTS;
printf("请输入姓名:\n");
scanf("%s", name);
printf("请输入工作单位:\n");
scanf("%s", company);
printf("请输入手机号码:\n");
scanf("%s", phone);
printf("请输入办公室电话号码:\n");
scanf("%s", office_tel);
printf("请输入家庭电话号码:\n");
scanf("%s", family_tel);
printf("请输入email:\n");
scanf("%s", email);
printf("请输入组别(亲人、朋友、同事、陌生人):\n");
scanf("%s", groups);
SQLPrepare(hstmt, sql, SQL_NTS);//准备SQL语句
/*SQLPrepare是ODBC中的一个API函数,用来创建SQL语句。
例如:SQLPrepare(hstmt,(SQLCHAR*)"insert into admin(admin_id,admin_name,admin_pass) values(1,'admin','pass')",SQL_NTS);*/
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, name, 50, &P);//绑定参数
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, company, 50, &P);//绑定参数
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, phone, 50, &P);//绑定参数
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, office_tel, 50, &P);//绑定参数
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, family_tel, 50, &P);//绑定参数
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, email, 50, &P);//绑定参数
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, groups, 50, &P);//绑定参数
ret = SQLExecute(hstmt);//执行SQL语句
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
printf("添加成功!\n");
display_contact();
}
else
{
printf("添加失败!\n");
}
SQLDisconnect(hdbc);//断开与数据库的连接
}
else
{
printf("连接数据库失败!\n");
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄
}
/******************************************************************************************************************/
void display_contact()
{//显示所有联系人
SQLRETURN ret;
SQLHENV henv;//SQLHANDLE henv
SQLHDBC hdbc;//SQLHANDLE hdbc
SQLHSTMT hstmt;//SQLHANDLE hstmt
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, (SQLCHAR*)"phonesql", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"ww123456", SQL_NTS);//连接数据库
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请SQL语句句柄
SQLCHAR sql[] = "SELECT * FROM contacts";
ret = SQLExecDirect(hstmt, sql, SQL_NTS);//直接执行SQL语句//与上一句不同 SQLExecute(hstmt);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hstmt, 1, SQL_C_CHAR, name, 50, &len_nam);//通过列绑定获取数据
SQLBindCol(hstmt, 2, SQL_C_CHAR, company, 50, &len_com);
SQLBindCol(hstmt, 3, SQL_C_CHAR, phone, 50, &len_pho);
SQLBindCol(hstmt, 4, SQL_C_CHAR, office_tel, 50, &len_off);
SQLBindCol(hstmt, 5, SQL_C_CHAR, family_tel, 50, &len_fam);
SQLBindCol(hstmt, 6, SQL_C_CHAR, email, 50, &len_ema);
SQLBindCol(hstmt, 7, SQL_C_CHAR, groups, 50, &len_gro);
printf("姓名 公司 手机号码 办公室电话 家庭电话 email 组别\n");
printf("******************************************************************************************\n");
if ((ret = SQLFetch(hstmt)) == SQL_NO_DATA)
{
printf("未找到该联系人!\n");
}
else
{
while (ret != SQL_NO_DATA)
{
printf("%-10s %-15s %-15s %-10s %-10s %-20s %-10s\n", name, company, phone, office_tel, family_tel, email, groups);
ret = SQLFetch(hstmt);
}
}
//ret = SQLFetch(hstmt);//移动光标
//if (ret == SQL_NO_DATA) printf("未找到该联系人!\n");
//while (ret != SQL_NO_DATA) {//遍历结果集
// printf("%-10s %-15s %-15s %-10s %-10s %-20s %-10s\n", name, company, phone, o
C/C++使用ODBC操作SQL server数据库
5星 · 超过95%的资源 需积分: 47 147 浏览量
2017-10-03
12:07:24
上传
评论 8
收藏 7.66MB RAR 举报
O_MMMM_O
- 粉丝: 6916
- 资源: 34
最新资源
- mmqrcode1714153659780.png
- Screenshot_2024-04-27-06-08-58-486_com.baidu.xin.aiqicha.jpg
- 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统+sql文件.zip
- 实训作业基于javaweb的订单管理系统源码+数据库+实训报告.zip
- 多机调度问题贪心算法基于最小堆和贪心算法求解多机调度问题.zip
- 基于同态加密技术的匿名电子投票系统源码.zip
- Pyqt5项目框架-PyQt项目开发实践
- 基于C通过MQTT的智能农业大棚管理系统(本科毕业设计)
- python+CNN的网络入侵检测算法源码.zip
- js 实现记住密码功能 js.cookie.min.js
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈