精华内容
下载资源
问答
  • 系统可以通过登录判断用户身份,使教师和学生的操作界面分离,主要的功能就是实现学生信息的增、删、改、查以及文件操作功能(不过有点缺陷,只能通过程序读出文件的内容,直接打开 txt 文档会乱码),C语言的初学...
  • 1.系统登录界面; (10分) 要求:设置系统初始密码为"123456",在登录界面中输入密码登录,输错三次密码自动退出系统,界面效果如图1所示。 回"CAUsers\Team WeiDeskopbD-bugfinlte (此为参照面 ***迎使用...
  • 初学EasyX,利用了C语言链表、EasyX图形库,实现了图形界面,基本键鼠操作,账号密码的基本登录,学生信息的录入.删除.修改.查找,载入文件数据,保存信息等功能,方便简单,下载积分是系统自己乱设的我也没办法。。。。
  • 要求:①包含最多可以输入3次密码的登录系统系统 选择界面②用二维数组和调用函数实现学号、语文、数 学、英语成绩的输入、求每-一个人的总成绩、平均分、显 示、查询、修改和排序(按总分)功能、输出各科最高分、 ...
  • 利用c语言的链表或结构体数组实现学生信息的管理,编写有登录界面学生信息管理系统,可以实现学生信息的录入,显示,删除,排序,统计,文件读写等功能。 二 概要设计 系统功能模块结构如下图所示: 管理员...

    一 需求分析

    利用c语言的链表或结构体数组实现学生信息的管理,编写有登录界面的学生信息管理系统,可以实现学生信息的录入,显示,删除,排序,统计,文件读写等功能。

    二 概要设计

    系统功能模块结构如下图所示:

    • 管理员登录模块:该模块有三个功能,登陆、修改密码、退出

    • 录入模块:录入学生信息,学生信息有学号,姓名,班级,性别,地址,电话。每输入完一项后,按回车键确认

    • 显示模块:将用户确认保存的学生信息全部打印在屏幕上,按任意键返回

    • 查找模块:用户选择要查找的方式如按姓名查找,按学号查找等,查找到结果后将数据打印在屏幕上,若没有则提示用户没有该信息,按任意键返回

    • 修改模块:提示用户输入要修改的学生姓名或学号,查找到结果后将查找到数据打印在屏幕上,若没有则提示用户没有该信息,按任意键返回

    • 删除模块:提示用户输入要删除的学生姓名或学号,将要删除的学生信息打印在屏幕上,提示用户是否要删除该信息,用户输入“删除”则删除该数据

    • 排序模块: 用户选择要排序的方式如按姓氏排序,按学号排序等,将排序之后的结果打印在屏幕上

    • 统计模块:将统计分析之后的数据如男生人数、女生人数、各班人数、各地人数等打印在屏幕上

    • 写入文件:将链表中的数据写入文件中

    • 文件提取:将文件中的数据读出并放入链表中

    •  

    点击此处下载文档和源码

    展开全文
  • 本项目旨在LINUX操作系统下使用C语言管理文件的方法来实现一个学生信息管理系统,包括教师登录,查询学生信息及修改学生成绩;学生登录及查看自己信息;管理员负责对学生和教师的增删查改。 2.项目概览 本系统共有...

    学生信息管理系统

    1.项目目的

    本项目旨在LINUX操作系统下使用C语言管理文件的方法来实现一个学生信息管理系统,包括教师登录,查询学生信息及修改学生成绩;学生登录及查看自己信息;管理员负责对学生和教师的增删查改。

    2.项目概览

    本系统共有三种使用者,管理员,教师,学生。需要实现的功能如下图所示:
    在这里插入图片描述

    3.项目的C语言实现方法

    本项目主循环为一个菜单界面,用户选择登录身份为管理员或普通用户登录。管理员登录之后选择管理学生或者管理教师两大模块;普通用户通过输入教师号或者学生学号进入系统,教师或者学生登录系统后拥有不同的权限。
    在这里插入图片描述

    3.1主界面流程

    Created with Raphaël 2.2.0开始menu主界面select = 1?管理员登录select = 2?普通用户登录select = 3?结束yesnoyesnoyesno

    3.2注册模块

    通过设计一个模块,来实现新学生或新教师信息的加入。其流程图如下图所示。
    在这里插入图片描述

    3.3删除模块

    通过设计一个模块,首先查找到该教师或学生,然后将该教师或学生的所有信息删除。其流程图如下图所示。
    在这里插入图片描述

    3.4显示模块

    通过设计一个模块,来实现教师、学生信息的显示,以便于浏览教师学生的信息。其流程图如下图所示。
    在这里插入图片描述

    3.5 修改模块

    通过设计一个模块,这个模块可以找到该教师或学生并将该教师或学生的信息修改。其流程图如下图所示。
    在这里插入图片描述

    3.6查找模块

    通过设计一个模块,这个模块可以按教师或学生的编号、姓名来查询教师或学生的信息。其流程图如下图所示。
    在这里插入图片描述

    4.结果展示

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    5.总结

    这个项目是在linux环境下用C语言搭建了一个基础的学生信息管理系统。通过这个项目,我对C语言的使用有了一个更加深入的认识,从刚开始的初略的认识到有了比较深入的认识,再到能够比较灵活的运用。C语言是一门比较灵活、有趣而且实践性非常强的课程,我从它的实践运用中,体会到了学习C语言的乐趣和好处。在课程设计的这段时间里,我学到了许多东西,同时也使我对以前学的东西有了一个更深更透彻的理解。比如:能够灵活的运用双重循环,switch语句,结构体的定义、引用、使用,指针的定义、使用等。虽然我接触到的只是C语言的部分基础运用,但这段时间我真的获易匪浅。以前上编程课,我基本上都没有深入理解自己所编的程序,常常就是仿照书本编一一个程序,再运行几遍,没有消化吸收。但这次就不同,这次自己编写程序,遇到难点就问老师同学,上网百度,实践一遍受益匪浅。C语言限制比较的宽松,我们在编程的时候更应该仔细,-个小小的错误都可能导致程序的无法编译。所以对于大的程序,我们更应该先编好主程序,再一个一个模块的编。这样大大的缩短了编程的时间同时又提高了程序的可读性。通过这个项目,我对C语言的运用有了更深刻的认识。我对C语言的实践应更加期待,更加好奇,我相信C语言对我以后的人生将有很大益处。

    展开全文
  • 这是一个基于链表的学生成绩管理系统 使用链表,将链表分为指针域和数据域,使用指针域动态内存分配指向数据将数据存入,之后将数据导入数据域存储数据,把数据域写为结构体以学生的id为基准表示学生的各项资料。...

     这是一个基于链表的简单学生成绩管理系统

           使用链表,将链表分为指针域和数据域,使用指针域动态内存分配指向数据将数据存入,之后将数据导入数据域存储数据,把数据域写为结构体以学生的id为基准表示学生的各项资料。系统实现了学生资料的存储(文件),修改,排序,拥有简单的异常处理,拥有一定的数据处理,同时建立一个稍微美化的界面和比较舒服的运行模式

          其中的账号和密码必须先注册,

          没有注册就不能登录,只有数据是保存的,必须点击退出才可以读数据到文件里面!!!

            可以自行改良系统,另外将注册数据再写到一个文件里面(类似程序中将学生数据存到一个文件里面),然后实现登录数据的保存,以及数据的实时保存等等......

    以下为管理系统的简单的流程图

    运行程序 

                         

    注册

                         

    登陆后

                         

    录入学生资料然后查看资料

                        

    查看文件 

                         

    话不多说上程序,有基础+百度+仔细看你就懂了

    #include <stdio.h>
    #include <stdlib.h>
    #include<windows.h>
    #include<string.h>
    #include<conio.h>
    int num=0,j=0,skip=0,use,analy=0,analyAll=0;
    char zhan[50][50];
    char mima[50][50];
    struct student
    {
        char name[20];
        char id[20];
        int math;
        int english;
        int total;
        int order;
        int avar;
    };
    struct Node
    {
        struct student data; ///数据域
        struct Node*next;    ///指针域
    };
    struct Node *creatList();                                       ///建表头
    struct Node* creatNode(struct student data);                    ///建表身
    void insertNodeByend(struct Node*list,struct student data);     ///尾插
    void deleteNodeByAppoin(struct Node*list,char* id);             ///删除指定信息
    void printList(struct Node*list);                                    ///打印
    void printPoslist(struct Node*list,int n,int m);                ///打印指定目标
    struct Node *find(struct Node*list,char*id);                     ///寻找指定位置
    struct Node *Sort(struct Node *list);                           ///总分排序
    void savefile(struct Node*list,char*filename);                  ///入文件
    void readfile(struct Node*list,char*filename);                  ///读文件
    void jiemian();                                                 ///界面
    void keydown(struct Node*list);                                 ///键入信息
    int login();                                                    ///登陆以及注册
    
    ///创建表
    struct Node *creatList()
    {
        struct Node*list=(struct Node*)malloc(sizeof(struct Node));
        list->next=NULL;
        return list;
    };
    struct Node *creatNode(struct student data)
    {
        struct Node* newNode= (struct Node*)malloc(sizeof(struct Node));
        newNode->data=data;
        newNode->next=NULL;
        return newNode;
    };
    ///插入表
    void insertNodeByend(struct Node*list,struct student data)
    {
        struct Node*newNode=creatNode(data);
        while(list->next!=NULL)
        {
            list=list->next;
        }
        list->next=newNode;
    }
    ///删除表
    void deleteNodeByAppoin(struct Node*list,char* id)
    {
        use=0;
        struct Node*posNode=list->next;
        struct Node*posNodeFront=list;
        if(posNode==NULL)
        {
            printf("===无任何学生资料===\n");
            use=0;
            return;
        }
        else
        {
            while(strcmp(posNode->data.id,id))
            {
                posNodeFront=posNode;
                posNode=posNodeFront->next;
                if(posNode==NULL)
                {
                    printf("\n没有找到相关信息,无法删除\n\n");
                    use=1;
                    return;
                }
            }
            posNodeFront->next=posNode->next;
            free(posNode);
            printf("以上信息已删除!\n");
        }
    }
    ///打印表
    void printList(struct Node*list)
    {
        struct Node*pMove=list->next;
        printf("id\tname\tmath  english\ttotal\tavar\n");
        while(pMove)
        {
            analyAll++;
            printf("%s\t%s\t%d\t%d\t%d\t%d\n",
                    pMove->data.id,
                    pMove->data.name,
                    pMove->data.math,
                    pMove->data.english,
                    pMove->data.total,
                    pMove->data.avar);
            pMove=pMove->next;
        }
        printf("\n");
    }
    void printPoslist(struct Node*list,int n,int m)
    {
    
        struct Node*pMove=list->next;
        printf("id\tname\tmath  english\ttotal\tavar\n");
        while(pMove)
        {
            if(pMove->data.avar>=n&&pMove->data.avar<=m)
                {
                    analy++;
                    printf("%s\t%s\t%d\t%d\t%d\t%d\n",
                        pMove->data.id,
                        pMove->data.name,
                        pMove->data.math,
                        pMove->data.english,
                        pMove->data.total,
                        pMove->data.avar);
                }
            pMove=pMove->next;
         }
        printf("\n");
    }
    ///查找表
    struct Node*find(struct Node*list,char*id)
    {
        struct Node *pMove=list->next;
        while(pMove!=NULL&&strcmp(pMove->data.id,id))
        {
            pMove=pMove->next;
        }
        return pMove;
    };
    ///排序
    struct Node *Sort(struct Node *list)
    {
        int i=1;
        struct Node *q, *s, *pre ,*p;
        p=list->next;
        q=p->next;
        p->next=NULL;
        while(q)
        {
            s=q;
            q=q->next;
            pre=list;
            p=list->next;
            while(p!=NULL && p->data.total > s->data.total)
            {
                pre=p;
                p=p->next;
            }
            s->next=p;
            pre->next=s;
        }
        return list;
    }
    ///存表于文件
    void savefile(struct Node*list,char*filename)
    {
        FILE*fp=fopen("d:\\111.txt","w");
        struct Node*pMove=list->next;
        while(pMove)
        {
            fprintf(fp," %s    %5s      %3d     %3d      %3d     %3d\n",
                                pMove->data.id,
                                pMove->data.name,
                                pMove->data.math,
                                pMove->data.english,
                                pMove->data.total,
                                pMove->data.avar);
            pMove=pMove->next;
        }
        fclose(fp);
    }
    ///读表于文件
    void readfile(struct Node*list,char*filename)
    {
        FILE*fp=fopen("d:\\111.txt","r");
        if(fp==NULL)
        {
            fp=fopen(filename,"a");
        }
        struct student info;
        while(fscanf(fp,"%s%s%d%d%d%d",
                info.id,info.name,
                &info.math,
                &info.english,
                &info.total,
                &info.avar)!=EOF)
        {
            insertNodeByend(list,info);
        }
        fclose(fp);
    }
    ///界面
    void jiemian()
    {
    
        printf("==============学生管理系统============\n");
        printf("|     0.        退出系统             |\n");
        printf("--------------------------------------\n");
        printf("|     1.      录入学生资料           |\n");
        printf("--------------------------------------\n");
        printf("|     2.      修改学生资料           |\n");
        printf("--------------------------------------\n");
        printf("|     3.      查找学生资料           |\n");
        printf("--------------------------------------\n");
        printf("|     4.    查看所有学生资料         |\n");
        printf("--------------------------------------\n");
        printf("|     5.  查看某分数范围学生资料     |\n");
        printf("--------------------------------------\n");
        printf("|     6.      学生成绩分析           |\n");
        printf("--------------------------------------\n");
        printf("|     7.          编者               |\n");
        printf("======================================\n");
    }
    ///键入
    void keydown(struct Node*list)
    {
        int aly;
        char choice,j,n;
        struct student info;
        //scanf("%d",&choice);
        choice=getch();
        system("cls");
        switch(choice)
        {
        case '0':
            skip=1;
            printf("正在退出.....");
            Sleep(500);
            system("cls");
            printf("文件数据自动保存.....");
            Sleep(800);
            system("cls");
            printf("退出成功!");
            break;
        case '1':
            printf("==请问您要输入几个学生的资料(输入0退出)==\n");
            while(scanf("%d",&n)){
            if(n<0)
                {printf("输入错误,请重新输入\n");
                continue;}
            else if(n==0){break;}
    
            system("cls");
            printf("=============录入学生资料=============\n\n");
            printf("==========请输入%d个学生资料==========\n\n学号 姓名 数学 英语\n",n);
            while(scanf("%s%s%d%d",info.id,info.name,&info.math,&info.english))
            {
                if(find(list,info.id)==NULL)
                {
                    info.total=info.math+info.english;
                    info.avar=info.total/2;
                    insertNodeByend(list,info);
                    if(!--n)
                        break;
                }
                else
                {
                    printf("\n               <|TIP|>\n<该学生id已存在,输入有误,请重新输入>\n");
                    continue;
                }
            }
            printf("=====<|录入成功|>=====\n");
            Sleep(500);
            break;
            }
            break;
        case '2':
            printf("=============修改学生资料=============\n");
            printf("请输入1,2,3\n1.删除学生记录\n2.修改学生记录\n3.退出\n");
            while(1)
            {
                j=getch();
                if(j!='1'&&j!='2'&&j!='3')
                {
                    printf("输入错误,请重新输入\n");
                    continue;
                }
                system("cls");
                if(j=='1')
                {
                    printf("请输入学号\n");
                    scanf("%s",info.id);
                    deleteNodeByAppoin(list,info.id);
                    system("pause");
                    break;
                }
                else if(j=='2')
                {
                    printf("请输入学号\n");
                    scanf("%s",info.id);
                    system("cls");
                    printf("学号为 %s 的学生的资料为:\n",info.id);
                    if(find(list,info.id)!=NULL)
                    {
                            printf("学号    姓名     数学     英语     总分     平均分\n");
                            printf(" %s    %4s      %3d     %4d      %3d     %4d\n",
                                            find(list,info.id)->data.id,
                                            find(list,info.id)->data.name,
                                            find(list,info.id)->data.math,
                                            find(list,info.id)->data.english,
                                            find(list,info.id)->data.total,
                                            find(list,info.id)->data.avar);
                    }
                    deleteNodeByAppoin(list,info.id);
                    if(use==0)
                        {
                            printf("\n请输入学生的新资料\n\n学号      姓名      数学     英语\n",n);
                            scanf("%s%s%d%d",info.id,info.name,&info.math,&info.english);
                            info.total=info.math+info.english;
                            info.avar=info.total/2;
                            insertNodeByend(list,info);
                            printf("\n");
                        }
                    system("pause");
                    break;
                }
                else if(j=='3')
                {
                    break;
                }
                else
                {
                    printf("输入无效,请重新输入\n");
                    continue;
                }
            }
            break;
        case '3':
            printf("请输入学号\n");
            scanf("%s",info.id);
            system("cls");
                printf("================学号为%s的学生信息================\n",info.id);
            if(find(list,info.id)!=NULL)
            {
                printf("学号    姓名     数学     英语     总分     平均分\n");
                printf(" %s    %4s      %3d     %4d      %3d     %4d\n",
                            find(list,info.id)->data.id,
                            find(list,info.id)->data.name,
                            find(list,info.id)->data.math,
                            find(list,info.id)->data.english,
                            find(list,info.id)->data.total,
                            find(list,info.id)->data.avar);
            }
            else
                printf("\n       未找到该学生信息\n");
            printf("\n");
            system("pause");
            break;
        case '4':
            printf("=================学生资料=================\n");
            if(list->next==NULL)
            printf("==================无信息==================\n");
            else
            {
                Sort(list);
                printList(list);
            }
            system("pause");
            break;
        case '5':
            Sort(list);
            printf("=============查看指定分数学生资料=============\n");
            printf("请输入两个0~100以内的数表示平均数  a->b 的范围\n ");
            while(scanf("%d%d",&n,&j)){
            if(n<=100&&n>=0&&j<=100&&j>=0)
            {
                system("cls");
                printf("====平均分数段为%d~%d的学生资料====\n",n,j);
                printPoslist(list,n,j);
                break;
            }
            else
                {
                    system("cls");
                    printf("输入错误,请重新输入\n");
                    continue;
                }
            }
            system("pause");
            break;
        case '6':
            printf("======================================\n");
            printPoslist(list,0,59);
            printf("以上 %d 位同学不及格!\n\n",analy);
            printf("======================================\n");
            aly=analy;
            analy=0;
            printPoslist(list,60,79);
            printf("以上 %d 位同学处于中上水准,还需努力\n\n",analy);
            printf("======================================\n");
            analy=0;
            printPoslist(list,80,100);
            printf("以上 %d 位同学考的不错,争取更进一步\n\n",analy);
            printf("======================================\n");
            system("pause");
            system("cls");
            printf("============================================\n");
            if(aly>analyAll/5)
            {
                printf("  总体而言有太多的同学不及格,需要整改!!!\n");
            }
            else if(aly<=analyAll/5&&aly>=analyAll/10)
            {
                printf("   总体而言要加强学生的学习效率,提高成绩\n");
            }
            else
            {
                printf("     总体而言成绩还不错,争取更进一步!\n");
            }
            printf("=============================================\n");
            system("pause");
            system("cls");
            break;
        case '7':
            printf("QAQ 制作者 3181905124 \n");
            system("pause");
            break;
        default:
            printf("输入无效\n");
            system("pause");
            break;
        }
    }
    ///登陆以及不完整的注册
    int login()
    {
        int zhan_num=1;
        int p=1;
        char link;
        memset(zhan,0,sizeof(zhan[0]));
        memset(mima,0,sizeof(zhan[0]));
        printf(" |===  1.登陆  ===|\n");
        printf(" |===  2.注册  ===|\n");
        printf("|==请注册完再登陆==|");
        link=getch();
        system("cls");
        if(link=='1')
        {
            printf("|===  账号 : ===|");
            scanf("%s",zhan[0]);
            printf("\n");
            printf("|===  密码 : ===|");
            scanf("%s",mima[0]);
            system("cls");
            if(strcmp(zhan[0],zhan[1])==0&&strcmp(mima[0],mima[1])==0)
            {
                printf("登陆中.....");
                Sleep(800);
                system("cls");
                return 1;
            }
            else
            {
                printf("登陆中.....\n");
                Sleep(500);
                system("cls");
                printf("登录失败,密码或账号错误\n");
                Sleep(1000);
                system("cls");
                return 0;
            }
        }
        else if(link=='2')
        {
            printf("|===  新账号 : ===|");
            scanf("%s",zhan[1]);
            printf("|===  新密码 : ===|");
            scanf("%s",mima[1]);
            system("cls");
            printf("正在录入....\n");
            Sleep(800);
            printf("录入成功!");
            Sleep(500);
            system("cls");
            return 0;
        }
        else
        {
            printf("即将退出系统\n");
            Sleep(500);
            system("cls");
            printf("正在退出.....");
            Sleep(500);
            system("cls");
            printf("文件数据自动保存.....");
            Sleep(800);
            system("cls");
            printf("退出成功!");
            exit(1);
        }
    }
    int main()
    {
        int logi;
        system("color 0");
        system("color 70");
        MessageBox(NULL,"欢迎进入学生管理系统","学生管理系统",0);
        struct Node*list=creatList();
        readfile(list,"d:\\111.txt");
        do
        {
            logi=0;
            login();
            logi=login();
            if(logi==0)
                continue;
            else
                break;
        }while(1);
        while(1)
        {
            if(skip==1)
                break;
            system("cls");
            jiemian();
            keydown(list);
        }
        savefile(list,"d:\\111.txt");
        return 0;
    }
    

     

    展开全文
  • 用户登录之前,必须在登录界面输入其账号,通过其正确输入的密码登录系统。 (2)报到功能 报到功能主要是管理人员通过查询本校的录取名单将报到学生的信息(至少应包括学号、姓名、班级、身份证号码、语数外三科...
  • C语言实现—学生成绩管理系统

    千次阅读 2019-07-13 11:58:01
    开发环境:Linux(ps:已新增...登录管理员子系统登录“教师子系统登录学生系统” 相关功能:参考码云中的文档 /********************************************************************...

    前言

    开发环境:Linux(ps:已新增Windows版)

    开发语言:C

    相关文件下载

    码云:传送门  GitHub:传送门

    程序主界面:

    登录“管理员子系统” 

     登录“教师子系统”

     登录“学生子系统”

    相关功能:参考码云中的文档

    /*************************************************************************************************************

    校长 老师的登录信息存储在对应的txt文件中

    校长的账号是admin 密码是123,某教师账号1,密码1。某学生账号1,密码123。

    *************************************************************************************************************/

    文件结构:

    main.c ,student.c ,student.h ,teacher.c , teacher.h , admin.c , admin.h, tools.c , tools.h, struct.h, sams.c, sams.h, stu.txt, tea.txt , admin.txt, project_create.sh, Makefile

    相关文件下载在文件开头的超链接里

    结构

    1. 主界面:“1.学生登录”“2.教师登录”“3.校长登录”“0.退出系统”,4个选项进行跳转。(main.c)
    2.1 选择1,跳转“学生登录界面”,输入学号及默认密码(三次错误及锁定此学号,登录成功后即进入“修改密码子界面”)
    
    2.2 选择2,跳转“教师登录界面”,输入工号及默认密码(三次错误及锁定此工号,登录成功后即进入“修改密码子界面”)
    
    2.3 选择3,跳转“校长登录界面”,输入学号及默认密码(登录成功后即进入“修改密码子界面”)
    
    2.4 选择0,关闭程序。
    
    3.1 成功登录及修改密码后,跳转“学生功能界面”(student.c, student.h)
    
        1、第一次登录强制修改密码。
    
        2、查询成绩
    
           排名 不显示姓名和学号。
    
           平均分
    
           最高分
    
           最低分
    
        3、修改密码
    
        4、查看个人信息
    
        5、三次密码错误锁定帐号,由教师解锁
    
        0、返回上一级
    
    
    
    3.2 成功登录及修改密码后,跳转“教师功能界面”(teacher.c ,teacher.h)
    
        1、第一次登录强制修改密码。
    
        2、添加学生(学生的学号自动生成)
    
            单个添加
    
            批量导入
    
        3、删除学生
    
            输入两人次学号确定
    
            删除的学生要记录保存在已退学的文件中
    
        4、查找学生
    
            按姓名查找
    
            按学号查找
    
        5、修改学生信息
    
            修改学生基础信息
    
            修改学生成绩
    
        6、录入学生成绩
    
            单个录入
    
            批量导入
    
        7、重置学生密码
    
        8、显示所有在校学生信息
    
        9、显示所有退出学生信息
    
        10、三次密码错误锁定帐号,由校长解锁
    
    0、返回上一级
    
    
    
    3.3 成功登录及修改密码后,跳转“校长功能界面”(admin.c ,admin.h)
    
        1、第一次登录强制修改密码。
    
        2、能重置自己的密码
    
        3、能重置教师密码
    
        4、添加教师
    
        5、删除教师
    
        6、显示所有在职教师
    
        7、显示所有离职教师
    
        0、返回上一级

     

     

    效果展示:

     

    我给Windows单独写了个。

    补上 stu.txt, tea.txt , admin.txt。编译运行,数据参考结构体。

    main.c

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <conio.h>
    //#include "getch.h"
    #include <string.h>
    #include <stddef.h>
    
    #define pf printf
    #define sf scanf
    #define MAX_STU 100
    #define MAX_TEA 50
    
    typedef struct Student
    {
    	char name[20];
    	char sex;
    	char id[20];
    	char passwd[20];
    	short chinese;
    	short english;
    	short math;
    	short time;
    	short birth;
    	short exist;
    }Student;
    
    typedef struct Teacher
    {
    	char name[20];
    	char sex;
    	char id[20];
    	char passwd[20];
    	short time;
    	short birth;
    	short exist;
    }Teacher;
    
    typedef struct Admin
    {
    	char id[20];
    	char passwd[20];
    	short birth;
    }Admin;
    
    // 声明全局变量
    Student* STU;
    Teacher* TEA;
    Admin* ADM;
    
    // 下标
    int temp = 0;
    int pos = 0;
    int i = 0;
    
    // 系统初始化
    void sams_init(void);
    // 系统开始运行
    void sams_start(void);
    // 系统结束
    void sams_exit(void);
    
    // 管理子系统菜单
    void admin_menu(void);
    // 管理员添加老师
    void admin_add_tea(void);
    // 管理员删除老师
    void admin_del_tea(void);
    // 管理员重置老师
    void admin_reset_tea(void);
    // 管理员显示在职教师列表
    void admin_list_tea(void);
    // 管理员显示离职教师列表
    void admin_list_ubtea(void);
    // 管理员修改密码
    void admin_change_pw(void);
    // 管理员登录
    bool admin_login(void);
    // 运行管理员子系统
    void admin_start(void);
    
    // 学生子系统菜单
    void student_menu(void);
    // 学生查询成绩
    void student_find_score(void);
    // 学生查询成绩
    void student_find_score(void);
    // 学生修改密码
    void student_ch_pw(void);
    // 学生查询个人信息
    void student_find_info(void);
    // 学生登录
    int student_login(void);
    // 运行学生子系统
    void student_start(void);
    
    // 老师子系统菜单
    void teacher_menu(void);
    // 老师添加学生
    void teacher_add_stu(void);
    // 老师删除学生
    void teacher_del_stu(void);
    // 老师查询学生
    void teacher_find_stu(void);
    // 老师修改学生信息
    void teacher_ch_stu_info(void);
    // 老师添加学生成绩
    void teacher_add_stu_score(void);
    // 老师重置学生密码
    void teacher_reset_stu_pw(void);
    // 老师显示在校学生列表
    void teacher_list_stu(void);
    // 老师显示退学学生列表
    void teacher_list_ubstu(void);
    // 老师修改密码
    void teacher_ch_pw(void);
    // 老师登录
    int teacher_login(void);
    // 老师登录
    int teacher_login(void);
    // 运行老师子系统
    void teacher_start(void);
    
    // 获取字符串
    char* get_str(char* str,size_t len);
    // 清理缓冲区
    void clear_stdin(void);
    // 获取性别
    char get_sex(void);
    // 获取键盘指令
    char get_cmd(char start,char end);
    // 获取密码
    char* get_pw(char* passwd,bool is_show,size_t size);
    
    // 主函数
    int main()
    {
    	sams_init();
    	
    	sams_start();
    
    	sams_exit();
    }
    
    // 主菜单
    void sams_menu(void)
    {
    	pf("***欢迎使用指针学生成绩管理系统***\n");
    	pf("1、管理员子系统\n");
    	pf("2、教师子系统\n");
    	pf("3、学生子系统\n");
    	pf("4、退出系统\n");
    	pf("-----------------------------\n");
    }
    
    // 系统初始化
    void sams_init(void)
    {
    	// 申请堆内存、加载数据
    	STU = calloc(MAX_STU,sizeof(Student));
    	TEA = calloc(MAX_TEA,sizeof(Teacher));
    	ADM = calloc(1,sizeof(Admin));
    	pf("系统初始化...\n");
    
    	FILE* afrp = fopen("admin.txt","r");
    	int num = 0;
    	num = fscanf(afrp,"%s %s %hd",ADM[0].id,ADM[0].passwd,&ADM[0].birth);
    	fclose(afrp);
    
    	FILE* sfrp = fopen("stu.txt","r");
    	for(i=0; i<100; i++)
    	{
    		int num = 0;
    		num = fscanf(sfrp,"%s %c %s %s %hd %hd %hd %hd %hd %hd",STU[i].name,&STU[i].sex,STU[i].id,STU[i].passwd,&STU[i].chinese,&STU[i].english,&STU[i].math,&STU[i].time,&STU[i].birth,&STU[i].exist);
    	}
    	fclose(sfrp);
    
    	FILE* tfrp = fopen("tea.txt","r");
    	for(i=0; i<50; i++)
    	{
    		int num = 0;
    		num = fscanf(tfrp,"%s %c %s %s %hd %hd %hd",TEA[i].name,&TEA[i].sex,TEA[i].id,TEA[i].passwd,&TEA[i].time,&TEA[i].birth,&TEA[i].exist);
    	}
    	fclose(tfrp);
    }
    
    // 系统开始运行
    void sams_start(void)
    {
    	// 进入系统的业务流程控制
    	pf("系统开始运行...\n");
    	while(true)
    	{
    		sams_menu();
    		switch(get_cmd('1','4'))
    		{
    			case '1': admin_start(); break;
    			case '2': teacher_start(); break;
    			case '3': student_start(); break;
    			case '4': return;
    		}
    	}
    }
    
    // 系统结束
    void sams_exit(void)
    {
    	FILE* afwp = fopen("admin.txt","w");	
    	int num = 0;
    	num = fprintf(afwp,"%s %s %hd",ADM[0].id,ADM[0].passwd,ADM[0].birth);
    	fclose(afwp);
    
    	FILE* sfwp = fopen("stu.txt","w");
    	for(i=0; i<100; i++)
    	{
    		int num = 0;
    		if(STU[i].sex != 0)
    		{
    			num = fprintf(sfwp,"%s %c %s %s %hd %hd %hd %hd %hd %hd\n",STU[i].name,STU[i].sex,STU[i].id,STU[i].passwd,STU[i].chinese,STU[i].english,STU[i].math,STU[i].time,STU[i].birth,STU[i].exist);
    		}
    	}
    	fclose(sfwp);
    
    	FILE* tfwp = fopen("tea.txt","w");
    	for(i=0; i<50; i++)
    	{
    		int num = 0;
    		if(TEA[i].sex != 0)
    		{
    			num = fprintf(tfwp,"%s %c %s %s %hd %hd %hd\n",TEA[i].name,TEA[i].sex,TEA[i].id,TEA[i].passwd,TEA[i].time,TEA[i].birth,TEA[i].exist);
    		}	
    	}
    	fclose(tfwp);
    	// 释放内存、保存数据
    	free(STU);
    	free(TEA);
    	free(ADM);
    	pf("系统退出...\n");
    }
    
    // 管理子系统菜单
    void admin_menu(void)
    {
    	pf("\n进入管理子系统...\n");
    	pf("1、添加教师\n");
    	pf("2、删除教师\n");
    	pf("3、重置并解锁教师密码\n");
    	pf("4、显示在职教师\n");
    	pf("5、显示已离职教师\n");
    	pf("6、修改自己密码\n");
    	pf("7、返回上一级\n");
    	pf("-----------------\n");
    }
    
    // 管理员添加老师
    void admin_add_tea(void)
    {
    	pf("添加教师\n");
    	char Cteacher_name[20];
    	char Cteacher_sex;
    	char Cteacher_id[20];
    	char Cteacher_pw[20];
    	pf("请输入教师姓名:");
    	get_str(Cteacher_name,20);
    	pf("请输入教师性别:");
    	Cteacher_sex = get_sex();
    	pf("请输入教师工号:");
    	get_str(Cteacher_id,20);
    	pf("请输入教师密码:");
    	get_str(Cteacher_pw,20);
    	int pos = -1; //插入的位置
    	pf("id:%s。\n",TEA[0].id);
    	for(i=0; i<50; i++)
    	{
    		if(TEA[i].sex == '\0' && pos == -1)
    		{
    			pf("pos已定位\n");
    			pos = i;
    		}
    		if(strcmp(TEA[i].id,Cteacher_id)==0)
    		{
    			pf("工号重复,请重新输入!\n");
    			break;
    		}
    		if(i==49)
    		{
    			strcpy(TEA[pos].name,Cteacher_name);
    			TEA[pos].sex = Cteacher_sex;
    			strcpy(TEA[pos].id,Cteacher_id);
    			strcpy(TEA[pos].passwd,Cteacher_pw);
    			pf("添加成功。\n");
    		}
    	}
    	pf("id:%s。\n",TEA[0].id);
    }
    
    // 管理员删除老师
    void admin_del_tea(void)
    {
    	pf("删除教师\n");
    	pf("请输入教师工号:");
    	char Cteacher_id[20]={};	
    	get_str(Cteacher_id,20);
    	for(i=0; i<50; i++)
    	{
    		if(strcmp(Cteacher_id,TEA[i].id)==0)
    		{
    			TEA[i].exist = 1;
    			pf("删除成功!\n");			
    			break;
    		}
    		if(i==49)
    		{
    			pf("无此工号!\n");
    		}
    	}
    	
    }
    
    // 管理员重置老师
    void admin_reset_tea(void)
    {
    	pf("重置密码\n");
    	pf("请输入教师工号:");
    	char Cteacher_id[20]={};
    	get_str(Cteacher_id,20);
    	char Cteacher_pw[20] = "123";
    	for(i=0; i<50; i++)
    	{
    		if(strcmp(TEA[i].id,Cteacher_id)==0)
    		{
    			TEA[i].time = 0;
    			TEA[i].birth = 0;
    			TEA[i].exist = 0;
    			strcpy(TEA[i].passwd,Cteacher_pw); 
    			pf("重置成功!\n");
    			break;
    		}
    		if(i==49)
    		{
    			pf("无此工号.\n");	
    		}	
    	}
    
    }
    
    // 管理员显示在职教师列表
    void admin_list_tea(void)
    {
    	pf("显示在职教师");
    	for(i=0; i<50; i++)
    	{
    		if(TEA[i].sex != '\0')
    		{
    			if(TEA[i].exist != 1)
    			{
    				pf("\n姓名:%s 性别:%c 工号:%s",TEA[i].name,TEA[i].sex,TEA[i].id);
    			}
    		}
    		else
    		{
    			break;
    		}
    	}
    }
    
    // 管理员显示离职教师列表
    void admin_list_ubtea(void)
    {
    	pf("显示离职教师");
    	for(i=0; i<50; i++)
    	{
    		if(TEA[i].sex != '\0')
    		{
    			if(TEA[i].exist == 1)
    			{
    				pf("\n姓名:%s 性别:%c 工号:%s",TEA[i].name,TEA[i].sex,TEA[i].id);
    			}
    		}
    		else
    		{
    			break;
    		}
    	}
    }
    
    //char admin_pw[20]="123";
    //strcpy(admin_pw,admin_passwd);
    
    // 管理员修改密码
    void admin_change_pw(void)
    {
    	char old_pw[20]={};
    	char new_pw[20]={};
    	char new_two_pw[20]={};
    	pf("请输入原密码:");
    	get_pw(old_pw,true,20);
    	printf("\n");
    	pf("请输入新密码:");
    	get_pw(new_pw,true,20);
    	printf("\n");
    	pf("请再次输入新密码:");
    	get_pw(new_two_pw,true,20);
    	printf("\n");
    	if(strcmp(old_pw,ADM[0].passwd)==0)
    	{
    		if(strcmp(new_pw,new_two_pw)==0)
    		{
    			pf("修改密码成功\n");
    			if(ADM[0].birth==0)
    			{
    				ADM[0].birth = 1;
    			}
    			strcpy(ADM[0].passwd,new_pw);
    		}
    		else
    		{
    			pf("两次密码不一致\n");
    		}
    	}
    	else
    	{
    		pf("原密码错误。\n");
    	}
    }
    
    // 管理员登录
    bool admin_login(void)
    {
    	//char admin_id[20] = "admin";
    	char Cadmin_id[20]={};
    	char Cadmin_pw[20]={};
    	pf("请输入用户名:");
    	get_str(Cadmin_id,20);
    	if(Cadmin_id[0]=='\0')
    	{
    		pf("用户名不能为空!\n");
    		return false;
    	}
    	//pf("*%s*\n",Cadmin_id);
    	pf("请输入密码:");
    	get_pw(Cadmin_pw,true,20);
    	//printf("\n*%s*",Cadmin_pw);
    	printf("\n");
    	if(strcmp(Cadmin_id,ADM[0].id)==0 && strcmp(Cadmin_pw,ADM[0].passwd)==0)
    	{
    		//printf("正确\n");
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    
    // 运行管理员子系统
    void admin_start(void)
    {
    	if(!admin_login())
    	{
    		pf("登录失败!\n");
    		return;
    	}
    	while(true)
    	{
    		if(ADM[0].birth==0)
    		{
    			admin_change_pw();
    		}
    		else
    		{
    			admin_menu();
    			switch(get_cmd('1','7'))
    			{
    				case '1': admin_add_tea(); break;
    				case '2': admin_del_tea(); break;
    				case '3': admin_reset_tea(); break;
    				case '4': admin_list_tea(); break;
    				case '5': admin_list_ubtea(); break;
    				case '6': admin_change_pw(); break;
    				case '7': return;
    			}
    		}
    	}
    }
    
    
    // 学生子系统菜单
    void student_menu(void)
    {
    	pf("进入学生子系统...\n");
    	pf("1、查询成绩\n");
    	pf("2、修改密码\n");
    	pf("3、查看个人信息\n");
    	pf("4、返回上一级\n");
    	pf("---------------\n");
    }
    
    // 学生查询成绩
    void student_find_score(void)
    {
    	pf("成绩查询\n");
    	pf("语文:%hd ,英语: %hd ,数学: %hd\n",STU[temp].chinese,STU[temp].english,STU[temp].math);
    }
    
    // 学生修改密码
    void student_ch_pw(void)
    {
    	char old_stu_pw[20]={};
    	char new_stu_pw[20]={};
    	char new_stu_two_pw[20]={};
    	pf("请输入原密码:");
    	get_pw(old_stu_pw,true,20);
    	printf("\n");
    	pf("请输入新密码:");
    	get_pw(new_stu_pw,true,20);
    	printf("\n");
    	pf("请再次输入新密码:");
    	get_pw(new_stu_two_pw,true,20);
    	printf("\n");
    	if(strcmp(old_stu_pw,STU[temp].passwd)==0)
    	{
    		if(strcmp(new_stu_pw,new_stu_two_pw)==0)
    		{
    			pf("修改密码成功\n");
    			if(STU[temp].birth==0)
    			{
    				STU[temp].birth = 1;
    			}
    			strcpy(STU[temp].passwd,new_stu_pw);
    		}
    		else
    		{
    			pf("两次密码不一致\n");
    		}
    	}
    	else
    	{
    		pf("原密码错误。\n");
    	}
    }
    
    // 学生查询个人信息
    void student_find_info(void)
    {
    	pf("个人信息\n");
    	pf("姓名:%s ,性别:%c ,学号: %s\n",STU[temp].name,STU[temp].sex,STU[temp].id);
    }
    
    // 学生登录
    int student_login(void)
    {
    	char Cstudent_id[20]={};
    	char Cstudent_pw[20]={};
    	pf("请输入用户名:");
    	get_str(Cstudent_id,20);
    	if(Cstudent_id[0]=='\0')
    	{
    		pf("用户名不能为空!\n");
    		return -1;
    	}
    	//pf("*%s*\n",Cstudent_id);
    	pf("请输入密码:");
    	get_pw(Cstudent_pw,true,20);
    	//printf("\n*%s*",Cstudent_passwd);
    	printf("\n");
    	for(i=0; i<100; i++)
    	{
    		if(strcmp(Cstudent_id,STU[i].id)==0)
    		{
    			if(STU[i].time==3)
    			{
    				pf("此学号已被锁定,请找教师解锁。\n");
    				return -1;
    			}
    			if(STU[i].exist==1)
    			{
    				pf("此学生已退学。\n");
    				return -1;
    			}
    			if(strcmp(Cstudent_pw,STU[i].passwd)==0)
    			{
    				return i;
    			}
    			else
    			{	
    				STU[i].time++;
    				pf("密码错误.\n");
    				return -1;
    			}
    		}
    	}
    	pf("不存在此学生。\n");
    	return -1;
    }
    
    // 运行学生子系统
    void student_start(void)
    {
    	temp = student_login();
    	if(temp==-1)
    	{
    		pf("登录失败!\n");
    		return;
    	}
    	while(true)
    	{
    		if(STU[temp].birth==0)
    		{
    			student_ch_pw();
    		}
    		else
    		{
    			student_menu();
    			switch(get_cmd('1','4'))
    			{
    				case '1': student_find_score(); break;
    				case '2': student_ch_pw(); break;
    				case '3': student_find_info(); break;		
    				case '4': return;
    			}		
    		}	
    	}
    }
    
    
    // 老师子系统菜单
    void teacher_menu(void)
    {
    	pf("\n进入教师子系统...\n");
    	pf("1、添加学生\n");
    	pf("2、删除学生\n");
    	pf("3、查找学生\n");
    	pf("4、修改学生信息\n");
    	pf("5、录入学生成绩\n");
    	pf("6、重置学生密码\n");
    	pf("7、显示所有在校学生信息\n");
    	pf("8、显示所有退学学生信息\n");
    	pf("9、修改自己密码\n");
    	pf("0、返回上一级\n");
    	pf("-----------------\n");
    }
    
    // 老师添加学生
    void teacher_add_stu(void)
    {
    	pf("添加学生\n");
    	char Cstudent_name[20];
    	char Cstudent_sex;
    	char Cstudent_id[20];
    	char Cstudent_pw[20];
    	pf("请输入学生姓名:");
    	get_str(Cstudent_name,20);
    	pf("请输入学生性别:");
    	Cstudent_sex = get_sex();
    	pf("请输入学生工号:");
    	get_str(Cstudent_id,20);
    	pf("请输入学生密码:");
    	get_str(Cstudent_pw,20);
    	int pos = -1; //插入的位置
    	pf("id:%s。\n",STU[0].id);
    	for(i=0; i<100; i++)
    	{
    		if(STU[i].sex == '\0' && pos == -1)
    		{
    			pf("pos已定位\n");
    			pos = i;
    		}
    		if(strcmp(STU[i].id,Cstudent_id)==1)
    		{
    			pf("学号重复,请重新输入!\n");
    			break;
    		}
    		if(i==99)
    		{
    			strcpy(STU[pos].name,Cstudent_name);
    			STU[pos].sex = Cstudent_sex;
    			strcpy(STU[pos].id,Cstudent_id);
    			strcpy(STU[pos].passwd,Cstudent_pw);
    			pf("添加成功。\n");
    		}
    	}
    	pf("id:%s。\n",STU[0].id);
    }
    
    // 老师删除学生
    void teacher_del_stu(void)
    {
    	pf("删除学生\n");
    	pf("请输入学生学号:");
    	char Cstudent_id[20]={};	
    	get_str(Cstudent_id,20);
    	for(i=0; i<100; i++)
    	{
    		if(strcmp(Cstudent_id,STU[i].id)==0)
    		{
    			STU[i].exist = 1;
    			pf("删除成功!\n");			
    			break;
    		}
    		if(i==99)
    		{
    			pf("无此学号!\n");
    		}
    	}
    	
    }
    
    // 老师查询学生
    void teacher_find_stu(void)
    {
    	pf("请输入学生学号:");
    	char Cstudent_id[20]={};
    	get_str(Cstudent_id,20);
    	for(i=0; i<100; i++)
    	{
    		if(strcmp(Cstudent_id,STU[i].id)==0)
    		{
    			pf("姓名:%s 性别:%c 学号:%s\n",STU[i].name,STU[i].sex,STU[i].id);
    			break;
    		}
    		else if(i==99)
    		{
    			pf("无此学号。\n");
    		}
    	}
    }
    
    // 老师修改学生信息
    void teacher_ch_stu_info(void)
    {
    	pf("请输入学生学号:");
    	char Cstudent_id[20]={};
    	get_str(Cstudent_id,20);
    	for(i=0; i<100; i++)
    	{
    		if(strcmp(Cstudent_id,STU[i].id)==0)
    		{
    			char ch_name[20];
    			char ch_sex;
    			char ch_id[20];
    			pf("原信息:姓名:%s 性别:%c 学号:%s\n",STU[i].name,STU[i].sex,STU[i].id);
    			pf("请输入新姓名:");
    			get_str(ch_name,20);
    			pf("请输入新性别:");
    			if(sf("%c",&ch_sex)==1)
    			{
    				getchar();
    			}
    			pf("请输入新学号:");
    			get_str(ch_id,20);
    			
    			strcpy(STU[i].name,ch_name);
    			STU[i].sex = ch_sex;
    			strcpy(STU[i].id,ch_id);
    
    			pf("信息修改成功。\n");
    			break;
    		}
    		else if(i==99)
    		{
    			pf("无此学号。\n");
    		}
    	}
    }
    
    // 老师添加学生成绩
    void teacher_add_stu_score(void)
    {
    	pf("请输入学生学号:");
    	char Cstudent_id[20]={};
    	get_str(Cstudent_id,20);
    	for(i=0; i<100; i++)
    	{
    		if(strcmp(Cstudent_id,STU[i].id)==0)
    		{
    			short chinese = 0;
    			short english = 0;
    			short math = 0;
    			pf("原信息:语文:%hd 英语:%hd 数学:%hd\n",STU[i].chinese,STU[i].english,STU[i].math);
    			pf("请输入新语文成绩:");
    			if(sf("%hd",&chinese)==1)
    			{
    				getchar();
    			}
    			pf("请输入新英语成绩:");
    			if(sf("%hd",&english)==1)
    			{
    				getchar();
    			}
    			pf("请输入新数学成绩:");
    			if(sf("%hd",&math)==1)
    			{
    				getchar();
    			}
    			
    			STU[i].chinese = chinese;
    			STU[i].english = english;
    			STU[i].math = math;
    
    			pf("信息修改成功。\n");
    			break;
    		}
    		else if(i==99)
    		{
    			pf("无此学号。\n");
    		}
    	}
    }
    
    // 老师重置学生密码
    void teacher_reset_stu_pw(void)
    {
    	pf("重置密码\n");
    	pf("请输入学生学号:");
    	char Cstudent_id[20]={};
    	get_str(Cstudent_id,20);
    	char Cstudent_pw[20] = "123";
    	for(i=0; i<100; i++)
    	{
    		if(strcmp(STU[i].id,Cstudent_id)==0)
    		{
    			STU[i].time = 0;
    			STU[i].birth = 0;
    			STU[i].exist = 0;
    			strcpy(STU[i].passwd,Cstudent_pw); 
    			pf("重置成功!\n");
    			break;
    		}
    		if(i==99)
    		{
    			pf("无此学号.\n");	
    		}	
    	}
    }
    
    // 老师显示在校学生列表
    void teacher_list_stu(void)
    {
    	pf("显示在校学生");
    	for(i=0; i<100; i++)
    	{
    		if(STU[i].sex != '\0')
    		{
    			if(STU[i].exist != 1)
    			{
    				pf("\n姓名:%s 性别:%c 学号:%s",STU[i].name,STU[i].sex,STU[i].id);
    			}
    		}
    		else
    		{
    			break;
    		}
    	}
    }
    
    // 老师显示退学学生列表
    void teacher_list_ubstu(void)
    {
    	pf("显示退学学生");
    	for(i=0; i<100; i++)
    	{
    		if(STU[i].sex != '\0')
    		{
    			if(STU[i].exist == 1)
    			{
    				pf("\n姓名:%s 性别:%c 工号:%s",STU[i].name,STU[i].sex,STU[i].id);
    			}
    		}
    		else
    		{
    			break;
    		}
    	}
    }
    
    // 老师修改密码
    void teacher_ch_pw(void)
    {
    	char old_pw[20]={};
    	char new_pw[20]={};
    	char new_two_pw[20]={};
    	pf("请输入原密码:");
    	get_pw(old_pw,true,20);
    	printf("\n");
    	pf("请输入新密码:");
    	get_pw(new_pw,true,20);
    	printf("\n");
    	pf("请再次输入新密码:");
    	get_pw(new_two_pw,true,20);
    	printf("\n");
    	if(strcmp(old_pw,TEA[pos].passwd)==0)
    	{
    		if(strcmp(new_pw,new_two_pw)==0)
    		{
    			pf("修改密码成功\n");
    			if(TEA[pos].birth==0)
    			{
    				TEA[pos].birth = 1;
    			}
    			strcpy(TEA[pos].passwd,new_pw);
    		}
    		else
    		{
    			pf("两次密码不一致\n");
    		}
    	}
    	else
    	{
    		pf("原密码错误。\n");
    	}
    }
    
    // 老师登录
    int teacher_login(void)
    {
    	char Cteacher_id[20]={};
    	char Cteacher_pw[20]={};
    	pf("请输入用户名:");
    	get_str(Cteacher_id,20);
    	if(Cteacher_id[0]=='\0')
    	{
    		pf("用户名不能为空!\n");
    		return -1;
    	}
    	//pf("*%s*\n",Cteacher_id);
    	pf("请输入密码:");
    	get_pw(Cteacher_pw,true,20);
    	//printf("\n*%s*",Cadmin_passwd);
    	printf("\n");
    	for(i=0; i<50; i++)
    	{
    		if(strcmp(Cteacher_id,TEA[i].id)==0)
    		{
    			if(TEA[i].time==3)
    			{
    				pf("此工号已被锁定,请找管理员解锁。\n");
    				return -1;
    			}
    			if(TEA[i].exist==1)
    			{
    				pf("此教师已离职。\n");
    				return -1;
    			}
    			if(strcmp(Cteacher_pw,TEA[i].passwd)==0)
    			{
    				return i;
    			}
    			else
    			{	
    				TEA[i].time++;
    				pf("密码错误.\n");
    				return -1;
    			}
    		}
    	}
    	pf("不存在此教师。\n");
    	return -1;
    }
    
    // 运行老师子系统
    void teacher_start(void)
    {
    	pos = teacher_login();
    	if(pos==-1)
    	{
    		pf("登录失败!\n");
    		return;
    	}
    	while(true)
    	{
    		if(TEA[pos].birth==0)
    		{
    			teacher_ch_pw();
    			
    		}
    		else
    		{
    			teacher_menu();
    			switch(get_cmd('0','9'))
    			{
    				case '1': teacher_add_stu(); break;
    				case '2': teacher_del_stu(); break;
    				case '3': teacher_find_stu(); break;
    				case '4': teacher_ch_stu_info(); break;
    				case '5': teacher_add_stu_score(); break;
    				case '6': teacher_reset_stu_pw(); break;
    				case '7': teacher_list_stu(); break;
    				case '8': teacher_list_ubstu(); break;
    				case '9': teacher_ch_pw(); break;		
    				case '0': return;
    			}		
    		}
    	}
    }
    
    /** tools **/
    // 清理输入缓冲区
    void clear_stdin(void)
    {
    	//stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
    }
    
    // 获取字符串
    char* get_str(char* str,size_t len)
    {
    	if(NULL == str)
    	{
    		puts("empty ptr!");
    		return NULL;
    	}
    
    	char *in=fgets(str,len,stdin);
    
    	size_t cnt = strlen(str);
    	if('\n' == str[cnt-1])
    	{
    		str[cnt-1] = '\0';
    	}
    	else
    	{
    		scanf("%*[^\n]");
    		scanf("%*c");
    	}
    	
    	clear_stdin();
    
    	return str;
    }
    
    // 获取性别
    char get_sex(void)
    {
    	printf("(m男,w女):");
    	while(true)
    	{
    		char sex = getch();
    		if('w' == sex || 'm' == sex)
    		{
    			printf("%s\n",'w'==sex?"女":"男");
    			return sex;
    		}
    	}
    }
    
    // 获取键盘指令
    char get_cmd(char start,char end)
    {
    	clear_stdin();
    
    	printf("请输入指令:");
    	while(true)
    	{
    		char val = getch();
    		if(val >= start && val <= end)
    		{
    			printf("%c\n",val);
    			return val;
    		}
    	}
    }
    
    // 获取密码
    char* get_pw(char* passwd,bool is_show,size_t size)
    {
    	if(NULL == passwd) return NULL;
    
    	int count = 0;
    	do{
    		char val = getch();
    		if(8 == val)
    		{
    			if(count > 0)
    			{
    				if(is_show)printf("\b \b");
    				count--;
    			}
    			continue;
    		}
    		else if(13 == val)
    		{
    			break;
    		}
    		passwd[count++] = val;
    		if(is_show) printf("*");
    	}while(count < size -1);
    
    	passwd[count] = '\0';
    	return passwd;
    }
    

     

    展开全文
  • C语言写的学生信息管理系统的带登录界面和数据库的源码加上步骤用法谢谢 麻烦哪位高人用C语言写的学生信息管理系统的带登录界面和数据库的源码,加上步骤用法, 谢谢,感谢感谢了,我们老师叫我们做,不然··...
  • c语言图书管理系统

    2021-01-20 15:03:31
    图书管理系统 管理员根据密码登录对图书进行管理 学生直接登录 退出系统 登录界面: 管理员登录后界面 学生登录界面 利用文件保存添加的图书信息,对其修改。 /* @begin_time:2021/1/18 @author:qingfeng */ #...
  • 利用c语言的链表或结构体数组实现学生信息的管理,编写有登录界面学生信息管理系统,可以实现学生信息的录入,显示,删除,排序,统计,文件读写等功能。 二 概要设计 系统功能模块结构如下图所示: 管理员...
  • C语言】学籍管理系统

    万次阅读 多人点赞 2018-06-03 22:34:28
    C语言 – 学籍管理系统 功能简介 链表实现基本的创建增删改查。 成绩分析,链表的冒泡排序。 分管理员,老师,学生三端管理,密码的修改,加密。 分班级管理老师学生。 方框界面,↑↓键控制,ENTER...
  • 利用c语言的链表或结构体数组实现学生信息的管理,编写有登录界面学生信息管理系统,可以实现学生信息的录入,显示,删除,排序,统计,文件读写等功能。 需要C/C++资料的同学请加小编C/C++编程QQ群:825414254...
  • 需要可以自行添加和修改,感觉我写的不好的大神轻点喷。。谢谢 后面可能会优化一下。 linux里面没有conio.h库,所以我用的是自己搞的getch.h库,代码放在最.../*学生成绩管理系统,分为教师界面学生界面,教师界面
  • 基于C语言编写一个学生信息管理系统来实现对学生成绩的管理(数学、C语言、英语),系统要能够实现基本的增、删、改、查等功能,在此基础上还可以自由发挥,要求使用到数组、文件、排序算法等操作。 二、说明 作为一...
  • 1、系统登录分为管理员登录和学生登录,输入相应字符即可选择登录;   2、学生登录,学生使用自己的账号密码登录系统,选择开启的门,即可开启门禁;此外系统还会记录下学生登录的信息,如登录账号、登录时间、...
  • 实用标准文案 C 语言教务管理系统 一程序结构图 精彩文档 实用标准文案 二程序运行截图 1. 个人信息简介 2. 修改颜色 3. 注册界面 精彩文档 实用标准文案 4. 信息保存至文件 5. 登录界面 精彩文档 实用标准文案 6. ...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

学生管理系统登录界面c语言

c语言 订阅