数据库编程简单使用sqlite3——学生信息管理系统(乞丐版)

2023-12-20 10:27:40

这个小程序之所以称之为乞丐版,主要是没有制作图形界面,只能通过终端进行交互,但是功能应该没问题(但愿吧),第一行注释的是Linux终端需要输入的编译指令,将sqlite3.h? ? ? sqlite3.c文件放入工程文件夹中,编译时需要链接相应库

main.c

// gcc main.c sqlite3.c -lpthread -ldl
#include <stdio.h>
#include "sqlite3.h"
#include <string.h>
#include <stdlib.h>

int ret;
sqlite3 *db;
char *errmsg;
// 输出
int callback(void *para, int n_column, char **column_value, char **column_name)
{

    int i;
    for (i = 0; i < n_column; i++)
    {

        printf("%s  ", column_value[i]);
    }
    printf("\n");
    return 0;
}

// 主界面
void main_window()
{
    printf("\t_____________________________________________\n");
    printf("\t|                 信息管理系统               |\n");
    printf("\t|                                            |\n");
    printf("\t|                  教师端按1                 |\n");
    printf("\t|                                            |\n");
    printf("\t|                  学生端按2                 |\n");
    printf("\t|                                            |\n");
    printf("\t|                   退出按0                  |\n");
    printf("\t|__________________________________ _________|\n");
}

// 教师界面
void printf_teacher()
{
    printf("\t_____________________________________________\n");
    printf("\t|               信息管理系统                 |\n");
    printf("\t|              查看所有信息按1               |\n");
    printf("\t|              查看个人信息按2               |\n");
    printf("\t|              修改个人信息按3               |\n");
    printf("\t|              删除个人信息按4               |\n");
    printf("\t|              添加个人信息按5               |\n");
    printf("\t|               返回上一级按6                |\n");
    printf("\t|                退出系统按0                 |\n");
    printf("\t|____________________________________________|\n");
}

// 学生界面
void printf_student()
{
    printf("\t_____________________________________________\n");
    printf("\t|               信息管理系统                 |\n");
    printf("\t|              查看所有信息按1               |\n");
    printf("\t|              查看个人信息按2               |\n");
    printf("\t|               返回上一级按3                |\n");
    printf("\t|                退出系统按0                 |\n");
    printf("\t|____________________________________________|\n");
}

// 创建数据库并打开,创建数据表
void create_sqlite3()
{
    int ret = sqlite3_open("stu.db", &db);
    if (ret != SQLITE_OK)
    {
        printf("成功打开库!\n");
        // perror("open");
    }
    sqlite3_exec(db, "create table stu(id int primary key,name text,age int,sex text,score int)", NULL, NULL, &errmsg);
    if (errmsg != NULL)
    {
        printf("成功打开数据表\n");
        // printf("%s\n", errmsg);
    }
}

// 显示所有表
void show_all_table()
{

    sqlite3_exec(db, "select * from stu;", callback, NULL, &errmsg);

    if (errmsg != NULL)
        printf("%s\n", errmsg);

    printf("******************************************************************\n");
    printf("\n");
    printf("\n");
}

// 查看个人数据表
void show_stu_table()
{
    printf("\t请输入想要查看的学生学号:\n");
    int id;
    scanf("%d", &id);

    char sql[256];
    sprintf(sql, "select * from stu where id=%d", id);

    ret = sqlite3_exec(db, sql, callback, NULL, &errmsg);
    if (ret != SQLITE_OK)
        printf("查询失败:%s\n", errmsg);
    printf("******************************************************************\n");
    printf("\n");
    printf("\n");
}

// 修改个人数据表
void update_stu_table()
{
    printf("\t请输入想要修改的学生学号:\n");
    int id;
    scanf("%d", &id);
    printf("\t请输入想要修改的学生姓名:\n");
    char name[20];
    scanf("%s", name);
    printf("\t请输入想要修改的学生年龄:\n");
    int age;
    scanf("%d", &age);
    printf("\t请输入想要修改的学生性别:\n");
    char sex[20];
    scanf("%s", sex);
    printf("\t请输入想要修改的学生成绩:\n");
    float score;
    scanf("%f", &score);
    char sql[256];
    sprintf(sql, "UPDATE stu SET name='%s', age=%d, sex='%s', score=%f WHERE id=%d", name, age, sex, score, id);

    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
        printf("修改失败:%s\n", errmsg);
    else
        printf("修改成功!\n");
    printf("******************************************************************\n");
    printf("\n");
    printf("\n");
}

// 删除个人数据表
void delete_stu_table()
{
    printf("\t请输入想要删除的学生学号:\n");
    int id;
    scanf("%d", &id);
    char sql[256];
    sprintf(sql, "delete from stu where id=%d", id);

    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
        printf("删除失败: %s\n", errmsg);
    else
        printf("删除成功!\n");
    printf("******************************************************************\n");
    printf("\n");
    printf("\n");
}

// 添加数据表
void add_stu_table()
{
    printf("\t请输入想要添加的学生学号:\n");
    int id;
    scanf("%d", &id);
    printf("\t请输入想要添加的学生姓名:\n");
    char name[20];
    scanf("%s", name);
    printf("\t请输入想要添加的学生年龄:\n");
    int age;
    scanf("%d", &age);
    printf("\t请输入想要添加的学生性别:\n");
    char sex[20];
    scanf("%s", sex);
    printf("\t请输入想要添加的学生成绩:\n");
    float score;
    scanf("%f", &score);
    char sql[256];
    sprintf(sql, "insert into stu values (%d, '%s', %d, '%s', %f)", id, name, age, sex, score);

    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
        printf("添加失败: %s\n", errmsg);
    else
        printf("添加成功!\n");
    printf("******************************************************************\n");
    printf("\n");
    printf("\n");
}

// 教师switch--case
void teacher_switch()
{
    int input;
    scanf("%d", &input);
    switch (input)
    {
    case 1:
        // 查看所有数据表
        show_all_table();
        break;
    case 2:
        // 查看个人数据表
        show_stu_table();
        break;
    case 3:
        // 修改个人数据表
        update_stu_table();
        break;
    case 4:
        // 删除个人数据表
        delete_stu_table();
        break;
    case 5:
        // 添加数据表
        add_stu_table();
        break;
    case 6:
        // 返回界面
        main_window();
        break;
    case 0:
        // 退出程序
        printf("\t**********  感谢您的使用  **********\n");
        sqlite3_close(db);
        exit(0);
        break;
    }
}

// 学生switch--case
void student_switch()
{
    int input;
    scanf("%d", &input);
    switch (input)
    {
    case 1:
        // 查看所有数据表
        show_all_table();
        break;
    case 2:
        // 查看个人数据表
        show_stu_table();
        break;
    case 3:
        // 返回界面
        main_window();
        break;
    case 0:
        // 退出程序
        printf("\t**********  感谢您的使用  **********\n");
        sqlite3_close(db);
        exit(0);
        break;
    }
}
int main()
{
    int input;
    create_sqlite3();
    // 主界面

    while (1)
    {
        main_window();
        // 输入选项
        printf("\t**********  请输入您的选项  **********\n");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            // 教师界面
            printf_teacher();
            // 教师switch--case
            teacher_switch();
            break;
        case 2:
            // 学生界面
            printf_student();
            // 学生switch--case
            student_switch();
            break;
        case 0:
            // 退出程序
            printf("\t**********  感谢您的使用  **********\n");
            sqlite3_close(db);
            exit(0);
            break;
        }
    }
    sqlite3_close(db);
    return 0;
}

文章来源:https://blog.csdn.net/Mr_Yang12306/article/details/132773689
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。