【内部资料】用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
