美文网首页IT技术篇
C语言能写的学生管理系统是真是假?以前的是假的,现在才是真的

C语言能写的学生管理系统是真是假?以前的是假的,现在才是真的

作者: 榆西带你飞 | 来源:发表于2018-11-18 23:32 被阅读42次

    信息管理系统

    简介:

    该管理系统分为三个权限:学生,老师,管理员

    用双向链表实现,文件储存,有账号密码功能。

    密码实现MD5加密,较难破解

    实现了链表添加,查找,排序,删除等基本操作

    管理员能够管理学生和老师的密码和账号,进行一些简单的添加,删除,更改操作。老师具有信息录入 ,查看,修改,查询,删除,排序权限。而学生有信息查看,查询和排序权限。管理员具有信息录入 ,查看,修改,查询,删除,排序和老师学生信息管理权限。对于密码,这里采用及其难以破解的MD5密码加密,根据MD5源码进行改编,最终得到MD5的函数,对录入的密码进行加密操作,然后储存到文件中,这样就保证了即使知道文件并打开文件,也无法破解其密码!

    共分为6个文件

    5个.cpp文件  1个.h文件

    下面上代码 :

    mian.cpp:

    #include<stdio.h> 

    #include<math.h> 

    #include<string.h> 

    #include<conio.h> 

    #include<stdlib.h> 

    #include<ctype.h> 

    #include<io.h> 

    #define LEN  100 

    #define PAGE 3  //分页输出时,每页的学生个数 

    void admin(); 

    int menu_admin(); 

    void change_change_order_tea(); 

    int  menu_change_order_tea(); 

    void change_delete_order_tea(); 

    void teacher(); 

    int menu_tea(); 

    bool judge_tea(); 

    int read_file_order_tea(); 

    void change_change_order_stu(); 

    int  menu_change_order_stu(); 

    void change_delete_order_stu(); 

    void student(); 

    int menu_stu(); 

    bool judge_stu(); 

    int read_file_order_stu(); 

    bool judge_admin(); 

    void change_order_admin(); 

    int  menu(); 

    int  pmenu_search(); 

    int  read_file(); 

    void pdisplay(); 

    void pdisplay_sort(); 

    int  psearch_mname(); 

    int  psearch_schoolnum(); 

    int  psearch_phone(); 

    int  psearch_sex(); 

    int  psearch_age(); 

    int  delete_pmenu_search(); 

    int  delete_psearch_schoolnum(); 

    int  delete_psearch_mname(); 

    int  delete_psearch_phone(); 

    int  delete_psearch_age(); 

    int  delete_psearch_sex(); 

    int  change_pmenu_search(); 

    int  change_psearch_schoolnum(); 

    int  change_psearch_mname(); 

    int  change_psearch_phone(); 

    int  change_psearch_age(); 

    int  change_psearch_sex(); 

    int  psort_menu(); 

    void psort_age(); 

    void psort_schoolnum(); 

    void save_order_tea(); 

    void save(); 

    void save_order_stu(); 

    typedef struct { 

            char mname[9]; 

            char schoolnum[15]; 

            char sex[3]; 

            int  age; 

            char address[20]; 

            char phone[15];     

        }Node; 

    typedef struct student 

        Node information; 

        struct student *next; 

        struct student *last; 

    }STUDENT; 

    typedef struct 

        char username[100]; 

        char password[100]; 

    }Node_order_tea; 

    typedef struct order_tea 

        Node_order_tea information; 

        struct order_tea *next; 

        struct order_tea *last; 

    }ORDER_TEA; 

    typedef struct 

        char username[100]; 

        char password[100]; 

    }Node_order_stu; 

    typedef struct order_stu 

        Node_order_stu information; 

        struct order_stu *next; 

        struct order_stu *last; 

    }ORDER_STU; 

    int num=0;                  //文件中总的学生信息个数 

    STUDENT *head=NULL,*iend,*inew; 

    FILE *fp;                    //文件指针 

    int num_order_tea=0;                  //文件中总的学生信息个数 

    ORDER_TEA *head_order_tea=NULL,*iend_order_tea,*inew_order_tea; 

    FILE *fp_order_tea; 

    int num_order_stu=0;                  //文件中总的学生信息个数 

    ORDER_STU *head_order_stu=NULL,*iend_order_stu,*inew_order_stu; 

    FILE *fp_order_stu; 

    unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};   

    /**********************新加入*****************************/ 

    int main() 

        int chioce; 

        do 

        { 

            printf("\n\t\t********************************\n"); 

            printf("\t\t*        1.老师                *\n"); 

            printf("\t\t*        2.学生                *\n"); 

            printf("\t\t*        3.管理员              *\n");         

            printf("\t\t*        0.退出                *\n"); 

            printf("\t\t*********************************\n"); 

            printf("\t\t请选择登陆身份:"); 

            scanf("%d",&chioce); 

            switch(chioce) 

            {   

                case 1: 

                    teacher(); 

                    break; 

                case 2: 

                    student(); 

                    break; 

                case 3: 

                    admin(); 

                default: 

                    break; 

            } 

        }while(chioce!=0); 

        return 0; 

    }

    自写信息管理系统—— C 实现

    2017/01/06 · C/C++ · 2 评论 · C语言, 信息管理

    原文出处: chudongfang2015,2016-06-29 

    信息管理系统

    简介:

    该管理系统分为三个权限:学生,老师,管理员

    用双向链表实现,文件储存,有账号密码功能。

    密码实现MD5加密,较难破解

    实现了链表添加,查找,排序,删除等基本操作

    管理员能够管理学生和老师的密码和账号,进行一些简单的添加,删除,更改操作。老师具有信息录入 ,查看,修改,查询,删除,排序权限。而学生有信息查看,查询和排序权限。管理员具有信息录入 ,查看,修改,查询,删除,排序和老师学生信息管理权限。对于密码,这里采用及其难以破解的MD5密码加密,根据MD5源码进行改编,最终得到MD5的函数,对录入的密码进行加密操作,然后储存到文件中,这样就保证了即使知道文件并打开文件,也无法破解其密码!

    共分为6个文件

    5个.cpp文件  1个.h文件

    下面上代码 :

    mian.cpp:

    #include<stdio.h> 

    #include<math.h> 

    #include<string.h> 

    #include<conio.h> 

    #include<stdlib.h> 

    #include<ctype.h> 

    #include<io.h> 

    #define LEN  100 

    #define PAGE 3  //分页输出时,每页的学生个数 

    void admin(); 

    int menu_admin(); 

    void change_change_order_tea(); 

    int  menu_change_order_tea(); 

    void change_delete_order_tea(); 

    void teacher(); 

    int menu_tea(); 

    bool judge_tea(); 

    int read_file_order_tea(); 

    void change_change_order_stu(); 

    int  menu_change_order_stu(); 

    void change_delete_order_stu(); 

    void student(); 

    int menu_stu(); 

    bool judge_stu(); 

    int read_file_order_stu(); 

    bool judge_admin(); 

    void change_order_admin(); 

    int  menu(); 

    int  pmenu_search(); 

    int  read_file(); 

    void pdisplay(); 

    void pdisplay_sort(); 

    int  psearch_mname(); 

    int  psearch_schoolnum(); 

    int  psearch_phone(); 

    int  psearch_sex(); 

    int  psearch_age(); 

    int  delete_pmenu_search(); 

    int  delete_psearch_schoolnum(); 

    int  delete_psearch_mname(); 

    int  delete_psearch_phone(); 

    int  delete_psearch_age(); 

    int  delete_psearch_sex(); 

    int  change_pmenu_search(); 

    int  change_psearch_schoolnum(); 

    int  change_psearch_mname(); 

    int  change_psearch_phone(); 

    int  change_psearch_age(); 

    int  change_psearch_sex(); 

    int  psort_menu(); 

    void psort_age(); 

    void psort_schoolnum(); 

    void save_order_tea(); 

    void save(); 

    void save_order_stu(); 

    typedef struct { 

            char mname[9]; 

            char schoolnum[15]; 

            char sex[3]; 

            int  age; 

            char address[20]; 

            char phone[15];     

        }Node; 

    typedef struct student 

        Node information; 

        struct student *next; 

        struct student *last; 

    }STUDENT; 

    typedef struct 

        char username[100]; 

        char password[100]; 

    }Node_order_tea; 

    typedef struct order_tea 

        Node_order_tea information; 

        struct order_tea *next; 

        struct order_tea *last; 

    }ORDER_TEA; 

    typedef struct 

        char username[100]; 

        char password[100]; 

    }Node_order_stu; 

    typedef struct order_stu 

        Node_order_stu information; 

        struct order_stu *next; 

        struct order_stu *last; 

    }ORDER_STU; 

    int num=0;                  //文件中总的学生信息个数 

    STUDENT *head=NULL,*iend,*inew; 

    FILE *fp;                    //文件指针 

    int num_order_tea=0;                  //文件中总的学生信息个数 

    ORDER_TEA *head_order_tea=NULL,*iend_order_tea,*inew_order_tea; 

    FILE *fp_order_tea; 

    int num_order_stu=0;                  //文件中总的学生信息个数 

    ORDER_STU *head_order_stu=NULL,*iend_order_stu,*inew_order_stu; 

    FILE *fp_order_stu; 

    unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};   

    /**********************新加入*****************************/ 

    int main() 

        int chioce; 

        do 

        { 

            printf("\n\t\t********************************\n"); 

            printf("\t\t*        1.老师                *\n"); 

            printf("\t\t*        2.学生                *\n"); 

            printf("\t\t*        3.管理员              *\n");         

            printf("\t\t*        0.退出                *\n"); 

            printf("\t\t*********************************\n"); 

            printf("\t\t请选择登陆身份:"); 

            scanf("%d",&chioce); 

            switch(chioce) 

            {   

                case 1: 

                    teacher(); 

                    break; 

                case 2: 

                    student(); 

                    break; 

                case 3: 

                    admin(); 

                default: 

                    break; 

            } 

        }while(chioce!=0); 

        return 0; 

    }

    #include<stdio.h> 

    #include<math.h> 

    #include<string.h> 

    #include<conio.h> 

    #include<stdlib.h> 

    #include<ctype.h> 

    #include<io.h> 

    #define LEN  100 

    #define PAGE 3  //分页输出时,每页的学生个数 

    void admin(); 

    int menu_admin(); 

    void change_change_order_tea(); 

    int  menu_change_order_tea(); 

    void change_delete_order_tea(); 

    void teacher(); 

    int menu_tea(); 

    bool judge_tea(); 

    int read_file_order_tea(); 

    void change_change_order_stu(); 

    int  menu_change_order_stu(); 

    void change_delete_order_stu(); 

    void student(); 

    int menu_stu(); 

    bool judge_stu(); 

    int read_file_order_stu(); 

    bool judge_admin(); 

    void change_order_admin(); 

    int  menu(); 

    int  pmenu_search(); 

    int  read_file(); 

    void pdisplay(); 

    void pdisplay_sort(); 

    int  psearch_mname(); 

    int  psearch_schoolnum(); 

    int  psearch_phone(); 

    int  psearch_sex(); 

    int  psearch_age(); 

    int  delete_pmenu_search(); 

    int  delete_psearch_schoolnum(); 

    int  delete_psearch_mname(); 

    int  delete_psearch_phone(); 

    int  delete_psearch_age(); 

    int  delete_psearch_sex(); 

    int  change_pmenu_search(); 

    int  change_psearch_schoolnum(); 

    int  change_psearch_mname(); 

    int  change_psearch_phone(); 

    int  change_psearch_age(); 

    int  change_psearch_sex(); 

    int  psort_menu(); 

    void psort_age(); 

    void psort_schoolnum(); 

    void save_order_tea(); 

    void save(); 

    void save_order_stu(); 

    typedef struct { 

            char mname[9]; 

            char schoolnum[15]; 

            char sex[3]; 

            int  age; 

            char address[20]; 

            char phone[15];     

        }Node; 

    typedef struct student 

        Node information; 

        struct student *next; 

        struct student *last; 

    }STUDENT; 

    typedef struct 

        char username[100]; 

        char password[100]; 

    }Node_order_tea; 

    typedef struct order_tea 

        Node_order_tea information; 

        struct order_tea *next; 

        struct order_tea *last; 

    }ORDER_TEA; 

    typedef struct 

        char username[100]; 

        char password[100]; 

    }Node_order_stu; 

    typedef struct order_stu 

        Node_order_stu information; 

        struct order_stu *next; 

        struct order_stu *last; 

    }ORDER_STU; 

    int num=0;                  //文件中总的学生信息个数 

    STUDENT *head=NULL,*iend,*inew; 

    FILE *fp;                    //文件指针 

    int num_order_tea=0;                  //文件中总的学生信息个数 

    ORDER_TEA *head_order_tea=NULL,*iend_order_tea,*inew_order_tea; 

    FILE *fp_order_tea; 

    int num_order_stu=0;                  //文件中总的学生信息个数 

    ORDER_STU *head_order_stu=NULL,*iend_order_stu,*inew_order_stu; 

    FILE *fp_order_stu; 

    unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};   

    /**********************新加入*****************************/ 

    int main() 

        int chioce; 

        do 

        { 

            printf("\n\t\t********************************\n"); 

            printf("\t\t*        1.老师                *\n"); 

            printf("\t\t*        2.学生                *\n"); 

            printf("\t\t*        3.管理员              *\n");         

            printf("\t\t*        0.退出                *\n"); 

            printf("\t\t*********************************\n"); 

            printf("\t\t请选择登陆身份:"); 

            scanf("%d",&chioce); 

            switch(chioce) 

            {   

                case 1: 

                    teacher(); 

                    break; 

                case 2: 

                    student(); 

                    break; 

                case 3: 

                    admin(); 

                default: 

                    break; 

            } 

        }while(chioce!=0); 

        return 0; 

    }

    feature.cpp

    #include"head.h" 

    /********************获取文件名;读取内容;给num,fp,head,flieopenname赋值;创建链表***********************/ 

    //打开文件,并读取文件 

    int read_file() 

        int i; 

        int fno,fsize; 

        if((fp=fopen("student_system.txt","rt"))==NULL)//判断文件是否存在,若存在打开 

        {                                  //否则询问是否继续打开 

            printf("\n库文件不存在!\n"); 

            return 0; 

        } 

        rewind(fp);                            //使文件内部指针移动到文件的开始位置 

        fno=fileno(fp);              //获取文件描述字                       

        fsize=filelength(fno);      //计算文件大小,以字节为单位 

        num=fsize/sizeof(Node);    //计算文件包含的学生信息数目 

        iend=inew=(STUDENT *)malloc(sizeof(STUDENT));//申请动态空间 

        fread(inew,sizeof(Node),1,fp);  //以Node(结构体)的空间大小读数据 

        for(i=1;i<=num;i++)  //利用for循环创建链表,并把数据储存到其中 

        { 

            if(i==1)          //第一个节点的创建 

            { 

                inew->next=head; 

                inew->last=NULL; //双向链表 

                iend=inew; 

                head=inew; 

            } 

            else 

            { 

                inew->next=NULL; 

                inew->last=iend; 

                iend->next=inew; 

                iend      =inew; 

            } 

            inew=(STUDENT *)malloc(sizeof(STUDENT)); 

            fread(inew,sizeof(Node),1,fp); 

        } 

        free(inew);//释放最后一个没有储存数据的节点 

        fclose(fp);//关闭文件 

        return num; 

    /****************************输入函数*******************/ 

    STUDENT *pinput() 

        char ch; 

        if(num==0)//判断是否是第一次录入 

        { 

            iend=inew=(STUDENT *)malloc(sizeof(STUDENT));//申请空间 

            inputone(inew);                              //录入信息 

            while(1)                                       

            { 

                num++;           

                if(num==1)      //录入第一个学生信息时,第一个节点的指针指向           

                { 

                    inew->next=NULL; 

                    inew->last=NULL; 

                    iend      =inew; 

                    head      =inew; 

                } 

                else            //在第一个节点的存在下,进行其他节点的录入               

                { 

                    inew->next=NULL;    //新建立节点next指向NULL         

                    inew->last=iend;    //新建立节点last指向上一个节点 

                    iend->next=inew;    //第一个next->下一个节点 

                    iend      =inew;    //让iend指向最后一个节点 

                } 

                inew=(STUDENT *)malloc(sizeof(STUDENT)); 

                printf("信息输入完毕,是否继续?(是-Y  否-N):"); 

                scanf("\n%c",&ch); 

                if(ch=='N'||ch=='n')    break;//判断是否跳出循环 

                inputone(inew); 

            } 

            free(inew);                  //释放未存储数据的节点 

            return head; 

        } 

        else//非第一次录入时 

        { 

            while(1)//进行循环输入,并进行判断,是否跳出循环 

            { 

                inew=(STUDENT *)malloc(sizeof(STUDENT)); 

                getch(); 

                inputone(inew); 

                num++; 

                inew->next=NULL;  //新建立节点next指向NULL     

                inew->last=iend;  //新建立节点last指向上一个节点 

                iend->next=inew;  //第一个next->下一个节点   

                iend      =inew;  //让iend指向最后一个节点 

                printf("信息输入完毕,是否继续?(是-Y  否-N):"); 

                scanf("\n%c",&ch); 

                if(ch=='N'||ch=='n') 

                break; 

            } 

            return head; 

        } 

    void inputone(STUDENT *temp) 

        printf("************************\n"); 

        printf("请输入学生的姓名:"); 

        scanf("%s",inew->information.mname); 

        printf("请输入学生的学号:"); 

        scanf("%s",inew->information.schoolnum); 

        printf("请输入学生的性别(男-M  女-F):"); 

        scanf("%s",inew->information.sex); 

        printf("请输入学生的年龄:"); 

        scanf("%d",&inew->information.age); 

        printf("请输入学生的家庭住址:"); 

        scanf("%s",inew->information.address); 

        printf("请输入学生的电话号码:"); 

        scanf("%s",inew->information.phone); 

    /****************************输出函数*******************/ 

    void displayone(STUDENT *temp) //为简化程序-  单个输出函数,用于调用! 

        printf("**********************************\n"); 

        printf("姓名:%s\n",temp->information.mname); 

        printf("学号:%s\n",temp->information.schoolnum); 

        printf("性别:%s\n",temp->information.sex); 

        printf("年龄:%d\n",temp->information.age); 

        printf("家庭住址:%s\n",temp->information.address); 

        printf("电话号码:%s\n",temp->information.phone); 

        printf("===========================\n"); 

    /**************************以head为起始输出链表******************************/ 

    void pdisplay()//核心思想:对链表进行操作,然后利用while循环输出 

        STUDENT *temp,*temp1; 

        int page=1,lastnum=num%PAGE,stu=0,i,page1; 

        char ch; 

        int choice; 

        if(head==NULL)//判断文件中是否有数据 

        { 

            printf("文件中没有数据!!\n"); 

            getch(); 

            return; 

        } 

        temp=head; 

        page1=num/PAGE+1;//进行页数的初始化 

        if(lastnum==0)//判断最后一页的数据数 

        { 

            lastnum=PAGE; 

            page1=page1-1; 

        }   

        while(1)//保留最后节点的指针 

        { 

            if(temp->next==NULL) 

            { 

                temp1=temp; 

                break; 

            } 

            temp=temp->next; 

        } 

        temp=head; 

        rewind(fp);     

    loop:  printf("----------------------------第%d页-----------------------------\n",page); 

        while(temp!=NULL)//利用while 结构进行输出 知道到最后节点 

        { 

            displayone(temp); 

            temp=temp->next; 

            stu++; 

            if(stu==PAGE)//一页输出完后进行选择,对其链表进行操作 

            { 

                printf("4---首页  <--上一页--1                  3--下一页-->  尾页---6  \n"); 

                scanf("%d",&choice); 

                switch(choice) 

                { 

                    case 1://上一页,清屏 ,对其链表进行操作 

                        for(i=1;i<=PAGE+stu;i++) 

                        { 

                            temp=temp->last; 

                            if(temp==head) 

                            { 

                                temp=head; 

                                page=1; 

                                break; 

                            } 

                        } 

                        if(temp!=head) 

                        page--; 

                        stu=0; 

                        system("cls"); 

                        goto loop; 

                        break; 

                    case 4://第一页,清屏 ,把head值赋给temp 

                        system("cls"); 

                        temp=head; 

                        stu=0; 

                        page=1; 

                        goto loop; 

                        break; 

                    case 6://最后一页,清屏 ,对链表进行操作,找到相应链表值赋给temp 

                        system("cls"); 

                        temp=temp1; 

                        for(i=1;i<=lastnum-1;i++) 

                        { 

                            temp=temp->last; 

                            if(temp==head) 

                            { 

                                temp=head; 

                                page=1; 

                                break; 

                            } 

                        } 

                        if(temp!=head) 

                        page=page1; 

                        goto loop;   

                        break; 

                    case 3://下一页,清屏 继续输出, 

                        system("cls"); 

                        stu=0; 

                        page++; 

                        goto loop; 

                        break;               

                } 

                stu=0; 

            }   

        }           

        if(temp==NULL) 

        { 

            printf("\n-------------已到尾页,是否返回首页?(是-Y 否-N):---------------"); 

            scanf("\n%c",&ch); 

            if(toupper(ch)=='Y') 

            { 

                temp= head; 

                page=1; 

                stu=0; 

                system("cls"); 

                goto loop; 

            } 

        }     

        getch(); 

    }

    注:登陆密码为:1234567

    关于怎么快速学C/C++编程,有什么方法,这个问题,想必大家都已经心中有数了,打算深入了解这个行业的朋友,可以加下小编的C/C++编程学习群:194503814

    不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。

    点击链接加入群聊【C/C++学习入门】:https://jq.qq.com/?_wv=1027&k=5ZynWCN

    相关文章

      网友评论

        本文标题:C语言能写的学生管理系统是真是假?以前的是假的,现在才是真的

        本文链接:https://www.haomeiwen.com/subject/cjvnfqtx.html