//目前除了 倒入数据,统计数据的功能还未编写,其它的功能已经完成,具体效果如下面的图片
#include<stdio.h>
#include<stdlib.h>
#include<io.h>
#include<windows.h>
#include<winsock2.h>
#include<mysql.h>
//职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金
struct people
{
char name[20];
int id;
float base;
float office;
float post;
float medical;
float reserve;
};
void inputmsg(people *p);//接受输入进来的数据
void msgtodbs(MYSQL *mysql, people pro,char p[]);//将输入进来的数据写入数据库
void viewdata(MYSQL *mysql,char p[]);//显示数据库里面的数据
void searchdata(MYSQL *mysql,char p[]);//查找数据
void editdata(MYSQL *mysql,char p[]);//编辑数据
void deldata(MYSQL *mysql,char p[]);//删除数据
void outputdata(MYSQL *mysql,char p[]);//导出数据
void finddata(MYSQL *mysql,char p[]);//恢复数据
void menu();//显示菜单
int main()
{
people pro;
MYSQL mysql;
MYSQL_RES *mysql_res;
MYSQL_ROW mysql_row;
char p[4000];
int number,flag=1;
mysql_init(&mysql);
if(!mysql_real_connect(&mysql,"localhost","root","123456",NULL,0,NULL,0))
{//连接到MySql数据库服务器,但是不打开任何数据库;
printf("%s/n",mysql_error(&mysql));
}
mysql_res=mysql_list_dbs(&mysql,"test_userdb");//检查test_userdb库是否已经存在,否则创建
if(mysql_num_rows(mysql_res)<=0)
{
if(mysql_query(&mysql,"create database test_userdb;")!=0)
{//创建数据库
printf("%s/n",mysql_error(&mysql));
}
}
mysql_free_result(mysql_res);
if(mysql_change_user(&mysql,"root","123456","test_userdb")!=0)
{//重新连接数据库
printf("%s/n",mysql_error(&mysql));
}
mysql_res=mysql_list_tables(&mysql,"users");//检查users表是否已经存在,否则创建
if(mysql_num_rows(mysql_res)<=0)
{
if(mysql_query(&mysql,"create table users(id int not null,name char(20) not null,base float not null,office float not null,post float not null,medical float not null,reserve float not null,primary key (id));")!=0)
{//在新的数据库里面创建表
printf("%s/n",mysql_error(&mysql));
}
}
mysql_res=mysql_list_tables(&mysql,"del");//检查del表是否已经存在,否则创建
if(mysql_num_rows(mysql_res)<=0)
{
if(mysql_query(&mysql,"create table del(id int not null,name char(20) not null,base float not null,office float not null,post float not null,medical float not null,reserve float not null,primary key (id));")!=0)
{//在新的数据库里面创建表
printf("%s/n",mysql_error(&mysql));
}
}
mysql_free_result(mysql_res);
menu();
scanf("%d",&number);//主消息循环
while(flag!=0)
{
switch(number)
{
case 1 :inputmsg(&pro);msgtodbs(&mysql,pro,p);flag=0;break;//输入并输出信息
case 2 :viewdata(&mysql,p);flag=0;break;
case 3 :editdata(&mysql,p);flag=0;break;
case 4 :searchdata(&mysql,p);flag=0;break;
case 5 :deldata(&mysql,p);flag=0;break;
case 6 :finddata(&mysql,p);flag=0;break;
case 7 :flag=0;break;
case 8 :outputdata(&mysql,p);flag=0;break;
case 9 :flag=0;break;
default :printf("输入错误/n");scanf("%d",&number);break;
}
}
mysql_close(&mysql);
return 0;
}
void menu()
{
printf("/t/t/t******************************/n");
printf("/t/t/t* 职工工资管理系统 */n");
printf("/t/t/t* 1.输入记录 */n");
printf("/t/t/t* 2.显示记录 */n");
printf("/t/t/t* 3.修改记录 */n");
printf("/t/t/t* 4.查找记录 */n");
printf("/t/t/t* 5.删除记录 */n");
printf("/t/t/t* 6.恢复记录 */n");
printf("/t/t/t* 7.统计记录 */n");
printf("/t/t/t* 8.导出记录 */n");
printf("/t/t/t* 9.倒入记录 */n");
printf("/t/t/t******************************/n");
printf("输入数字1-9来选择需要执行的功能:/n");
}
void inputmsg(people *p)
{
printf("请输入:id/n");
scanf("%d",&p->id);
printf("请输入:用户名/n");
scanf("%s",p->name);
printf("请输入:基本工资/n");
scanf("%f",&p->base);
printf("请输入:职务工资/n");
scanf("%f",&p->office);
printf("请输入:岗位津贴/n");
scanf("%f",&p->post);
printf("请输入:医疗保险/n");
scanf("%f",&p->medical);
printf("请输入:公积金/n");
scanf("%f",&p->reserve);
printf("%d,%s,%f,%f,%f,%f,%f/n",p->id,p->name,p->base,p->office,p->post,p->medical,p->reserve);
}
void msgtodbs(MYSQL *mysql, people pro,char p[])
{
FILE *fp;
fp=fopen("data","wb+");//创建一个可读可写2进制文件
fprintf(fp,"insert into users values(%d,'%s',%f,%f,%f,%f,%f);/n",pro.id,pro.name,pro.base,pro.office,pro.post,pro.medical,pro.reserve);
fclose(fp);
fp=fopen("data","rb");//以2进制只读方式打开文件
fgets(p,filelength(fileno(fp)),fp);//fileno()将FILE类型转换为open()函数打开的文件句柄类型
fclose(fp); //filelenght()计算用open()函数打开的文件长度
printf("%s/n",p);//显示拼装好的sql语句
if(mysql_query(mysql,p)!=0)
{//在新的数据库里面写入一行数据
printf("%s/n",mysql_error(mysql));
}
}
void viewdata(MYSQL *mysql,char p[])
{
int i,j;
MYSQL_RES *mysql_res;
MYSQL_FIELD *field;
MYSQL_ROW mysql_row;
if(mysql_query(mysql,"select * from users;")!=0)
{
printf("%s/n",mysql_error(mysql));
}
mysql_res=mysql_store_result(mysql);
printf("共计%d行数据/n",mysql_num_rows(mysql_res));
field=mysql_fetch_fields(mysql_res);//输出字段名
printf("/t");
for(i=0;i<mysql_num_fields(mysql_res);i++)
{
printf("%s/t", field[i].name);
}
printf("/n");
for(i=0;i<mysql_num_rows(mysql_res);i++)//输出数据
{
mysql_row=mysql_fetch_row(mysql_res);
printf("%d/t",i+1);
for(j=0;j<mysql_num_fields(mysql_res);j++)
{
printf("%s/t",mysql_row[j]);
}
printf("/n");
}
mysql_free_result(mysql_res);
}
void searchdata(MYSQL *mysql,char p[])
{
int i,j;
MYSQL_RES *mysql_res;
MYSQL_FIELD *field;
MYSQL_ROW mysql_row;
FILE *fp;
printf("输入要查找的用户id:");
scanf("%d",&i);
fp=fopen("data","wb+");//创建一个可读可写2进制文件
fprintf(fp,"select *from users where id=%d;/n",i);
fclose(fp);
fp=fopen("data","rb");//以2进制只读方式打开文件
fgets(p,filelength(fileno(fp)),fp);//fileno()将FILE类型转换为open()函数打开的文件句柄类型
fclose(fp); //filelenght()计算用open()函数打开的文件长度
if(mysql_query(mysql,p)!=0)//执行查询语句
{
printf("%s/n",mysql_error(mysql));
}
mysql_res=mysql_store_result(mysql);
printf("共计%d行数据/n",mysql_num_rows(mysql_res));
field=mysql_fetch_fields(mysql_res);//输出字段名
printf("/t");
for(i=0;i<mysql_num_fields(mysql_res);i++)
{
printf("%s/t", field[i].name);
}
printf("/n");
for(i=0;i<mysql_num_rows(mysql_res);i++)//输出数据
{
mysql_row=mysql_fetch_row(mysql_res);
printf("%d/t",i+1);
for(j=0;j<mysql_num_fields(mysql_res);j++)
{
printf("%s/t",mysql_row[j]);
}
printf("/n");
}
mysql_free_result(mysql_res);
}
void editdata(MYSQL *mysql,char p[])
{
int id;
people pro;
FILE *fp;
printf("输入要修改的数据id号:");
scanf("%d",&id);
inputmsg(&pro);
fp=fopen("data","wb+");//创建一个可读可写2进制文件
fprintf(fp,"update users set id=%d,name='%s',base=%f,office=%f,post=%f,medical=%f,reserve=%f where id=%d;/n",pro.id,pro.name,pro.base,pro.office,pro.post,pro.medical,pro.reserve,id);
fclose(fp);
fp=fopen("data","rb");//以2进制只读方式打开文件
fgets(p,filelength(fileno(fp)),fp);//fileno()将FILE类型转换为open()函数打开的文件句柄类型
fclose(fp); //filelenght()计算用open()函数打开的文件长度
printf("%s/n",p);//显示拼装好的sql语句
if(mysql_query(mysql,p)!=0)
{//修改数据库里面的一行数据
printf("%s/n",mysql_error(mysql));
}
}
void deldata(MYSQL *mysql,char p[])
{
int id;
FILE *fp;
printf("输入要删除的数据id号:");
scanf("%d",&id);
fp=fopen("data","wb+");//创建一个可读可写2进制文件
fprintf(fp,"insert into del select * from users where id=%d/n",id);
fclose(fp);
fp=fopen("data","rb");//以2进制只读方式打开文件
fgets(p,filelength(fileno(fp)),fp);//fileno()将FILE类型转换为open()函数打开的文件句柄类型
fclose(fp); //filelenght()计算用open()函数打开的文件长度
printf("%s/n",p);//显示拼装好的sql语句
if(mysql_query(mysql,p)!=0)
{//迁移数据库里面的一行数据
printf("%s/n",mysql_error(mysql));
}
fp=fopen("data","wb+");//创建一个可读可写2进制文件
fprintf(fp,"delete from users where id=%d/n",id);
fclose(fp);
fp=fopen("data","rb");//以2进制只读方式打开文件
fgets(p,filelength(fileno(fp)),fp);//fileno()将FILE类型转换为open()函数打开的文件句柄类型
fclose(fp); //filelenght()计算用open()函数打开的文件长度
printf("%s/n",p);//显示拼装好的sql语句
if(mysql_query(mysql,p)!=0)
{//迁移数据库里面的一行数据
printf("%s/n",mysql_error(mysql));
}
}
void outputdata(MYSQL *mysql,char p[])
{
int i,j;
MYSQL_RES *mysql_res;
MYSQL_FIELD *field;
MYSQL_ROW mysql_row;
FILE *fp;
if(mysql_query(mysql,"select * from users;")!=0)
{
printf("%s/n",mysql_error(mysql));
}
mysql_res=mysql_store_result(mysql);
fp=fopen("outdata.txt","w+");
fprintf(fp,"共计%d行数据/n",mysql_num_rows(mysql_res));
field=mysql_fetch_fields(mysql_res);//输出字段名
fprintf(fp,"/t");
for(i=0;i<mysql_num_fields(mysql_res);i++)
{
fprintf(fp,"%s/t", field[i].name);
}
fprintf(fp,"/n");
for(i=0;i<mysql_num_rows(mysql_res);i++)//输出数据
{
mysql_row=mysql_fetch_row(mysql_res);
fprintf(fp,"%d/t",i+1);
for(j=0;j<mysql_num_fields(mysql_res);j++)
{
fprintf(fp,"%s/t",mysql_row[j]);
}
fprintf(fp,"/n");
}
mysql_free_result(mysql_res);
fclose(fp);
}
void finddata(MYSQL *mysql,char p[])
{
int i,j,id;
MYSQL_RES *mysql_res;
MYSQL_FIELD *field;
MYSQL_ROW mysql_row;
FILE *fp;
if(mysql_query(mysql,"select * from del;")!=0)
{
printf("%s/n",mysql_error(mysql));
}
mysql_res=mysql_store_result(mysql);
printf("共计有%d行数据是被删除的/n",mysql_num_rows(mysql_res));
field=mysql_fetch_fields(mysql_res);//输出字段名
printf("/t");
for(i=0;i<mysql_num_fields(mysql_res);i++)
{
printf("%s/t", field[i].name);
}
printf("/n");
for(i=0;i<mysql_num_rows(mysql_res);i++)//输出数据
{
mysql_row=mysql_fetch_row(mysql_res);
printf("%d/t",i+1);
for(j=0;j<mysql_num_fields(mysql_res);j++)
{
printf("%s/t",mysql_row[j]);
}
printf("/n");
}
mysql_free_result(mysql_res);
printf("请输入要恢复的数据id/n");
scanf("%d",&id);
fp=fopen("data","wb+");//创建一个可读可写2进制文件
fprintf(fp,"insert into users select * from del where id=%d/n",id);
fclose(fp);
fp=fopen("data","rb");//以2进制只读方式打开文件
fgets(p,filelength(fileno(fp)),fp);//fileno()将FILE类型转换为open()函数打开的文件句柄类型
fclose(fp); //filelenght()计算用open()函数打开的文件长度
printf("%s/n",p);//显示拼装好的sql语句
if(mysql_query(mysql,p)!=0)
{//迁移数据库里面的一行数据
printf("%s/n",mysql_error(mysql));
}
fp=fopen("data","wb+");//创建一个可读可写2进制文件
fprintf(fp,"delete from del where id=%d/n",id);
fclose(fp);
fp=fopen("data","rb");//以2进制只读方式打开文件
fgets(p,filelength(fileno(fp)),fp);//fileno()将FILE类型转换为open()函数打开的文件句柄类型
fclose(fp); //filelenght()计算用open()函数打开的文件长度
printf("%s/n",p);//显示拼装好的sql语句
if(mysql_query(mysql,p)!=0)
{//迁移数据库里面的一行数据
printf("%s/n",mysql_error(mysql));
}
}