C语言课程设计思路与方法:教务管理系统

教务管理系统

一、设计教务管理系统的思路

  • 设计功能
    首先思考要做一个学生管理系统,要具备哪些功能
    1. 打开程序最开始应该将原有的信息加载到链表中
    2. 注册账户并录入相关信息(分为老师和同学)
    3. 登录系统
    4. 老师对学生的相关操作
    5. 学生选课系统
    6. 老师和学生对信息修改、删除
    7. 显示信息,等等

二、对教务管理系统分步解决

加载
登录
注册
教师界面
学生界面
退出
查看个人信息
查看班级学生信息
查看教授科目学生信息
添加学生信息
删除学生
修改个人信息
查看学生个人信息
选课系统
退课系统
注销账号

设计完功能,我们对系统以功能划分为不同函数,为了使函数更简单,主要变量我们使用全局变量。

void jiazai()		//从文件中加载信息
int denglu()		//登录界面
void zhuce()		//注册账号
int jiaoshijiemian()//教师界面
int xueshengjiemian()//学生界面

在教师界面和学生界面中,我们要有更加细致的功能

int jiaoshijiemian()//教师界面
{
    int i;
    printf("\n    ********老师欢迎您来到信息管理系统********\n");
    printf("    请选择功能:\n");
    printf("     1、查看我的个人信息;\n");
    printf("     2、查看授课班级学生信息;\n");
    printf("     3、查看选课学生信息;\n");
    printf("     4、添加学生(同时注册相应账号);\n");
    printf("     5、删除学生信息;\n");
    printf("     6、修改我的个人信息;\n");
    printf("     7、退出登录。\n");
    scanf("%d",&i);
    return i;
}
int xueshengjiemian()//学生界面
{
    int i;
    printf("\n  ********同学欢迎来到信息管理系统********\n");
    printf("    请选择功能:\n");
    printf("     1、查看我的个人信息;\n");
    printf("     2、选课系统;\n");
    printf("     3、退课系统;\n");
    printf("     4、修改我的个人信息;\n");
    printf("     5、注销账号;\n");
    printf("     6、退出登录。\n");
    scanf("%d",&i);
    return i;
}

首先完成函数,在此之前,我们要创建相关信息的结构体。

typedef struct teachers{		//老师信息
    int num;                //工号(账号)
    char password[20];      //密码
    char name[20];          //姓名
    char college[20];       //学院
    char subject1[20];      //教授学科1
    char subject2[20];      //教授学科2
    char class[20];         //教授班级
    struct teachers *next;
}LNodet;
typedef struct students{		//学生信息
    int num;                //学号(账号)
    char password[20];      //密码
    char name[20];          //学生姓名
    char college[10];       //学院
    char major[20];         //专业
    char class[20];         //班级
    int year;               //入学年份
    char teacher[20];       //专业老师
    char subject1[20];      //所学学科1
    char subject2[20];      //所学学科2
    struct students *next;
}LNodes;

定义全局变量

LNodet *ht,*rt,*pt,*mt,*dt;
LNodes *hs,*rs,*ps,*ms,*m1s,*ds;//建立链表的相关指针
FILE *ft;//老师文件
FILE *fs;//学生文件
int tcnt;//老师人数(可以选择去掉)
int scnt;//学生人数(可以选择去掉)

三、全部代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define It "d:\\学习\\C C++\\teacher.txt"
#define Is "d:\\学习\\C C++\\student.txt"

typedef struct teachers{		//老师信息
    int num;                //工号(账号)
    char password[20];      //密码
    char name[20];          //姓名
    char college[20];       //学院
    char subject1[20];      //教授学科1
    char subject2[20];      //教授学科2
    char class[20];         //教授班级
    struct teachers *next;
}LNodet;
typedef struct students{		//学生信息
    int num;                //学号(账号)
    char password[20];      //密码
    char name[20];          //学生姓名
    char college[10];       //学院
    char major[20];         //专业
    char class[20];         //班级
    int year;               //入学年份
    char teacher[20];       //专业老师
    char subject1[20];      //所学学科1
    char subject2[20];      //所学学科2
    struct students *next;
}LNodes;

LNodet *ht,*rt,*pt,*mt,*dt;
LNodes *hs,*rs,*ps,*ms,*m1s,*ds;
FILE *ft;//老师文件
FILE *fs;//学生文件
int tcnt;//老师人数
int scnt;//学生人数

void jiazai()//从文件中加载信息
{
    int i,j;
    printf("正在加载信息...\n");
    ft=fopen(It,"rb");
    i=0;
    rt=ht;
    while(!feof(ft))
    {
        pt=(LNodet*)malloc(sizeof(LNodet));
        fscanf(ft,"%d %s %s %s %s %s %s\n",&pt->num,pt->password,pt->name,pt->college,pt->subject1,pt->subject2,pt->class);
        pt->next=NULL;
        rt->next=pt;
        rt=pt;
        i++;
    }
    fclose(ft);
    fs=fopen(Is,"rb");
    j=0;
    rs=hs;
    while(!feof(fs))
    {
        ps=(LNodes*)malloc(sizeof(LNodes));
        fscanf(fs,"%d %s %s %s %s %s %d %s %s %s\n",&ps->num,ps->password,ps->name,ps->college,ps->major,ps->class,&ps->year,ps->teacher,ps->subject1,ps->subject2);
        ps->next=NULL;
        rs->next=ps;
        rs=ps;
        j++;
    }
    fclose(fs);
    tcnt = i;
    scnt = j;
    printf("加载信息完毕\n");
}

int denglu()//登录界面
{
    int num;
    char mima[20];
    int i=0;
    int f=0;
    printf("\n  ******************欢迎来到信息管理系统******************\n");
    printf("    您是否已经注册过账号\n");
    printf("    已经注册请输入“1”;没有注册请输入“0”;退出系统请输入“2”\n");
    scanf("%d",&i);
    if(i==1)
    {
        printf("    请输入账号:");
        scanf("%d",&num);
        printf("    请输入密码:");
        scanf("%s",mima);
        dt=ht->next;
        while(dt!=NULL)
        {
            if(dt->num==num&&strcmp(dt->password,mima)==0)
            {
                f=1;
                break;
            }
            dt=dt->next;
        }
        if(f==1)return 1;
        ds=hs->next;
        while(ds!=NULL)
        {
            if(ds->num==num&&strcmp(ds->password,mima)==0)
            {
                f=2;
                break;
            }
            ds=ds->next;
        }
        if(f==2)return 2;
        if(f==0)
        {
            printf("    您输入的账号或密码错误\n");
            return 0;
        }

    }
    if(i==0)return 3;
    if(i==2)return 4;

}

void zhuce()//注册账号
{
    int num;
    char mima[20];
    int year;
    int f;
    printf("    ************注册账号***********\n");
    printf("     请输入您的学号(工号)作为账号:");
    scanf("%d",&num);
    printf("     请输入您的密码(不超过20位):");
    scanf("%s",mima);
    printf("     您是老师请输入“1”;是学生请输入“0”\n");
    scanf("%d",&f);
    if(f==1)
    {
        printf("    下面将进行信息完善\n");
        pt=(LNodet*)malloc(sizeof(LNodet));
        pt->num=num;
        strcpy(pt->password,mima);
        printf("     请输入您的姓名:");
        scanf("%s",pt->name);
        printf("     请输入您的学院:");
        scanf("%s",pt->college);
        printf("     请输入您教授的学科1:");
        scanf("%s",pt->subject1);
        printf("     请输入您教授的学科2:");
        scanf("%s",pt->subject2);
        printf("     请输入您教授的班级(例:class2):");
        scanf("%s",pt->class);
        pt->next=NULL;
        rt->next=pt;
        rt=pt;
        ft=fopen(It,"ab");
        fprintf(ft,"%d %s %s %s %s %s %s\n",pt->num,pt->password,pt->name,pt->college,pt->subject1,pt->subject2,pt->class);
        fclose(ft);
        tcnt++;
    }
    if(f==0)
    {
        printf("    下面将进行信息完善\n");
        ps=(LNodes*)malloc(sizeof(LNodes));
        ps->num=num;
        strcpy(ps->password,mima);
        printf("     请输入您的姓名:");
        scanf("%s",ps->name);
        printf("     请输入您的学院:");
        scanf("%s",ps->college);
        printf("     请输入您的专业:");
        scanf("%s",ps->major);
        printf("     请输入您的入学年份:");
        scanf("%d",&ps->year);
        printf("     请输入您的班级:");
        scanf("%s",ps->class);
        printf("     请输入你的专业导师:");
        scanf("%s",ps->teacher);
        ps->subject1[0]='0';
        ps->subject1[1]='\0';
        ps->subject2[0]='0';
        ps->subject2[1]='\0';
        ps->next=NULL;
        rs->next=ps;
        rs=ps;
        fs=fopen(Is,"ab");
        fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ps->num,ps->password,ps->name,ps->college,ps->major,ps->class,ps->year,ps->teacher,ps->subject1,ps->subject2);
        fclose(ft);
        scnt++;
    }
    printf("        您已成功注册账号\n");
}
int jiaoshijiemian()//教师界面
{
    int i;
    printf("\n    ********老师欢迎您来到信息管理系统********\n");
    printf("    请选择功能:\n");
    printf("     1、查看我的个人信息;\n");
    printf("     2、查看授课班级学生信息;\n");
    printf("     3、查看选课学生信息;\n");
    printf("     4、添加学生(同时注册相应账号);\n");
    printf("     5、删除学生信息;\n");
    printf("     6、修改我的个人信息;\n");
    printf("     7、退出登录。\n");
    scanf("%d",&i);
    return i;
}
void tea1()//输出教师个人信息
{
    printf("    您的个人信息:工号:%d 密码:%s 姓名:%s 学院:%s 教授学科1:%s 教授学科2:%s 教授班级:%s\n",dt->num,dt->password,dt->name,dt->college,dt->subject1,dt->subject2,dt->class);
    printf("        回车键返回\n");
    getchar();
    getchar();
}
void tea2()//查看班级学生信息
{
    ms=hs->next;
    printf("    %s %s %s %s %s %s %s\n","学号","姓名","学院","专业","班级","入学年份","专业导师");
    while(ms!=NULL)
    {
        if(strcmp(ms->class,dt->class)==0)
        {
            printf("    %d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
        }
        ms=ms->next;
    }
    printf("        回车键返回\n");
    getchar();
    getchar();
}
void tea3()//查看教授科目学生信息
{
    printf("    教授学科1:\n");
    ms=hs->next;
    printf("     %s %s %s %s %s %s %s\n","学号","姓名","学院","专业","班级","入学年份","专业导师");
    while(ms!=NULL)
    {
        if(strcmp(ms->subject1,dt->subject1)==0||strcmp(ms->subject2,dt->subject1)==0)
        {
            printf("     %d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
        }
        ms=ms->next;
    }
    printf("    教授学科2:\n");
    ms=hs->next;
    printf("     %s %s %s %s %s %s %s\n","学号","姓名","学院","专业","班级","入学年份","专业导师");
    while(ms!=NULL)
    {
        if(strcmp(ms->subject1,dt->subject2)==0||strcmp(ms->subject2,dt->subject2)==0)
        {
            printf("     %d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
        }
        ms=ms->next;
    }
    printf("        回车键返回\n");
    getchar();
    getchar();
}
void tea4()//添加学生信息
{
    int i,n;
    char mima[20];
    printf("    请输入您要添加的学生个数:");
    scanf("%d",&n);
    printf("    注意:您录入的学生将自动创建账号\n");
    printf("    您希望账号密码默认为:");
    scanf("%s",mima);
    printf("    下面请按照如下格式输入您要录入的学生信息\n");
    printf("    学号 姓名 学院 专业 班级 入学年份 专业导师\n");
    for(i=0;i<n;i++);
    {
        ps=(LNodes*)malloc(sizeof(LNodes));
        strcpy(ps->password,mima);
        scanf("%d %s %s %s %s %d %s",&ps->num,ps->name,ps->college,ps->major,ps->class,&ps->year,ps->teacher);
        ps->subject1[0]='0';
        ps->subject1[1]='\0';
        ps->subject2[0]='0';
        ps->subject2[1]='\0';
        ps->next=NULL;
        rs->next=ps;
        rs=ps;
        scnt++;
    }
    fs=fopen(Is,"wb");
    ms=hs->next;
    while(ms!=NULL)
    {
        fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
        ms=ms->next;
    }
    fclose(ft);
    printf("    已成功录入\n");
    printf("        回车键返回\n");
    getchar();
    getchar();
}
void tea5()//删除学生
{
    int num,f;
    printf("    请输入您要删除的学生学号(退出删除系统请输入“0”):");
    scanf("%d",&num);
    if(num!=0)
    {
        m1s=hs;
        ms=hs->next;
        while(ms!=NULL)
        {
            if(ms->num==num)break;
            m1s=m1s->next;
            ms=ms->next;
        }
        printf("    所要删除的学生信息:%d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
        printf("    是否确认删除?\n    确认请输入“1”;重新输入学号请输入“2”\n");
        scanf("%d",&f);
        if(f==2)tea5();
        if(f==1)
        {
            m1s->next=ms->next;
            free(ms);
            fs=fopen(Is,"wb");
            ms=hs->next;
            while(ms!=NULL)
            {
                fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
                ms=ms->next;
            }
            fclose(fs);
            printf("    您已成功删除该学生信息\n");
            printf("        回车键返回\n");
            getchar();
            getchar();
        }
    }
}
void tea6()//修改个人信息
{
    int f;
    printf("如果您仅修改密码请输入“1”;修改其他信息请输入“2”\n");
    scanf("%d",&f);
    if(f==2)
    {
        printf("您的个人信息:工号:%d 姓名:%s 学院:%s 教授学科1:%s 教授学科2:%s 教授班级:%s\n",dt->num,dt->name,dt->college,dt->subject1,dt->subject2,dt->class);
        printf("按照如下格式输入您修改后的个人信息:\n");
        printf("工号 姓名 学院 教授学科1 教授学科2 教授班级\n");
        scanf("%d %s %s %s %s %s",&dt->num,dt->name,dt->college,dt->subject1,dt->subject2,dt->class);
    }
    if(f==1)
    {
        printf("请输入您要修改的密码:");
        scanf("%s",dt->password);
    }
    ft=fopen(It,"wb");
    mt=ht->next;
    while(mt!=NULL)
    {
        fprintf(ft,"%d %s %s %s %s %s %s\n",mt->num,mt->password,mt->name,mt->college,mt->subject1,mt->subject2,mt->class);
        mt=mt->next;
    }
    fclose(ft);
    printf("    信息已修改完成\n");
    printf("        回车键返回\n");
    getchar();
    getchar();
}

int xueshengjiemian()//学生界面
{
    int i;
    printf("\n  ********同学欢迎来到管理系统********\n");
    printf("    请选择功能:\n");
    printf("     1、查看我的个人信息;\n");
    printf("     2、选课系统;\n");
    printf("     3、退课系统;\n");
    printf("     4、修改我的个人信息;\n");
    printf("     5、注销账号;\n");
    printf("     6、退出登录。\n");
    scanf("%d",&i);
    return i;
}
void stu1()//输出学生个人信息
{
    printf("    您的个人信息:学号:%d 密码:%s 姓名:%s 学院:%s 专业:%s 班级:%s 入学年份:%d 专业导师:%s 选课1:%s 选课2:%s\n",ds->num,ds->password,ds->name,ds->college,ds->major,ds->class,ds->year,ds->teacher,ds->subject1,ds->subject2);
    printf("        回车键返回\n");
    getchar();
    getchar();
}
void stu2()//选课系统
{
    int cnt=0;
    char subject[20];
    printf("    你已经选择的课程:");
    if(ds->subject1[0]!='0')
    {
        printf(" %s  ",ds->subject1);
        cnt++;
    }
    if(ds->subject2[0]!='0')
    {
        printf(" %s  ",ds->subject2);
        cnt++;
    }
    printf("\n  注意:每人最多选择两门课程,当已经选择两门课程后无法选课\n");
    printf("    你已经选择%d门课程,",cnt);
    if(cnt==2)
    {
        printf("    无法选课。\n");
    }
    else
    {
        printf("\n");
        printf("    所有开课信息如下:\n");
        printf("        课程名称  开课教师\n");
        mt=ht->next;
        while(mt!=NULL)
        {
            if(mt->subject1[0]!='0')
            {
                printf("        %s  %s\n",mt->subject1,mt->name);
            }
            if(mt->subject2[0]!='0')
            {
                printf("        %s  %s\n",mt->subject2,mt->name);
            }
            mt=mt->next;
        }
        printf("    请在以上课程中选择\n");
        printf("    你选择的课程名称:");
        scanf("%s",subject);
        if(ds->subject1[0]=='0')
        {
            strcpy(ds->subject1,subject);
        }
        else
        {
            strcpy(ds->subject2,subject);
        }
        fs=fopen(Is,"wb");
        ms=hs->next;
        while(ms!=NULL)
        {
            fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
            ms=ms->next;
        }
        fclose(fs);
        printf("    选课完成\n");
    }
    printf("        回车键返回\n");
    getchar();
    getchar();
}
void stu3()//退课系统
{
    char subject[20];
    printf("    你已经选择的课程:");
    if(ds->subject1[0]!='0')
    {
        printf(" %s  ",ds->subject1);
    }
    if(ds->subject2[0]!='0')
    {
        printf(" %s  ",ds->subject2);
    }
    printf("\n    请输入您要退出的课程名称:");
    scanf("%s",subject);
    if(strcmp(ds->subject1,subject)==0)
    {
        ds->subject1[0]='0';
        ds->subject1[1]='\0';
    }
    if(strcmp(ds->subject2,subject)==0)
    {
        ds->subject2[0]='0';
        ds->subject2[1]='\0';
    }
    fs=fopen(Is,"wb");
    ms=hs->next;
    while(ms!=NULL)
    {
        fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
        ms=ms->next;
    }
    fclose(fs);
    printf("    您已退出的该课程\n");
    printf("    回车键返回\n");
    getchar();
    getchar();
}
void stu4()//修改个人信息
{
    int f;
    printf("    如果您仅修改密码请输入“1”;修改其他信息请输入“2”\n");
    scanf("%d",&f);
    if(f==2)
    {
        printf("    您的个人信息:学号:%d 姓名:%s 学院:%s 专业:%s 班级:%s 入学年份:%d 专业导师:%s\n",ds->num,ds->name,ds->college,ds->major,ds->class,ds->year,ds->teacher);
        printf("    按照如下格式输入您修改后的个人信息:\n");
        printf("    学号 姓名 学院 专业 班级 入学年份 专业导师\n");
        scanf("%d %s %s %s %s %d %s",&ds->num,ds->name,ds->college,ds->major,ds->class,&ds->year,ds->teacher);
    }
    if(f==1)
    {
        printf("    请输入您修改后的密码:");
        scanf("%s",ds->password);
    }
    fs=fopen(Is,"wb");
    ms=hs->next;
    while(ms!=NULL)
    {
        fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
        ms=ms->next;
    }
    fclose(fs);
    printf("    修改信息成功\n");
    printf("    回车键返回\n");
    getchar();
    getchar();
}
void stu5()//注销账号
{
    int f;
    printf("    是否确认注销?\n确认请输入“1”;推出注销请输入“0”\n");
    scanf("%d",&f);
    if(f==1)
    {
        m1s=hs;
        ms=hs->next;
        while(ms!=NULL)
        {
            if(ms->num==ds->num)
            {
                break;
            }
            ms=ms->next;
            m1s=m1s->next;
        }
        m1s->next=ms->next;
        free(ms);
        fs=fopen(Is,"wb");
        ms=hs->next;
        while(ms!=NULL)
        {
            fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
            ms=ms->next;
        }
        fclose(fs);
        printf("    您已成功注销\n");
    }
}


int main()
{
    ht=(LNodet*)malloc(sizeof(LNodet));
    ht->next=NULL;
    hs=(LNodes*)malloc(sizeof(LNodes));
    hs->next=NULL;
    int f=0,ft,fs;
    jiazai();
    f=denglu();
    while(f!=4)
    {
        if(f==0)f=denglu();
        if(f==3)//注册
        {
            zhuce();
            f=0;
        }
        if(f==1)//进入教师界面
        {
         do{
            ft=jiaoshijiemian();
            if(ft==1)tea1();
            if(ft==2)tea2();
            if(ft==3)tea3();
            if(ft==4)tea4();
            if(ft==5)tea5();
            if(ft==6)tea6();
           }while(ft!=7);
           f=0;
        }
        if(f==2)//进入学生界面
        {
            do{
                fs=xueshengjiemian();
                if(fs==1)stu1();
                if(fs==2)stu2();
                if(fs==3)stu3();
                if(fs==4)stu4();
                if(fs==5)stu5();
            }while(fs!=6&&fs!=5);
            f=0;
        }
    }
    if(f==4)return 0;
}
  • 14
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值