通讯录管理系统(C+ODBC+SQL Server 2000)
来源:互联网 发布:环境信息元数据规范 编辑:程序博客网 时间:2024/06/03 21:32
#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];//bufferSQLINTEGER len_nam,len_com,len_pho,len_off,len_fam,len_ema,len_gro;//length_now_wordint main(){system("title Phone_number_manager");int choice=0;int flag=1;//indicate exitting systemchar *menu[6]={"添加联系人","查找联系人","修改联系人","删除联系人","显示所有联系人","退出系统"};while(flag){//if flag equal 0,exit systemprintf(" 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 henvSQLHDBC hdbc;//SQLHANDLE hdbcSQLHSTMT hstmt;//SQLHANDLE hstmtret=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*)"112358",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); ret=SQLPrepare(hstmt,sql,SQL_NTS);//准备SQL语句 ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,name,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,company,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,phone,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,office_tel,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,family_tel,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,email,50,&P);//绑定参数 ret=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"); else printf("添加失败!\n"); display_contact(); SQLDisconnect(hdbc);//断开与数据库的连接} else printf("连接数据库失败!\n");SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄}/******************************************************************************************************************/void display_contact(){//显示所有联系人 SQLRETURN ret;SQLHENV henv;//SQLHANDLE henvSQLHDBC hdbc;//SQLHANDLE hdbcSQLHSTMT hstmt;//SQLHANDLE hstmtret=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*)"112358",SQL_NTS);//连接数据库 if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){ ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申请SQL语句句柄 SQLCHAR sql[]="SELECT * FROM contacts"; //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 ret=SQLExecDirect(hstmt,sql,SQL_NTS);//直接执行SQL语句 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"); 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,office_tel,family_tel,email,groups); ret=SQLFetch(hstmt); } printf("******************************************************************************************\n"); SQLINTEGER number_row; ret=SQLRowCount(hstmt,&number_row);//查询被影响的行数 if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO) printf("通讯录中共有%d个联系人\n",number_row); else printf("查询结果集记录个数失败!\n"); }else printf("查询数据库操作失败!\n"); SQLDisconnect(hdbc);//断开与数据库的连接} else printf("连接数据库失败!\n");SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄}/************************************************************************************************************************/void search_contact(){//查找联系人 SQLRETURN ret;SQLHENV henv;//SQLHANDLE henvSQLHDBC hdbc;//SQLHANDLE hdbcSQLHSTMT hstmt;//SQLHANDLE hstmtret=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*)"112358",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[]="SELECT * FROM contacts WHERE name = ? "; SQLCHAR myname[50]; SQLINTEGER P = SQL_NTS; printf("请输入要查找联系人的姓名:\n"); scanf("%s",myname); ret=SQLPrepare(hstmt,sql,SQL_NTS);//准备SQL语句 ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,myname,50,&P);//绑定参数 ret=SQLExecute(hstmt);//执行SQL语句 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"); 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,office_tel,family_tel,email,groups); ret=SQLFetch(hstmt); } } else printf("准备执行查询失败!\n"); SQLDisconnect(hdbc);//断开与数据库的连接} else printf("连接数据库失败!\n");SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄}/************************************************************************************************************************/void update_contact(){ SQLRETURN ret;SQLHENV henv;//SQLHANDLE henvSQLHDBC hdbc;//SQLHANDLE hdbcSQLHSTMT hstmt;//SQLHANDLE hstmtret=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*)"112358",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[]="UPDATE contacts SET company=?,phone=?,office_tel=?,family_tel=?,email=?,groups=? WHERE name=?"; 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); ret=SQLPrepare(hstmt,sql,SQL_NTS);//准备SQL语句 ret=SQLBindParameter(hstmt,7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,name,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,company,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,phone,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,office_tel,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,family_tel,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,email,50,&P);//绑定参数 ret=SQLBindParameter(hstmt,6,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"); else printf("修改失败!\n"); SQLDisconnect(hdbc);//断开与数据库的连接} else printf("连接数据库失败!\n");SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄}/***********************************************************************************************************/void delete_contact(){//删除联系人 SQLRETURN ret;SQLHENV henv;//SQLHANDLE henvSQLHDBC hdbc;//SQLHANDLE hdbcSQLHSTMT hstmt;//SQLHANDLE hstmtret=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*)"112358",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[]="DELETE FROM contacts WHERE name = ? "; SQLCHAR myname[50]; SQLINTEGER P = SQL_NTS; printf("请输入要删除联系人的姓名:\n"); scanf("%s",myname); ret=SQLPrepare(hstmt,sql,SQL_NTS);//准备SQL语句 ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,myname,50,&P);//绑定参数 ret=SQLExecute(hstmt);//执行SQL语句 if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO) printf("删除成功!\n"); else printf("删除失败!\n"); SQLDisconnect(hdbc);//断开与数据库的连接} else printf("连接数据库失败!\n");SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄}
0 0
- 通讯录管理系统(C+ODBC+SQL Server 2000)
- ODBC-C语言连接数据库(SQL Server 2000)(上)
- ODBC-C语言连接数据库(SQL Server 2000)(下)
- ODBC-C语言操作数据库(SQL Server 2000)(上)
- ODBC-C语言操作数据库(SQL Server 2000)(下)
- 通讯录管理系统(C语言版)
- C语言通讯录管理系统
- C语言通讯录管理系统
- c语言通讯录管理系统
- C语言通讯录管理系统
- C语言:通讯录管理系统
- 【C语言】通讯录管理系统(容量固定)
- 【C语言】通讯录管理系统(容量可变)
- C语言 学生电子通讯录管理系统(修正版)
- 学生管理系统(通讯录)
- C语言通讯录管理系统【没看】
- 通讯录管理系统C语言课程设计
- C语言 电子通讯录管理系统
- 字符串之删除指定字符
- Android自定义View带有删除按钮的EditText
- Java SE JDBC
- visual studio 2010 快捷键
- 字符串之回文串
- 通讯录管理系统(C+ODBC+SQL Server 2000)
- 字符串之单词统计
- POJ 2752 Seek the Name, Seek the Fame(KMP的next数组)
- [体验]windows 8.1 update 1初体验
- 字符串之查找最大元素
- 数据结构与算法学习笔记04(约瑟夫问题)
- 字符串之Excel地址转换
- 《APUE》Chapter 3 File I/O(学习笔记加上自己的代码)
- uva 10003- Cutting Sticks (记忆化搜索)