当前位置:首页C语言 > 正文

【内部资料】用C语言做一个学生信息管理系统

作者:野牛程序员:2023-12-20 13:41:47C语言阅读 2764

用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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击