【内部资料】用C语言做一个学生信息管理系统
作者:野牛程序员:2023-12-20 13:41:47C语言阅读 2840
用C语言做一个学生信息管理系统:开发一个学生成绩管理系统,此系统具有以下功能:
(1)系统菜单(即先输出提示信息序号1、2、3….,分别实现什么功能,输入序号后,调用相应的功能函数)
(2)学生姓名、学号、性别、生日、C语言程序设计成绩、计算机导论成绩的录入;
(3)学生信息浏览功能(能浏览所有、成绩、平均成绩、及格或不及格等的学生信息等,一屏显示10行,大于10行的按空格键继续显示);
(3)修改学生信息,可以根据姓名查找到学生,然后可以修改学生姓名、学号、成绩、生日、性别;
(4)按学生平均成绩对信息进行排序。
(5)学生信息的添加
(6)信息统计,可以按平均成绩及格或不及格统计学生人数,计算出所占比例,并输出统计报表。
(7) 选取5个全班同学平均成绩最高的作为候选人,全班同学对候选人投票,选出一位推荐到系当学生班干部,输出其选票结果。
并且可以(1)通过学号查找某个学生,从而修改该学生的信息 (2)具有删除和插入功能的。
对于包含MySQL数据库的完整学生成绩管理系统,需要使用C语言与MySQL数据库进行交互。以下是一个简单示例,使用MySQL Connector/C库进行数据库连接和操作。请注意,为了运行此代码,你需要安装MySQL Connector/C库,并且需要有相应的MySQL数据库。
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
// 定义学生结构体
struct Student {
char name[50];
int studentID;
char gender;
char birthday[20];
float cProgrammingScore;
float computerIntroductionScore;
};
// MySQL连接信息
const char *host = "localhost";
const char *user = "your_username";
const char *password = "your_password";
const char *database = "your_database";
// 函数声明
void initializeDatabase();
void addStudent();
void browseStudents();
void modifyStudent();
void sortByAverageScore();
void statistics();
void recommendCandidate();
int main() {
initializeDatabase();
int choice;
do {
// 显示菜单
printf("\\n===== 学生成绩管理系统 =====\\n");
printf("1. 添加学生信息\\n");
printf("2. 浏览学生信息\\n");
printf("3. 修改学生信息\\n");
printf("4. 按平均成绩排序\\n");
printf("5. 学生信息统计\\n");
printf("6. 推荐班干部候选人\\n");
printf("0. 退出系统\\n");
printf("请输入相应的数字选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
browseStudents();
break;
case 3:
modifyStudent();
break;
case 4:
sortByAverageScore();
break;
case 5:
statistics();
break;
case 6:
recommendCandidate();
break;
case 0:
printf("退出系统。\\n");
break;
default:
printf("输入无效,请重新输入。\\n");
}
} while (choice != 0);
return 0;
}
// 初始化数据库连接
void initializeDatabase() {
MYSQL *conn = mysql_init(NULL);
if (conn == NULL) {
fprintf(stderr, "mysql_init() failed\\n");
exit(1);
}
if (mysql_real_connect(conn, host, user, password, database, 0, NULL, 0) == NULL) {
fprintf(stderr, "mysql_real_connect() failed\\n");
mysql_close(conn);
exit(1);
}
// 在此添加创建学生信息表的SQL语句
const char *createTableQuery = "CREATE TABLE IF NOT EXISTS students ("
"id INT AUTO_INCREMENT PRIMARY KEY,"
"name VARCHAR(50) NOT NULL,"
"studentID INT NOT NULL,"
"gender CHAR(1) NOT NULL,"
"birthday VARCHAR(20) NOT NULL,"
"cProgrammingScore FLOAT NOT NULL,"
"computerIntroductionScore FLOAT NOT NULL"
")";
if (mysql_query(conn, createTableQuery)) {
fprintf(stderr, "Table creation failed: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
mysql_close(conn);
}
// 添加学生信息
void addStudent() {
MYSQL *conn = connectToDatabase();
struct Student newStudent;
printf("请输入学生姓名:");
scanf("%s", newStudent.name);
printf("请输入学号:");
scanf("%d", &newStudent.studentID);
printf("请输入性别(M/F):");
scanf(" %c", &newStudent.gender);
printf("请输入生日(格式:YYYY-MM-DD):");
scanf("%s", newStudent.birthday);
printf("请输入C语言程序设计成绩:");
scanf("%f", &newStudent.cProgrammingScore);
printf("请输入计算机导论成绩:");
scanf("%f", &newStudent.computerIntroductionScore);
char query[256];
sprintf(query, "INSERT INTO students (name, studentID, gender, birthday, cProgrammingScore, computerIntroductionScore) "
"VALUES ('%s', %d, '%c', '%s', %f, %f)",
newStudent.name, newStudent.studentID, newStudent.gender,
newStudent.birthday, newStudent.cProgrammingScore, newStudent.computerIntroductionScore);
if (mysql_query(conn, query)) {
fprintf(stderr, "添加学生信息失败: %s\\n", mysql_error(conn));
} else {
printf("学生信息添加成功。\\n");
}
mysql_close(conn);
}
// 浏览学生信息
void browseStudents() {
MYSQL *conn = connectToDatabase();
MYSQL_RES *result;
MYSQL_ROW row;
if (mysql_query(conn, "SELECT * FROM students")) {
fprintf(stderr, "浏览学生信息失败: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
result = mysql_store_result(conn);
if (result == NULL) {
fprintf(stderr, "获取查询结果失败: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
printf("\\n===== 学生信息 =====\\n");
printf("%-20s %-10s %-5s %-12s %-10s %-10s\\n", "姓名", "学号", "性别", "生日", "C语言成绩", "计算机导论成绩");
while ((row = mysql_fetch_row(result))) {
printf("%-20s %-10s %-5s %-12s %-10s %-10s\\n", row[1], row[2], row[3], row[4], row[5], row[6]);
}
mysql_free_result(result);
mysql_close(conn);
}
// 修改学生信息
void modifyStudent() {
MYSQL *conn = connectToDatabase();
int studentID;
printf("请输入要修改信息的学生学号:");
scanf("%d", &studentID);
// 检查学号是否存在
char checkQuery[256];
sprintf(checkQuery, "SELECT * FROM students WHERE studentID = %d", studentID);
if (mysql_query(conn, checkQuery)) {
fprintf(stderr, "查询学生信息失败: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
MYSQL_RES *checkResult = mysql_store_result(conn);
if (mysql_num_rows(checkResult) == 0) {
printf("未找到学号为 %d 的学生信息。\\n", studentID);
mysql_free_result(checkResult);
mysql_close(conn);
return;
}
mysql_free_result(checkResult);
struct Student updatedStudent;
printf("请输入修改后的学生姓名:");
scanf("%s", updatedStudent.name);
printf("请输入修改后的性别(M/F):");
scanf(" %c", &updatedStudent.gender);
printf("请输入修改后的生日(格式:YYYY-MM-DD):");
scanf("%s", updatedStudent.birthday);
printf("请输入修改后的C语言程序设计成绩:");
scanf("%f", &updatedStudent.cProgrammingScore);
printf("请输入修改后的计算机导论成绩:");
scanf("%f", &updatedStudent.computerIntroductionScore);
char updateQuery[256];
sprintf(updateQuery, "UPDATE students SET name = '%s', gender = '%c', birthday = '%s', "
"cProgrammingScore = %f, computerIntroductionScore = %f WHERE studentID = %d",
updatedStudent.name, updatedStudent.gender, updatedStudent.birthday,
updatedStudent.cProgrammingScore, updatedStudent.computerIntroductionScore, studentID);
if (mysql_query(conn, updateQuery)) {
fprintf(stderr, "修改学生信息失败: %s\\n", mysql_error(conn));
} else {
printf("学生信息修改成功。\\n");
}
mysql_close(conn);
}
// 在此实现按平均成绩排序的代码
void sortByAverageScore() {
MYSQL *conn = connectToDatabase();
// 查询学生信息并计算平均成绩
if (mysql_query(conn, "SELECT * FROM students")) {
fprintf(stderr, "查询学生信息失败: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
MYSQL_RES *result = mysql_store_result(conn);
if (result == NULL) {
fprintf(stderr, "获取查询结果失败: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
struct Student studentsArray[100];
int numStudents = 0;
MYSQL_ROW row;
while ((row = mysql_fetch_row(result))) {
struct Student student;
strcpy(student.name, row[1]);
sscanf(row[2], "%d", &student.studentID);
sscanf(row[5], "%f", &student.cProgrammingScore);
sscanf(row[6], "%f", &student.computerIntroductionScore);
studentsArray[numStudents++] = student;
}
mysql_free_result(result);
// 计算平均成绩并排序
for (int i = 0; i < numStudents; ++i) {
studentsArray[i].cProgrammingScore = studentsArray[i].cProgrammingScore / 2.0; // 假设成绩权重相同
studentsArray[i].computerIntroductionScore = studentsArray[i].computerIntroductionScore / 2.0;
studentsArray[i].cProgrammingScore += studentsArray[i].computerIntroductionScore;
}
// 冒泡排序
for (int i = 0; i < numStudents - 1; ++i) {
for (int j = 0; j < numStudents - i - 1; ++j) {
if (studentsArray[j].cProgrammingScore < studentsArray[j + 1].cProgrammingScore) {
// 交换学生信息
struct Student temp = studentsArray[j];
studentsArray[j] = studentsArray[j + 1];
studentsArray[j + 1] = temp;
}
}
}
// 输出排序后的学生信息
printf("\\n===== 按平均成绩排序后的学生信息 =====\\n");
printf("%-20s %-10s %-10s %-10s\\n", "姓名", "学号", "C语言成绩", "计算机导论成绩");
for (int i = 0; i < numStudents; ++i) {
printf("%-20s %-10d %-10.2f %-10.2f\\n", studentsArray[i].name, studentsArray[i].studentID,
studentsArray[i].cProgrammingScore / 2.0, studentsArray[i].computerIntroductionScore / 2.0);
}
mysql_close(conn);
}
// 在此实现推荐班干部候选人的代码
void recommendCandidate() {
MYSQL *conn = connectToDatabase();
// 查询成绩最高的5个学生
if (mysql_query(conn, "SELECT * FROM students ORDER BY (cProgrammingScore + computerIntroductionScore) DESC LIMIT 5")) {
fprintf(stderr, "查询学生信息失败: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
MYSQL_RES *result = mysql_store_result(conn);
if (result == NULL) {
fprintf(stderr, "获取查询结果失败: %s\\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
printf("\\n===== 推荐班干部候选人 =====\\n");
printf("%-20s %-10s %-10s %-10s\\n", "姓名", "学号", "C语言成绩", "计算机导论成绩");
MYSQL_ROW row;
while ((row = mysql_fetch_row(result))) {
printf("%-20s %-10s %-10s %-10s\\n", row[1], row[2], row[5], row[6]);
}
mysql_free_result(result);
mysql_close(conn);
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

