//目前除了 倒入数据,统计数据的功能还未编写,其它的功能已经完成,具体效果如下面的图片
#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)); }}