c语言学生管理系统(内置数据库版本)
c语言学生管理系统
工具:clion,sqlite
1. 下载sqlite以及与clion连接
官网:https://www.sqlite.org/index.html
下载c语言的sqlite头文件
主要文件:
将上面两个文件放在工程目录中:
修改CMakeLists.txt
在里面添加 add_compile_options(-l sqlite3) add_executable(db/sqlite3.c)
这两个,db是我自己的目录,需要改成你自己的路径。
在clion中使用sqlite的图像界面,代码修改后的数据库内容在图形界面能够直观的看到。
选择新建数据库中的SQLite
添加数据库后要修改数据库地址成你的项目地址
配置sqlite的jdbc驱动
这里我已经下载好了,如果下载的很慢的话可以手动安装sqlite.JDBC。你可以从https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc
这个网站里面自己找需要的驱动放在C:\CLion\bin\ProtableData\config\jdbc-drivers这个clion的默认目录中。
然后进行连接测试
成功后自己建表
2. 管理系统代码
#include <stdio.h>
#include "../db/sqlite3.h" //这里是要改自己的sqlite3.h位置
#include <stdlib.h>
#include <string.h>
int tip;
// 回调函数
int callback(void *NotUsed, int argc, char **argv, char **azColName) {
static int first_row = 1; // 用于判断是否是第一行(列名)
if (first_row) {
// 打印列名
for (int i = 0; i < argc; i++) {
printf("%-15s", azColName[i]);
}
printf("\n");
first_row = 0; // 后续行不再打印列名
}
// 打印每行数据
for (int i = 0; i < argc; i++) {
printf("%-15s", argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main() {
// 1. 打开数据库
char *errMsg = 0;
sqlite3 *db = NULL;
sqlite3_open("../db/student.sqlite", &db);
// 提供用户操作菜单
while (1) {
// 菜单
printf("*********************************************\n");
printf("* 学生管理系统 *\n");
printf("*********************************************\n");
printf("1.连接数据库\n");
printf("2.增加学生成绩\n");
printf("3.修改学生成绩\n");
printf("4.删除学生成绩\n");
printf("5.列出学生成绩\n");
printf("6.清屏\n");
printf("7.退出系统\n");
printf("*********************************************\n");
printf("**注意!!由于sql语句不支持中文符号,请切换输入法**\n");
printf("*********************************************\n");
printf("请输入要执行的操作提示:\n");
// 缓冲区
scanf("%d", &tip);
getchar(); // 消耗掉换行符
// 输入sql相关变量
char *sql = malloc(1024);
char **result;
int row, column; // row 和 column 用于存储查询结果的行数和列数
char *buf = malloc(100);
char *buf1 = malloc(100);
char *buf2 = malloc(100);
char *buf3 = malloc(100);
/***********连接数据库*********/
if (tip == 1) {
// 先检查数据库是否成功连接
if (db != NULL) {
printf("连接数据库成功!\n");
} else {
printf("连接数据库失败!\n");
}
}
/***********增加数据************/
else if (tip == 2) {
printf("请输入要增加的学生成绩(格式:id, name, math, english, chinese):\n");
// 读取用户输入
fgets(buf, 100, stdin);
buf[strcspn(buf, "\n")] = 0; // 移除换行符
// 分析输入,将字符串字段( name)添加引号
int id, math, english, chinese;
char name[50];
// 假设用户输入格式为:id,name,math,english,chinese
sscanf(buf, "%d,%49[^,],%d,%d,%d", &id, name, &math, &english, &chinese);
// 构造 SQL 语句,给 name 自动加引号
snprintf(sql, 1024, "insert into student values(%d, '%s', %d, %d, %d);", id, name, math, english, chinese);
printf("SQL: %s\n", sql);
// 执行插入操作
int rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
printf("插入失败: %s\n", sqlite3_errmsg(db));
} else {
printf("插入成功!\n");
}
}
/***********修改数据***********/
else if (tip == 3) {
// 询问并读取学生ID、姓名、数学成绩和英语成绩
printf("请输入要修改的学生ID:\n");
fgets(buf, 100, stdin);
buf[strcspn(buf, "\n")] = 0;
printf("请输入修改的学生姓名:\n");
fgets(buf1, 100, stdin);
buf1[strcspn(buf1, "\n")] = 0;
printf("请输入修改的学生数学成绩:\n");
fgets(buf2, 100, stdin);
buf2[strcspn(buf2, "\n")] = 0;
printf("请输入修改的学生英语成绩:\n");
fgets(buf3, 100, stdin);
buf3[strcspn(buf3, "\n")] = 0;
// 构造正确的SQL更新语句
snprintf(sql, 1024,
"UPDATE student SET name = '%s', math_score = '%s', english_score = '%s' WHERE id = '%s';",
buf1, buf2, buf3, buf);
printf("sql=%s\n", sql); // 打印构造的SQL语句(可以检查是否正确)
// 执行更新操作
int rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
// 检查更新是否成功
if (rc != SQLITE_OK) {
printf("更新失败:%s\n", sqlite3_errmsg(db));
} else {
printf("更新成功!\n");
}
}
/***********删除数据************/
else if (tip == 4) {
sqlite3_exec(db, "select *from student;", &callback, NULL, NULL);
printf("请输入要删除的学生成绩:(只输入ID就行!)\n");
fgets(buf1, 100, stdin);
buf1[strcspn(buf1, "\n")] = 0;
snprintf(sql, 1024, "delete from student where id = %s;", buf1);
printf("sql=%s\n", sql);
int rc=sqlite3_exec(db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
printf("删除失败:%s\n", sqlite3_errmsg(db));
} else {
printf("删除成功!\n");
}
}
/***********列出学生成绩************/
else if (tip == 5) {
// 当用户选择5时,列出学生成绩
printf("学生成绩信息如下:\n");
// 查询学生成绩
const char *sql = "SELECT * FROM student;"; // 查询所有学生成绩
int rc = sqlite3_exec(db, sql, callback, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", errMsg);
sqlite3_free(errMsg);
}
}
/***********清屏操作************/
else if (tip == 6) {
system("cls"); // Unix系统清屏命令,Windows用 system("cls");
printf("已经清屏!\n");
}
/***********退出系统************/
else if (tip == 7) {
printf("系统退出\n");
break; // 跳出循环,结束程序
} else {
printf("无效的输入,请重新选择。\n");
}
}
sqlite3_close(db); // 关闭数据库
return 0;
}
注意代码中需要改动的一些文件路径
…/ 表示源文件所在目录的上一级目录,
…/…/ 表示源文件所在目录的上上级目录
3.创建数据库
数据库代码:
-- auto-generated definition
create table student
(
id INTEGER
primary key,
name TEXT,
math REAL,
english REAL,
chinese REAL
);
运行结果如下:
这里我只写了对数据库的curd所以比较简单。
原文地址:https://blog.csdn.net/qq_68890680/article/details/144319280
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!