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