#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;
}