IT技术篇

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

2018-11-18  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读