用C语言做完整的学生管理系统中文版
时间: 2023-08-26 15:09:42 浏览: 100
用C语言的学生管理系统
学生管理系统是一个比较完整的项目,需要设计数据库、编写代码等多个方面的内容。以下是一个基于C语言的学生管理系统的基本框架:
1. 学生信息的定义
```
typedef struct {
int id; //学号
char name[20]; //姓名
int age; //年龄
char gender[10]; //性别
float score; //成绩
} Student;
```
2. 数据库的设计
学生信息可以存储在一个文件中或者使用数据库进行存储。这里我们使用SQLite进行数据库的设计。
3. 基本功能
学生管理系统的基本功能包括添加学生信息、删除学生信息、修改学生信息、查询学生信息和显示所有学生信息。
4. 界面设计
学生管理系统的界面需要使用图形化界面或者命令行界面进行实现。这里我们使用命令行界面进行实现。
下面是一个基于C语言的学生管理系统的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
typedef struct {
int id; //学号
char name[20]; //姓名
int age; //年龄
char gender[10]; //性别
float score; //成绩
} Student;
void printMenu() {
printf("请选择操作:\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 显示所有学生信息\n");
printf("6. 退出程序\n");
}
int callback(void *data, int argc, char **argv, char **azColName) {
int i;
for(i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main() {
int choice;
sqlite3 *db;
char *errMsg = 0;
int rc;
char *sql;
char *zErrMsg = 0;
Student student;
char *db_file = "student.db";
rc = sqlite3_open(db_file, &db);
if(rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
} else {
fprintf(stdout, "Opened database successfully!\n");
}
sql = "CREATE TABLE IF NOT EXISTS STUDENT(" \
"ID INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"GENDER TEXT NOT NULL," \
"SCORE REAL NOT NULL);";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Table created successfully!\n");
}
while(1) {
printMenu();
scanf("%d", &choice);
switch(choice) {
case 1: //添加学生信息
printf("请输入学生信息:\n");
printf("学号:");
scanf("%d", &student.id);
printf("姓名:");
scanf("%s", student.name);
printf("年龄:");
scanf("%d", &student.age);
printf("性别:");
scanf("%s", student.gender);
printf("成绩:");
scanf("%f", &student.score);
sql = sqlite3_mprintf("INSERT INTO STUDENT (ID, NAME, AGE, GENDER, SCORE) " \
"VALUES (%d, '%q', %d, '%q', %f);", \
student.id, student.name, student.age, student.gender, student.score);
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Record created successfully!\n");
}
break;
case 2: //删除学生信息
printf("请输入学生学号:");
scanf("%d", &student.id);
sql = sqlite3_mprintf("DELETE FROM STUDENT WHERE ID=%d;", student.id);
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Record deleted successfully!\n");
}
break;
case 3: //修改学生信息
printf("请输入学生学号:");
scanf("%d", &student.id);
printf("请输入修改后的学生信息:\n");
printf("姓名:");
scanf("%s", student.name);
printf("年龄:");
scanf("%d", &student.age);
printf("性别:");
scanf("%s", student.gender);
printf("成绩:");
scanf("%f", &student.score);
sql = sqlite3_mprintf("UPDATE STUDENT SET NAME='%q', AGE=%d, GENDER='%q', SCORE=%f WHERE ID=%d;", \
student.name, student.age, student.gender, student.score, student.id);
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Record updated successfully!\n");
}
break;
case 4: //查询学生信息
printf("请输入学生学号:");
scanf("%d", &student.id);
sql = sqlite3_mprintf("SELECT * FROM STUDENT WHERE ID=%d;", student.id);
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
break;
case 5: //显示所有学生信息
sql = "SELECT * FROM STUDENT;";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
break;
case 6: //退出程序
sqlite3_close(db);
exit(0);
default:
printf("无效的输入,请重新输入!\n");
break;
}
}
}
```
以上代码实现了基本的学生信息管理功能,包括添加、删除、修改、查询和显示学生信息。其中,使用了SQLite进行数据库的设计和操作。
在实际应用中,还可以添加更多的功能,例如按照成绩排序、按照姓名排序等等。此外,在使用SQLite时,需要注意对SQL语句进行转义,以避免SQL注入等安全问题。
阅读全文