C语言学校教务管理系统

C语言学校教务管理系统
要求如图片所示
需要帮助写一个完整的程序代码

img

img

img

https://search.gitee.com/?skin=rec&type=repository&q=%E6%95%99%E5%8A%A1%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F&lang=c

gitee上面搜一下 ,很多


#include "mis.h"
#include "process.h"
#include "student.h"
#include "teacher.h"
 
 
 
int main(void)
{
    stu=calloc(sizeof(Student),MAX_STU);    //为学生结构体申请内存
    tea=calloc(sizeof(Teacher),MAX_TEA);    //申请内存过多 改*/
    do
    {
        system("clear");
        puts("*****教务管理系统*****\n");
        puts("1、校长端\n");
        puts("2、教师端\n");
        puts("3、学生端\n");
        puts("4、退出系统\n");
        puts("********************\n");
        puts("请选择功能:\n");
        switch(getch())
        {
            case '1':
                admin_main();    //校长系统
                break;
            case '2':
                tea_login();    //教师系统
                break;
            case '3':
                stu_login();    //学生系统
                break;
            case '4':
                free(tea);      //释放内存
                free(stu);
                return 0;
 
        }
    stdin->_IO_read_ptr=stdin->_IO_read_end;    
    }while(1);
}

https://blog.csdn.net/weixin_56324038/article/details/126184959

考虑web端的话,若依框架有现成的代码,改改就能用

你好,你的这个问题,可以参考一下前辈的牛人经验,他们有一些思路可以参考,希望能帮助到你
https://blog.csdn.net/ouyang_na_na/article/details/112972605
https://blog.csdn.net/qq_53005786/article/details/117911729
https://blog.csdn.net/qq_43886299/article/details/105098263

这个可以参考其他博主分享的代码,比如
https://blog.csdn.net/qfl_sdu/article/details/118098121?spm=1001.2014.3001.5502
https://blog.csdn.net/qfl_sdu/article/details/118186493?spm=1001.2014.3001.5502

可以借鉴下’

#include "mis.h"
#include "process.h"
#include "student.h"
#include "teacher.h"
 
 
 
int main(void)
{
    stu=calloc(sizeof(Student),MAX_STU);    //为学生结构体申请内存
    tea=calloc(sizeof(Teacher),MAX_TEA);    //申请内存过多 改*/
    do
    {
        system("clear");
        puts("*****教务管理系统*****\n");
        puts("1、校长端\n");
        puts("2、教师端\n");
        puts("3、学生端\n");
        puts("4、退出系统\n");
        puts("********************\n");
        puts("请选择功能:\n");
        switch(getch())
        {
            case '1':
                admin_main();    //校长系统
                break;
            case '2':
                tea_login();    //教师系统
                break;
            case '3':
                stu_login();    //学生系统
                break;
            case '4':
                free(tea);      //释放内存
                free(stu);
                return 0;
 
        }
    stdin->_IO_read_ptr=stdin->_IO_read_end;    
    }while(1);
}


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

typedef struct Node{
    int id;//ѧºÅ 
     char name[50]; //Ãû×Ö 
     char sex[10];//ÐÔ±ð 
     int c,ma,en;//c£¬Êýѧ£¬Ó¢Óï 
     int pe;//ÌåÓý 
     
     struct Node *next;    //Ö¸ÕëÓò 
}node; 

node List;//Á´±í 
//¶ÁÎļþ
int readFile(node *L); 

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

 //Ö÷²Ëµ¥½çÃæ
void welcome(); 
//Ôö¼ÓѧÉúÐÅÏ¢
void add();
//ɾ³ýѧÉúÐÅÏ¢
void delet();
//ÐÞ¸ÄѧÉúÐÅÏ¢ 
void fix ();
//²éѯѧÉúÐÅÏ¢ 
void search ();
//Êä³öѧÉúÐÅÏ¢
void print (node *L);
//Í˳ö³ÌÐò 
void goodBye();

int main(int argc, char *argv[]) {
    int choice = 0;
    readFile(&List);
    //scanf("%d",&choice); 
    while(1){
        welcome(); 
        scanf("%d",&choice);
switch(choice){    
    case 1://Ôö¼ÓѧÉúÐÅÏ¢ 
        add();  
        break;
    case 2://ɾ³ýѧÉúÐÅÏ¢ 
        delet();
        break;
    case 3://ÐÞ¸ÄѧÉúÐÅÏ¢ 
        fix();
        break;
    case 4://²éѯѧÉúÐÅÏ¢ 
        search();
        break;
    case 5://Êä³öѧÉúÐÅÏ¢ 
        print(&List);
        break;
    case 0://Í˳ö³ÌÐò 
        goodBye();
        break;
    }
        printf("ÊÇ·ñÐèÒª¼ÌÐø²Ù×÷?£¨yes:1/no:0):");
        scanf("%d",&choice); 
        if(choice==0){
            break;
         }
        }
     
    
    return 0;
}
//Ö÷²Ëµ¥½çÃæ 
void welcome(){
    system("cls");

        printf("***************************************************\n");
        printf("*************ѧÉú³É¼¨¹ÜÀíϵͳ**********************\n");
        printf("*********¡ª¡ª1.Ìí¼ÓѧÉúÐÅÏ¢¡ª¡ª********************\n");
        printf("*********¡ª¡ª2.ɾ³ýѧÉúÐÅÏ¢¡ª¡ª********************\n");
        printf("*********¡ª¡ª3.ÐÞ¸ÄѧÉúÐÅÏ¢¡ª¡ª********************\n");
        printf("*********¡ª¡ª4.ѧÉúÐÅÏ¢²éѯ¡ª¡ª********************\n");
        printf("*********¡ª¡ª5.ѧÉú³É¼¨²éѯ¡ª¡ª********************\n");
        printf("*********¡ª¡ª0.Í˳ö¹ÜÀíϵͳ¡ª¡ª********************\n");
        printf("ÇëÊäÈëÏëҪʵÏÖ¹¦ÄܵÄÊý×Ö"); 
    }
    //Ôö¼ÓѧÉúÐÅÏ¢
void add(){
    printf("Ôö¼ÓѧÉúÐÅÏ¢"); 
}
//ɾ³ýѧÉúÐÅÏ¢
void delet() {
    printf("ɾ³ýѧÉúÐÅÏ¢"); 
}
//ÐÞ¸ÄѧÉúÐÅÏ¢ 
void fix(){
    printf("Ôö¼ÓѧÉúÐÅÏ¢"); 
}
//²éѯѧÉúÐÅÏ¢ 
void search(){
    printf("²éѯѧÉúÐÅÏ¢"); 
}
//Êä³öѧÉúÐÅÏ¢
void print(node *L) {
    system("cls");
    
    node *p = L->next;
    printf("_____________________________________________________________\n");
    printf("|    ѧºÅ\t|ÐÕÃû\t|ÐÔ±ð\t|cÓïÑÔ\t|¸ßÊý\t|Ó¢Óï\t|ÌåÓý\t|\n"); 
    printf("_____________________________________________________________\n");
    if(p!=NULL){
        
        while(p!=NULL){
            printf("  %d| %s\t |%s\t| %d\t| %d\t| %d\t| %d|\n",p->id,p->name,p->sex,p->c,p->ma,p->en,p->pe);
                printf("_______________________________________________________________\n");
            p=p->next;
        }
        
    }
    
}
//Í˳ö³ÌÐò 
void goodBye(){
    printf("Í˳ö³ÌÐò");
    } 
//ÎļþÊäÈë
int readFile(node *L)
{
    FILE *fpr = fopen("studentInfo.txt","r");
    node st;
    node *s;
    node *t=L;
    if(fpr == NULL){
        return 0;
            }
    else{
        
        while(fscanf(fpr,"%d %s %s %d %d %d %d",&st.id,st.name,st.sex,&st.c,&st.ma,&st.en,&st.pe)!=EOF){
        
        
//        printf("%d %s %s %d %d %d %d\n",st.id,st.name,st.sex,st.c,st.ma,st.en,st.pe);
        s=(node *)malloc(sizeof(node));
        
        *s=st;
        
        t->next=s;
        t=s;
        t->next=NULL;
       }
    }
    
    return 1;
 } 

你这个功能很多,建议去git搜索下载现成的框架进行修改,如果自己从零开始写的话,工作量很大的。

可以参考下

//    mis        信息管理系统
//    mis.h
#ifndef MIS_H
#define MIS_H
 
#define MAX_TEA 50 //不要用MAX遍历
#define MAX_STU 500
 
 
 
typedef struct Student
{
    int firstlogin;    //    是否是第一次登入
    int id;                //    学号
    char password[20];    //    密码
    char name[20];        //    姓名
    char sex;            
    double    chinese;            //    语文成绩
    double    math;                //    数学成绩
    double    english;            //    英语成绩
    int count;        //    计算密码输入次数
    int flag;    //    状态:1,在校。-1,离校。0,该条记录无数据,或未使用
}Student;
 
typedef struct Teacher//声明教师的结构体,用来存放教师的基本信息
{
    char name[20];     //教师的名字
    char sex;          //教师的性别
    int id;            //教师登陆系统的工号Student* stu;
    char password[20]; //教师登陆系统的密码
    int count;         //教师登录系统输错密码的次数
    int firstlogin;    //判断是否第一次登录
    int flag;          //判断是否在校
}Teacher;
 
typedef struct admin{
    int firstlogin;    //    是否是第一次登入
    char password[20];    //    密码
 
}Admin;
 
extern Teacher* tea;
extern Student* stu;
#endif //MIS_H

没人解决?

首先,您需要针对系统的各个模块进行功能需求分析,确定每个模块需要实现的具体功能。在此基础上,您可以设计整个系统的数据结构和算法,包括如何存储和管理学生、教师和课程的信息,以及如何进行各种查询和编辑操作。

对于数据的存储和管理,您可以考虑使用文件或数据库等方式进行。如果使用文件进行存储,可以将每个学生的信息存储为一条记录,使用逗号或其他字符进行分隔,方便读写操作。同时,您还需要设计相应的数据结构,比如数组、链表等,来方便对数据进行操作。

在代码实现方面,您可以使用 C 语言编写程序,利用各种数据结构和算法实现系统的各个模块功能。在实现过程中,需要注意代码的可读性、可维护性和可扩展性,同时保证代码的健壮性和安全性。

以下是一些建议,供您参考:

对于数据的存储和管理,您可以使用结构体来存储学生、教师和课程的信息,定义相应的成员变量,如学号、姓名、课程成绩等。同时,可以使用指针和动态内存分配等技术来动态管理内存,方便对数据的操作。

对于用户界面的设计,可以使用菜单来实现用户界面的交互,根据用户的选择来调用相应的功能函数。可以使用 switch 或 if/else 等语句来实现菜单的选择和功能调用。

在实现各个功能模块时,需要注意输入输出的格式和数据类型的转换,确保数据的正确性和完整性。同时,需要对异常情况进行处理,比如输入非法数据、文件读写错误等情况。

在实现管理员模块时,需要对权限进行控制,确保只有管理员才能进行敏感操作,比如对学生信息的增删改,对课程成绩数据的编辑等。可以使用密码验证等方式对管理员身份进行验证,防止非法访问。

在实现查询功能时,可以使用排序算法对数据进行排序,方便对排名、最高分、最低分等信息的查询。同时,可以使用统计算法对数据进行统计,比如计算平均分、优秀率等信息。

在实现文件读写操作时,需要注意文件的打开和关闭,以及对文件指针的操作。可以使用 fopen、fclose、fread、fwrite 等函数来进行文件读写操作,确保数据的准确读取和保存。

最后,需要对代码进行测试和调试,确保程序的正确性和稳定性。可以使用断点调试、输出调试信息等方式对程序进行调试,发现和解决潜在的问题。同时,可以编写测试用例对程序进行测试,确保程序的正确性和性能。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
对于学校教务管理系统,我们需要考虑以下几个方面的要求:

  1. 学生信息管理:包括学号、姓名、性别、年龄、班级等基本信息的录入、修改、查询和删除操作。

  2. 课程信息管理:包括课程编号、课程名称、学时、学分等基本信息的录入、修改、查询和删除操作。

  3. 成绩录入和查询:对每个学生的每门课程的成绩进行录入和查询。

  4. 统计分析功能:对所有学生的成绩进行分析,包括总分、平均分、优秀率、良好率、及格率和不及格率等统计信息的计算和输出。

根据以上需求,我们可以编写一个C语言程序来实现学校教务管理系统,具体代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STU_NUM 100   //最大学生人数
#define MAX_COURSE_NUM 10 //最大课程数量

//学生信息结构体
struct Student {
    int id;           //学号
    char name[20];    //姓名
    char gender[5];   //性别
    int age;          //年龄
    char clas[20];    //班级
    float score[MAX_COURSE_NUM]; //成绩数组
    float total;      //总分
    float average;    //平均分
};

//课程信息结构体
struct Course {
    int id;           //课程编号
    char name[20];    //课程名称
    int time;         //学时
    int credit;       //学分
};

//学生信息数组
struct Student students[MAX_STU_NUM];

//课程信息数组
struct Course courses[MAX_COURSE_NUM];

//当前学生总数
int studentNum = 0;

//当前课程总数
int courseNum = 0;

//函数声明
void menu();                        //主菜单
void addStudent();                  //添加学生信息
void modifyStudent();               //修改学生信息
void deleteStudent();               //删除学生信息
void queryStudent();                //查询学生信息
void addCourse();                   //添加课程信息
void modifyCourse();                //修改课程信息
void deleteCourse();                //删除课程信息
void displayCourse();               //显示所有课程信息
void inputScore();                  //输入学生成绩
void queryScore();                  //查询学生成绩
void calculateScore();              //计算学生成绩
void displayScoreAnalysis();        //显示成绩分析结果
int findStudentIndexById(int id);   //根据学号查找学生在数组中的索引
int findCourseIndexById(int id);    //根据课程编号查找课程在数组中的索引


//主函数
int main() {
    menu();
    return 0;
}

//主菜单
void menu() {
    int choice;

    while (1) {
        printf("\n-----------------------------------------------------\n");
        printf("                     学校教务管理系统                           \n");
        printf("-----------------------------------------------------\n");
        printf("1. 添加学生信息\n");
        printf("2. 修改学生信息\n");
        printf("3. 删除学生信息\n");
        printf("4. 查询学生信息\n");
        printf("5. 添加课程信息\n");
        printf("6. 修改课程信息\n");
        printf("7. 删除课程信息\n");
        printf("8. 显示所有课程信息\n");
        printf("9. 输入学生成绩\n");
        printf("10. 查询学生成绩\n");
        printf("11. 计算学生成绩\n");
        printf("12. 显示成绩分析结果\n");
        printf("0. 退出程序\n");
        printf("-----------------------------------------------------\n");
        printf("请输入操作选项:");
        scanf("%d", &choice);
        fflush(stdin);   //清空输入缓冲区

        switch (choice) {
            case 1:
                addStudent();
                break;
            case 2:
                modifyStudent();
                break;
            case 3:
                deleteStudent();
                break;
            case 4:
                queryStudent();
                break;
            case 5:
                addCourse();
                break;
            case 6:
                modifyCourse();
                break;
            case 7:
                deleteCourse();
                break;
            case 8:
                displayCourse();
                break;
            case 9:
                inputScore();
                break;
            case 10:
                queryScore();
                break;
            case 11:
                calculateScore();
                break;
            case 12:
                displayScoreAnalysis();
                break;
            case 0:
                printf("程序已退出。\n");
                return;
            default:
                printf("输入不合法,请重新输入。\n");
                break;
        }
    }
}

//添加学生信息
void addStudent() {
    struct Student s;
    printf("请输入学生学号:");
    scanf("%d", &s.id);
    fflush(stdin);   //清空输入缓冲区

    //检查该学号是否已存在
    if (findStudentIndexById(s.id) != -1) {
        printf("该学号已存在,添加失败。\n");
        return;
    }

    printf("请输入学生姓名:");
    gets(s.name);
    printf("请输入学生性别:");
    gets(s.gender);
    printf("请输入学生年龄:");
    scanf("%d", &s.age);
    fflush(stdin);   //清空输入缓冲区
    printf("请输入学生班级:");
    gets(s.clas);

    //将新学生信息添加到学生信息数组中
    students[studentNum++] = s;

    printf("添加成功!\n");
}

//修改学生信息
void modifyStudent() {
    int id, index;
    printf("请输入要修改信息的学生学号:");
    scanf("%d", &id);
    fflush(stdin);    //清空输入缓冲区

    //查找该学号对应的学生在学生信息数组中的索引
    index = findStudentIndexById(id);
    if (index == -1) {
        printf("该学号不存在,无法修改信息。\n");
        return;
    }

    printf("请输入新的学生姓名:");
    gets(students[index].name);
    printf("请输入新的学生性别:");
    gets(students[index].gender);
    printf("请输入新的学生年龄:");
    scanf("%d", &students[index].age);
    fflush(stdin);   //清空输入缓冲区
    printf("请输入新的学生班级:");
    gets(students[index].clas);

    printf("修改成功!\n");
}

//删除学生信息
void deleteStudent() {
    int id, index;
    printf("请输入要删除信息的学生学号:");
    scanf("%d", &id);
    fflush(stdin);    //清空输入缓冲区

    //查找该学号对应的学生在学生信息数组中的索引
    index = findStudentIndexById(id);
    if (index == -1) {
        printf("该学号不存在,无法删除信息。\n");
        return;
    }

    //将目标学生之后的学生依次向前移动一个位置
    for (int i = index; i < studentNum - 1; i++) {
        students[i] = students[i + 1];
    }

    studentNum--;  //学生总数减1

    printf("删除成功!\n");
}

//查询学生信息
void queryStudent() {
    int id, index;
    printf("请输入要查询信息的学生学号:");
    scanf("%d", &id);
    fflush(stdin);    //清空输入缓冲区

    //查找该学号对应的学生在学生信息数组中的索引
    index = findStudentIndexById(id);
    if (index == -1) {
        printf("该学号不存在,无法查询信息。\n");
        return;
    }

    printf("学号\t姓名\t性别\t年龄\t班级\n");
    printf("%d\t%s\t%s\t%d\t%s\n", students[index].id, students[index].name, students[index].gender, students[index].age, students[index].clas);
}

//添加课程信息
void addCourse() {
    struct Course c;
    printf("请输入课程编号:");
    scanf("%d", &c.id);
    fflush(stdin);   //清空输入缓冲区

    //检查该课程编号是否已存在
    if (findCourseIndexById(c.id) != -1) {
        printf("该课程编号已存在,添加失败。\n");
        return;
    }

    printf("请输入课程名称:");
    gets(c.name);
    printf("请输入课程学时:");
    scanf("%d", &c.time);
    printf("请输入课程学分:");
    scanf("%d", &c.credit);
    fflush(stdin);

    //将新课程信息添加到课程信息数组中
    courses[courseNum++] = c;

    printf("添加成功!\n");
}

//修改课程信息
void modifyCourse() {
    int id, index;
    printf("请输入要修改信息的课程编号:");
    scanf("%d", &id);
    fflush(stdin);    //清空输入缓冲区

    //查找该课程编号对应的课程在课程信息数组中的索引
    index = findCourseIndexById(id);
    if (index == -1) {
        printf("该课程编号不存在,无法修改信息。\n");
        return;
    }

    printf("请输入新的课程名称:");
    gets(courses[index].name);
    printf("请输入新的课程学时:");
    scanf("%d", &courses[index].time);
    printf("请输入新的课程学分:");
    scanf("%d", &courses[index].credit);
    fflush(stdin);

    printf("修改成功!\n");
}

//删除课程信息
void deleteCourse() {
    int id, index;
    printf("请输入要删除信息的课程编号:");
    scanf("%d", &id);
    fflush(stdin);    //清空输入缓冲区

    //查找该课程编号对应的课程在课程信息数组中的索引
    index = findCourseIndexById(id);
    if (index == -1) {
        printf("该课程编号不存在,无法删除信息。\n");
        return;
    }

    //将目标课程之后的课程依次向前移动一个位置
    for (int i = index; i < courseNum - 1; i++) {
        courses[i] = courses[i + 1];
    }

    courseNum--;  //课程总数减1

    printf("删除成功!\n");
}

//显示所有课程信息
void displayCourse() {
    printf("课程编号\t课程名称\t学时\t学分\n");
    for (int i = 0; i < courseNum; i++) {
        printf("%d\t%s\t%d\t%d\n", courses[i].id, courses[i].name, courses[i].time, courses[i].credit);
    }
}

//输入学生成绩
void inputScore() {
    int id, cId, sIndex, cIndex;
    float score;
    printf("请输入要输入成绩的学生学号:");
    scanf("%d", &id);
    fflush(stdin);
    sIndex = findStudentIndexById(id);
    if (sIndex == -1) {
        printf("该学号不存在,无法输入成绩。\n");
        return;
    }
    printf("请输入要输入成绩的课程编号:");
    scanf("%d", &cId);
    fflush(stdin);
    cIndex = findCourseIndexById(cId);
    if (cIndex == -1) {
        printf("该课程编号不存在,无法输入成绩。\n");
        return;
    }
    printf("请输入要输入的成绩:");
    scanf("%f", &score);
    fflush(stdin);

    students[sIndex].score[cIndex] = score;

    printf("成绩录入成功!\n");
}

//查询学生成绩
void queryScore() {
    int id, cId, sIndex, cIndex;
    printf("请输入要查询成绩的学生学号:");
    scanf("%d", &id);
    fflush(stdin);
    sIndex = findStudentIndexById(id);
    if (sIndex == -1) {
        printf("该学号不存在,无法查询成绩。\n");
        return;
    }
    printf("请输入要查询成绩的课程编号:");
    scanf("%d", &cId);
    fflush(stdin);
    cIndex = findCourseIndexById(cId);
    if (cIndex == -1) {
        printf("该课程编号不存在,无法查询成绩。\n");
        return;
    }

    printf("该生在%s的成绩为:%.2f\n", courses[cIndex].name, students[sIndex].score[cIndex]);
}

//计算学生成绩
void calculateScore() {
    float totalScore;
    for (int i = 0; i < studentNum; i++) {
        totalScore = 0;
        for (int j = 0; j < courseNum; j++) {
            totalScore += students[i].score[j];
        }
        students[i].total = totalScore;
        students[i].average = totalScore / courseNum;
    }
    printf("成绩计算成功!\n");
}

//显示成绩分析结果
void displayScoreAnalysis() {
    int a = 0, b = 0, c = 0, d = 0, f = 0;
    for (int i = 0; i < studentNum; i++) {
        if (students[i].average >= 90) {
            a++;
        } else if (students[i].average >= 80) {
            b++;
        } else if (students[i].average >= 70) {
            c++;
        } else if (students[i].average >= 60) {
            d++;
        } else {
            f++;
        }
    }
    printf("总人数:%d\n", studentNum);
    printf("A级(90-100)人数:%d,占比:%.2f%%\n", a, a * 100.0 / studentNum);
    printf("B级(80-89)人数:%d,占比:%.2f%%\n", b, b * 100.0 / studentNum);
    printf("C级(70-79)人数:%d,占比:%.2f%%\n", c, c * 100.0 / studentNum);
    printf("D级(60-69)人数:%d,占比:%.2f%%\n", d, d * 100.0 / studentNum);
    printf("E级(0-59)人数:%d,占比:%.2f%%\n", f, f * 100.0 / studentNum);
}

//根据学号查找学生在数组中的索引
int findStudentIndexById(int id) {
    for (int i = 0; i < studentNum; i++) {
        if (students[i].id == id) {
            return i;
        }
    }
    return -1;
}

//根据课程编号查找课程在数组中的索引
int findCourseIndexById(int id) {
    for (int i = 0; i < courseNum; i++) {
        if (courses[i].id == id) {
            return i;
        }
    }
    return -1;
}

以上代码实现了基本的学校教务管理系统的各项功能,可以根据实际需求进行适当的修改。
如果我的回答解决了您的问题,请采纳!