成绩管理系统-C++作业


#define MATH 0
#define CHINESE 1
#define ENGLISH 2
#define HIGHMATH 3
#define BIGGESTSTUDENT 50
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#include <windows.h>
typedef struct
{
    
    
    int ID;
    char name[20];
    char sex[20];
    int score[4];
} Student;
//学生信息总表
Student student[BIGGESTSTUDENT] = {
    
    0};

//总课表
char AllCourse[4][100] = {
    
    "数学", "语文", "英语", "计算机"};
bool PasswordVerify();
//初始化程序读取数据总表
void ReadStudentAllTable();
//写入数据总表
void WriteStudentAllTable();

//输入学生信息
void InputStudent();
//通过姓名查找学生的信息结构体
Student *SeekStudent(char *name);
//通过ID查找学生的信息结构体
Student *SeekStudent(int ID);
//寻找总表空位
Student *SeekVoidTable();

//通过ID更改学生ID信息
void ModifyStudentID(int oldID, int newID);
//通过姓名更改学生ID信息
void ModifyStudentID(char *oldname, int newID);

//通过ID更改学生名字
void ModifyStudentName(int ID, char *name);
//通过名字更改学生名字
void ModifyStudentName(char *oldname, char *newname);

//通过ID更改更改学生性别
void ModifyStudentSex(int ID, char *sex);
//通过名字更改更改学生性别
void ModifyStudentSex(char *name, char *sex);

//通过ID更改更改成绩   课程参数
//MATH 数学     CHINESE 汉语    ENGLISH 英语     HIGHMATH 计算机
void ModifyStudentScore(int ID, int course, int score);
//通过名字更改更改成绩
void ModifyStudentScore(char *name, int course, int score);

//显示所有学生成绩
void ShowAllStudentScore();

//学生通过ID查询成绩
void ShowStudentScore(int ID);
//学生通过姓名查询成绩
void ShowStudentScore(char *name);

//查询成绩名次
void SeekStudentSort(int ID);

//成绩排序输出
//参数排序科目,4为总成绩排序
void SortAllScore(int course);

//统计各科分数段人数
//参数统计科目,分数段  min<分数<=max,5为总成绩统计
//返回该分数段人数
int StatsCourseScore(float max, float min, int course);

//统计杂七杂八的及格率什么的
//参数排序科目,5为总成绩排序
void StatsAll(int course);

//通过ID修改基础信息
void ModifyBaseInformation(int ID);

//通过名字修改基础信息
void ModifyBaseInformation(char *name);

//通过ID修改成绩
void ModifyScoreInformation(int ID);
//通过姓名修改成绩
void ModifyScoreInformation(char *name);

//显示所有学生基本信息
void ShowAllStudentInformation();

void toxy(int x, int y); //将光标移动到X,Y坐标处
void color(short x);     //设置颜色
void over();             //退出
//登陆
void Login();
//管理员菜单
void RootMenu();
//学生菜单
void StudentMenu();
//修改密码
bool ModifyPassword();

//修改学生个人或成绩信息
void ModifyStudentInformationMenu();

//初始化程序读取数据总表
void ReadStudentAllTable()
{
    
    
    FILE *fp;                          //文件指针
    fp = fopen("./mysocre.txt", "rb"); //以追加的方式打开名字为mybook的二进制文件
    if (fp != NULL)
    {
    
    
        if (fread(&student, sizeof(Student) * BIGGESTSTUDENT, 1, fp) != 1) //将p所指向的一段大小为N的内容存入fp所指向的文件中
        {
    
    
            printf("配置文件错误");
        }
    }
    else
    {
    
    
        printf("配置文件错误");
    }
    fclose(fp); //关闭文件
}
void color(short x)
{
    
    
    if (x >= 0 && x <= 15)
    {
    
    
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
    }
    else
    {
    
    
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
    }
}

void toxy(int x, int y) //将光标移动到X,Y坐标处
{
    
    
    COORD pos = {
    
    x, y};
    HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(Out, pos);
}
//写入数据总表
void WriteStudentAllTable()
{
    
    
    FILE *fp; //文件指针
    fp = fopen("./mysocre.txt", "wb");
    if (fp == NULL)
    {
    
    
        fclose(fp); //关闭文件
        fp = fopen("./mysocre.txt", "wb+");
    }

    if (fwrite(&student, sizeof(Student) * BIGGESTSTUDENT, 1, fp) != 1) //将p所指向的一段大小为N的内容存入fp所指向的文件中
    {
    
    
        printf("写入配置文件错误");
    }
    fclose(fp); //关闭文件
}

//寻找总表空位
Student *SeekVoidTable()
{
    
    
    for (int i = 0; i < 100; i++)
    {
    
    
        if (student[i].ID == 0)
        {
    
    
            return &student[i];
        }
    }
}

//输入学生信息
void InputStudent()
{
    
    
    //Student *tempstu = SeekVoidTable();
    char i;
    for (; i != 27;)
    {
    
    
        Student *tempstu = SeekVoidTable();
        printf("请输入学号:");
        scanf("%d", &tempstu->ID);
        printf("请输入姓名:");
        scanf("%s", tempstu->name);
        printf("请输入性别:");
        scanf("%s", tempstu->sex);
        printf("请输入数学:");
        scanf("%d", &tempstu->score[0]);
        printf("请输入语文:");
        scanf("%d", &tempstu->score[1]);
        printf("请输入英语:");
        scanf("%d", &tempstu->score[2]);
        printf("请输入计算机:");
        scanf("%d", &tempstu->score[3]);
        WriteStudentAllTable();
        printf("继续输入请按回车,结束输入请按Esc\n");
        i = getch();                //暂停程序当i接收后继续下一条指令
        for (; i != 13 && i != 27;) //保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
            i = getch();
        //WriteStudentAllTable();
    }
}

//通过姓名查找学生的信息结构体
Student *SeekStudent(char *name)
{
    
    
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        if (strcmp(student[i].name, name) == 0)
        {
    
    
            return &student[i];
        }
    }
    return NULL;
}

//通过ID查找学生的信息结构体
Student *SeekStudent(int ID)
{
    
    
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        if (student[i].ID == ID)
        {
    
    
            return &student[i];
        }
    }
    return NULL;
}

//通过ID更改学生ID信息
void ModifyStudentID(int oldID, int newID)
{
    
    
    Student *tempstu = SeekStudent(oldID);
    if (tempstu != NULL)
    {
    
    
        tempstu->ID = newID;
        WriteStudentAllTable();
    }
}
//通过姓名更改学生ID信息
void ModifyStudentID(char *oldname, int newID)
{
    
    
    Student *tempstu = SeekStudent(oldname);
    if (tempstu != NULL)
    {
    
    
        tempstu->ID = newID;
        WriteStudentAllTable();
    }
}

//通过ID更改学生名字
void ModifyStudentName(int ID, char *name)
{
    
    
    Student *tempstu = SeekStudent(ID);
    if (tempstu != NULL)
    {
    
    
        memcpy(tempstu->name, name, sizeof(tempstu->name));
        WriteStudentAllTable();
    }
}
//通过名字更改学生名字
void ModifyStudentName(char *oldname, char *newname)
{
    
    
    Student *tempstu = SeekStudent(oldname);
    if (tempstu != NULL)
    {
    
    
        memcpy(tempstu->name, newname, sizeof(tempstu->name));
        WriteStudentAllTable();
    }
}

//通过ID更改更改学生性别
void ModifyStudentSex(int ID, char *sex)
{
    
    
    Student *tempstu = SeekStudent(ID);
    if (tempstu != NULL)
    {
    
    
        memcpy(tempstu->sex, sex, sizeof(tempstu->sex));
        WriteStudentAllTable();
    }
}
//通过名字更改更改学生性别
void ModifyStudentSex(char *name, char *sex)
{
    
    
    Student *tempstu = SeekStudent(name);
    if (tempstu != NULL)
    {
    
    
        memcpy(tempstu->name, name, sizeof(tempstu->name));
        WriteStudentAllTable();
    }
}

//通过ID更改更改成绩
void ModifyStudentScore(int ID, int course, int score)
{
    
    
    Student *tempstu = SeekStudent(ID);
    if (tempstu != NULL)
    {
    
    
        tempstu->score[course] = score;
        WriteStudentAllTable();
    }
    else
    {
    
    
        printf("学生不存在");
    }
}
//通过名字更改更改成绩
void ModifyStudentScore(char *name, int course, int score)
{
    
    
    Student *tempstu = SeekStudent(name);
    if (tempstu != NULL)
    {
    
    
        tempstu->score[course] = score;
        WriteStudentAllTable();
    }
    else
    {
    
    
        printf("学生不存在");
    }
}

//显示所有学生成绩
void ShowAllStudentScore()
{
    
    
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        if (student[i].ID != 0)
        {
    
    
            printf("学号ID:%d\t姓名:%s\t数学:%d\t汉语:%d\t英语:%d\t计算机:%d\t",
                   student[i].ID, student[i].name, student[i].score[0], student[i].score[1], student[i].score[2], student[i].score[3]);
        }
    }
}

//学生通过ID查询成绩
void ShowStudentScore(int ID)
{
    
    
    Student *tempstu = SeekStudent(ID);
    if (tempstu != NULL && tempstu->ID != 0)
    {
    
    
        printf("学号ID:%d\t姓名:%s\t数学:%d\t汉语:%d\t英语:%d\t计算机:%d\t总成绩:%d\t",
               tempstu->ID, tempstu->name, tempstu->score[0], tempstu->score[1], tempstu->score[2], tempstu->score[3],
               tempstu->score[0] + tempstu->score[1] + tempstu->score[2] + tempstu->score[3]);
    }
    else
    {
    
    
        printf("学生不存在");
    }
}
//学生通过姓名查询成绩
void ShowStudentScore(char *name)
{
    
    
    Student *tempstu = SeekStudent(name);
    if (tempstu != NULL && tempstu->ID != 0)
    {
    
    
        printf("学号ID:%d\t姓名:%s\t数学:%d\t汉语:%d\t英语:%d\t计算机:%d\t总成绩:%d\t",
               tempstu->ID, tempstu->name, tempstu->score[0], tempstu->score[1], tempstu->score[2], tempstu->score[3],
               tempstu->score[0] + tempstu->score[1] + tempstu->score[2] + tempstu->score[3]);
    }
    else
    {
    
    
        printf("学生不存在");
    }
}

//查询总成绩名次
void SeekStudentSort(int ID)
{
    
    

    int rank = 1;
    int score = 0;
    Student *tempstu = SeekStudent(ID);
    if (tempstu != NULL && tempstu->ID != 0)
    {
    
    
        for (int i = 0; i < 4; i++)
        {
    
    
            score += tempstu->score[i];
        }
        for (int i = 0; i < BIGGESTSTUDENT; i++)
        {
    
    
            int otherscore = 0;
            for (int j = 0; j < 4; j++)
            {
    
    
                otherscore += student[i].score[j];
            }
            if (score < otherscore)
            {
    
    
                rank++;
            }
        }
        printf("总名次为:%d", rank);
    }
    else
    {
    
    
        printf("学生不存在");
    }
}

//成绩排序输出
void SortAllScore(int course)
{
    
    
    int tempsort[BIGGESTSTUDENT] = {
    
    0};
    int tempscore[BIGGESTSTUDENT] = {
    
    0};
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        tempsort[i] = i;
        if (course != 4)
        {
    
    
            tempscore[i] = student[i].score[course];
        }
        else
        {
    
    
            for (int j = 0; j < 4; j++)
            {
    
    
                tempscore[i] += student[i].score[j];
            }
        }
    }
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        for (int j = 0; j < BIGGESTSTUDENT - i - 1; j++)
        {
    
    
            if (tempscore[j] < tempscore[j + 1])
            {
    
    
                int temp = tempscore[j];
                tempscore[j] = tempscore[j + 1];
                tempscore[j + 1] = temp;

                temp = tempsort[j];
                tempsort[j] = tempsort[j + 1];
                tempsort[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        if (student[tempsort[i]].ID != 0)
        {
    
    

            printf("学号ID:%d\t姓名:%s\t数学:%d\t汉语:%d\t英语:%d\t计算机:%d\t总成绩:%d\t\n",
                   student[tempsort[i]].ID, student[tempsort[i]].name, student[tempsort[i]].score[0], student[tempsort[i]].score[1], student[tempsort[i]].score[2], student[tempsort[i]].score[3],
                   student[tempsort[i]].score[0] + student[tempsort[i]].score[1] + student[tempsort[i]].score[2] + student[tempsort[i]].score[3]);
            printf("------------------------------------------------------------------------------------------------------------------------\n");
        }
    }
}
//统计各科分数段人数
//参数统计科目,5为总成绩统计
int StatsCourseScore(float max, float min, int course)
{
    
    
    int number = 0;
    float tempscore = 0;
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        if (course != 5)
        {
    
    
            tempscore = student[i].score[course];
            if (tempscore <= max && tempscore > min)
            {
    
    
                number++;
            }
        }
        else
        {
    
    
            for (int j = 0; j < 4; j++)
            {
    
    
                tempscore = student[i].score[j];
            }
            if (tempscore <= max && tempscore > min)
            {
    
    
                number++;
            }
        }
    }
    return number;
}

//统计杂七杂八的及格率什么的
//参数排序科目,5为总成绩排序
void StatsAll(int course)
{
    
    
    float pass = 0, max = 0, min = 100, avg = 0, all = 0;
    int passpeople = 0;
    int allpeople = 0;
    if (course != 5)
    {
    
    
        for (int i = 0; i < BIGGESTSTUDENT; i++)
        {
    
    
            if (student[i].ID != 0)
            {
    
    
                allpeople++;
                if (student[i].score[course] > max)
                {
    
    
                    max = student[i].score[course];
                }
                if (student[i].score[course] < min)
                {
    
    
                    min = student[i].score[course];
                }
                if (student[i].score[course] >= 60)
                {
    
    
                    passpeople++;
                }
                all += student[i].score[course];
            }
        }
        pass = passpeople * 1.0 / allpeople;
        avg = all / allpeople;
        printf("科目:%s\t总分:%.2f\t及格率:%.2f\t最高分:%.2f\t最低分:%.2f\t平均分:%.2f\t\n\n", AllCourse[course], all, pass, max, min, avg);
    }
    else
    {
    
    
        printf("科目错误");
    }
}

//通过ID修改基础信息
void ModifyBaseInformation(int ID)
{
    
    
    Student *tempstu = SeekStudent(ID);
    if (tempstu != NULL)
    {
    
    
        printf("请输入学号:");
        scanf("%d", &tempstu->ID);
        printf("请输入姓名:");
        scanf("%s", tempstu->name);
        printf("请输入性别:");
        scanf("%s", tempstu->sex);
        WriteStudentAllTable();
    }
    else
    {
    
    
        printf("学生不存在");
    }
}

//通过姓名修改基础信息
void ModifyBaseInformation(char *name)
{
    
    
    Student *tempstu = SeekStudent(name);
    if (tempstu != NULL)
    {
    
    
        printf("请输入学号:");
        scanf("%d", &tempstu->ID);
        memset(tempstu->name, '\0', sizeof(tempstu->name));
        printf("请输入姓名:");
        scanf("%s", tempstu->name);
        memset(tempstu->sex, '\0', sizeof(tempstu->sex));
        printf("请输入性别:");
        scanf("%s", tempstu->sex);
        WriteStudentAllTable();
    }
    else
    {
    
    
        printf("学生不存在");
    }
}

//通过ID修改成绩
void ModifyScoreInformation(int ID)
{
    
    
    Student *tempstu = SeekStudent(ID);
    if (tempstu != NULL)
    {
    
    
        printf("请输入数学:");
        scanf("%d", &tempstu->score[0]);
        printf("请输入语文:");
        scanf("%d", &tempstu->score[1]);
        printf("请输入英语:");
        scanf("%d", &tempstu->score[2]);
        printf("请输入计算机:");
        scanf("%d", &tempstu->score[3]);
        WriteStudentAllTable();
    }
    else
    {
    
    
        printf("学生不存在");
    }
}

//通过姓名修改成绩
void ModifyScoreInformation(char *name)
{
    
    
    Student *tempstu = SeekStudent(name);
    if (tempstu != NULL)
    {
    
    
        printf("请输入数学:");
        scanf("%d", &tempstu->score[0]);
        printf("请输入语文:");
        scanf("%d", &tempstu->score[1]);
        printf("请输入英语:");
        scanf("%d", &tempstu->score[2]);
        printf("请输入计算机:");
        scanf("%d", &tempstu->score[3]);
        WriteStudentAllTable();
    }
    else
    {
    
    
        printf("学生不存在");
    }
}

//显示所有学生基本信息
void ShowAllStudentInformation()
{
    
    
    for (int i = 0; i < BIGGESTSTUDENT; i++)
    {
    
    
        if (student[i].ID != 0)
        {
    
    
            printf("学号:%d\t姓名:%s\t性别:%s\n", student[i].ID, student[i].name, student[i].sex);
            printf("-----------------------------------------------\n");
        }
    }
}

//登陆
void Login()
{
    
    
    system("cls"); //清屏
    color(15);     //设置一个好看的颜色
    toxy(50, 5);   //将光标移动到(50,5)坐标处
    printf("    成绩管理系统");
    toxy(48, 8);
    printf("|     1.管理登录       |");
    toxy(48, 10);
    printf("|     2.学生入口       |");
    toxy(48, 12);
    printf("|     3.退出系统       |");
    toxy(48, 14);
    printf("| 请按键选择,回车确定 |");
    printf("\n");
    char choose[10];
    char t;
    //选择表
    char choosetable[3][100] = {
    
    "1", "2", "3"};
    //选择是否合规
    bool judgechoose = false;
    do
    {
    
    
        toxy(48, 16);
        scanf("%s", choose);
        for (int i = 0; i < 3; i++)
        {
    
    
            if (strcmp(choose, choosetable[i]) == 0)
            {
    
    
                judgechoose = true;
                break;
            }
            if (i == 3)
            {
    
    
                printf("\n选择不合规,请重新输入功能选项:");
            }
        }
    } while (!judgechoose);
    switch (choose[0])
    {
    
    
    case '1':
        //管理员登录
        if (PasswordVerify())
        {
    
    
            while (true)
            {
    
    
                RootMenu();
            }
        }
        break;

    case '2':
        //学生入口
        while (true)
        {
    
    
            StudentMenu();
        }
        break;
    case '3':
        //退出
        over();
        break;
    }
}

//修改学生个人或成绩信息
void ModifyStudentInformationMenu()
{
    
    
    system("cls");
    printf("**************************************************");
    printf("\n 1.修改学生基本信息\n");
    printf("\n 2.修改学生成绩\n");
    printf("\n 3.返回上一层\n");
    printf("\n 请按键选择,回车确定\n");
    printf("*************************************************\n");
    //选择
    char choose[10];
    //选择表
    char choosetable[3][100] = {
    
    "1", "2", "3"};
    //选择是否合规
    bool judgechoose = false;
    do
    {
    
    
        scanf("%s", choose);
        for (int i = 0; i < 3; i++)
        {
    
    
            if (strcmp(choose, choosetable[i]) == 0)
            {
    
    
                judgechoose = true;
                break;
            }
            if (i == 3)
            {
    
    
                printf("\n选择不合规,请重新输入功能选项:");
            }
        }
    } while (!judgechoose);
    int tempID;
    switch (choose[0])
    {
    
    
    case '1':
        system("cls");
        printf("输入需要修改的ID:");
        scanf("%d", &tempID);
        ModifyBaseInformation(tempID);
        printf("\n\n\n******按任意键继续******\n\n");
        system("pause");
        system("cls");
        break;
    case '2':
        system("cls");
        printf("输入需要修改的ID:");
        scanf("%d", &tempID);
        ModifyScoreInformation(tempID);
        printf("\n\n\n******按任意键继续******\n\n");
        system("pause");
        system("cls");
        break;
    case '3':
        break;
    }
}

//管理员菜单
void RootMenu()
{
    
    
    system("cls");
    printf("**************************************************");
    printf("\n 1.输入学生成绩\n");
    printf("\n 2.更改学生信息\n");
    printf("\n 3.显示学生基本信息\n");
    printf("\n 4.成绩统计分析\n");
    printf("\n 5.统计各科各分数段人数\n");
    printf("\n 6.学生成绩排名\n");
    printf("\n 7.修改密码\n");
    printf("\n 8.返回上一层\n");
    printf("\n 请按键选择,回车确定\n");
    printf("*************************************************\n");
    //选择
    char choose[10];
    //选择表
    char choosetable[8][100] = {
    
    "1", "2", "3", "4", "5", "6", "7", "8"};
    //选择是否合规
    bool judgechoose = false;
    do
    {
    
    
        scanf("%s", choose);
        for (int i = 0; i < 8; i++)
        {
    
    
            if (strcmp(choose, choosetable[i]) == 0)
            {
    
    
                judgechoose = true;
                break;
            }
            if (i == 8)
            {
    
    
                printf("\n选择不合规,请重新输入功能选项:");
            }
        }
    } while (!judgechoose);
    switch (choose[0])
    {
    
    
    case '1':
        //输入学生信息
        system("cls");
        InputStudent();
        break;
    case '2':
        //修改学生信息
        system("cls");
        ModifyStudentInformationMenu();
        //printf("\n\n\n******按任意键继续******\n\n");
        system("pause");
        system("cls");
        break;
    case '3':
        //显示所有学生基本信息
        system("cls");
        ShowAllStudentInformation();
        // printf("\n\n\n******按任意键继续******\n\n");
        system("pause");
        system("cls");
        break;
    case '4':
        system("cls");
        for (int i = 0; i < 4; i++)
        {
    
    
            StatsAll(i);
        }
        //printf("\n\n\n******按任意键继续******\n\n");
        system("pause");
        system("cls");
        break;
    case '5':
        system("cls");
        for (int i = 0; i < 4; i++)
        {
    
    
            for (int j = 0, k = 0; j < 5; j++, k += 20)
            {
    
    
                printf("%s\t%d~%d\t人数%d\t\t", AllCourse[i], k, k + 20, StatsCourseScore(k + 20, k, i));
            }
            printf("\n");
        }
        // printf("\n\n\n******按任意键继续******\n\n");
        system("pause");
        system("cls");
        break;
    case '6':
        //显示总成绩排名
        system("cls");
        printf("总成绩:\n");
        SortAllScore(4);
        printf("\n\n\n");
        system("pause");
        system("cls");
        break;
    case '7':
        system("cls");
        if (ModifyPassword())
        {
    
    
            printf("\n修改完成\n");
        }
        else
        {
    
    
            printf("\n修改失败\n");
        }
        system("pause");
        break;
    case '8':
        Login();
        break;
    }
}
//学生菜单
void StudentMenu()
{
    
    
    system("cls");
    printf("**************************************************");
    printf("\n 1.查找成绩\n");
    printf("\n 2.成绩排名\n");
    printf("\n 3.返回上一层\n");
    printf("\n 请按键选择,回车确定\n");
    printf("*************************************************\n");
    char choose[10];                            //选择
    char choosetable[3][100] = {
    
    "1", "2", "3"}; //选择表
    bool judgechoose = false;                   //选择是否合规
    do
    {
    
    
        scanf("%s", choose);
        for (int i = 0; i < 3; i++)
        {
    
    
            if (strcmp(choose, choosetable[i]) == 0)
            {
    
    
                judgechoose = true;
                break;
            }
            if (i == 3)
            {
    
    
                printf("\n选择不合规,请重新输入功能选项:");
            }
        }
    } while (!judgechoose);
    char temp[20];
    int ID;
    int tempID;
    int tempbit = 0;
    ;
    switch (choose[0])
    {
    
    
    case '1':
        system("cls");
        printf("请输入要查询的学号或姓名:");
        scanf("%s", temp);
        ID = atoi(temp);
        tempID = ID;
        while (tempID > 0)
        {
    
    
            tempID = tempID / 10;
            tempbit++;
        }
        if (tempbit == strlen(temp))
        {
    
    
            ShowStudentScore(ID);
        }
        else
        {
    
    
            ShowStudentScore(temp);
        }

        printf("\n");
        system("pause");
        system("cls");
        break;
    case '2':
        system("cls");
        printf("请输入要查询的学号:");
        scanf("%d", &tempID);
        SeekStudentSort(tempID);
        printf("\n");
        system("pause");
        system("cls");
        break;
    case '3':
        Login();
        break;
    }
}

//密码验证
bool PasswordVerify()
{
    
    
    system("cls");
    //读出密码文件中的密码
    char password_buff[255];
    //输入的密码缓存区
    char inputpassword[255];
    FILE *fp;
    fp = fopen("PassWord.txt", "r"); //以追加的方式打开名字为mybook的二进制文件
    if (fp != NULL)
    {
    
    
        fgets(password_buff, 255, fp);
    }
    else
    {
    
    
        printf("配置文件错误");
    }
    fclose(fp); //关闭文件

    bool judgepassword = false;
    //获取输入的密码
    //printf("如若终止验证请输入'#'并回车\n请输入密码:");
    printf("%s", "请输入账号:\n");
    char number[255];
    scanf("%s", &number);
    printf("请输入密码:\n");
    //当前读取到的密码位数
    int passwordBit = 0;
    while (true)
    {
    
    
        while (true)
        {
    
    
            char temp;
            temp = getch();
            //回退按钮为8
            if (temp != 8)
            {
    
    
                if (temp != '\r')
                {
    
    
                    inputpassword[passwordBit] = temp;
                }
                else
                {
    
    
                    inputpassword[passwordBit] = '\0';
                    break;
                }
                passwordBit++;
                printf("*");
            }
            if (temp == 8 && passwordBit > 0)
            {
    
    
                printf("\b \b");
                passwordBit--;
            }
        }

        if (strcmp(inputpassword, password_buff) == 0)
        {
    
    
            return true;
        }
        else if (inputpassword[0] == '#' && inputpassword[1] == '\0')
        {
    
    
            return false;
        }
        printf("\n密码错误,请重新输入:");
        passwordBit = 0;
    }
}

void over() //退出软件
{
    
    
    char t;
    toxy(48, 11);
    printf("-----------------------");
    toxy(48, 12);
    printf("|   您确定要退出吗?  |");
    toxy(48, 14);
    printf("| 1.确定     2.取消   |");
    toxy(48, 15);
    printf("-----------------------");
    while (1)
    {
    
    
        t = getch(); //输入t
        switch (t)
        {
    
    
        case '1':
            system("cls");
            color(6);
            toxy(48, 10);
            printf("正在安全退出....");
            Sleep(1000); //暂停1秒
            system("cls");
            color(8);
            toxy(48, 10);
            printf("已安全退出软件");
            toxy(48, 12);
            printf("谢谢使用!");
            toxy(48, 14);
            printf("by-by^_^");
            exit(0);
            break; //终止程序
        case '2':
            Login();
            break; //调用函数,进入菜单
        default:
            break;
        }
    }
}

//修改密码
bool ModifyPassword()
{
    
    
    char inputPassword1[255];
    char inputPassword2[255];
    char *inputpassword;
    if (PasswordVerify())
    {
    
    

        int passwordBit = 0;
        while (true)
        {
    
    
            for (int k = 0; k < 2; k++)
            {
    
    
                if (k == 0)
                {
    
    
                    inputpassword = inputPassword1;
                    printf("\n请输入新密码,或输入#退出修改:");
                }
                else
                {
    
    
                    inputpassword = inputPassword2;
                    printf("\n请输入第二次输入新密码:");
                }
                while (true)
                {
    
    

                    char temp;
                    temp = getch();
                    //回退按钮为8
                    if (temp != 8)
                    {
    
    
                        if (temp != '\r')
                        {
    
    
                            inputpassword[passwordBit] = temp;
                        }
                        else
                        {
    
    
                            inputpassword[passwordBit] = '\0';
                            break;
                        }
                        passwordBit++;
                        printf("*");
                    }
                    if (temp == 8 && passwordBit > 0)
                    {
    
    
                        printf("\b \b");
                        passwordBit--;
                    }
                    if (k == 0 && inputPassword1[0] == '#' && inputPassword1[1] == '\0')
                    {
    
    
                        return false;
                    }
                }
                passwordBit = 0;
            }
            if (strcmp(inputPassword1, inputPassword2) == 0)
            {
    
    
                break;
            }
            printf("\n两次密码不一致,请重新输入:");
        }
        printf("\n修改成功!");

        FILE *fp;
        fp = fopen("PassWord.txt", "w+");
        if (fp != NULL)
        {
    
    
            fputs(inputPassword1, fp);
        }
        else
        {
    
    
            printf("配置文件错误");
        }
        fclose(fp); //关闭文件
        return true;
    }
    return false;
}

int main(int argc, char const *argv[]) //主函数
{
    
    
	//调整控制台编码,如果输出乱码,可选择是否执行
    system("chcp 65001");
    system("cls");
    ReadStudentAllTable();
    while (1)
    {
    
    
        Login();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44575789/article/details/109033308
今日推荐