C++重新入门小项目 连接MySQL的简易学生成绩系统

注:因为第一次写博客,所以可能有点啰嗦。

前言:

简单学过c++和数据库原理但是随着时间已经忘记了不少东西,这是我重新学习起C++和MYSQL的第一个小项目,因为有点懒没有把函数声明放到头文件里,创建的类没怎么使用,重复的局部变量和函数有点多,有些东西也弄得比较繁琐,另外内存分配和资源释放可能也做的不够好。

因为只是简单的重新学习了C++和SQL语句,里面用到的内容都比较简单,新手入门可以看看。如果还有其他不足,如编程习惯和规范不足等需要改进的东西,希望大佬们指正,谢谢。

背景:

       简单重新学习C++后发现想链接MYSQL做个小程序,因为之前没有做过。设想是将一个预设格式的配置文本文件 Student1.txt 的内容读入, 在创建表之后将文本里的内容读入数据库。然后在VC里实现数据库的增删改查, 最终在按0退出程序的时候(按打叉退出不会保存),将数据库的操作完成之后的数据存入另外一个文件 Student2.txt 中。(未保存进入原文件,有怕使文件数据丢失损坏的成分)

追加:MySQL的配置和安装方法CSDN 上面有很多,所以我就不多说了,本来想做一个傻瓜攻略把MySQL的配置也一起讲了的,但是发现有点没那个精力。

值得注意的: 

1.环境变量的添加 

2.MySQL与Visual Studio连接时包含目录和库目录等   

3.配置的时候看好自己安装的MySQL位数,要和VS配置设置时位数保持一致,编译调试时也要使用相同位数

4.MYSQL.h和定义MySQL 结构体时很多东西都要大写,否则编译器可能不认识。(这点最容易吃亏的是全体注释之后取消注释的时候ctrl+U会同时把大写的MYSQL变成小写,如果经常使用全体注释建议吧ctrl+U的变小写给他去掉)

代码部分:

1.主要函数:

void ShowMean(); // 菜单功能

bool ConnectMysql(MYSQL& mysql); // 连接数据库

//void Read(MYSQL& mysql); // 将数据读入并显示

void Query(MYSQL& mysql); // 查询学生数据

void Modify(MYSQL& mysql); // 修改学生数据

void Insert(MYSQL& mysql);// 添加学生信息

void Delete(MYSQL& mysql); // 删除学生数据

void FileIn(MYSQL& mysql); // 读入文本文件并建立数据库内对应表格,并插入文本之中 的数据

int getLine();// 获取文本文件的行数,用以确定建表插入的数据数量

void FileOut(MYSQL& mysql); // 将数据库中文件另行输出到另一个文本文件以备份数据


void createTable(MYSQL& mysql);

2.主函数实现:

       根据用户选项进行各个函数的调用,且每次操作完成之后会进行一个界面的清空,让人看着更加舒服。

int main()
{
    MYSQL mysql; // 创建数据库结构体
    mysql_init(&mysql); //初始化数据库
    mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"); // 设定数据库字符集

    int choice = 1;
    if (ConnectMysql(mysql) == false)
    {
        return 0;
    }
    else


        while (choice != 0) {
            ShowMean();
            cin >> choice;
            switch (choice) {

            case 1:
                FileIn(mysql); break;
            case 2:
                Query(mysql); break;
            case 3:
                Modify(mysql); break;
            case 4:
                Insert(mysql); break;
            case 5:
                Delete(mysql); break;
            case 0:
                FileOut(mysql); exit(0);
            default:
                cout << "您的输入有误,请重新输入" << endl; break;

            }
            cout << endl << "操作已完成" << endl;
            system("pause");
            system("cls");
        }

    mysql_close(&mysql);

    system("pause");
    return 0;

}

3.部分实现:

(1)创建表

       其实这里可以同时创建一个数据库,但是我没有实现,只要把后边增删改查的指令改成SQL        语句的创建数据库应该就可以实现,有兴趣的可以自己的去实现。重要的一点是创建表的时候要同时设置表的字符集格式,避免汉字乱码。但是两天前我同样设置了字符集但是还是乱码,但是后面不知道怎么回事就突然好了,挺离谱的。

void createTable(MYSQL& mysql) {
    // 字符数组内容为MYSQL语句 创建表格
    // 记住此处 ` 不是单引号 ' 否则无法创建表格
    char   Quest[] = "CREATE TABLE  IF NOT EXISTS `Student1`(\
        `Id` int AUTO_INCREMENT,\
         `name` varchar(20),\
        `score` double,\
         PRIMARY KEY (`Id`)\
)ENGINE=InnoDB DEFAULT CHARSET=utf8;"; // 设定表的字符集,避免汉字乱码
    //mysql_query(&mysql, "SET CHARACTER SET GBK");
    int re = mysql_query(&mysql, Quest);
    if (re == 0)
        cout << "表格已经创建" << endl;
}

(2)连接数据库

个人认为这部分很重要,尽可能了解连接的语句,很重要的基础

bool ConnectMysql(MYSQL& mysql) {
    const char db_Username[] = "root"; // 数据库用户名 
    const char db_Password[] = "0927"; // 相应的密码
    const char db_Host[] = "localhost"; // 数据库连接地址
    const char db_Name[] = "sp"; // 数据库名字
    unsigned long db_Port = 3306; // 端口号  *此处应注意端口号数据类型和其他四个不同
    mysql_init(&mysql); // mysql的API接口,用以初始化数据库
    mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"); // 将数据库字符集设置为gbk,以避免中文乱码
    //开始连接数据并判断是否连接成功;
    if (mysql_real_connect(&mysql, db_Host, db_Username, db_Password, db_Name, db_Port, NULL, 0) == NULL)
    {
        cout << "连接数据库失败,请检查数据是否正确" << endl;
        return false;
    }
    cout << "连接成功" << endl;
    createTable(mysql);
    return true;

}

(3)查询函数

这里有个遗憾就是没能完成一个查不到就告诉用户没有相关学生,还有增删改查共同的遗憾,输入SQL语句进行增删改查,我也没去实现,从实现的可能性和难度上来说应该是有可能简单实现的。

void Query(MYSQL& mysql) // 查询学生数据
{
    MYSQL_RES* res; // 创建一个结果集
    MYSQL_ROW row; // 二维数组存放记录

    cout << "您选择了查询学生信息" << endl;
    cout << "请输入您要查询的选项" << endl;
    cout << "\t 1. 查询全部学生" << endl;
    cout << "\t 2. 按学号查询" << endl;
    cout << "\t 3. 按照名字进行查询" << endl;
    cout << "\t 4. 按照分数进行查询" << endl;
    //cout << "\t 5.自定义SQL
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值