学生信息管理(数据库版(雏形))

相比文件操作,数据库操作真的简单很多,今天只做了一个雏形,有心者可以好好写一下。

#include <stdio.h>
#include <string.h>
#include <mysql.h>
void create_table(MYSQL mysql);
void insert_info(MYSQL mysql);
void show_info(MYSQL mysql);
void sort(MYSQL mysql);

int main()
{
//1、连接服务器
    MYSQL mysql;
    mysql_init(&mysql);
    if (!mysql_real_connect(&mysql,"128.0.47.136","chen","123456","mydb",0,NULL,0))
    {
        fprintf(stderr, "Failed to connect to database: Error: %s\n",
                mysql_error(&mysql));
    }
    mysql_query(&mysql, "set names utf8"); //设置编码
//2、CRUD操作(增删改)
//  create_table(mysql);
    int opt;
    printf("1、录入学生信息   2、查询学生信息   3、按数学排名信息\n");
    printf("请选择功能 :");
    scanf("%d",&opt);
    switch(opt)
    {
        case 1://插入学生信息
                insert_info(mysql);
                break;
        case 2://查询学生信息
                show_info(mysql);
                break;
        case 3://按排名显示学生信息
                sort(mysql);
                break;
    }
//3、关闭
    mysql_close(&mysql);
    return 0;
}
void create_table(MYSQL mysql)
{
    char sql[300] = "create table student_info(name char(10),sno int primary key,chinese int,math int,english int)";
    if(mysql_query(&mysql, sql))
    {
        fprintf(stderr, "Failed to connect to database: Error: %s\n",
                mysql_error(&mysql));
    }
    else
    {
        printf("创建学生信息表成功!\n");
    }
}
void insert_info(MYSQL mysql)
{
    int n,i;
    printf("请输入录入学生总人数:");
    scanf("%d",&n);
    char sql[300];
    char name[10];
    int sno;
    int chinese;
    int math;
    int english;
    for(i=0;i<n;i++)
    {
            printf("姓名:");scanf("%s",&name);
            printf("学号:");scanf("%d",&sno);
            printf("语文成绩:");scanf("%d",&chinese);
            printf("数学成绩:");scanf("%d",&math);
            printf("英语成绩:");scanf("%d",&english);

            sprintf(sql,"insert into student_info values('%s',%d,%d,%d,%d)",name,sno,chinese,math,english);//重点!!!

            if(mysql_query(&mysql, sql))
            {
                    fprintf(stderr, "Failed to connect to database: Error: %s\n",
                                    mysql_error(&mysql));
            }
            else
            {
                    printf("录入一次信息成功!\n");
            }
    }
}
void show_info(MYSQL mysql)
{
    char sql[300];
    strcpy(sql, "select * from student_info");
    if(mysql_query(&mysql, sql))//查询
    {
        fprintf(stderr, "Failed to select: Error: %s\n",
                mysql_error(&mysql));
    }
    else
    {
        MYSQL_RES* res = NULL;//从堆区申请空间保存一行查询内容     
        res = mysql_store_result(&mysql);
        if(res != NULL)
        {
            MYSQL_ROW row;
            unsigned int num_fields;//一行由多个字段组成
            unsigned int i;
            num_fields = mysql_num_fields(res);
            while ((row = mysql_fetch_row(res)))//依次输出每行
            {
                for(i = 0; i < num_fields; i++)
                {
                    printf("\t%s", row[i]);//依次输出每行的每个字段(列)
                }
                printf("\n");
            }
            mysql_free_result(res);//释放堆区空间
        }
        else
        {
            //失败
            printf("show failed\n");
        }
    }
}
void sort(MYSQL mysql)
{
    char sql[300];
    strcpy(sql, "select * from student_info order by math desc");
    if(mysql_query(&mysql, sql))
    {
        fprintf(stderr, "Failed to select: Error: %s\n",
                mysql_error(&mysql));
    }
    else
    {
        MYSQL_RES* res = NULL;

        res = mysql_store_result(&mysql);

        if(res != NULL)
        {
            MYSQL_ROW row;
            unsigned int num_fields;
            unsigned int i;
            num_fields = mysql_num_fields(res);
            while ((row = mysql_fetch_row(res)))
            {
                for(i = 0; i < num_fields; i++)
                {
                    printf("\t%s", row[i]);
                }
                printf("\n");
            }
            mysql_free_result(res);
        }
        else
        {
                printf("show failed\n");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值