学生信息管理系统

学生信息管理系统

本系统主要使用C语言的结构体、数组、文件读写知识点完成数据的增删查改,本系统主要包括学生信息以及系统用户信息的维护。用户查询数据需要输入账号密码才能登录系统查看学生信息。

主菜单

学生信息管理

登录

登录是输入的密码是不可见的
在这里插入图片描述

查询学生信息

可按不同属性查询信息:

  • 查询所有学生信息
  • 按学号查询学生信息
  • 按姓名查询学生信息
  • 按性别查询学生信息
  • 按出生日期查询学生信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8JzC2jh-1647445713164)(F:\项目练习\csndBlog\img\image-20220316232345989.png)]

新增学生信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1MrvQ1Xd-1647445713165)(F:\项目练习\csndBlog\img\image-20220316233309757.png)]

修改学生信息

g)]

删除学生信息

在这里插入图片描述

系统设置

主要是用于用户的信息维护,包括注册用户信息、退出登录、修改密码等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgZrsS1K-1647445713171)(F:\项目练习\csndBlog\img\image-20220316234019151.png)]

注册用户[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cD1oHed4-1647445713172)(F:\项目练习\csndBlog\img\image-20220316233628888.png)]

若是登录状态注册用户,需要先退出才可登录新的账号,达到账号的切换

若是非登录状态注册用户,可直接返回进行登录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ReCeiwpa-1647445713174)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316233719861.png)]

退出当前用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0XSo3JJv-1647445713175)(F:\项目练习\csndBlog\img\image-20220316233950821.png)]

重置密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFoNhom1-1647446038659)(F:\项目练习\csndBlog\img\image-20220316234651809.png)]

代码实现

代码主要有四部分,附上数据存储的文本文件

main.c

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

#include "student.h"
int main()
{
    initUser();//初始化用户信息
    initStudentData();//初始化学生信息
    //system("cls");
    int flag = 1;
    char menustr[100];
    char str[100];
    while(flag){
        int choose = mainMenu();
        int choose1 = 0;
        int stuFlag = 1;
        int userFlag = 1;
        switch(choose){
            case 1:
                while(currtUser == NULL){
                    int ret = Login();//进行登录操作
                    if(ret != 1){
                        char continuFlag[2];
                        printf("是否继续登录?(Y/N)\n");
                        scanf("%s",continuFlag);
                        if(strcmp(continuFlag,"N") == 0 || strcmp(continuFlag,"n") == 0){
                            stuFlag = 0;
                            break;
                        }else{
                            stuFlag = 1;
                        }
                        system("cls");
                    }
                }
                system("cls");
                while(stuFlag){
                    choose1 = studentMenu("学生信息管理");
                    system("cls");
                    switch(choose1){
                        case 1:
                            QuaryStuInfo("学生信息管理》查询学生信息");
                            break;
                        case 2:
                            AddStuInfo("学生信息管理》新增学生信息");
                            break;
                        case 3:
                            ModifyStuInfo("学生信息管理》修改学生信息");
                            break;
                        case 4:
                            DeleteStuInfo("学生信息管理》删除学生信息");
                            break;
                        case 0:
                            stuFlag = 0;
                            break;
                        default:
                            break;
                    }
                }
                break;
            case 2:
                while(userFlag){
                    int ret;
                    choose1 = userMenu("系统设置");
                    switch(choose1){
                        case 1:
                            AddUser("系统设置》注册用户");
                            break;
                        case 2:
                            ret = CancleUser("系统设置》退出当前用户");
                            break;
                        case 3:
                            ret = ModifyPassword("系统设置》重置密码");
                            break;
                        case 0:
                            userFlag = 0;
                            break;
                        default:
                            break;
                    }
                    if(ret == 1){
                        userFlag = 0;//密码重置成功后需重新登录系统
                    }
                }
                break;
            case 0:
                flag = 0;
                break;
            default:
                break;

        }
    }
    saveUserInfo();//将内存中的数据更新到文本文件中
    saveStuInfo();
    return 0;
}


int studentMenu(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s:\n",menustr);
    printf("1、查询学生信息\n");
    printf("2、新增学生信息\n");
    printf("3、修改学生信息\n");
    printf("4、删除学生信息\n");
    printf("0、返回\n");
    printf("*************************************************\n");
    int choose;
    printf("请输入0-4的数字选择选项:");
    int input = scanf("%d",&choose);
    while(input != 1 || choose < 0 || choose > 4){
        fflush (stdin);
        printf("请输入0-4的数字选择选项:");
        input = scanf("%d",&choose);
    }
    system("cls");
    return choose;
}

int mainMenu(){
    printf("******************学生信息管理系统***************\n");
    printf("主菜单:\n");
    printf("1、学生信息管理\n");
    printf("2、系统设置\n");
    printf("0、退出\n");
    printf("*************************************************\n");
    int choose;
    printf("请输入0-2的数字选择选项:");
    int input = scanf("%d",&choose);
    while(input != 1 || choose < 0 || choose > 2){
        fflush (stdin);
        printf("请输入0-2的数字选择选项:");
        input = scanf("%d",&choose);
    }
    system("cls");
    return choose;
}

int userMenu(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前位置| %s :\n",menustr);
    printf("1、注册用户\n");
    printf("2、退出当前用户\n");
    printf("3、重置密码\n");
    printf("0、返回\n");
    printf("*************************************************\n");
    int choose;
    printf("请输入0-3的数字选择选项:");
    int input = scanf("%d",&choose);
    while(input != 1 || choose < 0 || choose > 3){
        fflush (stdin);
        printf("请输入0-3的数字选择选项:");
        input = scanf("%d",&choose);
    }
    system("cls");
    return choose;
}

student.h

#ifndef STUDENT_H_INCLUDED
#define STUDENT_H_INCLUDED
#define STUDATA "F:\\项目练习\\CProject\\学生信息管理系统\\studentdata.txt"
#define MAXSTUNUM 1000//最大学生数量
#include "user.h"


#endif // STUDENT_H_INCLUDED

//学生结构体
typedef struct Stu{
    char num[15];//学号
    char name[40];//姓名
    char sex[5];//性别
    char birthday[15];//出生日期
    char nativePlace[40];//籍贯
}Student;
Student students[MAXSTUNUM];
int stuNum = 0;//当前学生总数


void initStudentData(){
    FILE *fin = NULL;
    fin = fopen(STUDATA, "r");
    if(fin == NULL){
        printf("无法读取学生信息文件\n");
    }else{
        int ret = fscanf(fin,"%[^,],%[^,],%[^,],%[^,],%s\n",students[stuNum].num,students[stuNum].name,students[stuNum].sex,students[stuNum].birthday,students[stuNum].nativePlace);
        while(ret >= 1){
            stuNum++;
            ret = fscanf(fin,"%[^,],%[^,],%[^,],%[^,],%s\n",students[stuNum].num,students[stuNum].name,students[stuNum].sex,students[stuNum].birthday,students[stuNum].nativePlace);

        }
    }
    fclose(fin);
}
//查询学生信息
void QuaryStuInfo(char menustr[]){
    int flag = 1;
    while(flag){
        printf("******************学生信息管理系统***************\n");
        printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
        printf("当前位置| %s :\n",menustr);
        printf("1、查询所有学生信息\n");
        printf("2、按学号查询学生信息\n");
        printf("3、按姓名查询学生信息\n");
        printf("4、按性别查询学生信息\n");
        printf("5、按出生日期查询学生信息\n");
        printf("0、返回\n");
        printf("*************************************************\n");
        printf("请输入0-5的数字选择选项:");
        int choose;
        int ret = scanf("%d",&choose);
        while(ret != 1 || choose < 0 || choose > 5){
            printf("请输入0-5的数字选择选项:");
            ret = scanf("%d",&choose);
        }
        system("cls");
        switch(choose){
            case 1:
                findAllStu();//查找所有学生信息
                break;
            case 2:
                QuaryStuInfoByNum("学生信息管理》查询学生信息》按学号查询");
                break;
            case 3:
                QuaryStuInfoByName("学生信息管理》查询学生信息》按姓名查询");
                break;
            case 4:
                QuaryStuInfoBySex("学生信息管理》查询学生信息》按性别查询");
                break;
            case 5:
                QuaryStuInfoByBirth("学生信息管理》查询学生信息》按出生日期查询");
                break;
            case 0:
                flag = 0;
                break;
            default:
                break;
        }

    }
}


int findStuByNum(char num[]){
    int index = -1;
    for (int i = 0; i < stuNum; i++){
        if(strcmp(num,students[i].num) == 0){
            index = i;
            break;
        }
    }
   return index;
}

void QuaryStuInfoByNum(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s :\n",menustr);
    char num[15];
    printf("请输入学生学号:");
    int ret = scanf("%s",&num);
    while(ret != 1){
        fflush (stdin);
        printf("请输入学生学号:");
        ret = scanf("%s",&num);
    }
    int index = findStuByNum(num);
    if(index<0){
        printf("未找到学号为\"%s\"的学生信息\n",num);
    }else{
        printf("%-15s%-10s%-8s%-15s%-40s\n","学号","姓名","性别","出生日期","籍贯");
        printf("%-15s%-10s%-8s%-15s%-40s\n",students[index].num,students[index].name,students[index].sex,students[index].birthday,students[index].nativePlace);
    }
}

void QuaryStuInfoByName(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s :\n",menustr);
    char name[40];
    printf("请输入学生姓名:");
    int ret = scanf("%s",&name);
    while(ret != 1){
        fflush (stdin);
        printf("请输入学生姓名:");
        ret = scanf("%s",&name);
    }
    Student stu;
    for (int i = 0; i < stuNum; i++){
        if(strcmp(name,students[i].name) == 0){
            stu = students[i];
            break;
        }
    }
    if(strlen(stu.num) == 0){
        printf("未找到姓名为\"%s\"的学生信息\n",name);
    }else{
        printf("%-15s%-10s%-8s%-15s%-40s\n","学号","姓名","性别","出生日期","籍贯");
        printf("%-15s%-10s%-8s%-15s%-40s\n",stu.num,stu.name,stu.sex,stu.birthday,stu.nativePlace);
    }
}
void QuaryStuInfoBySex(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s :\n",menustr);
    char sex[5];
    printf("请输入学生性别:");
    int ret = scanf("%s",&sex);
    while(ret != 1){
        fflush (stdin);
        printf("请输入学生性别:");
        ret = scanf("%s",&sex);
    }
    Student stu[stuNum];
    int j = 0;
    for (int i = 0; i < stuNum; i++){
        if(strcmp(sex,students[i].sex) == 0){
            stu[j] = students[i];
            j++;
        }
    }
    if(j == 0){
        printf("未找到性别为\"%s\"的学生信息\n",sex);
    }else{
        printf("%-15s%-10s%-8s%-15s%-40s\n","学号","姓名","性别","出生日期","籍贯");
        for(int i = 0; i < j; i++){
            printf("%-15s%-10s%-8s%-15s%-40s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday,stu[i].nativePlace);
        }
    }
}
void QuaryStuInfoByBirth(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s :\n",menustr);
    char birth[10];
    printf("请输入学生出生日期:");
    int ret = scanf("%s",&birth);
    while(ret != 1){
        fflush (stdin);
        printf("请输入学生出生日期:");
        ret = scanf("%s",&birth);
    }
    Student stu[stuNum];
    int j = 0;
    for (int i = 0; i < stuNum; i++){
        if(strcmp(birth,students[i].birthday) == 0){
            stu[j] = students[i];
            j++;
        }
    }
    if(j == 0){
        printf("未找到性别为\"%s\"的学生信息\n",birth);
    }else{
        printf("%-15s%-10s%-8s%-15s%-40s\n","学号","姓名","性别","出生日期","籍贯");
        for(int i = 0; i < j; i++){
            printf("%-15s%-10s%-8s%-15s%-40s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday,stu[i].nativePlace);
        }
    }
}
//新增学生信息
void AddStuInfo(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s :\n",menustr);
    Student inputInfo;
    printf("请输入以下信息并使用换行隔开:%-10s%-10s%-10s%-15s%-10s\n","学号","姓名","性别","出生日期","籍贯");
    scanf("%s%s%s%s%s",inputInfo.num,inputInfo.name,inputInfo.sex,inputInfo.birthday,inputInfo.nativePlace);
    int index = findStuByNum(inputInfo.num);
    if(index<0){
        students[stuNum] = inputInfo;//更新内存中的数据,退出系统时将数据更新到文本文件中;
        stuNum ++;
        printf("学号为\"%s\"的学生信息已保存成功\n", students[stuNum].num);
    }else{
        printf("学号为\"%s\"的学生信息已存在\n",students[index].num);
    }
    printf("%-15s%-10s%-8s%-15s%-40s\n","学号","姓名","性别","出生日期","籍贯");
    printf("%-15s%-10s%-8s%-15s%-40s\n",inputInfo.num,inputInfo.name,inputInfo.sex,inputInfo.birthday,inputInfo.nativePlace);

}

//修改学生信息
void ModifyStuInfo(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s :\n",menustr);
    findAllStu();
    printf("请输入需要修改的学生学号:\n");
    char num[15];
    scanf("%s",num);
    int index = findStuByNum(num);
    if(index<0){
       printf("学号为%s的学生信息不存在,请核实\n",num);
    }else{
        int flag = 1;
        while(flag){
            printf("请选择需要修改的信息;\n");
            printf("1、修改姓名\n");
            printf("2、修改性别\n");
            printf("3、修改出生日期\n");
            printf("4、修改籍贯\n");
            printf("0、返回\n");
            printf("请输入0-4的数字选择选项:\n");
            int choose;
            int input = scanf("%d",&choose);
            Student stu;
            while(input != 1 || choose < 0 || choose > 4){
                fflush (stdin);
                printf("请输入0-4的数字选择选项:\n");
                input = scanf("%d",&choose);
            }
            switch(choose){
                case 1:
                    printf("学号为%s的原姓名为\"%s\"\n",students[index].num,students[index].name);
                    printf("请输入姓名:\n");
                    scanf("%s",students[index].name);
                    printf("学号为%s的姓名已更新为\"%s\"\ns",students[index].num,students[index].name);
                    break;
                case 2:
                    printf("学号为%s的原性别为\"%s\"\n",students[index].num,students[index].sex);
                    printf("请输入性别:\n");
                    scanf("%s",students[index].sex);
                    printf("学号为%s的性别已更新为\"%s\"\n",students[index].num,students[index].sex);
                    break;
                case 3:
                    printf("学号为%s的原出生日期为\"%s\"\n",students[index].num,students[index].birthday);
                    printf("请输入出生日期:\n");
                    scanf("%s",students[index].birthday);
                    printf("学号为%s的出生日期已更新为\"%s\"\n",students[index].num,students[index].birthday);
                    break;
                case 4:
                    printf("学号为%s的原籍贯为\"%s\"\n",students[index].num,students[index].nativePlace);
                    printf("请输入籍贯:\n");
                    scanf("%s",students[index].nativePlace);
                    printf("学号为%s的籍贯已更新为\"%s\"\n",students[index].num,students[index].nativePlace);
                    break;
                case 0:
                    flag = 0;
                    break;
                default:
                    break;
            }

        }
    }
}

//删除学生信息
void DeleteStuInfo(char menustr[]){
    printf("******************学生信息管理系统***************\n");
    printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    printf("当前位置| %s :\n",menustr);
    findAllStu();
    printf("请输入需要删除的学生学号:\n");
    char num[15];
    scanf("%s",num);
    int index = findStuByNum(num);
    Student oldStu = students[index];
    if(index<0){
       printf("学号为%s的学生信息不存在,请核实\n",num);
    }else{
        for(int i = index; i < stuNum-1; i++){
            students[i] = students[i+1];
        }
        stuNum -- ;
        printf("已删除学生信息:%-15s%-10s%-8s%-15s%-40s\n","学号","姓名","性别","出生日期","籍贯");
        printf("                %-15s%-10s%-8s%-15s%-40s\n",oldStu.num,oldStu.name,oldStu.sex,oldStu.birthday,oldStu.nativePlace);
    }
}

void findAllStu(){
    printf("所有学生信息如下:\n");
    printf("%-15s%-10s%-8s%-15s%-40s\n","学号","姓名","性别","出生日期","籍贯");
    if(stuNum == 0){
        printf("暂无数据\n");
    }
    for(int i = 0;i<stuNum; i++){
        printf("%-15s%-10s%-8s%-15s%-40s\n",students[i].num,students[i].name,students[i].sex,students[i].birthday,students[i].nativePlace);
    }
}

void saveStuInfo(){
    FILE *fp = NULL;
    fp = fopen(STUDATA, "w");
    if(fp == NULL){
        printf("无法读取学生信息文件\n");
    }else{
        for(int i = 0; i < stuNum; i++){
            fprintf(fp,"%s,%s,%s,%s,%s\n",students[i].num,students[i].name,students[i].sex,students[i].birthday,students[i].nativePlace);
        }
    }
    fclose(fp);
}

user.h

#include<dos.h>
#include "utils.h"
#ifndef USER_H_INCLUDED
#define USER_H_INCLUDED
#define MAXUSERNUM 500//最大用户数量
#endif // USER_H_INCLUDED
#define USERDATA "F:\\项目练习\\CProject\\学生信息管理系统\\userdata.txt"


typedef struct Users{
    char type[10];//admin:管理员;normal:普通用户
    char account[30];
    char userName[30];
    char password[20];
}User;
User users[MAXUSERNUM];
User *currtUser = NULL;
int usercount = 0;


void initUser(){
    FILE *fin = NULL;
    fin = fopen(USERDATA, "r");
    if(fin == NULL){
        printf("无法读取用户信息文件\n");
    }else{
        int ret=fscanf(fin,"%[^,],%[^,],%[^,],%s\n",users[usercount].type,users[usercount].account,users[usercount].userName,users[usercount].password);
        while(ret >= 1){
            usercount++;
            ret = fscanf(fin,"%[^,],%[^,],%[^,],%s\n",users[usercount].type,users[usercount].account,users[usercount].userName,users[usercount].password);
            //usercount++;
        }
    }
    fclose(fin);
}

int findUserByAccount(char account[]){
    int index = -1;
    for(int i=0; i < usercount; i ++){
        if(strcmp(users[i].account,account) == 0){
            index = i;
            break;
        }
    }
    return index;
}

void AddUser(char menustr[]){
    if(currtUser != NULL){
        printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
    }
    printf("当前位置| %s :\n",menustr);
    User inputInfo;
    printf("请输入邮箱账号:");
    scanf("%s",inputInfo.account);
    int index = findUserByAccount(inputInfo.account);//查询用户信息是否已存在
    if(index >= 0){
        printf("该账号信息已注册!\n");
        printf("%s\n",users[index].userName);
    }else{
        printf("请选择要注册的用户类型(请输入1-2的数字):\n");
        printf("1、普通用户\n");
        printf("2、管理员\n");
        int userType;
        int ret = scanf("%d",&userType);
        while(ret != 1 || userType < 1 || userType > 2){
            printf("请选择要注册的用户类型(请输入1-2的数字):\n");
            ret = scanf("%d",&userType);
        }
        /** 创建普通用户和管理员的详细逻辑 **/
        if(userType == 1){
            strcpy(inputInfo.type, "normal");
        }else if(userType == 2){
            strcpy(inputInfo.type, "admin");
        }
        printf("请输入用户名:");
        scanf("%s",inputInfo.userName);
        char password1[20];
        char password2[20];
        printf("请输入密码:");
        scanf("%s",password1);
        printf("请确认密码:");
        scanf("%s",password2);
        while(strcmp(password1,password2) != 0){
            printf("前后密码不一致,请重新输入:");
            scanf("%s",password1);
            printf("请确认密码:");
            scanf("%s",password2);
        }
        char *str = encode(password1);
        strcpy(inputInfo.password,str);
        users[usercount] = inputInfo;
        printf("用户已创建,账号为%s\n",users[usercount].account);
        usercount ++;
    }
}

//登录系统,验证密码
int Login(){
    char account[100];
    char pwd[20];
    printf("**************用户登录*************\n");
    printf("请输入登陆账号:\n");
    scanf("%s",&account);
    int index = findUserByAccount(account);
    if(index < 0){
        printf("未找到该用户信息,请核对登录账号是否正确\n");
        return 0;
    }
    printf("请输入登陆密码:\n");
    strcpy(pwd,getPwd());
    int pwdCorrect = checkPwd(users[index].password,pwd);
    if(pwdCorrect == 1){
        currtUser = (User *)malloc(sizeof(User));
        strcpy(currtUser->userName,users[index].userName);
        strcpy(currtUser->account,users[index].account);
        strcpy(currtUser->password,users[index].password);
        strcpy(currtUser->type,users[index].type);
        return 1;
    }else{
        return 0;
    }
}

int checkPwd(char password[],char pwd[]){
    char *str = encode(pwd);
    if(strcmp(password,str) == 0){
        printf("密码正确\n");
        return  1;
    }else{
        printf("密码错误\n");
        return  0;
    }
}

void findAllUser(){
    printf("%-10s%-30s%-30s%\n","角色","账号","用户名");
    for(int i = 0; i < usercount; i++ ){
        printf("%-10s%-30s%-30s%\n",users[i].type,users[i].account,users[i].userName);
    }
}

int CancleUser(char menustr[]){
    if(currtUser != NULL){
        printf("当前用户| %s | %s\n",currtUser->account,currtUser->userName);
        printf("当前位置| %s :\n",menustr);
        char str[2];
        printf("您确定退出吗?(Y/N)\n");
        scanf("%s",str);
        if(strcmp(str,"Y") == 0 || strcmp(str,"y") == 0 ){
            free(currtUser);
            currtUser = NULL;
            return 1;
        }
        return 0;
    }else{
        return 1;
    }
}

void saveUserInfo(){
    FILE *fp = NULL;
    fp = fopen(USERDATA,"w");
    if(fp == NULL){
        printf("读取用户信息文件出错\n");
    }else{
        for(int i = 0; i < usercount; i++){
            fprintf(fp,"%s,%s,%s,%s\n",users[i].type,users[i].account,users[i].userName,users[i].password);
        }
    }
    fclose(fp);
}

int ModifyPassword(char menustr[]){
    printf("当前位置| %s :\n",menustr);
    User inputInfo;
    printf("请输入账号:");
    scanf("%s",inputInfo.account);
    int index = findUserByAccount(inputInfo.account);//查询用户信息是否已存在
    if(index < 0){
        printf("该账号信息已不存在!\n");
    }else{
        char oldpwd[20];
        char newpwd[20];
        char newpwd1[20];
        //todo  可增加一些忘记密码的操作来重置密码
        printf("请输入原密码:");
        scanf("%s",oldpwd);
        int checkRet = checkPwd(users[index].password,oldpwd);
        if(checkRet  == 1){
            printf("请输入新密码:");
            scanf("%s",newpwd);
            printf("请确认密码:");
            scanf("%s",newpwd1);
            while(strcmp(newpwd,newpwd1) != 0){
                printf("请输入新密码:");
                scanf("%s",newpwd);
                printf("请确认密码:");
                scanf("%s",newpwd1);
            }
            char *str = encode(newpwd1);
            strcpy(users[index].password,str);
            printf("密码已重置,可重新登录系统\n");
           return 1;
        }
    }
    return 0;
}

utils.h

#ifndef UTILS_H_INCLUDED
#define UTILS_H_INCLUDED
#include<conio.h>


#endif // UTILS_H_INCLUDED

char * encode(char pwd[]){
    int length = strlen(pwd);
    char* encodePwd = (char*)calloc(200, sizeof(char*) );
    for(int i = 0; i < length; i++){
        encodePwd[i]=pwd[i]+i+5;
    }
    return encodePwd;
}

char * decode(char decodePwd[]){
    int length = strlen(decodePwd);
    char* pwd = (char*)calloc(200, sizeof(char*) );
    for(int i = 0; i < length; i++){
        pwd[i]=decodePwd[i]-i-5;
    }
    return pwd;
}

char * getPwd(){
    char* pwd = (char*)calloc(20, sizeof(char*) );
    int i=0;
    while(1){
        pwd[i]=getch();
        if(pwd[i]=='\r'){
            break;
        }
        if(pwd[i] == '\b' && i>0){
            i--;
            putchar('\b');
            continue;
        }
        i++;
    }
    pwd[i]='\0';
    return pwd;
}

数据附件

学生数据信息

在这里插入图片描述

用户数据信息

密码保存的是加密后的密文
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生信息

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷兰局

你的鼓励是对我创作最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值