程序设计作业——系统管理

程序实验的大作业,DDL前完工的一版

   //项目名称:年级综测管理系统          //
  //创建人:代码小菜鸡                 //
 //学号:×××××××××××××               //
//创建时间:2020.11.8 上午11:09   //

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>
//#include "info.h"
//#include <algorithm.h>


//-------------------------------------------------------------以 下 为 各 种 定 义 和 声 明---------------------------------------------------------------//
#define Status void
#define xuehao long long int   //-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16)
#define deyuchengji double     //.2f
#define laodongchengji double  //.1f
#define tiyuchengji double     //.3f
#define zhiyuchengji double    //.8f
#define zuizhongchengji double //.8f

//用于计算智育和体育成绩
#define Calculus_A1 int
//微积分A (Ⅰ)
#define Introduction_to_Computing_Discipline int
//计算学科导论
#define Experiments_for_Foundation_of_Programming int
//程序设计基础实验
#define Foundation_of_Programming int
//程序设计基础
#define Military_Theory int
//军事理论
#define College_English_Listening_and_Speaking1 int
//大学英语听说1
#define College_English_Reading_and_Writing1 int
//大学英语读写1
#define Morality_and_Fundamentals_of_Law int
//思想道德修养与法律基础
#define Physical_Education1 double
//体育1
#define Computing_Essentials int
//计算机技术基础(双语)
#define Linear_Algebra int
//线性代数
#define College_English_Reading_and_Writing2 int
//大学英语读写2
#define College_Physics_A1 int
//大学物理A(I)
#define College_English_Listening_and_Speaking2 int
//大学英语听说2
#define Experiment_of_Advanced_Programming int
//高级语言程序设计实验
#define Calculus_A2 int
//微积分A (Ⅱ)
#define Advanced_Programming int
//高级语言程序设计
#define Etiquette_for_College_Students int
//大学生礼仪
#define Frontiers_of_Information_Science int
//信息科学前沿
#define Physical_Education2 int
//体育2
#define Probability_Theory_and_Mathematical_Statistics int
//概率与数理统计

//-------------------21 门 单 科 的 定 义 与 声 明------------------------//

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXN 507      //最大学生人数,可修改
#define INCREAMENT 60 //转入学生学生增量上限
#define bool int
#define Elemtype int

//-------------------所 有 的 函 数 操 作 的 函 数 名-------------------------//

int manage_password();
//输入管理系统账号密码,以管理员身份进入软件(双系统)
//flag显示其他调用此函数的函数
Status CHANGE_manage_password();
//实现对登入管理系统密码的修改
Status calculate_zhiyu(int Elem);
//计算个人智育成绩
Status calculate_tiyu(int Elem);
//计算个人德育成绩
Status manage_order();
//switch函数模块,承接管理平台的输入命令
Status student_order();
//switch函数模块,承接学生平台的输入命令
Status manage_help();
//输出管理系统使用说明
Status student_help();
//输出学生查询系统使用说明
int allocate();
//以学号为参考依据,先对读取的“各科成绩”、“德育和劳动成绩”按照学号大小降序排列,
//而后将两部分数据进行合并并输出结果
int judge_60(Elemtype n);
//判断各科成绩是否超过60,即判别挂科与否的if函数
Status allocte_all_password();
//利用每位同学的身份证匹配每名同学的密码,身份证号后六位
int read_deyu_and_laodong();
//从txt中读取德育和劳动成绩
int read_alldata();
//从txt中读取各科成绩
Status addScore();
//计算德育、智育、体育、劳动四项之和
Status search_analysis();
//查询分析函数
Status sorting();
//对总成绩进行排序函数————————冒泡排序
void shellSort(Elemtype *a, Elemtype len);
//对总成绩进行排序函数————————希尔排序
Status submenu();
//子菜单模块,用于与sorting()函数中的switch选项
Status print_perpass();
//计算挂科率以及挂科同学信息,内含登录系统
Status addstu();
//新增同学的信息
Status delstu();
//删减同学的信息
Status choose_system();
//初始时选择系统菜单模块
Status manage_menu();
//管理菜单模块
Status student_menu();
//学生菜单模块
Status student_read_deyu_and_laodong();
//学生平台的读取德育和劳动成绩,用于提前处理数据,譬如得到总人数
Status student_read_alldata();
//学生平台的读取各科成绩,用于提前处理数据
Status student_allocate();
//学生平台的将两部分数据进行合并并输出结果的函数,用于提前处理数据
Status student_addScore();
//学生平台的求和函数,用于提前处理数据
Status student_account();
//学生平台的帐号密码登录系统函数
Status student_all_score();
//学生平台的查询个人信息的输出函数
int stdio_messagebox(Elemtype ret, Elemtype choice);
//生成选择系统时的按钮窗口



int STUnum; //计数

int i;

int ret;//引用messagebox()函数的变量声明

int CHOICE;//记录选择

enum WON
{
    NO,
    YES
}; //whether or not,用于每个模块结果是否输出

enum passing
{
    Npass, //挂科
    pass   //未挂科
};         //判断学生是否挂科
clock_t start, finish;


struct student
{
    xuehao student_xuehao;          //学号
    char name[100];                 //姓名
    char id[100];                   //身份证号
    char PW[100];                   //密码
    deyuchengji student_deyu;       //德育成绩
    laodongchengji student_laodong; //劳动成绩
    tiyuchengji student_tiyu;       //体育成绩
    zhiyuchengji student_zhiyu;     //智育成绩
    zuizhongchengji student_score;  //总成绩
    bool student_pass               //挂科情况
} student_info[MAXN + INCREAMENT], buddle_info, buf_info[MAXN + INCREAMENT];


typedef struct student stu;


typedef struct LNode
{
    stu data;
    struct LNode *next;
} LinkList;


Status InitList(LinkList *L);
//初始化链表
Status ListInsert(LinkList *L, LinkList *p);
//插入新的节点


struct zhiyu_tiyu
{
    Calculus_A1 CA_1;                                                                                //微积分A (Ⅰ)
    Introduction_to_Computing_Discipline ICD;                                                        //计算学科导论
    Experiments_for_Foundation_of_Programming EFP;                                                   //程序设计基础实验
    Foundation_of_Programming FP;                                                                    //程序设计基础
    Military_Theory MT;                                                                              //军事理论
    College_English_Listening_and_Speaking1 CELS_1;                                                  //大学英语听说1
    College_English_Reading_and_Writing1 CERW_1;                                                     //大学英语读写1
    Morality_and_Fundamentals_of_Law MFL;                                                            //思想道德修养与法律基础
    Physical_Education1 PE_1;                                                                        //体育1
    Computing_Essentials CE;                                                                         //计算机技术基础(双语)
    Linear_Algebra LA;                                                                               //线性代数
    College_English_Reading_and_Writing2 CERW_2;                                                     //大学英语读写2
    College_Physics_A1 CPA_1;                                                                        //大学物理A(I)
    College_English_Listening_and_Speaking2 CELS_2;                                                  //大学英语听说2
    Experiment_of_Advanced_Programming EAP;                                                          //高级语言程序设计实验
    Calculus_A2 CA_2;                                                                                //微积分A (Ⅱ)
    Advanced_Programming AP;                                                                         //高级语言程序设计
    Etiquette_for_College_Students ECS;                                                              //大学生礼仪
    Frontiers_of_Information_Science FIS;                                                            //信息科学前沿
    Physical_Education2 PE_2;                                                                        //体育2
    Probability_Theory_and_Mathematical_Statistics PTMS;                                             //概率与数理统计
    double zhiyu_score;                                                                              //智育成绩
    double tiyu_score;                                                                               //体育成绩
    xuehao student_xuehao;                                                                           //学号
    bool pass_or_not;                                                                                //挂科情况
} student_zhiyu[MAXN + INCREAMENT], student_tiyu[MAXN + INCREAMENT], student_alldata[MAXN + INCREAMENT], buddle_zhiyu_tiyu; 
  //三者代表涵意不尽相同,zhiyu,tiyu是为了便于区分

typedef struct zhiyu_tiyu Score;

char nam[100]; //名字
xuehao XH;     //学号
char id[22];   //身份证号
Score sc;      //成绩


//--------------------------------------------------------以 上 为 各 项 定 义 和 声 明-------------------------------------------------------------------------//

//------------------------------------------------------------以 下 是 选 择 菜 单-----------------------------------------------------------------------------//

Status choose_system()
{
    printf("\t********************************************************************************\n");
    printf("\t**请选择:1.管理员身份进入系统(管理)--------------2.学生身份进入系统(查询)**\n");
    printf("\t********************************************************************************\n");
}

Status manage_menu()
{
    printf("\t\t\t\t\t欢迎使用××届信息工程学院学生成绩管理菜单(综测管理用)【当前学生信息%d条】\n", STUnum);
    //printf("\t\t\t\t\t\t【密码:xxgcxy】\n");
    printf("\n\t\t\t\t0.唤出菜单-------------------------------1.使用说明\n");
    puts("");
    printf("\t\t\t\t2.从txt中读入德育和劳动数据---------------3.从txt中读入各科目数据(用于计算体育和智育成绩)\n");
    puts("");
    printf("\t\t\t\t4.按学号匹配所有数据----------------------5.计算所有学生的总成绩\n");
    puts("");
    printf("\t\t\t\t6.按学号查询信息--------------------------7.打印所有挂科同学的成绩信息\n");
    puts("");
    printf("\t\t\t\t8.按学号添加学生信息----------------------9.按学号删减学生信息\n");
    puts("");
    printf("\t\t\t\t10.修改管理平台的登入密码\n");
    puts("");
    printf("\t\t\t\t11.退出系统\n");
}


Status student_menu()
{
    printf("\t\t\t\t\t欢迎使用××届信息工程学院学生成绩管理菜单(个人查询用)【当前学生信息%d条】\n", STUnum);
    puts("");
    printf("\t\t\t\t\t1.使用说明---------------------------2.个人大一各科目成绩\n");
    puts("");
    printf("\t\t\t\t\t3.退出个人系统\n");
}


int stdio_messagebox(Elemtype ret, Elemtype choice)
{
    ret = MessageBox(NULL, TEXT("是否想要以管理员身份进入管理系统呢?"), TEXT("CHOOSE THE SYSTEM"), MB_YESNO | MB_ICONQUESTION);
    if (ret == IDYES)
    {
        CHOICE = 1;
    }
    else
    {
        ret = MessageBox(NULL, TEXT("是否想要以学生身份进入查询系统呢?"), TEXT("CHOOSE THE SYSTEM"), MB_YESNO | MB_ICONQUESTION);
        if (ret == IDYES)
        {
            CHOICE = 2;
        }
        else
        {
            MessageBox(NULL, TEXT("那就再见咯"), TEXT("exit"), MB_OK);
            return 0;
        }
    }
}


//------------------------------------------------------------以 上 是 选 择 菜 单-----------------------------------------------------------------------------//

//--------------------------------------------------------以 下 是 双 系 统 通 用 函 数-------------------------------------------------------------------------//

int judge_60(Elemtype n)
{
    if (student_alldata[n].student_xuehao < 60 || student_alldata[n].ICD < 60 ||
        student_alldata[n].CA_1 < 60 || student_alldata[n].MFL < 60 || student_alldata[n].CE < 60 || student_alldata[n].CELS_1 < 60 || student_alldata[n].PE_1 < 60 || student_alldata[n].FP < 60 ||
        student_alldata[n].MT < 60 || student_alldata[n].LA < 60 || student_alldata[n].EFP < 60 || student_alldata[n].CERW_1 < 60 || student_alldata[n].CA_2 < 60 || student_alldata[n].CERW_2 < 60 ||
        student_alldata[n].CELS_2 < 60 || student_alldata[n].ECS < 60 || student_alldata[n].PTMS < 60 || student_alldata[n].AP < 60 || student_alldata[n].PE_2 < 60 || student_alldata[n].EAP < 60 ||
        student_alldata[n].CPA_1 < 60 || student_alldata[n].FIS < 60)
        return 0;
    else
        return 1;
}


Status calculate_zhiyu(int Elem)
{
    //计算智育成绩
    //int student_num = 1;
    //for (; student_num <= 507; student_num++)
    {
        //zhiyu_score=(C:C+5*D:D+3*E:E+1.5*F:F+G:G+2*I:I+J:J+3*K:K+L:L+2*N:N+5*P:P+2*Q:Q+R:R+S:S+3*T:T+2*U:U+W:W+4*X:X+Y:Y)/40.5*0.7
        //各科成绩乘上权的所有和除以总学分40.5,而后乘上占比70%,即为智育成绩
        student_alldata[Elem].zhiyu_score = (student_alldata[Elem].ICD + 5 * student_alldata[Elem].CA_1 + 3 * student_alldata[Elem].MFL + 1.5 * student_alldata[Elem].CE + student_alldata[Elem].CELS_1 + 2 * student_alldata[Elem].FP + student_alldata[Elem].MT + 3 * student_alldata[Elem].LA + student_alldata[Elem].EFP + 2 * student_alldata[Elem].CERW_1 + 5 * student_alldata[Elem].CA_2 + 2 * student_alldata[Elem].CERW_2 + student_alldata[Elem].CELS_2 + student_alldata[Elem].ECS + 3 * student_alldata[Elem].PTMS + 2 * student_alldata[Elem].AP + student_alldata[Elem].EAP + 4 * student_alldata[Elem].CPA_1 + student_alldata[Elem].FIS) / 40.5 * 0.7;

        student_info[Elem].student_zhiyu = student_alldata[Elem].zhiyu_score; //赋值
    }
}


Status calculate_tiyu(int Elem)
{
    //计算体育成绩
    //int student_num = 1;
    //for (; student_num <= 507; student_num++)
    {
        //tiyu_score=(PE_1+PE_2)/2*0.05
        //两学期的体育成绩的平均数乘上占比5%即为体育成绩
        student_alldata[Elem].tiyu_score = (student_alldata[Elem].PE_1 + student_alldata[Elem].PE_2) / 2 * 0.05;

        student_info[Elem].student_tiyu = student_alldata[Elem].tiyu_score; //赋值
    }
}


Status manage_help()
{
    puts("\n");
    printf("××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××\n");
    printf("|                                   这是本程序的简要功能说明:                                                        |\n");
    printf("|    欢迎使用××届信息工程学院学生成绩 管理&学生用查询 菜单,");
    printf("本程序是为了实现通过从txt中读取的各科成绩计算出每名同学的 |\n|智育成绩以及体育成绩,并与录入好的劳动成绩以及德育成绩相加求和并最终得出每名同学的最终成绩。");
    printf("根据提供菜单中的各项命令|\n|,实现对整体数据的删除、查询以及排序                                                                                |\n");
    printf("××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××\n");
}


Status allocte_all_password()
{
    //匹配每名同学的密码
    int k = 0;
    struct student temp[STUnum];
    for (k; k < STUnum; k++)
    {
        strncpy(student_info[k].PW, student_info[k].id + strlen(student_info[k].id) - 6, 6);
    }
}

//-------------------------------------------------------以 上 是 双 系 统 通 用 函 数-------------------------------------------------------------------------//

//---------------------------------------------------以 下 为 管 理 系 统 的 各 种 定 义 函 数------------------------------------------------------------------//

int manage_password()
{
    FILE *fo;
    char input[100];
    int count = 3; //密码输入上限次数,可修改
    char PW[100] = {'\0'};
    while((fo = fopen("C:\\Users\\Lenovo\\Desktop\\manage_password.txt", "r")) == NULL)
        return ERROR;
    fscanf(fo, "%s", PW);
    //printf("%s", PW);
    printf("\n请输入原密码:");
    //scanf("%[^\n]s", input);
    //getchar();
    gets(input);
    //strcpy(input, "xxgcxy2019");
    int temp = count + 1;
    while (count && strcmp(input, PW) != 0)
    {
        printf("\n密码错误!请重新输入(剩余%d次):", count - 1);
        gets(input);
        if (strcmp(input, PW) == 0)
            break;
        count--;
    }
    if (count == 0)
    {
        printf("\n错误次数超过上限,程序退出\n");
        system("pause");
    }
    puts("");
    fclose(fo);
}


Status manage_order()
{
    int order;
    while (1)
    {
        printf("\n请输入合法的命令:");
        fflush(stdin); //清理缓冲区
        scanf("%d", &order);
        //int temp = (order - '0');

        while (!(order >= 0 && order <= 11))
        {
            //system("cls");
            printf("输入非法!请输入合法的命令:");
            fflush(stdin); //清理缓冲区
            scanf("%d", &order);
            //temp = (order - '0');
        }

        switch (order)
        {
        case 0:
            manage_menu();
            //printf("\nSTUnum = %d\n", STUnum);//检测STUnum是否符合
            break;
        case 1:
            manage_help();
            break;
        case 2:
            read_deyu_and_laodong();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 3:
            read_alldata();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 4:
            allocate();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 5:
            addScore();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 6:
            search_analysis();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 7:
            print_perpass();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 8:
            addstu();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 9:
            delstu();
            //printf("\nSTUnum = %d\n", STUnum);
            break;
        case 10:
            CHANGE_manage_password();
            break;
        case 11:
            printf("系统已结束运行,即将关闭\n");
            //system("pause");
            return OK;
            break;
        }
    }
}

//将read——alldata中的对应数据student——alldata赋值给双值

//comp函数用于allocate函数中的qsort
//int Comp(compare p1, compare p2)
//{
//    return p1 ? 1 : -1;
//}


int allocate()
{
    start = clock();
    int j = 0, k = 0, n = 0;
    //利用qsort()函数
    //qsort(student_info, 507, sizeof(student_info[1]), comp);
    //qsort(student_alldata, 507, sizeof(student_alldata[1]), comp);
    //for(; j <=507; j++)
    //{
    //    student_info[j] = student_alldata[j];
    //}

    //buddling
    for (k = 0; k < STUnum; k++)
    {
        for (j = 0; j < STUnum - k - 1; j++)
        {
            if (student_info[j].student_xuehao > student_info[j + 1].student_xuehao) //根据单一数据项,对整个结构体进行排序
            {
                buddle_info = student_info[j + 1];
                student_info[j + 1] = student_info[j];
                student_info[j] = buddle_info;
            }
        }
    }
    //buddling
    for (k = 0; k < STUnum; k++)
    {
        for (j = 0; j < STUnum - k - 1; j++)
        {
            if (student_alldata[j].student_xuehao > student_alldata[j + 1].student_xuehao) //根据单一数据项,对整个结构体进行排序
            {
                buddle_zhiyu_tiyu = student_alldata[j + 1];
                student_alldata[j + 1] = student_alldata[j];
                student_alldata[j] = buddle_zhiyu_tiyu;
            }
        }
    }

    //将两组数据按照对应学号进行合并
    for (j = 0; j < STUnum; j++)
    {
        calculate_zhiyu(j);
        calculate_tiyu(j);
        student_info[j].student_pass = student_alldata[j].pass_or_not;
    }
    finish = clock();

    //printf("%lf\n", student_alldata[1].tiyu_score);
    printf("\n耗时%lfms,匹配成功!\n", (double)(finish - start) / CLOCKS_PER_SEC);
    printf("是否选择查看处理后的信息?(是:1,否:0):");
    enum WON choice;
    scanf("%d", &choice);
    puts("");
    start = clock();
    if (choice == 1)
    {
        printf("    学号       \t\t   姓名      \t 德育成绩   体育成绩  劳动成绩    智育成绩        挂科情况\n\n");

        for (k = 0; k < STUnum; k++)
        {
            printf("%lld     %20s      %.2f     %.4f     %.2f      %.8f", student_info[k].student_xuehao, student_info[k].name, student_info[k].student_deyu, student_info[k].student_tiyu, student_info[k].student_laodong, student_info[k].student_zhiyu);
            if (student_info[k].student_pass == pass)
            {
                printf("    未挂科\n");
            }
            else
            {
                printf("    有挂科科目\n");
            }
        }
    }
    finish = clock();
    printf("\n匹配耗时%lfms\n", (double)(finish - start) / CLOCKS_PER_SEC);

    printf("\n匹配成功!!!\n");
}


int read_deyu_and_laodong()
{
    //读取学号 姓名 身份证号18位 德育成绩 劳动成绩
    FILE *fp;
    int k = 0;
    if ((fp = fopen("C:\\Users\\Lenovo\\Desktop\\all details in personinfo.txt", "r")) == NULL)
        return ERROR;

    while (fscanf(fp, "%lld %s %s %lf %lf", &student_info[k].student_xuehao, student_info[k].name, student_info[k].id, &student_info[k].student_deyu, &student_info[k].student_laodong) == 5)
    {
        k++;
    }
    //printf("%s", student_info[2].name);
    printf("“从txt中读入德育和劳动数据”读取成功!");
    printf("\n是否选择查看处理后的信息?(是:1,否:0):");
    enum WON choice;
    scanf("%d", &choice);
    if (choice == 1)
    {
        printf("\n    学号          \t  姓名     \t        身份证号     德育成绩  智育成绩\n");
        for (k = 0; k < STUnum; k++)
        {
            printf("%lld    %18s    %22s    %.1f    %.1f\n", student_info[k].student_xuehao, student_info[k].name, student_info[k].id, student_info[k].student_deyu, student_info[k].student_laodong);
        }
    }
    fclose(fp);
    printf("处理完成!\n");
}


int read_alldata()
{
    //读取学号 各科成绩
    FILE *fp1;
    int n = 0;
    if ((fp1 = fopen("C:\\Users\\Lenovo\\Desktop\\the details of the all scores.txt", "r")) == NULL)
        return ERROR;
    //学号
    //计算机学科导论	微积分(Ⅰ)	思想道德修养与法律基础	计算机技术基础(双语)	大学英语听说(Ⅰ)	体育(Ⅰ)	程序设计基础
    //军事理论	线性代数	程序设计基础实验	大学英语读写(Ⅰ)	微积分A (Ⅱ)	大学英语读写(Ⅱ)	大学英语听说(Ⅱ)	大学生礼仪
    //概率与数理统计	高级语言程序设计	体育(II)	高级语言程序设计实验	大学物理A(I)	信息科学前沿

    printf("以下是各科代号:\n");
    printf("××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××\n");
    printf("××计算机学科导论 ICD        微积分(Ⅰ)CA_1     思想道德修养与法律基础 MFL  计算机技术基础(双语)CE   大学英语听说(Ⅰ)CELS_1              ××\n");
    printf("××体育(Ⅰ)PE_1            程序设计基础 FP      军事理论 MT                线性代数 LA               程序设计基础实验 EFP                    ××\n");
    printf("××大学英语读写(Ⅰ)CERW_1  微积分A (Ⅱ) CA_2    大学英语读写(Ⅱ)CERW_2    大学英语听说(Ⅱ)CELS_2   大学生礼仪 ECS                        ××\n");
    printf("××概率与数理统计 PTMS       高级语言程序设计 AP  体育(II)PE_2              高级语言程序设计实验 EAP   大学物理A(I) CPA_1    信息科学前沿 FIS××\n");
    printf("××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××\n");
    puts("");
    printf("    学号        ICD    CA_1    MFL    CE   CELS_1  PE_1     FP     MT     LA    EFP   CERW_1 CA_2  CERW_2  CELS_2  ECS    PTMS    AP    PE_2   EAP   CPA_2  FIS\n");
    while (fscanf(fp1, "%lld %d %d %d %d %d %lf %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", &student_alldata[n].student_xuehao, &student_alldata[n].ICD,
                  &student_alldata[n].CA_1, &student_alldata[n].MFL, &student_alldata[n].CE, &student_alldata[n].CELS_1, &student_alldata[n].PE_1, &student_alldata[n].FP,
                  &student_alldata[n].MT, &student_alldata[n].LA, &student_alldata[n].EFP, &student_alldata[n].CERW_1, &student_alldata[n].CA_2, &student_alldata[n].CERW_2,
                  &student_alldata[n].CELS_2, &student_alldata[n].ECS, &student_alldata[n].PTMS, &student_alldata[n].AP, &student_alldata[n].PE_2, &student_alldata[n].EAP,
                  &student_alldata[n].CPA_1, &student_alldata[n].FIS) == 22)
    {
        printf("%lld    %3d    %3d    %3d    %3d    %3d    %4.1f    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %3d    %d\n", student_alldata[n].student_xuehao, student_alldata[n].ICD,
               student_alldata[n].CA_1, student_alldata[n].MFL, student_alldata[n].CE, student_alldata[n].CELS_1, student_alldata[n].PE_1, student_alldata[n].FP,
               student_alldata[n].MT, student_alldata[n].LA, student_alldata[n].EFP, student_alldata[n].CERW_1, student_alldata[n].CA_2, student_alldata[n].CERW_2,
               student_alldata[n].CELS_2, student_alldata[n].ECS, student_alldata[n].PTMS, student_alldata[n].AP, student_alldata[n].PE_2, student_alldata[n].EAP,
               student_alldata[n].CPA_1, student_alldata[n].FIS);
        if (judge_60(n))
        {
            student_alldata[n].pass_or_not = pass;
        }
        else
        {
            student_alldata[n].pass_or_not = Npass;
        }

        ++n;
    }

    fclose(fp1);
    printf("一共%d组数据\n", n);
    return OK;
}


Status addScore()
{
    int k;

    for (k = 0; k < STUnum; k++)
    {
        student_info[k].student_score = student_info[k].student_deyu + student_info[k].student_tiyu + student_info[k].student_laodong + student_info[k].student_zhiyu;
    }

    printf("\n求和成功!\n");
    printf("是否选择查看处理后的信息?(是:1,否:0):");
    enum WON choice;
    scanf("%d", &choice);
    if (choice == 1)
    {
        printf("    学号       德育成绩   体育成绩   劳动成绩    智育成绩        总成绩\n");
        for (k = 0; k < STUnum; k++)
        {
            printf("%lld     %.2f     %.4f     %.2f      %.8f      %.4f\n", student_info[k].student_xuehao, student_info[k].student_deyu, student_info[k].student_tiyu, student_info[k].student_laodong, student_info[k].student_zhiyu, student_info[k].student_score);
        }
    }
    printf("处理完成!\n");
}


Status search_analysis()
{
    //printf("请输入查找对象的学号(输入0退出查询):");
    xuehao XH;
    int k = 0;
    while (1)
    {
        printf("\n备注:诸如“201924100XXX”为原计算机同学学号,“201924080XXX”为软件工程国际化班同学学号\n\n");
        printf("请输入查找对象的学号(输入0退出查询):");
        fflush(stdin); //此处没有问题
        scanf("%lld", &XH);
        if (XH == 0)
        {
            printf("\n已退出查询\n");
            break;
        }
        start = clock();
        for (k = 0; k < STUnum; k++)
        {
            if (XH == student_info[k].student_xuehao)
            {
                printf("    学号       \t\t  身份证号         德育成绩   体育成绩   劳动成绩    智育成绩        总成绩      挂科情况\n\n");
                printf("%lld     %22s      %.2f     %.4f     %.2f      %.8f      %.4f", student_info[k].student_xuehao, student_info[k].id, student_info[k].student_deyu, student_info[k].student_tiyu, student_info[k].student_laodong, student_info[k].student_zhiyu, student_info[k].student_score);
                if (student_info[k].student_pass == pass)
                {
                    printf("      未挂科\n");
                }
                else
                {
                    printf("      有挂科科目\n");
                }
                break;
            }
        }
        if (k == STUnum)
        {
            printf("找不到咩,你输的是个啷个?\n");
        }
        finish = clock();
        printf("\n查询时间为:%lfms\n\n", (double)(finish - start) / CLOCKS_PER_SEC);
        printf("------------------------------------------------------------------------------------------------------------------\n");
    }
}


Status sorting()
{
    start = clock();
    int j, k;
    for (k = 0; k < STUnum; k++)
    {
        for (j = 0; j < STUnum - k - 1; j++)
        {
            if (student_info[j].student_score <= student_info[j + 1].student_score) //根据总成绩,对整个结构体进行排序
            {
                buddle_info = student_info[j + 1];
                student_info[j + 1] = student_info[j];
                student_info[j] = buddle_info;
            }
        }
    }
    finish = clock();
    printf("\n冒泡排序完成,耗时:%lfms\n\n", (double)(finish - start) / CLOCKS_PER_SEC);
}


void shellSort(int *a, int len)
{
    start = clock();
    //len = STUnum;
    int n, j, k, gap; // gap 为步长
    for (gap = len / 2; gap > 0; gap /= 2)
    { // 步长初始化为数组长度的一半,每次遍历后步长减半,
        for (n = 0; n < gap; ++n)
        { // 变量 i 为每次分组的第一个元素下标
           for (j = n + gap; j < len; j += gap)
           {               //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序
               buf_info[j] = student_info[j]; 
               // 备份student_info[j]的值
               k = j - gap;                   \
               // j初始化为i的前一个元素(与i相差gap长度)
               while (k >= 0 && student_info[k].student_score < buf_info[j].student_score)
               {
                   student_info[k + gap] = student_info[k]; // 将在student_info[i].student_score前且比的值大的结构体数组向后移动一位
                   k -= gap;
                }
                student_info[k + gap] = buf_info[j];
            }
        }
    }
    finish = clock();
    printf("\n希尔排序完成,耗时:%lfms\n\n", (double)(finish - start) / CLOCKS_PER_SEC);
}

//Status using_shellSort()
//{
//    shellSort(student_info->student_score, STUnum); // 调用希尔排序函数
//    //printf("希尔升序排列后结果为:\n");
//    //for (i = 0; i < len; i++)
//    //{ // 排序后的结果的输出
//    //   printf("%d\t", a[i]);
//    //}
//}


Status submenu()//更新中……
{
    //printf("\n请选择你要排序的对象\n");
    //printf("****************************************************************************************\n");
    //printf("**   1.计算机科学导论 ICD            2.微积分(Ⅰ)CA_1                               **\n");
    //printf("**   3.思想道德修养与法律基础 MFL    4.计算机技术基础(双语)CE                       **\n");
    //printf("**   5.大学英语听说(Ⅰ)CELS_1      6.体育(Ⅰ)PE_1                                 **\n");
    //printf("**   7.程序设计基础 FP               8.军事理论 MT                                    **\n");
    //printf("**   9.线性代数 LA                  10.程序设计基础实验 EFP                           **\n");
    //printf("**   11.大学英语读写(Ⅰ)CERW_1    12.微积分A (Ⅱ) CA_2                              **\n");
    //printf("**   13.大学英语读写(Ⅱ)CERW_2    14.大学英语听说(Ⅱ)CELS_2                       **\n");
    //printf("**   15.大学生礼仪 ECS              16.概率与数理统计 PTMS                            **\n");
    //printf("**   17.高级语言程序设计 AP         18.体育(II)PE_2                                 **\n");
    //printf("**   19.高级语言程序设计实验 EAP    20.大学物理A(I) CPA_1        21.信息科学前沿 FIS  **\n");
    printf("****************************************************************************************\n");
    printf("**   1.体育成绩                    2.智育成绩                  3.总成绩               **\n");
    printf("**   0.退出排序                                                                       **\n");
    printf("****************************************************************************************\n");
    printf("\n请输入查找序号:");
    int choi, count = 0;
    fflush(stdin); //清理缓冲区,此处没有问题
    scanf("%d", &choi);
    while (!(choi >= 0 && choi <= 24))
    {
        printf("\n输入的序号有些问题,请重新输入:");
        fflush(stdin); //清理缓冲区,此处没有问题
        scanf("%d", &choi);
        count++;
        if (count == 0)
        {
            printf("\n是否想要结束排序?需要结束请输入0:");
            scanf("%d", &choi);
        }
    }
    switch (choi)
    {
    case 0:
        printf("\n已退出排序子菜单!\n");
        break;
        //case 1:
        //case 2:
    case 3:
        sorting();
        break;
    }
}


Status print_perpass()
{
    int k = 0;
    int num = 0;
    printf("\n进入此命令模块将会牵扯到同学们的隐私,请再三考虑:\n");
    getchar();
    char input[100];
    int count = 3; //密码输入上限次数,可修改
    char PW[100] = {"05060519"};
    printf("\n请输入密码:");
    //scanf("%[^\n]s", input);
    gets(input);
    //strcpy(input, "xxgcxy2019");
    int temp = count + 1;
    while (count && strcmp(input, PW) != 0)
    {
        printf("\n密码错误!请重新输入(剩余%d次):", count - 1);
        gets(input);
        if (strcmp(input, PW) == 0)
            break;
        count--;
    }
    if (count == 0)
    {
        printf("\n错误次数超过上限,退出该功能\n");
        //system("pause");
        //exit(0);
    }
    else
    {
        puts("");
        printf("\n    学号       \t\t   姓名      \t 德育成绩   体育成绩  劳动成绩    智育成绩        挂科情况\n\n");
        for (k; k < STUnum; k++)
        {
            if (student_info[k].student_pass == 0)
            {
                printf("%lld     %20s      %.2f     %.4f     %.2f      %.8f", student_info[k].student_xuehao, student_info[k].name, student_info[k].student_deyu, student_info[k].student_tiyu, student_info[k].student_laodong, student_info[k].student_zhiyu);
                printf("    有挂科科目\n");
                num++;
            }
        }
        printf("\n本年级共有%d人,其中%d人有挂科科目,占比%2.2f%%\n", STUnum, num, 1.0 * 100 * num / STUnum);
    }
}


Status CHANGE_manage_password()
{
    int choi;
    printf("\n是否想要对管理系统的登入密码进行修改?(按数字0或者任意非数字退出)\n");
    fflush(stdin);
    scanf("%d", &choi);
    if(choi != 0)
    {
        getchar();
        manage_password();
        char origin_PW[100];
        char CHANGE_PW[100] = {'\0'};
        FILE *fpt;
        FILE *fin;
        fin = fopen("C:\\Users\\Lenovo\\Desktop\\manage_password.txt", "r");                   //读打开原文件
        fpt = fopen("C:\\Users\\Lenovo\\Desktop\\tmp3.txt", "w");                          //写打开临时文件
        if (fin == NULL && fpt == NULL)
        {
            printf("Open the file failure...\n");
            exit(0);
        }
        printf("请输入一个新的密码:");
        scanf("%s", CHANGE_PW);
        while (fscanf(fin, "%s", origin_PW) == 1) //从原文件读取一行
        {
            fprintf(fpt, "%s\n", CHANGE_PW); //写入临时文件tmp3.txt
        }
        fclose(fin);
        fclose(fpt);
        remove("C:\\Users\\Lenovo\\Desktop\\manage_password.txt");                                                       //删除原文件
        rename("C:\\Users\\Lenovo\\Desktop\\tmp3.txt", "C:\\Users\\Lenovo\\Desktop\\manage_password.txt");               //将临时文件名改为原文件名

        printf("\n已完成对登入管理系统密码的修改\n");
    }
    
}


//----------------------------------------------------------以 上 是 管 理 系 统 的 各 种 定 义 函 数------------------------------------------------------------------//

//----------------------------------------------------------以 下 是 学 生 系 统 的 各 种 声 明 函 数------------------------------------------------------------------//

Status student_read_deyu_and_laodong()
{
    STUnum = 0;
    FILE *fp;
    if ((fp = fopen("C:\\Users\\Lenovo\\Desktop\\all details in personinfo.txt", "r")) == NULL)
        return ERROR;

    while (fscanf(fp, "%lld %s %s %lf %lf", &student_info[STUnum].student_xuehao, student_info[STUnum].name, student_info[STUnum].id, &student_info[STUnum].student_deyu, &student_info[STUnum].student_laodong) == 5)
    {
        STUnum++;
    }
    fclose(fp);
}


Status student_read_alldata()
{
    //读取学号 各科成绩
    FILE *fp1;
    int n = 0;
    if ((fp1 = fopen("C:\\Users\\Lenovo\\Desktop\\the details of the all scores.txt", "r")) == NULL)
        return ERROR;
    while (fscanf(fp1, "%lld %d %d %d %d %d %lf %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", &student_alldata[n].student_xuehao, &student_alldata[n].ICD,
                  &student_alldata[n].CA_1, &student_alldata[n].MFL, &student_alldata[n].CE, &student_alldata[n].CELS_1, &student_alldata[n].PE_1, &student_alldata[n].FP,
                  &student_alldata[n].MT, &student_alldata[n].LA, &student_alldata[n].EFP, &student_alldata[n].CERW_1, &student_alldata[n].CA_2, &student_alldata[n].CERW_2,
                  &student_alldata[n].CELS_2, &student_alldata[n].ECS, &student_alldata[n].PTMS, &student_alldata[n].AP, &student_alldata[n].PE_2, &student_alldata[n].EAP,
                  &student_alldata[n].CPA_1, &student_alldata[n].FIS) == 22)
    {
        if (judge_60(n))
        {
            student_alldata[n].pass_or_not = pass;
        }
        else
        {
            student_alldata[n].pass_or_not = Npass;
        }

        ++n;
    }
    fclose(fp1);
    //return OK;
}


Status student_allocate()
{
    int j = 0, k = 0, n = 0;

    //buddling
    for (k = 0; k < STUnum; k++)
    {
        for (j = 0; j < STUnum - k - 1; j++)
        {
            if (student_info[j].student_xuehao > student_info[j + 1].student_xuehao) //根据单一数据项,对整个结构体进行排序
            {
                buddle_info = student_info[j + 1];
                student_info[j + 1] = student_info[j];
                student_info[j] = buddle_info;
            }
        }
    }
    //buddling
    for (k = 0; k < STUnum; k++)
    {
        for (j = 0; j < STUnum - k - 1; j++)
        {
            if (student_alldata[j].student_xuehao > student_alldata[j + 1].student_xuehao) //根据单一数据项,对整个结构体进行排序
            {
                buddle_zhiyu_tiyu = student_alldata[j + 1];
                student_alldata[j + 1] = student_alldata[j];
                student_alldata[j] = buddle_zhiyu_tiyu;
            }
        }
    }

    //将两组数据按照对应学号进行合并
    for (j = 0; j < STUnum; j++)
    {
        calculate_zhiyu(j);
        calculate_tiyu(j);
        student_info[j].student_pass = student_alldata[j].pass_or_not;
    }
}


Status student_addScore()
{
    int k;
    for (k = 0; k < STUnum; k++)
    {
        student_info[k].student_score = student_info[k].student_deyu + student_info[k].student_tiyu + student_info[k].student_laodong + student_info[k].student_zhiyu;
    }
}


Status student_account()
{
    int count = 3; //输入次数上限,超出则退出学生查询用系统
    int flag_1 = 0, flag_2 = 0;
    xuehao XH;
    char account[10];
    while (count--)
    {
        flag_1 = 0, flag_2 = 0;
        printf("请输入学生用户账号和密码(剩余%d次):\n", count );
        printf("账号:");
        //fflush(stdin);
        scanf("%lld", &XH);
        printf("密码:");
        scanf("%s", account);
        for (i = 0; i < STUnum; i++)
        {
            if (XH == student_info[i].student_xuehao)
            {
                flag_1 = 1;
            }
            if (!strcmp(account, student_info[i].PW))
            {
                flag_2 = 1;
            }
            if (flag_1 + flag_2 == 2)
            {
                break;
            }
        }
        if (flag_1 + flag_2 == 0)
            printf("输入不正确,请重新输入\n");
        else if (flag_1 == 1 && flag_2 == 0)
            printf("密码输入不正确,请重新输入\n");
        else if (flag_1 == 0 && flag_2 == 1)
            printf("学号输入不正确,请重新输入\n");
        if (flag_1 + flag_2 == 2)
        {
            break;
        }
        if (count == 0)
        {
            if (flag_1 + flag_2 != 2)
            {
                printf("\n错误次数超过上限,程序退出\n");
                system("pause");
                exit(0);
            }
        }
    }
}


Status student_order()
{
    int order;
    while (1)
    {
        printf("\n请输入合法的命令:");
        fflush(stdin); //清理缓冲区,此处没有问题
        scanf("%d", &order);
        //int temp = (order - '0');

        while (!(order >= 1 && order <= 3))
        {
            //system("cls");
            printf("输入非法!请输入合法的命令:");
            fflush(stdin); //清理缓冲,此处没有问题
            scanf("%d", &order);
            //temp = (order - '0');
        }

        switch (order)
        {
        case 1:
            student_help();
            break;
        case 2:
            student_all_score();
            break;
        case 3:
            printf("系统已结束运行,即将关闭\n");
            //system("pause");
            return OK;
            break;
        }
    }
}


Status student_all_score()
{
    printf("    学号       \t\t  身份证号         德育成绩   体育成绩   劳动成绩    智育成绩        总成绩      挂科情况      综测排名\n\n");
    //printf("    学号       \t\t  身份证号         德育成绩   体育成绩   劳动成绩    智育成绩        总成绩\n\n");
    printf("%lld     %22s      %.2f     %.4f     %.2f      %.8f      %.4f", student_info[i].student_xuehao,
           student_info[i].id, student_info[i].student_deyu, student_info[i].student_tiyu, student_info[i].student_laodong,
           student_info[i].student_zhiyu, student_info[i].student_score);
    if (student_info[i].student_pass == pass)
    {
        printf("      未挂科");
    }
    else
    {
        printf("     有挂科科目");
    }
    printf("       第%d名\n", i);
}


Status student_help()
{
    printf("********************************************************************************************************\n");
    printf("**此为××届信息工程学院学生成绩学生用(查询)系统                                                    **\n");
    printf("**平台仅为同学们提供个人综测中个人信息的查询功能,同学们输入本人的学号(账号)和身份证号后六位(密码)**\n**后进入查询界面");
    printf("输入1,可再次调出本说明;输入2,可查询到本人的成绩信息;输入3,即退出本查询平台       **\n");
    printf("********************************************************************************************************\n");
}


//----------------------------------------------------------以 上 是 学 生 系 统 的 各 种 声 明 函 数------------------------------------------------------------------//


void InitList(LinkList *L) //初始化链表
{
    L = (LinkList *)malloc(sizeof(LinkList));
    L->next = NULL;
}


void ListInsert(LinkList *L, LinkList *p) //插入新的节点
{
    LinkList *q = NULL;
    q = L;
    p->next = q->next;
    q->next = p;
}


Status addstu()
{
    int disc = 0;
    fflush(stdin);
    printf("\n确定要进行新增功能吗?按数字0或字母键退出\n");
    scanf("%d", &disc);
    if(disc != 0)
    {
        STUnum++;
        printf("请按顺序输入新增同学的学号、姓名、身份证号、德育成绩、劳动成绩以及计算机学科导论 ICD、微积分(Ⅰ)CA_1、思想道德修养与法律基础 MFL、计算机技术基础(双语)CE、大学英语听说(Ⅰ)CELS_1、");
        printf("体育(Ⅰ)PE_1、程序设计基础 FP、军事理论 MT、线性代数 LA、程序设计基础实验 EFP、");
        printf("大学英语读写(Ⅰ)CERW_1、微积分A (Ⅱ) CA_2、大学英语读写(Ⅱ)CERW_2、大学英语听说(Ⅱ)CELS_2、大学生礼仪 ECS、");
        printf("概率与数理统计 PTMS、高级语言程序设计 AP、体育(II)PE_2、高级语言程序设计实验 EAP、大学物理A(I) CPA_1、信息科学前沿 FIS成绩\n");
        fflush(stdin);
        scanf("%lld", &student_info[STUnum].student_xuehao);
        scanf("%s %s %lf %lf %d %d %d %d %d %lf %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", student_info[STUnum].name, student_info[STUnum].id, &student_info[STUnum].student_deyu,
              &student_info[STUnum].student_laodong, &student_alldata[STUnum].ICD, &student_alldata[STUnum].CA_1, &student_alldata[STUnum].MFL, &student_alldata[STUnum].CE, &student_alldata[STUnum].CELS_1, &student_alldata[STUnum].PE_1,
              &student_alldata[STUnum].FP, &student_alldata[STUnum].MT, &student_alldata[STUnum].LA, &student_alldata[STUnum].EFP, &student_alldata[STUnum].CERW_1, &student_alldata[STUnum].CA_2, &student_alldata[STUnum].CERW_2,
              &student_alldata[STUnum].CELS_2, &student_alldata[STUnum].ECS, &student_alldata[STUnum].PTMS, &student_alldata[STUnum].AP, &student_alldata[STUnum].PE_2, &student_alldata[STUnum].EAP,
              &student_alldata[STUnum].CPA_1, &student_alldata[STUnum].FIS);
        calculate_tiyu(STUnum);
        calculate_zhiyu(STUnum);
        printf("\n新增完成\n");
        FILE *fp_1;
        FILE *fp_2;
        while ((fp_1 = fopen("C:\\Users\\Lenovo\\Desktop\\the details of the all scores.txt", "a")) == NULL)
        {
            exit(ERROR);
        }
        while ((fp_2 = fopen("C:\\Users\\Lenovo\\Desktop\\all details in personinfo.txt", "a")) == NULL)
        {
            exit(ERROR);
        }
        fprintf(fp_1, "%lld %d %d %d %d %d %lf %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", student_info[STUnum].student_xuehao, student_alldata[STUnum].ICD,
                student_alldata[STUnum].CA_1, student_alldata[STUnum].MFL, student_alldata[STUnum].CE, student_alldata[STUnum].CELS_1, student_alldata[STUnum].PE_1, student_alldata[STUnum].FP,
                student_alldata[STUnum].MT, student_alldata[STUnum].LA, student_alldata[STUnum].EFP, student_alldata[STUnum].CERW_1, student_alldata[STUnum].CA_2, student_alldata[STUnum].CERW_2,
                student_alldata[STUnum].CELS_2, student_alldata[STUnum].ECS, student_alldata[STUnum].PTMS, student_alldata[STUnum].AP, student_alldata[STUnum].PE_2, student_alldata[STUnum].EAP,
                student_alldata[STUnum].CPA_1, student_alldata[STUnum].FIS);
        fclose(fp_1);
        fprintf(fp_2, "%lld %s %s %lf %lf\n", student_info[STUnum].student_xuehao, student_info[STUnum].name, student_info[STUnum].id, student_info[STUnum].student_deyu,
                student_info[STUnum].student_laodong);
        fclose(fp_2);
        printf("\n文件写入完成\n");
        printf("\n不要忘记再利用菜单键入功能2.3.4.5.以便将成绩录入系统哦\n");
    }
    else
    {
        printf("\n已退出新增信息功能区\n");
    }
    
}


Status delstu()
{
    //按学号进行删减信息
    printf("请输入要删减信息对应的学生学号:");
    xuehao XH;
    int j, flag = 0;
    scanf("%lld", &XH);
    for (j = 0; j < STUnum; j++)
    {
        if (student_info[j].student_xuehao == XH)
        {
            flag = 1;
            break;
        }
    }
    if (!flag)
    {
        printf("\n没有找到对应需要删减的信息,请重新输入\n");
    }
    else
    {
        //{
        //    student_info[j].student_score = 0;
        //    student_info[j].student_deyu = 0;
        //    student_info[j].student_laodong = 0;
        //    student_info[j].student_zhiyu = 0;
        //    student_info[j].student_tiyu = 0;
        //} 
        //初始化,并利用sorting()函数将其排至最后从而实现剔除

        STUnum--;
        int k = 0;

        FILE *fin;
        FILE *ftp;
        fin = fopen("C:\\Users\\Lenovo\\Desktop\\the details of the all scores.txt", "r"); //读打开原文件
        ftp = fopen("C:\\Users\\Lenovo\\Desktop\\tmp1.txt", "w");  //写打开临时文件
        if (fin == NULL && ftp == NULL)
        {
            printf("Open the file failure...\n");
            exit(0);
        }
        while (fscanf(fin, "%lld %d %d %d %d %d %lf %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", &student_info->student_xuehao, &student_alldata->ICD, &student_alldata->CA_1, &student_alldata->MFL, &student_alldata->CE, &student_alldata->CELS_1, &student_alldata->PE_1,
                      &student_alldata->FP, &student_alldata->MT, &student_alldata->LA, &student_alldata->EFP, &student_alldata->CERW_1, &student_alldata->CA_2, &student_alldata->CERW_2,
                      &student_alldata->CELS_2, &student_alldata->ECS, &student_alldata->PTMS, &student_alldata->AP, &student_alldata->PE_2, &student_alldata->EAP,
                      &student_alldata->CPA_1, &student_alldata->FIS) == 22) //从原文件读取一行
        {
            if (student_info->student_xuehao != XH)
                fprintf(ftp, "%lld %d %d %d %d %d %lf %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", student_info->student_xuehao, student_alldata->ICD, student_alldata->CA_1, student_alldata->MFL, student_alldata->CE, student_alldata->CELS_1, student_alldata->PE_1,
                        student_alldata->FP, student_alldata->MT, student_alldata->LA, student_alldata->EFP, student_alldata->CERW_1, student_alldata->CA_2, student_alldata->CERW_2,
                        student_alldata->CELS_2, student_alldata->ECS, student_alldata->PTMS, student_alldata->AP, student_alldata->PE_2, student_alldata->EAP,
                        student_alldata->CPA_1, student_alldata->FIS); //不是则将这一行写入临时文件tmp1.txt
        }
        fclose(fin);
        fclose(ftp);
        remove("C:\\Users\\Lenovo\\Desktop\\the details of the all scores.txt");               //删除原文件
        rename("C:\\Users\\Lenovo\\Desktop\\tmp1.txt", "C:\\Users\\Lenovo\\Desktop\\the details of the all scores.txt"); //将临时文件名改为原文件名

        printf("\n已在文件“the details of the all scores.txt”中完成对信息的删减\n");

            //FILE *fin;
            //FILE *ftp;
        fin = fopen("C:\\Users\\Lenovo\\Desktop\\all details in personinfo.txt", "r"); //读打开原文件
        ftp = fopen("C:\\Users\\Lenovo\\Desktop\\tmp2.txt", "w");                          //写打开临时文件
        if (fin == NULL && ftp == NULL)
        {
            printf("Open the file failure...\n");
            exit(0);
        }
        while (fscanf(fin, "%lld %s %s %lf %lf\n", &student_info->student_xuehao, student_info->name, student_info->id, &student_info->student_deyu,
                      &student_info->student_laodong) == 5) //从原文件读取一行
        {
            if (student_info->student_xuehao != XH)
                fprintf(ftp, "%lld %s %s %lf %lf\n", student_info->student_xuehao, student_info->name, student_info->id, student_info->student_deyu,
                                     student_info->student_laodong); //不是则将这一行写入临时文件tmp1.txt
        }
        fclose(fin);
        fclose(ftp);
        remove("C:\\Users\\Lenovo\\Desktop\\all details in personinfo.txt");                                             //删除原文件
        rename("C:\\Users\\Lenovo\\Desktop\\tmp2.txt", "C:\\Users\\Lenovo\\Desktop\\all details in personinfo.txt");     //将临时文件名改为原文件名

        printf("\n已在文件“all details in personinfo.txt”中完成对信息的删减\n");

        system("pause");
    }
}



//----------------------------------------------------------以 上 是 学 生 系 统 的 各 种 声 明 函 数------------------------------------------------------------------//

int main()
{
    char WHT[100];
    {
        printf("提前处理数据中的排序方式:1.冒泡排序 2.希尔排序\n");
        int CH = -1;
        fflush(stdin);
        scanf("%d", &CH);
        student_read_deyu_and_laodong(); //计数 STUnum
        student_read_alldata();
        student_allocate();
        student_addScore();
        allocte_all_password();
        if(CH == 1)
        {
            sorting();//冒泡排序
        }
        else
        {
            shellSort(student_info, STUnum);//希尔排序
        }
        printf("\n即将进入双系统选择窗口······\n");
    }
    //提前处理数据
    //system("cls");
    //for(int j = 0; j < STUnum; j++)
    //printf("%lld %s\n", student_info[j].student_xuehao, student_info[j].PW);//验证密码是否正确
    //choose_system();
    int choice = -1;
    fflush(stdin); //此处没有问题
    //scanf("%d", &choice);
    stdio_messagebox(ret, choice);
    system("cls");
    switch (CHOICE)
    {
    case 1:
        manage_menu();
        manage_password();
        printf("\t\t\t******************\n");
        printf("\t\t\t* 欢迎使用本系统 *\n");
        printf("\t\t\t******************");
        puts("");
        manage_order();
        system("pause");
        //printf("STUnum = %d\n", STUnum);//检查STUnum是否符合
        break;
    case 2:
        student_menu();
        student_account();
        printf("\t\t\t******************\n");
        printf("\t\t\t* 欢迎使用本系统 *\n");
        printf("\t\t\t******************");
        puts("");
        student_order();
        system("pause");
        break;
    }
    
    return 0;
}

功能流程图(功能上有略微改动):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值