C语言实现简单班级成绩管理系统

Violet ·
更新时间:2024-09-20
· 927 次阅读

前言:

有朋友最近在做c语言课设,要求写一个班级成绩管理系统,便写份简单的代码来玩。代码原创,未参考任何其他人的代码

程序要求

说明

本程序主要采用结构体数组

本文件采用多文件编写,由于程序规模小,故未采用编写头文件的方式

使用 #pragma once 来防止头文件重复包含

代码

怎么使用本程序看看注释应该就知道了。run main.c 就行。其他各文件作用:

def.c 定义了一些常量和全局变量,结构体

myIO.c 实现了成绩录入和成绩打印输出

file.c 实现了将成绩保存为文件

menu.c 实现了菜单功能

function.c 包含其他一些要用的函数

main.c

#include "menu.c" int main() {     select();     return 0; }

def.c

// 相同头文件只包含一次,后不赘述 #pragma once #include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define Status int // 课程 typedef struct Course {     char name[30];     int score; } Course, *pCourse; // 学生 typedef struct Student {     char number[30];     char name[30];     pCourse pC; } Student, *pStudent; // n是学生数, m是课程数 int n, m; char courseName[30], studentName[30], course[20][30]; pStudent pS = NULL;

myIO.c

#pragma once #include "def.c" pStudent inputStudentInfo(void); void printStudentInfo(pStudent pS); // 录入学生信息 pStudent inputStudentInfo(void) {     int i, j;     printf("Please input the number of students and courses: ");     scanf("%d %d", &n, &m);     printf("Please input the name of courses: ");     for (i = 0; i < m; i++)     {         scanf("%s", course[i]);     }     pStudent pS = (pStudent)malloc(sizeof(Student) * n);     if (!pS)         return NULL;     printf("Please input the info: \n");     for (i = 0; i < n; i++)     {         pS[i].pC = (pCourse)malloc(sizeof(Course) * m);         if (!pS[i].pC)             return NULL;         scanf("%s %s", pS[i].name, pS[i].number);         for (j = 0; j < m; j++)         {             strcpy(pS[i].pC[j].name, course[j]);             scanf("%d", &pS[i].pC[j].score);         }     }     return pS; } // 打印所有学生信息 void printStudentInfo(pStudent pS) {     int i, j;     // 打印标题     printf("Name\tnumber\t");     for (i = 0; i < m - 1; i++)         printf("%s\t", course[i]);     printf("%s\n", course[i]);     // 显示信息     for (i = 0; i < n; i++)     {         printf("%s\t%s\t", pS[i].name, pS[i].number);         for (j = 0; j < m - 1; j++)             printf("%d\t", pS[i].pC[j].score);         printf("%d\n", pS[i].pC[j].score);     } }

file.c

#pragma once #include "def.c" Status saveStudentInfo(pStudent pS); Status saveStudentInfo(pStudent pS) {     FILE *fp;     int i, j;     char filename[30], str[100] = "student number";     printf("please input the filename: ");     scanf("%s", filename);     fp = fopen(filename, "w");     if (!fp)         return ERROR;     for (i = 0; i < m; i++)     {         strcat(str, " ");         strcat(str, course[i]);     }     strcat(str, "\n");     for (i = 0; i < n; i++)     {         strcat(str, pS[i].name);         strcat(str, " ");         strcat(str, pS[i].number);         for (j = 0; j < m; j++)         {             char score[30];             itoa(pS[i].pC[j].score, score, 10);             strcat(str, " ");             strcat(str, score);         }         strcat(str, "\n");     }     fputs(str, fp);     fclose(fp);     return OK; }

menu.c

#pragma once #include "def.c" #include "myIO.c" #include "file.c" #include "function.c" void menu(); void select(); // 菜单 void menu() {     printf("------------------------------------\n");     printf("|                Menu              |\n");     printf("|              1. input            |\n");     printf("|              2. show             |\n");     printf("|              3. save             |\n");     printf("|              4. sort             |\n");     printf("|              5. modify           |\n");     printf("|              6. count            |\n");     printf("|              0. exit             |\n");     printf("------------------------------------\n"); } void select() {     int branch;     while (TRUE)     {         system("cls");         menu();         printf("[Input]: ");         scanf("%d", &branch);         if (!branch)             break;         switch (branch)         {         case 1:         {             pS = inputStudentInfo();             if (pS == NULL)                 printf("input error! please input again\n");             else                 printf("Input success!\n");             system("pause");             break;         }         case 2:         {             printStudentInfo(pS);             system("pause");             break;         }         case 3:         {             if (OK == saveStudentInfo(pS))                 printf("Save success!\n");             else                 printf("Save fail!\n");             system("pause");             break;         }         case 4:         {             sort(pS);             printf("sort success\n");             system("pause");             break;         }         case 5:         {             int res = modify(pS);             if (res)             {                 printf("change success!\n");             }             else             {                 printf("change fail!\n");             }             system("pause");             break;         }         case 6:         {             int choose;             // 输入1 显示每门课程最高成绩信息             // 输入2 显示每门课程平均成绩信息             printf("choose 1 for the highest score: \n ");             printf("choose 2 for the average score: \n");             printf("[Input]: ");             scanf("%d", &choose);             if (choose == 1)             {                 showMax(pS);             }             else if (choose == 2)             {                 showAverage(pS);             }             else             {                 // 输入非法提示信息                 printf("Input error!\n");             }             system("pause");             break;         }         }     } }

function.c

#include "def.c" void sort(pStudent pS); void Swap(pStudent s1, pStudent s2); void showAverage(pStudent pS); void showMax(pStudent pS); Status modify(pStudent pS); // 按课程成绩排序 void sort(pStudent pS) {     int courseNumber, i, j, k;     char courseName[30];     printf("please input the course name which you want to sort: ");     scanf("%s", courseName);     for (courseNumber = 0; courseNumber < m; courseNumber++)         if (strcmp(course[courseNumber], courseName) == 0)             break;     // 如果找不到课程,则认为是按总分排序     if (courseNumber == m)     {         printf("Sort as total score: \n");         // 选择排序         for (i = 0; i < n - 1; i++)         {             int flag = i;             for (j = i + 1; j < n; j++)             {                 int totalScore_1 = 0, totalScore_2 = 0;                 for (k = 0; k < m; k++)                 {                     totalScore_1 += pS[j].pC[k].score;                     totalScore_2 += pS[flag].pC[k].score;                 }                 if (totalScore_1 > totalScore_2)                 {                     flag = j;                 }             }             Swap(&pS[i], &pS[flag]);         }     }     else     {         // 选择排序         for (i = 0; i < n - 1; i++)         {             int flag = i;             for (j = i + 1; j < n; j++)             {                 if (pS[j].pC[courseNumber].score > pS[flag].pC[courseNumber].score)                 {                     flag = j;                 }             }             Swap(&pS[i], &pS[flag]);         }     } } // 修改学生信息 Status modify(pStudent pS) {     // 密码是1314     char password[30] = "1314", psd[30];     char number[30];     int score, i, j;     printf("please input password: ");     scanf("%s", psd);     // 密码正确才继续,否则返回ERROR     if (strcmp(password, psd) == 0)     {         printf("please input the student's number: ");         scanf("%s", number);         for (i = 0; i < n; i++)         {             // 找到学生则继续,否则返回ERROR             if (strcmp(pS[i].number, number) == 0)             {                 printf("please input the course and score one by one: \n");                 scanf("%s %d", courseName, &score);                 for (j = 0; j < m; j++)                 {                     // 找到课程才继续,否则返回ERROR                     if (strcmp(pS[i].pC[j].name, courseName) == 0)                     {                         // 修改课程成绩                         pS[i].pC[j].score = score;                         return OK;                     }                 }                 return ERROR;             }         }         return ERROR;     }     else         return ERROR; } // 输出各课程最高分的学生 void showMax(pStudent pS) {     int i, j, max;     for (i = 0; i < m; i++)     {         max = 0;         for (j = 0; j < n; j++)         {             if (pS[j].pC[i].score > pS[max].pC[i].score)                 max = j;         }         printf("%s\t%s\t%s\t%d\n", course[i], pS[max].name, pS[max].number, pS[max].pC[i].score);     } } // 显示各课程的平均成绩 void showAverage(pStudent pS) {     int i, j;     double ave;     for (i = 0; i < m; i++)     {         ave = 0;         for (j = 0; j < n; j++)         {             ave += pS[j].pC[i].score;         }         printf("%s\t%.2lf\n", course[i], ave / n);     } } void Swap(pStudent s1, pStudent s2) {     int i;     char studentName[30], number[30];     // 交换姓名     strcpy(studentName, s1->name);     strcpy(s1->name, s2->name);     strcpy(s2->name, studentName);     // 交换学号     strcpy(number, s1->number);     strcpy(s1->number, s2->number);     strcpy(s2->number, number);     // 交换成绩     for (i = 0; i < m; i++)     {         int temp = s1->pC[i].score;         s1->pC[i].score = s2->pC[i].score;         s2->pC[i].score = temp;     } }



系统 C语言

需要 登录 后方可回复, 如果你还没有账号请 注册新账号