#include
#include
#pragma comment(lib,"libmySQL.lib") //要加不然会编译出错
#include "stdio.h"
#include "string.h"
#include
using namespace std;
struct conn_info {
char *host;
char *user;
char *password;
char *db;
};
struct student
{
char name[10];
char nu[10];
struct student *next;
};
class Mysql
{
public:
/********************************连接数据库*****************************************************/
MYSQL* mysql_connect(conn_info con){
MYSQL* mysql=mysql_init(NULL);//mysql初始化函数,实例化一个新的对象(NULL为新的对象,否则为初始化以创建的对象)
if(!mysql_real_connect(mysql,con.host,con.user,con.password,con.db,3306,NULL,0)){//mysql_real_connect(MYSQL *mysql,const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
//上面的函数为,与mysql进行连接
cout<<"connection error";
exit(1);
}
return mysql;//返回实例化的对象
}
/****************************************数据库操作函数*******************************************************/
void mysql_operation(MYSQL* mysql,char *sql_op)
{
if(mysql_query(mysql,sql_op))//mysql_query()函数为对mysql进行操作,第一个参数为刚才实例化的对象,第二个位需要进行的操作
{
printf("MySQL query error : %s/n", mysql_error(mysql)); //需要加上这个,因为这个是操作失败时返回显示
getchar();
exit(1);
}
}
/*******************************查询函数***********************************************************/
MYSQL_RES* mysql_find(MYSQL* mysql,const char *table,MYSQL_RES* res){
char cmd[100];
strcpy(cmd,"select * from ");
strcat(cmd,table); //拼接函数
// cout<name);
strcat(cmd,"\",\"");
strcat(cmd,p->nu);
strcat(cmd,"\")");
// cout<7);//判断i值是否在1~7之间,否则继续要求输入
return i;
}
class Operate
{
public:
void input(MYSQL* mysql)
{
struct student *current;
Mysql _mysql;
int flag;
char name[10];//用于存储学生的名字
char nu[10];//用于存储学生学号
// char flag;//用于判断是否继续扫描
current=(struct student *)malloc( sizeof(struct student) );
printf("请输入学生名字:\n");
scanf("%s", name);//扫描键盘
getchar();//注意在前一次进行过扫描后要加getchar(),否则下次扫描会读取回车
flag = _mysql.mysql_repeat(mysql,"test",NULL,0,name);
if(flag)
{
cout<<"名字打重啦,换个大名试试"<name,name);
printf("请输入学生学号:\n");
scanf("%s", nu);//扫描键盘
getchar();//注意在前一次进行过扫描后要加getchar(),否则下次扫描会读取回车
flag = _mysql.mysql_repeat(mysql,"test",NULL,1,nu);
if(flag)
{
cout<<"学号打重啦,再摇个号试试"<nu,nu);
_mysql.mysql_insert(mysql,current);
printf("增加成功");
getchar();
}
void del(MYSQL* mysql)
{
Mysql _mysql;
char name[10];
char nu[10];
char flag = -1;
printf("请选择用学号删除(0)或用姓名删除(1):");
scanf("%c",&flag);
getchar();
if(flag == 48)//ASCII码
{
printf("\n请输入需要删除学生的学号:\n");
scanf("%s",&nu);
getchar();
flag = _mysql.mysql_repeat(mysql,"test",NULL,1,nu);
if(flag == 0)
{
cout<<"可惜没这个号啊"<next=NULL;
while(1)
{
system("cls");
switch(menu_select())
{
case 1:
op1.input(conn);
break;
case 2:
op1.del(conn);
break;
case 3:
op1.list(conn);
break;
case 4:
op1.find(conn);
break;
case 5:
op1.modify(conn);
break;
case 6:
mysql_close(conn);
exit(0);
default:
printf("输入出错,按任意键返回。");
getchar();
break;
}
}
}
相对于之前的,加入了报错,在mysql函数中加入了判断重复的函数mysql_repeat()。