连接数据库

#include<windows.h>
#include<iostream>
#include<iomanip>
#include<stdlib.h>
#include<mysql.h>
#pragma comment(lib,"libmysql.lib")//连接MysQL需要的库  
using namespace std;
char user[]="root";// 用户名
char password[]="016457t"; //密码
char host[]="localhost"; //要连接的主机
char db[]="student";   //要连接的数据库
char StudentId[10];  //学号
char StudentName[10]; //姓名
char query[500];     //查询语句
int MathGrade;        //数学成绩
int EngGrade;     //英语成绩
int  ComputerGrade; //计算机成绩
int port=3306;    //端口
MYSQL myCont;//句柄
MYSQL_RES *result;//理解为一个二维表
MYSQL_ROW sql_row;//以行为单位
MYSQL_FIELD *fd;//域,以列为宽度
char column[32][32];
int res;
void Connect()   //连接MySQL
{
	mysql_init(&myCont);
   if(mysql_real_connect(&myCont,host,user,password,db,port,NULL,0))
	{
		cout<<setw(30)<<""<<left<<setw(50)<<"连接成功"<<endl;
		
	}
	else
	{
		cout<<setw(30)<<""<<left<<setw(50)<<"连接失败"<<endl;
	}
}
void SetCharacter()  //设置字符
{
	mysql_query(&myCont,"SET NAMES GBK");
}
void out(int ress)          //输出select获得的表的内容
{
	if(!ress)
		{
			result=mysql_store_result(&myCont);
			if(result)//判断二维表是否为空
			{
				int i,j;
				for(i=0;fd=mysql_fetch_field(result);i++)//获取数据表第一行的各个字段名称
				{
					strcpy(column[i],fd->name);
				}
				j=mysql_num_fields(result);
				for(int i=0;i<j;i++)
				{
					cout<<left<<setw(15)<<column[i];//输出数据表第一行的字段名称
				}
				cout<<'
';
				while(sql_row=mysql_fetch_row(result))//循环指向数据表的每行
				{
					for(int i=0;i<j;i++)
					{
						cout<<left<<setw(15)<<sql_row[i]<<'	';//输出每行的内容
					}
					cout<<'
';
				}
			}
		}
		else
		{
			cout<<"运行失败"<<endl;
		}
}
void Add()     //插入学生成绩
{
	cout<<"请按照 学号、姓名、数学、英语、计算机的顺序输入学生信息"<<endl;
	cin>>StudentId>>StudentName>>MathGrade>>EngGrade>>ComputerGrade;
	sprintf(query,"insert into xs_cj values('%s','%s','%u', '%u', '%u');",StudentId,StudentName,MathGrade,EngGrade,ComputerGrade);
	if(!mysql_query(&myCont,query))
	{
		cout<<"添加成功"<<endl;
	}
	else
	{
		cout<<"运行失败"<<endl;
	}
}
void order()  //排序
{
	cout<<"(1) 数学成绩排序"<<endl;
	cout<<"(2) 英语成绩排序"<<endl;
	cout<<"(3) 计算机成绩排序"<<endl;
	int num;
	cin>>num;
	switch(num)
	{
	case 1:
		res=mysql_query(&myCont,"select *from xs_cj order by 数学 desc");        //按数学成绩排降序
		out(res);
		break;
	case 2:
		res=mysql_query(&myCont,"select *from xs_cj order by 英语 desc");       //按英语成绩排降序
		out(res);
		break;
	default:
		res=mysql_query(&myCont,"select *from xs_cj order by 计算机 desc");      //按计算机成绩排降序
		out(res);
	}
}
void Ave()
{
	//求每个学生的平均成绩
	res=mysql_query(&myCont,"select  学号,姓名,(数学+英语+计算机)/3 as 平均成绩  from xs_cj order by 平均成绩 desc");
	out(res);
}
void Divid()
{
	res=mysql_query(&myCont,"select avg(数学) as 数学平均成绩,avg(英语) as 英语平均成绩,avg(计算机) as 计算机平均成绩 from xs_cj");
	out(res);         //选出各科平均成绩
	res=mysql_query(&myCont,"select max(数学) as 数学最高分,max(英语) as 英语最高分,max(计算机) as 计算机最高分 from xs_cj");
	out(res);        //选出各科最高分
	//选出数学各分数段人数
	res=mysql_query(&myCont,"select
		                case
						when 数学<60 then '不及格'
						when 数学>=60 and 数学<70 then '60—70分'
						when 数学>=70 and 数学<80 then '70—80分'
						when 数学>=80 and 数学<90 then '80—90分'
						else '90分以上'
						end as 数学各分数段 ,count(*) as 人数 from xs_cj group by 数学各分数段");
	out(res);
	//选出英语各分数段人数
    res=mysql_query(&myCont,"select
		                case
						when 英语<60 then '不及格'
						when 英语>=60 and 英语<70 then '60—70分'
						when 英语>=70 and 英语<80 then '70—80分'
						when 英语>=80 and 英语<90 then '80—90分'
						else '90分以上'
						end as 英语各分数段 ,count(*) as 人数 from xs_cj group by 英语各分数段");
	out(res);
	//选出计算机各分数段人数
    res=mysql_query(&myCont,"select
		                case
						when 计算机<60 then '不及格'
						when 计算机>=60 and 计算机<70 then '60—70分'
						when 计算机>=70 and 计算机<80 then '70—80分'
						when 计算机>=80 and 计算机<90 then '80—90分'
						else '90分以上'
						end as 计算机各分数段 ,count(*) as 人数 from xs_cj group by 计算机各分数段");
	out(res);
}
void Seek()           //查找某人信息
{
	cout<<"(1) 学号查询"<<endl;
	cout<<"(2) 姓名查询"<<endl;
	int num;      //选择序号
	cin>>num;
	switch(num)
	{
	case 1:
		char StudentId1[10];
		cout<<"请输入学号"<<endl;
		cin>>StudentId1;
		sprintf(query,"select *from xs_cj where 学号='%s';",StudentId1);  //将查询语句赋给字符串query
		res=mysql_query(&myCont,query);
		out(res);
		break;
	default:
		char StudentName1[10];
		cout<<"请输入姓名"<<endl;
		cin>>StudentName1;
		sprintf(query,"select *from xs_cj where 姓名='%s';",StudentName1);
		res=mysql_query(&myCont,query);
		out(res);
	}
}
void Release()
{
	if(result!=NULL) mysql_free_result(result);//释放二维表result中的结果资源
	mysql_close(&myCont);//断开与MySQL的连接
}
int main()
{
	Connect();
	SetCharacter();
	cout<<"(1) 添加学生成绩信息"<<endl;
	cout<<"(2) 按各门课程成绩排序"<<endl;
	cout<<"(3) 按平均成绩排序"<<endl;
	cout<<"(4) 学生成绩整体情况"<<endl;
	cout<<"(5) 查询学生成绩"<<endl;
	cout<<"请输入操作编号"<<endl;
	int nn;
	while(cin>>nn)
	{
	    switch(nn)
	    {
	    case 1:
		     Add();             //添加
		     break;
	    case 2:
		     order();            //排序
		     break;
	    case 3:
		     Ave();            //求平均成绩
		     break;
	    case 4:
		     Divid();           //成绩分布
		     break;
	    case 5:
		     Seek();          //查找
		     break;
	    }
	}
	Release();            //释放数据库
	system("pause");      //暂停
	return 0;
}

原文地址:https://www.cnblogs.com/zztong/p/6695287.html