C语言成绩管理系统

这是一篇又臭又长的文章,有兴趣的可以看下去。。。

功能介绍:

1.用C语言实现一个包含素质类项目对应成果管理的成绩管理系统,能够录入学校本科生的成绩和素质类项目对应成果,并进行管理和维护,具体包括:

(1)管理系统可管理学校本科生的信息和素质类项目成果。

(2)学生信息包括姓名,学号,学院,年级,各科成绩,素质类成果。

(3)学生可以查询学校开设的学科,包括学科名称,课时,学分,类型(选修或必修)。

(4)系统会为学生记录并保存相关成绩,并对每一学期成绩进行排名和GPA的计算,为学校学生推免和奖学金评比提供依据。

(5)系统可分为教师端和学生端,学生端可以查询信息,教师端不仅可以查询信息,也可以修改信息。

具体的功能如下

  1. 增加:录入学生信息,包括学号,姓名,学院,各科成绩,素质类项目成果,并且支持一次性录入多个学生成绩记录。
  2. 增加:录入科目学时和学分和素质类项目成果的学分增益。
  3. 修改:能够随时修改学生信息,若经审核发现学生成绩录入错误,可以根据学生学号或者姓名查找要修改的学生记录,找到记录后,则可对该记录的各个字段进行修改。
  4. 修改:能够随学校安排变更科目学时和学分和素质类项目成果的学分增益。
  5. 删除:可以根据学生学号或者姓名查找要删除的学生记录,找到该记录后可以删除。
  6. 查找:按照学号可以查找学生记录,并打印学生信息。
  7. 查找按照姓名可以查找学生记录,并打印学生信息。

     8.统计:统计某学科挂科人数和优秀人数,并打印。

     9.存储:将当前系统中所有信息保存进文件里。

    10.排名:对某学院某一学期学生成绩进行排名并打印。

     11.排名:对某一学院毕业生成绩进行排名,并打印推免名单。

(代码功能与上面介绍时有所不同)

源码:

//头文件 all.h
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<cstdio>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#include<windows.h>
#include<stdbool.h>
#include<string>
#include<iostream>
//#include"students.h"
//学科信息
typedef struct subject {
	char name[100];
	double credit;
	int class_hour;
	bool st;
}subjects;
//st 为true时为必修,为false时为选修;

//素质类成果
typedef struct quality_outcome {
	char name[200];
	char kind[100];
	double add_credit;
}quality_outcomes;

//专业信息
typedef struct major {
	char name[100];
}majors;

//学生信息
typedef struct Student {
	char name[30];
	int student_number;
	char major_name[100];
	int college;
	int grade;
	//待完善
	//年度
	double result[35];//成绩
	double result_2[35];//素质类成果
	double avg_credit;//平均绩点
	int Rank;//排名
	//四年
	double all_avg_credit;
	int all_Rank;
	struct Student* pNext;

}Student;
typedef struct user {
	char ac[30];//账号
	char pw[30];//密码
}users;
typedef struct message {
	char account[15];
	char password[15];
}person;
typedef struct k {
	char account[15];
	char password[15];
}people[10];
//extern int renshu;
extern int th;
extern int len ;
extern int tmp_4[15];//各专业推免人数
extern users tmp_0[100];//用tmp_0作为用户信息数组
extern subjects tmp_1[35];//用tmp_1作为学科数组
extern quality_outcomes tmp_2[35];//用tmp_2作为素质类成果数组
extern majors tmp_3[15];//用作为major专业数组
extern int tuimian[15];//各专业推免人数
extern bool st_4[15];//专业存在的标记数组
extern bool st_3[35];//学科存在的标记数组
extern int  st_1[15][35];//专业学科信息的标记数组
extern bool st_2[35];//素质类成果存在的标记数组
void maneMenu();//管理端菜单
void maneKeyDown();//管理端菜单功能
void keyDown();//教师菜单功能
void systemMenu();//教师菜单
void stuKeyDown();//学生菜单功能
void stuMenu();//学生菜单
void Menu();// 系统菜单
void Key();// 系统菜单功能
void Hello();//登录界面
void login();//登录函数
void registeruser();//注册函数
void Print(char c, int n, int flag);
void tuimian_modify();//推免人数的修改
void initialize();//信息的初始化
//void initialize_majors();//初始化专业信息
//void initialize_subjects();//初始化学科信息
//void initialize_quality_outcomes();//初始化素质类成果信息
//void mark_subjects();//标记科目
void showMainMenu();//打印主界面,显示功能选项
Student* Create();//创建学生记录,返回学生结构体类型的指针
void all_student(Student* pHead);//待填充文件参数
void Add_students(Student* pHead);//向已有的数据表中添加学生信息
void subject();//管理端学科信息
void quality_outcome();//管理端素质化成果信息
void major();//管理端专业信息
//void Show(Student* pHead);//显示数据表中的所有信息
void stuSearch();//学生端成绩查询(通过文件)
void teaSearch(Student* pHead);//教师端成绩查询
void Modify_students(Student* pHead);//在数据表中搜索信息,找到后修改信息,没有找到则给出提示
//void Modify_subjects();//修改学科信息,没有找到给出提示
void Modify_quality_outcomes();//修改素质类成果信息,没有找到给出提示信息
Student* Delete(Student* pHead);//删除一个学生记录,先查找,若无则给出提示参数:一个已有的链表指针
void stuSort(); //学生端年度学分排名
void teaSort(Student* pHead);//教师端年度学分排名
//void stusort(Student* pHead);//学生端推免排名
//void teaAll_sort(Student* pHead);//教师端推免排名
void Statistics(Student* pHead);//统计数据表中的信息,分析各科成绩情况
Student* Read();//从文件读取信息
void Save();//保存数据表到本地,可以二进制保存或文本格式保存
int CheakNum(char* pcNotice);//检查学号输入是否正确
float CheakScore(char* pcNotice);//检查成绩输入是否正确
void ShowHead(int iType);//打印一段表头
void ShowSortMenu();//显示排序功能选项
void modeset(int w, int h);//初始化窗口大小
double jidian(double a);//绩点换算函数
void SwapStu(Student* Stu_1, Student* Stu_2);//交换学生信息
int  huanhang(int r);int  huanhang1(int r);
void printf2();
//main.c
#include"all.h"
int th;
int len;
int tmp_4[15];//各专业推免人数
users tmp_0[100];//用tmp_0作为用户信息数组
subjects tmp_1[35];//用tmp_1作为学科数组
quality_outcomes tmp_2[35];//用tmp_2作为素质类成果数组
majors tmp_3[15];//用作为major专业数组
int tuimian[15];//各专业推免人数
bool st_4[15];//专业存在的标记数组
bool st_3[35];//学科存在的标记数组
int st_1[15][35];//专业学科信息的标记数组
bool st_2[35];//素质类成果存在的标记数组
int main()
{
	//system("color 5");
	//list = createList();
	//readInfoFromFile("student.txt", list);
	while (1)
	{
		//printf("%d", st_1[1][29]);
		const char* dbFilePath = "数据库";
		const char* dbFilePath1 = "231";
		const char* dbFilePath2 = "23_11";
		//remove(dbFilePath);//删除数据库文件代码
		//remove(dbFilePath1);//删除文件
		//remove(dbFilePath2);
		Hello();
		system("pause");
		system("cls");
	}
	return 0;
}
#include"all.h"
int  huanhang(int r) {
if (r == 3) { printf("\n"); r = 0; }
if (r != 3) r++;
return r;
              }
int  huanhang1(int r) {
    if (r == 2) { printf("\n"); r = 0; }
    if (r != 2) r++;
    return r;
}
           
void all_student(Student* pHead) {
   extern subjects tmp_1[35];
   extern int st_1[15][35];
   subjects X[10];
    printf("---------------【查找专业的全部学生的信息】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.打印全部学生信息\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-1):");
    int tips = 0;
    while (1) {
        scanf("%d", &tips);
        if (tips < 0 || tips>1) {
            printf("请您重新输入!\n");
        }
        switch (tips) {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            return;
            system("pause");
            break;
        case 1:
            printf2();
            int p = 1;for (int i = 0; i < 15; i++) {
                if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); p = huanhang(p); }
            }printf2();
            /*printf("---请输入你要查找专业所对应的数字---\n");
            printf("计算机科学与技术输入0  网络安全输入1\n物联网输入2            汉语言文学输入3\n");
            printf("物理输入4              化学输入5\n数学输入6              法学输入7\n自动化输入8            经济学输入9 \n");*/
            int a, b = 0;
            scanf("%d", &a);
            int cnt = 0;
            for (int i = 0;i <= 30;i++) {
                if (st_1[a][i]==1) {
                    X[cnt++] = tmp_1[i];
                }
            }
            printf("学号\t姓名\t年级\t%s\t%s\t%s\t%s\t%s\t\n", X[0].name, X[1].name, X[2].name, X[3].name, X[4].name);
            Student* pcu = pHead;
            while (pcu != NULL)
            {
                if (pcu->college == a) {
                    printf("%d\t%s\t%d\t", pcu->student_number,pcu->name, pcu->grade);
                    for (int i = 0; i < 31; i++) {
                        if (st_1[a][i] == 1) {
                            printf("%.1lf\t\t",  pcu->result[i]);
                        }
                    }printf("\n");
                }pcu = pcu->pNext;
            }
        }break;
    }
}
#include"all.h"

double jidian(double a) {
    double b = 0;
    if (a > 90 || 90.0 == a) { b = 4.0; }
    else if ((87 < a) || 87 == a) { b = 3.7; }
    else if ((84 < a) || 84 == a) { b = 3.3; }
    else if ((80 < a) || 80 == a) { b = 3.0; }
    else if ((77 < a) || 77 == a) { b = 2.7; }
    else if ((74 < a) || 74 == a) { b = 2.3; }
    else if ((70 < a) || 70 == a) { b = 2.0; }
    else if ((67 < a) || 67 == a) { b = 1.7; }
    else if ((64 < a) || 64 == a) { b = 1.3; }
    else if ((60 < a) || 60 == a) { b = 1.0; }
    else if (a < 60) { b = 0.0; }
    return b;
}//根据成绩算绩点
Student* Create() {
    printf("---------------【输入学生信息】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.输入信息\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-1):");
    int tips = 0;
    int m1 = 0;
    Student X[100] = { 0 };//结构体数组,保存了前一年的all_avg_credit和avg_credit
    int cnt = 0;
    double t;
    int renshu, x;
    extern subjects tmp_1[35];
    extern quality_outcomes tmp_2[35];
    extern int st_1[15][35];
    Student* p, * tail, * pHead;
    p = (Student*)malloc(sizeof(Student));
    pHead = p; tail = p;
    scanf("%d", &tips);
    if (tips < 0 || tips>1) {
        printf("请您重新输入!\n");
    }
    while (1) {
        switch (tips) {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            system("pause");
            return pHead;;
            break;
        case 1:
            printf("\n请输入年级:");
            int g;
            scanf("%d", &g);

            char filename[10];
            //filename[0] = year[0], filename[1] = year[1], filename[2] = g;
            if (g >= 2) {
                printf("\n请输入前去年学生信息的文件名:");
                scanf("%s", filename);
            }
            FILE* file = fopen(filename, "r");
            if (file != NULL) {
                while (fscanf(file, "%lf %lf %d", &X[cnt].all_avg_credit, &X[cnt].avg_credit, &X[cnt].student_number)==3  ) {
                    cnt++;
                }
            }
            //pHead->pNext = NULL;

            printf("\n请输入学生人数:");
            scanf("%d", &renshu);
            for (int i = 0; i < renshu; i++) {
                system("cls");
                printf("请输入第%d学生的信息\n",i+1);
                printf("输入姓名:"); scanf("%s", &p->name);
                printf("输入学号:"); scanf("%d", &p->student_number);
                /*printf("输入学院数字:\n计算机科学与技术输入0  网络安全输入1\n物联网输入2            汉语言文学输入3\n");
                printf("物理输入4              化学输入5\n数学输入6              法学输入7\n自动化输入8            经济学输入9 \n");*/
                 printf2(); printf("请输入学院数字\n");int canshu1 = 1;for (int i = 0; i < 15; i++) {
                    if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu1 = huanhang(canshu1); }
                }printf2();
                scanf("%d", &p->college);
                printf("输入学院名字:");
                scanf("%s", &p->major_name);
                p->grade = g;
                //printf("%d\n", p->grade);
                x = p->college; double z = 0, m = 0;
                int pq1 = 1;
                printf2();
                for (int i = 0; i < 35; i++) {
                    if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
                } 
                printf2();
                /*printf("0微积分AI             1线性代数A             2程序设计基础\n");
                printf("3计算机导论           4思想道德与法治        5微积分AII\n");
                printf("6离散数学             7微积分AIII            8传感器技术\n");
                printf("9大学英语             10面向对象程序设计     11体育\n");
                printf("12中国近现代史        13形势与政策           14数据结构\n");
                printf("15概率论与数理统计    16计算机网络           17操作系统\n");
                printf("18计算机组成原理      19计算机系统架构       20无线传感器网络\n");
                printf("21信息安全数学基础    22应用密码学           23微机系统\n");
                printf("24马克思主义基本原理  25组合数学             26深度学习\n");
                printf("27大学生职业规划      28计算思维与计算科学   29四史\n");*/
                //printf("\n%d", st_1[1][1]);
                for (int i = 0;i < 35;i++) {
                    p->result_2[i] = 0;
                }
                for (int i = 0; i < 35; i++) {
                    if (st_1[x][i] == 1) {
                        printf("请输入%s的成绩\n", tmp_1[i].name);
                        scanf("%lf", &p->result[i]);//输入被标记的即这个专业有的学科
                        if (tmp_1[i].st == true) {
                            t = p->result[i];
                            t = jidian(t);
                            z = z + tmp_1[i].credit;//总学分
                            m = t * tmp_1[i].credit + m;//各科学分与时长乘积
                        }
                    }
                }
                p->avg_credit = m / z;
                if (p->grade >= 2) {
                    for (int i = 0;i<renshu;i++) {
                        if(X[i].student_number == p->student_number)
                        p->all_avg_credit = p->avg_credit + X[i].all_avg_credit;
                    }
                }
                else {
                    p->all_avg_credit = p->avg_credit;
                }
                if (p->grade == 4) {
                    printf2();
                    printf("请增加奖项\n");

                    int pu1 = 1;
                    for (int i = 0; i < 35; i++) {
                        if (st_2[i] == 1) { if (i < 10)printf("0");printf("%d%-50s", i, tmp_2[i].name); pu1 = huanhang1(pu1); }
                    } printf2();
                        /*printf("0国家级优秀结题项目负责人         1国家级优秀结题项目第二名\n");
                        printf("2业界公认学科综合顶级期刊         3CCF_A期刊\n");
                        printf("4CCF_A会议长文                    5CCF_B会议最佳论文/最佳学生论文\n");
                        printf("6CCF_B期刊论文                    7中科院期刊分区一区论文 \n");
                        printf("8CCF_C会议最佳论文/最佳学生论文   9CCF_C期刊论文\n");
                        printf("10CCF_B会议论文                   11中科院期刊分区二区论文\n");
                        printf("12计算机/软件学报发表的学术论文   13影响因子非0的SCI检索期刊论文\n");
                        printf("14CCF_C会议长文                   15信息科学发表的学术论文\n");
                        printf("16EI检索期刊                      17A类竞赛国家级一等奖\n");
                        printf("18A类竞赛国家级二等奖             19B类国家竞赛一等奖\n");
                        printf("20A类竞赛国家级三等奖             21B类竞赛国家级二等奖\n");
                        printf("22C类竞赛国家级一等奖             23B类竞赛国家级三等奖\n");
                        printf("24C类竞赛国家级二等奖             25C类竞赛国家级三等奖\n");*/
                        // printf("请输入你得到的奖项,输入完毕请输入30以结束");
                        int  shumu;
                        int O;
                        printf("请输入你得到的奖项数目:\n");
                        scanf("%d", &shumu);
                        printf("请输入你所得到的奖项对应的数字:");
                        for (int m1 = 0;m1 < 35;m1++) {
                            p->result_2[m1] = 0;
                        }
                        for (int k = 0; k < shumu; k++) {
                            scanf("%d", &O);
                            p->result_2[O] = tmp_2[O].add_credit;//计算总得到的学分
                        }



                        double mr = 0; int w = 0;
                        for (w = 0; w < 35; w++) {
                            mr = mr + p->result_2[w];
                        }
                        p->all_avg_credit = p->all_avg_credit / 4 + mr;
                   
                }
                if (i == renshu - 1) {
                    continue;
                }
                p = (Student*)malloc(sizeof(Student));
                tail->pNext = p;
                tail = p;

            }
            printf("\n信息输入完毕\n");
            tail->pNext = NULL;
            return pHead;
        }
    }
}
    


#include"all.h"
Student* Delete(Student* pHead)
{
    printf("---------------【学生记录删除】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.删除学生记录\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-1):");
    int tip = 0;
    Student* ptemp = pHead;
    while (1)
    {
        scanf("%d", &tip);
        if (tip < 0 || tip>1) {
            printf("请您重新输入!\n");
        }
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            return ptemp;
            system("pause");
            break;
        case 1:
            printf("请输入要删除的学生的学号:");
            int inumber;
            scanf("%d", &inumber);
            getchar();
            Student* pos = NULL;
            if (ptemp == NULL) {
                return ptemp;
            }
            else {
                if (pHead->student_number == inumber) {
                    return pHead->pNext;
                }
                while (ptemp->pNext != NULL)
                {
                    if (inumber == ptemp->pNext->student_number)
                    {
                        pos = ptemp->pNext;
                        ptemp->pNext = pos->pNext;
                        free(pos);
                        pos = NULL;
                    }
                    if (ptemp->pNext != NULL) {
                        ptemp = ptemp->pNext;
                    }
                    else {
                        break;
                    }
                }
                if (pHead) {
                    return pHead;
                }
                else {
                    return NULL;
                }
            }
            break;
        }
    }
}
#include"all.h"
void Hello()
{
    int se;
    printf("---------------【学生管理系统】---------------\n\n");
    printf("-----------------【登录界面】-----------------\n\n");
    printf("\t\t0.-退出系统-\n");
    printf("\t\t1.-登录账号-\n");
    printf("\t\t2.-注册账号-\n\n");
    printf("-----------------【欢迎使用】-----------------\n\n");
    printf("请输入(0-2):");
    while (1) {
        scanf("%d", &se);
        if (se < 0 || se>2) {
            printf("请您重新输入!\n");
        }
        switch (se)
        {
        case 1:
            login();//登录
            printf("---------------【学生管理系统】---------------\n\n");
            printf("-----------------【登录界面】-----------------\n\n");
            printf("\t\t0.-退出系统-\n");
            printf("\t\t1.-登录账号-\n");
            printf("\t\t2.-注册账号-\n\n");
            printf("-----------------【欢迎使用】-----------------\n\n");
            printf("请输入(0-2):");
            break;
        case 2:
            registeruser();//注册
            printf("---------------【学生管理系统】---------------\n\n");
            printf("-----------------【登录界面】-----------------\n\n");
            printf("\t\t0.-退出系统-\n");
            printf("\t\t1.-登录账号-\n");
            printf("\t\t2.-注册账号-\n\n");
            printf("-----------------【欢迎使用】-----------------\n\n");
            printf("请输入(0-2):");
            break;
        case 0:
            printf("\t\t【退出系统】\n");
            exit(0);
            system("pause");
            
            break;
        default:
            printf("输入错误!请重新输入:\n");
            break;
        }
    }
}
#include"all.h"
void initialize()
{
    printf("---------------【基础信息的初始化】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.专业信息的初始化\n");
    printf("\t\t2.学科信息的初始化\n");
    printf("\t\t3.素质类成果信息的初始化\n");
    printf("\t\t4.各专业学科的初始化\n");
    printf("\t\t5.各专业推免人数的初始化\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-5):");
    int tip = 0;
     extern users tmp_0[100];//用tmp_0作为用户信息数组
     extern subjects tmp_1[35];//用tmp_1作为学科数组
     extern quality_outcomes tmp_2[35];//用tmp_2作为素质类成果数组
     extern majors tmp_3[15];//用作为major专业数组
     extern bool st_4[15];//专业存在的标记数组
     extern bool st_3[35];//学科存在的标记数组
     extern int  st_1[15][35];//专业学科信息的标记数组
     extern bool st_2[35];//素质类成果存在的标记数组
     extern int tuimian[15];//各专业推免人数
     int canshu3 = 1; int pq2 = 1;
    while (1)
    {
        scanf("%d", &tip);
        if (tip < 0 || tip>5) {
            printf("请您重新输入\n");
        }
        int w = 40;
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            system("pause");
            maneMenu();
            maneKeyDown();
            break;
        case 1:
            strcpy(tmp_3[0].name, "计算机科学与技术");
            strcpy(tmp_3[1].name, "网络安全");
            strcpy(tmp_3[2].name, "物联网");
            strcpy(tmp_3[3].name, "汉语言文学");
            strcpy(tmp_3[4].name, "物理");
            strcpy(tmp_3[5].name, "化学");
            strcpy(tmp_3[6].name, "数学");
            strcpy(tmp_3[7].name, "法学");
            strcpy(tmp_3[8].name, "自动化");
            strcpy(tmp_3[9].name, "经济学");
           // printf("%s\n", tmp_3[9].name);//
            for (int i = 0;i < 10;i++) {
                st_4[i] = 1;
            }
            printf("专业信息初始化完成\n");
            system("pause");
            system("cls");
            initialize();
           // system("pause");
            break;
        case 2:
            strcpy(tmp_1[0].name, "微积分AI");
            tmp_1[0].class_hour = 72;
            tmp_1[0].credit = 3.5;
            tmp_1[0].st = true;
            strcpy(tmp_1[1].name, "线性代数A");
            tmp_1[1].class_hour = 56;
            tmp_1[1].credit = 2.5;
            tmp_1[1].st = true;
            strcpy(tmp_1[2].name, "程序设计基础");
            tmp_1[2].class_hour = 72;
            tmp_1[2].credit = 4;
            tmp_1[2].st = true;
            strcpy(tmp_1[3].name, "计算机导论");
            tmp_1[3].class_hour = 16;
            tmp_1[3].credit = 0.5;
            tmp_1[3].st = false;
            strcpy(tmp_1[4].name, "思想道德与法治");
            tmp_1[4].class_hour = 40;
            tmp_1[4].credit = 2.5;
            tmp_1[4].st = true;
            strcpy(tmp_1[5].name, "微积分AII");
            tmp_1[5].class_hour = 72;
            tmp_1[5].credit = 3.0;
            tmp_1[5].st = true;
            strcpy(tmp_1[6].name, "离散数学");
            tmp_1[6].class_hour = 56;
            tmp_1[6].credit = 3.5;
            tmp_1[6].st = true;
            strcpy(tmp_1[7].name, "微积分AIII");
            tmp_1[7].class_hour = 64;
            tmp_1[7].credit = 3.5;
            tmp_1[7].st = true;
            strcpy(tmp_1[8].name, "传感器技术");
            tmp_1[8].class_hour = 32;
            tmp_1[8].credit = 2.0;
            tmp_1[8].st = true;
            strcpy(tmp_1[9].name, "大学英语");
            tmp_1[9].class_hour = 32;
            tmp_1[9].credit = 2;
            tmp_1[9].st = true;
            strcpy(tmp_1[10].name, "面向对象程序设计");
            tmp_1[10].class_hour = 64;
            tmp_1[10].credit = 3.5;
            tmp_1[10].st = true;
            strcpy(tmp_1[11].name, "体育");
            tmp_1[11].class_hour = 32;
            tmp_1[11].credit = 0.5;
            tmp_1[11].st = true;
            strcpy(tmp_1[12].name, "中国近现代史");
            tmp_1[12].class_hour = 40;
            tmp_1[12].credit = 2.5;
            tmp_1[12].st = true;
            strcpy(tmp_1[13].name, "形势与政策");
            tmp_1[13].class_hour = 16;
            tmp_1[13].credit = 0.5;
            tmp_1[13].st = true;
            strcpy(tmp_1[14].name, "数据结构");
            tmp_1[14].class_hour = 88;
            tmp_1[14].credit = 5.0;
            tmp_1[14].st = true;
            strcpy(tmp_1[15].name, "概率论与数理统计");
            tmp_1[15].class_hour = 70;
            tmp_1[15].credit = 3.0;
            tmp_1[15].st = true;
            strcpy(tmp_1[16].name, "计算机网络");
            tmp_1[16].class_hour = 48;
            tmp_1[16].credit = 3.0;
            tmp_1[16].st = true;
            strcpy(tmp_1[17].name, "操作系统");
            tmp_1[17].class_hour = 72;
            tmp_1[17].credit = 4.0;
            tmp_1[17].st = true;
            strcpy(tmp_1[18].name, "计算机组成原理");
            tmp_1[18].class_hour = 48;
            tmp_1[18].credit = 3.0;
            tmp_1[18].st = true;
            strcpy(tmp_1[19].name, "计算机系统架构");
            tmp_1[19].class_hour = 48;
            tmp_1[19].credit = 3.0;
            tmp_1[19].st = true;
            strcpy(tmp_1[20].name, "无线传感器网络");
            tmp_1[20].class_hour = 56;
            tmp_1[20].credit = 3.0;
            tmp_1[20].st = true;
            strcpy(tmp_1[21].name, "信息安全数学基础");
            tmp_1[21].class_hour = 56;
            tmp_1[21].credit = 3.5;
            tmp_1[21].st = true;
            strcpy(tmp_1[22].name, "应用密码学");
            tmp_1[22].class_hour = 72;
            tmp_1[22].credit = 4.0;
            tmp_1[22].st = true;
            strcpy(tmp_1[23].name, "微机系统");
            tmp_1[23].class_hour = 48;
            tmp_1[23].credit = 3.5;
            tmp_1[23].st = true;
            strcpy(tmp_1[24].name, "马克思主义基本原理");
            tmp_1[24].class_hour = 40;
            tmp_1[24].credit = 2.5;
            tmp_1[24].st = true;
            strcpy(tmp_1[25].name, "组合数学");
            tmp_1[25].class_hour = 32;
            tmp_1[25].credit = 2.0;
            tmp_1[25].st = false;
            strcpy(tmp_1[26].name, "深度学习");
            tmp_1[26].class_hour = 32;
            tmp_1[26].credit = 2.0;
            tmp_1[26].st = false;
            strcpy(tmp_1[27].name, "大学生职业规划");
            tmp_1[27].class_hour = 32;
            tmp_1[27].credit = 2.0;
            tmp_1[27].st = false;
            strcpy(tmp_1[28].name, "计算思维与计算科学");
            tmp_1[28].class_hour = 48;
            tmp_1[28].credit = 3.0;
            tmp_1[28].st = false;
            strcpy(tmp_1[29].name, "四史");
            tmp_1[29].class_hour = 32;
            tmp_1[29].credit = 2.0;
            tmp_1[29].st = false;
            //printf("%s", tmp_1[29].name);//
            for (int i = 0;i < 30;i++) {
                st_3[i] = 1;
            }
            printf("学科信息初始化完成\n");
            system("pause");
            system("cls");
            initialize();
            break;
            case 3:
                strcpy(tmp_2[0].name, "国家级优秀结题项目负责人");
                strcpy(tmp_2[0].kind, "科研成果");
                    tmp_2[0].add_credit = 0.1;
                strcpy(tmp_2[1].name, "国家级优秀结题项目第二名");
                strcpy(tmp_2[1].kind, "科研成果");
                tmp_2[1].add_credit = 0.05;
                strcpy(tmp_2[2].name, "业界公认学科综合顶级期刊");
                strcpy(tmp_2[2].kind, "科研成果");
                tmp_2[2].add_credit = 0.4;
                strcpy(tmp_2[3].name, "CCF_A期刊");
                strcpy(tmp_2[3].kind, "科研成果");
                tmp_2[3].add_credit = 0.2;
                strcpy(tmp_2[4].name, "CCF_A会议长文");
                strcpy(tmp_2[4].kind, "科研成果");
                tmp_2[4].add_credit = 0.2;
                strcpy(tmp_2[5].name, "CCF_B会议最佳论文/最佳学生论文");
                strcpy(tmp_2[5].kind, "科研成果");
                tmp_2[5].add_credit = 0.2;
                strcpy(tmp_2[6].name, "CCF_B期刊论文");
                strcpy(tmp_2[6].kind, "科研成果");
                tmp_2[6].add_credit = 0.1;
                strcpy(tmp_2[7].name, "中科院期刊分区一区论文");
                strcpy(tmp_2[7].kind, "科研成果");
                tmp_2[7].add_credit = 0.1;
                strcpy(tmp_2[8].name, "CCF_C会议最佳论文/最佳学生论文");
                strcpy(tmp_2[8].kind, "科研成果");
                tmp_2[8].add_credit = 0.1;
                strcpy(tmp_2[9].name, "CCF_C期刊论文");
                strcpy(tmp_2[9].kind, "科研成果");
                tmp_2[9].add_credit = 0.05;
                strcpy(tmp_2[10].name, "CCF_B会议论文");
                strcpy(tmp_2[10].kind, "科研成果");
                tmp_2[10].add_credit = 0.05;
                strcpy(tmp_2[11].name, "中科院期刊分区二区论文");
                strcpy(tmp_2[11].kind, "科研成果");
                    tmp_2[11].add_credit = 0.05;
                strcpy(tmp_2[12].name, "计算机学报/软件学报发表的学术论文");
                strcpy(tmp_2[12].kind, "科研成果");
                tmp_2[12].add_credit = 0.05;
                strcpy(tmp_2[13].name, "影响因子非零的SCI检索期刊论文");
                strcpy(tmp_2[13].kind, "科研成果");
                tmp_2[13].add_credit = 0.02;
                strcpy(tmp_2[14].name, "CCF_C会议长文");
                strcpy(tmp_2[14].kind, "科研成果");
                tmp_2[14].add_credit = 0.02;
                strcpy(tmp_2[15].name, "中国科学:中国信息科学发表的学术论文");
                strcpy(tmp_2[15].kind, "科研成果");
                tmp_2[15].add_credit = 0.02;
                strcpy(tmp_2[16].name, "EI检索期刊");
                strcpy(tmp_2[16].kind, "科研成果");
                tmp_2[16].add_credit = 0.01;
                strcpy(tmp_2[17].name, "A类竞赛国家级一等奖");
                strcpy(tmp_2[17].kind, "竞赛获奖");
                tmp_2[17].add_credit = 0.4;
                strcpy(tmp_2[18].name, "A类竞赛国家级二等奖");
                strcpy(tmp_2[18].kind, "竞赛获奖");
                tmp_2[18].add_credit = 0.2;
                strcpy(tmp_2[19].name, "B类竞赛国家级一等奖");
                strcpy(tmp_2[19].kind, "竞赛获奖");
                tmp_2[19].add_credit = 0.2;
                strcpy(tmp_2[20].name, "A类竞赛国家级三等奖");
                strcpy(tmp_2[20].kind, "竞赛获奖");
                tmp_2[20].add_credit = 0.1;
                strcpy(tmp_2[21].name, "B类竞赛国家级二等奖");
                strcpy(tmp_2[21].kind, "竞赛获奖");
                tmp_2[21].add_credit = 0.1;
                strcpy(tmp_2[22].name, "C类竞赛国家级一等奖");
                strcpy(tmp_2[22].kind, "竞赛获奖");
                tmp_2[22].add_credit = 0.1;
                strcpy(tmp_2[23].name, "B类竞赛国家级三等奖");
                strcpy(tmp_2[23].kind, "竞赛获奖");
                tmp_2[23].add_credit = 0.05;
                strcpy(tmp_2[24].name, "C类竞赛国家级二等奖");
                strcpy(tmp_2[24].kind, "竞赛获奖");
                tmp_2[24].add_credit = 0.05;
                strcpy(tmp_2[25].name, "C类竞赛国家级三等奖");
                strcpy(tmp_2[25].kind, "竞赛获奖");
                tmp_2[25].add_credit = 0.02;
                //printf("%s\n", tmp_2[25].name);//
                for (int i = 0;i < 26;i++) {
                    st_2[i] = 1;
                }
                printf("素质类成果信息初始化完成\n");
                system("pause");
                system("cls");
                initialize();
                break;
            case 4:
                //新增学科的初始化问题
                //新增学科或删除学科的提示
               // printf("\n请选择专业(0代表计算机科学与技术,1代表网络安全,2代表物联网,3代表汉语言文学,4代表物理,5代表化学,6代表数学,7代表法学,8代表自动化,9代表经济学)\n");
                 printf2();
                for (int i = 0; i < 15; i++) {
                    if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu3= huanhang(canshu3); }
                }
                printf("\n请选择专业\n");
                printf2();
                /*for (int i = 0;i < 15;i++) {
                    if (st_4[i]) {
                        printf("%d%s\t",i, tmp_3[i].name);
                    }if ((i + 1) % 3 == 0) {
                        printf("\n");
                    }
                }*/
                int a;
                scanf("%d", &a);
               // printf("\n请选择年级\n");
                //int b;
              //  scanf("%d", &b);
                //printf("微积分AI0\n线性代数A1\n程序设计基础2\n计算机导论3\n思想道德与法治4\n微积分AII5\n离散数学6\n微积分AIII7\n传感器技术8\n大学英语9\n面向对象程序设计10\n");
                //printf("体育11\n 中国近现代史12\n形势与政策13\n数据结构14\n概率论与数理统计15\n计算机网络16\n操作系统17\n计算机组成原理18\n计算机系统架构19\n无线传感器网络20\n");
                //printf("信息安全数学基础21\n应用密码学22\n 微机系统23\n马克思主义基本原理24\n 组合数学25\n深度学习26\n大学生职业规划27\n计算思维与计算科学28\n四史29");
                /*for (int i = 0;i < 35;i++) {
                    if (st_3[i]) {
                        printf("%d %s\t\t",i, tmp_1[i].name);

                    }if ((i + 1) % 3 == 0) {
                        printf("\n");
                    }
                }*/
                printf2();
                for (int i = 0; i < 35; i++) {
                    if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq2= huanhang(pq2); }
                }printf2();
                printf("\n输入完毕后请输入-1退出\n");
                printf("请输入你想输入的学科代号:\n");
                while (w != -1)
                {
                    
                    scanf("%d", &w);
                    if (w >= 0 && w < 35) {
                        st_1[a][w] = 1;
                    }
                }
                printf("\n各专业年级科目信息初始化完成\n");
                system("pause");
                system("cls");
                initialize();
                break;
            case 5:
               /* for (int i = 0;i < 15;i++) {
                    if (st_4[i]) {
                        printf("%d %s\t\t", i, tmp_3[i].name);
                    }if ((i + 1) % 3 == 0) {
                        printf("\n");
                    }
                }*/
                int canshu2 = 1;
                //printf("\n请选择专业(0代表计算机科学与技术,1代表网络安全,2代表物联网,3代表汉语言文学,4代表物理,5代表化学,6代表数学,7代表法学,8代表自动化,9代表经济学)\n");
                printf2();
                for (int i = 0; i < 15; i++) {
                    if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu2 = huanhang(canshu2); }
                }
                printf2();
                printf("\n请选择专业编号:");
                int a1;
                scanf("%d", &a1);
                printf("\n请输入您要设定的推免人数\n");
                int b;
                scanf("%d", &b);
                tuimian[a1] = b;
                system("pause");
                system("cls");
                initialize();
                break;
        }
    }
}
#include"all.h"
void Menu()
{
    printf("---------------【学生管理系统】---------------\n\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.教师端\n");
    printf("\t\t2.学生端\n");
    printf("\t\t3.管理端\n");//管理端密钥设置待完善。。。。。。
    printf("\t\t4.退出登录\n");
    printf("----------------------------------------------\n");
    printf("请选择身份(请输入0-4):");
}
void Key()
{
    char k[6] = { 0 };
    int userKey;
    int flag = 0;
    //struct student tempData;
    scanf("%d", &userKey);
    if (userKey < 0 || userKey>4) {
        printf("请您重新输入!\n");
    }
    switch (userKey)
    {
    case 0:
        printf("\t\t【退出系统】\n");
        system("pause");
        exit(0);
        break;
    case 1:
            system("cls");
            systemMenu();
            keyDown();
            system("pause");
        break;
    case 2:
            system("cls");
            stuMenu();
            stuKeyDown();
            system("pause");
        break;
    case 3:
            printf("\n请输入管理端密钥:\n");
            for (int j = 0; j < 6; j++)
            {
                k[j] = _getch();
                printf("*");
            }
            for (int i = 0;i < 6;i++) {
                if (k[i] != '6') {
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) {
                printf("\n密钥输入错误,您无权限进入管理端!\n");
                printf("\n账号已退出\n");
                system("pause");
                break;
            }
            system("cls");
            maneMenu();
            maneKeyDown();
            system("pause");
        
    case 4:
        while (1)
        {
            system("cls");
            Hello();
            system("pause");
        }

        break;
    default:
        printf("输入错误!请重新输入:");
        break;
    }

}
#include"all.h"

void login()
               {
                    int len = sizeof(message);
                    int th = sizeof(k);
                    k people[15];
                    message person;
                    printf("\t\t【登录账号】 ");
                        FILE * rp;
                    if ((rp = fopen("数据库", "r+")) == NULL)
                        exit(0);

                    fseek(rp, 0, SEEK_END);
                    int size = ftell(rp);
                    rewind(rp);

                    if (size != 0)
                    {
                        while (1)
                        {
                            int i = 0;
                            printf("\n请输入账号:");
                            scanf("%s", &person.account);
                            printf("请输入密码:");
                            for (int j = 0; j < 6; j++)
                            {
                                person.password[j] = _getch();
                                printf("*");
                            }
                            person.password[6] = '\0'; // 添加字符串结束符

                            while (fscanf(rp,"%s %s",people[i].account,people[i].password)) // 读取信息
                            {
                                //while fscanf存疑为什么无法正常进行??????
                                if (strcmp(people[i].account, person.account) == 0 && strcmp(people[i].password, person.password) == 0) // 密码的判断
                                {
                                    printf("登录成功\n");
                                        fclose(rp);
                                    system("pause");
                                    system("cls");
                                    while (1)
                                    {
                                        Menu();
                                        Key();
                                        system("pause");
                                        system("cls");
                                    }
                                    break; // 登录成功,跳出循环
                                }
                                i++;
                            }
                            if (i == size / th) // 如果遍历完所有数据仍未找到匹配项,则登录失败
                            {
                                printf("登录失败!");
                                    rewind(rp);
                                    return;// 登录不成功,把文件指针移回文件开头
                            }
                        }
                    }
                }
#include"all.h"
void major()
{
    printf("---------------【专业增加和删除】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.增加专业\n");
    printf("\t\t2.删除专业\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-2):");
    int tip = 0;
    extern majors tmp_3[15];
    static int n = 9;
    extern bool st_4[15];
    while (1)
    {
        scanf("%d", &tip);
        if (tip < 0 || tip>2) {
            printf("请您重新输入!\n");
        }
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("pause");
            system("cls");
            maneMenu();
            maneKeyDown();
            break;
        case 1:
            n++;
            printf("\n请输入您要增加的专业名称\n");
            scanf("%s", &tmp_3[n].name);
            st_4[n] = 1;
            printf("\n%s", tmp_3[10].name);
            system("pause");
            system("cls");
            major();
            break;
        case 2:
            int canshu3 = 1;
            int x = 0;
            printf("\n请选择您要删除的专业编号\n");
            printf2();
            for (int i = 0; i < 15; i++) {
                if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu3 = huanhang(canshu3); }
            }
            printf2();
            scanf("%d", &x);
            st_4[x] = 0;
            system("pause");
            system("cls");
            major();
            break;
        }
    }
}
#include"all.h"
void maneMenu()
{
    //推免人数的完善。。。。。。。
    printf("---------------【学生管理系统】---------------\n\n");
    printf("------------------【管理端】------------------\n\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.专业信息管理\n");
    printf("\t\t2.学科信息管理\n");
    printf("\t\t3.素质类成果管理\n");
    printf("\t\t4.推免人数管理\n");
    printf("\t\t5.初始化信息\n");
    printf("\t\t6.返回主菜单\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-6):");
}

void maneKeyDown()
{
    int userKey;
    //struct student tempData;
    while (1) {
        scanf("%d", &userKey);
        if (userKey<0 || userKey>1) {
            printf("请您重新输入!\n");
        }
        switch (userKey)
        {
        case 0:
            printf("\t\t【退出系统】\n");
            system("pause");
            exit(0);
            break;
        case 1:
            system("cls");
            major();
            maneMenu();
            break;
        case 2:
            system("cls");
            subject();
            maneMenu();
            break;
        case 3:
            system("cls");
            quality_outcome();
            maneMenu();
            break;
        case 4:
            system("cls");
            tuimian_modify();
            maneMenu();
            break;
        case 5:
            system("cls");
            initialize();
            maneMenu();
            break;
        case 6:
            //printf("\t\t【返回主菜单】\n");
            while (1)
            {
                system("cls");
                Menu();
                Key();
                system("pause");

            }
            break;
        default:
            printf("输入错误!请重新输入:");
            break;
        }
    }

}
#include"all.h"
#include <chrono>
void printf2() {
    printf("\n-----------------------------------------------------------------------\n");
}
void Modify_students(Student* pHead) {
    extern subjects tmp_1[35];
    extern quality_outcomes tmp_2[35];
    //extern int st_1[10][30];
    extern bool st_4[15];//专业存在的标记数组
    extern bool st_3[35];//学科存在的标记数组
    extern int  st_1[15][35];//专业学科信息的标记数组
    extern bool st_2[35];//素质类成果存在的标记数组
    int iItem, iNum = 0; double z = 0, m = 0;
    char _name[20] = { '\0' };
    Student* pCu = pHead;//注意只能一次性输入同一学年的学生,保证学号一致性
    char filename[10];
    char filename1[10];
    int pq1 = 0;
    printf("---------------【修改学生信息】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.按学号查找并修改\n");
    printf("\t\t2.按姓名查找并修改\n");
    printf("\t\t3.保存修改内容\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-3):");
    if (pCu == NULL)
    {
        printf("\n数据表为空,请先创建数据表!\n");
        return;
    }
    scanf("%d", &iItem);
    getchar();
    while (iItem != 2 && iItem != 1 && iItem != 0 && iItem != 3)
    {
        printf("输入有误,请重新输入!\n");
        scanf("%d", &iItem);
    }
    switch (iItem)
    {
    case 0: printf("\n返回菜单\n");
        printf("\n返回菜单\n");
        system("cls");
        system("pause");
        return;
        break;
    case 1:
        printf("请输入要查找的学号:");
        scanf("%d", &iNum);
        getchar();
        while (pCu != NULL)
        {
            double las = 0;
            if (pCu->student_number == iNum)
            {
                /*std::string str = std::to_string(pCu->student_number);
                std::string str1 = std::to_string(pCu->grade);
                for (int i = 0;i < 2;i++) {
                    filename[i] = str[i];
                }
                filename[2] = str1[0];*/
                double p = 0;
                int x = pCu->college;
                int a, b;
                printf("\n请输入你要更改的成绩门数\n"); scanf("%d", &a);
                /*for (int i = 0;i < 35;i++) {
                    if (st_3[i]) {
                        printf("%d %s\t\t", i, tmp_1[i].name);

                    }if ((i + 1) % 3 == 0) {
                        printf("\n");
                    }
                }*/
                printf2();
                for (int i = 0; i < 35; i++) {
                    if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
                }
                printf2();
                for (int w = 0; w < a; w++) {
                    printf(" 请输入你要更改的学科门类\n");
                    scanf("%d", &b);
                    printf("该学科本来成绩为"); printf("%.1lf\n", pCu->result[b]);
                    double t = pCu->result[b];
                    printf("请输入后来成绩为"); scanf("%lf", &pCu->result[b]);
                    for (int i = 0; i < 35; i++) {
                        if (st_1[x][i] == 1) {
                            if (tmp_1[i].st == true) {
                                las = t;
                                t = pCu->result[i];
                                t = jidian(t);
                                z = z + tmp_1[i].credit;//总学分
                                m = t * tmp_1[i].credit + m;//各科学分与时长乘积
                            }
                        }
                    }
                }
                pCu->avg_credit = m / z;
                pCu->all_avg_credit = pCu->all_avg_credit + pCu->avg_credit - las;
            }
                pCu = pCu->pNext;
            
        }
        system("cls");
        system("pause");
        Modify_students(pHead);
        break;
    case 2:printf("请输入要查找的姓名:");
        scanf("%s", _name);
        getchar();
        while (pCu != NULL)
        {
            double last = 0.0;
            if (strcmp(pCu->name, _name) == 0)
            {
                /*std::string str = std::to_string(pCu->student_number);
                std::string str1 = std::to_string(pCu->grade);
                for (int i = 0;i < 2;i++) {
                    filename[i] = str[i];
                }
                //filename[2] = '_';
                filename[2] = str1[0];*/
                double p = 0;
                int x = pCu->college;
                int a, b;
                printf("\n请输入你要更改的成绩数目\n"); scanf("%d", &a);
                printf2();
                for (int i = 0; i < 35; i++) {
                    if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
                }
                printf2();
                for (int w = 0; w < a; w++) {
                    printf(" 请输入你要更改的学科门类\n");
                    scanf("%d", &b);
                    printf("该学科本来成绩为"); printf("%.1lf\n", pCu->result[b]);
                    double t = pCu->result[b]; last = t;
                    printf("请输入后来成绩为"); scanf("%lf", &pCu->result[b]);
                    for (int i = 0; i < 35; i++) {
                        if (st_1[x][i] == 1) {
                            if (tmp_1[i].st == true) {
                                t = pCu->result[i];
                                t = jidian(t);
                                z = z + tmp_1[i].credit;//总学分
                                m = t * tmp_1[i].credit + m;//各科学分与时长乘积
                            }
                        }
                    }
                }
                pCu->avg_credit = m / z;
                pCu->all_avg_credit = pCu->all_avg_credit + pCu->avg_credit - last;
            }
                pCu = pCu->pNext;
            
        }
        system("cls");
        system("pause");
        Modify_students(pHead);
        break;
    case 3:
        printf("请输入文件名(学号前2位和年级):\n");
        scanf("%s", filename);
        for (int i = 0;i < 10;i++) {
            filename1[i] = filename[i];
        }
        filename1[3] = '0';
        for (int i = 4;i < 10;i++) {
            filename1[i] = 0;
        }
        FILE* file = fopen(filename, "w");
        if (file == NULL) {
            printf("无法打开文件 %s", filename);
        }
        Student* current = pHead;
        while (current != NULL) {
            fprintf(file, "%s %d %s %d %d", current->name, current->student_number, current->major_name, current->college, current->grade);
            for (int i = 0; i < 35; i++) {
                if (st_1[current->college][i] == 1) {
                    fprintf(file, " %.1lf", current->result[i]);
                }
            }
           /* for (int i = 0; i < 35; i++) {
                if (current->result_2[i] > 0) {
                    fprintf(file, " %.1lf", current->result_2[i]);
                }
            }*/
            fprintf(file, " %.1lf %d %.1lf ", current->avg_credit, current->Rank, current->all_avg_credit);
            fprintf(file, "\n");
            current = current->pNext;
        }
        fclose(file);
        FILE* file1 = fopen(filename1, "w");
        if (file1 == NULL) {
            printf("无法打开文件 %s", filename1);
        }
        Student* current1 = pHead;
        while (current1 != NULL) {
            fprintf(file1, "%.1lf %.1lf %d\n", current1->all_avg_credit, current1->avg_credit, current1->student_number);
            current1 = current1->pNext;
        }
        fclose(file1);
        system("cls");
        system("pause");
        return;
        break;

    }
}
//Add_quality_outcomes.c
#include"all.h"
void quality_outcome()
{
    //注意完善素质类成果信息注释,包括名称对应数字。
    printf("---------------【素质类成果增加、修改和删除】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.增加项目\n");
    printf("\t\t2.修改项目\n");
    printf("\t\t3.删除项目\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-3):");
    int tip;
    int pu2 = 1;
    int pu1 = 1;
    extern quality_outcomes tmp_2[35];
    extern bool st_2[35];
    static int n = 25;
    while (1)
    {
       
        scanf("%d", &tip);
        if (tip < 0 || tip>3) {
            printf("请您重新输入!\n");
        }
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            maneMenu();
            maneKeyDown();
            system("pause");
            break;
        case 1:
            n++;
            printf("\n请输入您要增加的素质类成果名称:\n");
            scanf("%s", &tmp_2[n].name);
            printf("\n请输入您要增加的素质类成果的类别:\n");
            scanf("%s", &tmp_2[n].kind);
            printf("\n请输入您要增加的素质类成果的学分增益\n");
            scanf("%lf", &tmp_2[n].add_credit);
            st_2[n] = 1;
            printf("\n增加成功\n");
            system("cls");
            system("pause");
            quality_outcome();
            break;
        case 2:
            int x2;
            
            printf2();
            for (int i = 0; i < 35; i++) {
                if (st_2[i] == 1) { if (i < 10)printf("0");printf("%d%-50s", i, tmp_2[i].name); pu2 = huanhang1(pu2); }
            }
            printf2();
            printf("\n请选择您要修改的素质类成果编号:\n");
            scanf("%d", &x2);
            printf("\n请输入您要修改的素质类成果名称:\n");
            scanf("%s", &tmp_2[x2].name);
            printf("\n请输入您要修改的素质类成果的类别:\n");
            scanf("%s", &tmp_2[x2].kind);
            printf("\n请输入您要修改的素质类成果的学分增益\n");
            scanf("%lf", &tmp_2[x2].add_credit);
            st_2[x2] = 1;
            printf("\n修改成功\n");
            system("cls");
            system("pause");
            quality_outcome();
            break;
        case 3:
            //quality_outcomes X;
            int x1;
            
            printf2();
            for (int i = 0; i < 35; i++) {
                if (st_2[i] == 1) { if (i < 10)printf("0");printf("%d%-50s", i, tmp_2[i].name); pu1 = huanhang1(pu1); }
            } 
            printf2();
            printf("\n请选择您要删除的素质类成果编号:\n");
            scanf("%d", &x1);
            st_2[x1] = 0;
            printf("\n删除成功\n");
            system("cls");
            system("pause");
            quality_outcome();
            break;
       
        }
    }


}
// 注册账号功能
#include"all.h"
/*oid registeruser()
{
    static int a = 0;
    users tmp_0[100];
    char ac[30];
    char pw[6], pd[6];
    int	i;
    printf("\t\t【注册帐号】\n");
    FILE* fp = fopen("账号信息档案.txt", "ab");
    printf("请输入用户账号和密码(账号、密码可以为数字,中文字母,英文字母,符号,密码必须6位)\n\n");
    printf("请输入账号:");
    scanf("%s", ac);
    strcpy(tmp_0[a].ac, ac);
    printf("请输入密码:");
    for (i = 0; i < 6; i++)
    {
        pw[i] = _getch();
        printf("*");
        tmp_0[a].pw[i] = pw[i];
        if (pw[i] == '\r')
        {
            printf("注册失败,请重新注册账号\n");
            return;
        }
    }
    printf("\n再次确认密码:");
    for (i = 0; i < 6; i++)
    {
        pd[i] = _getch();
        printf("*");
        if (tmp_0[a].pw[i] != pd[i])
        {
            printf("\n密码不对,请重新注册账号");
            return;
        }
    }
    fprintf(fp, "账号\t密码\n");
    fprintf(fp, "%s\t%s\n", tmp_0[a].ac, tmp_0[a].pw);
    printf("\n注册成功!!!\n");
    fclose(fp);
    system("pause");
    system("cls");
    a++;
}*/
void registeruser()
{
	int len = sizeof(message);
	int th = sizeof(k);
	message person = { 0 };
	k people[15];
	message X = { 0 };
	int flag = 1;
	int size = 0;
	printf("\t\t【注册帐号】\n");
	FILE* fp;//读入指针
	if ((fp = fopen("数据库", "a+")) == NULL)
		exit(0);

	FILE* rp;//读取指针
	if ((rp = fopen("数据库", "r+")) == NULL)
		exit(0);

	while (flag)
	{
		fseek(rp, 0, SEEK_END);
		size = ftell(rp);
		rewind(rp);
		if (size != 0)
		{
			while (flag)
			{
				int i = 0;
				printf("请设置账号:");
				scanf("%s", &person.account);
				printf("请设置密码:");
				//scanf("%s", &person.password);
				for (int i = 0;i < 6;i++) {
					X.password[i] = _getch();
					printf("*");
				}
				printf("\n再次确认密码:\n");
				for (int i = 0;i < 6;i++) {
					person.password[i] = _getch();
					printf("*");
				}
				for (int i = 0;i < 6;i++) {
					if (person.password[i] != X.password[i]) {
						printf("\n密码不对,请重新注册账号");
						return;
					}
				}
				while (fread(&people[0], th, 1, rp) == 1)//读取信息
				{

				}

				for (i = 0; i < 15; i++)//逐个比较
				{
					if (strcmp(person.account, people[i].account) == 0)
					{
						printf("注册失败!\n");
						memset(&person, 0, len);
						flag = 2;
						rewind(rp);
						break;
					}
					flag = 1;
					
				}


				if (flag == 2) {
					continue;
				}
				//fprintf(fp, "%s\t %s\t\n", person.account, person.password);
				fwrite(&person, len, 1, fp);
				fprintf(fp, "\n");
				flag = 0;
				//return;
			}

		}
		flag = 0;
	}
	if (size == 0) {
		fprintf(fp, "%s %s", person.account, person.password);
	}
	printf("注册成功!\n");
	system("pause");
	system("cls");
	fclose(rp);
	fclose(fp);
	return;
}
#include"all.h"
void teaSearch(Student* pHead)
{
    Student* pCur = pHead;
    int iItem, iNum = 0;
    char _name[20] = { '\0' };
    printf("---------------【学生信息查找】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.按学号查找学生记录\n");
    printf("\t\t2.按姓名查找学生记录\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-2):");
    if (pCur == NULL)
    {
        printf("\n没有学生记录,请先创建学生记录!\n");
        return;
    }
   
    scanf("%d", &iItem);
    getchar();
    while (iItem > 2 || iItem < 0)
    {
        char c;
        while ((c = getchar()) != EOF && c != '\n');
        printf("输入有误,请重新输入!\n");
        scanf("%d", &iItem);
    }
    switch (iItem)
    {
    case 0:
        printf("\n返回菜单\n");
        system("cls");
        system("pause");
        break;
    case 1:
        printf("请输入要查找的学号:");
        scanf("%d", &iNum);
        getchar();
        while (pCur != NULL)
        {
            if (pCur->student_number == iNum)
            {
                printf("姓名:%s\n", pCur->name);
                printf("学号:%d\n", pCur->student_number);
                printf("专业:%s\n", pCur->major_name);
                printf("年级:%d\n", pCur->grade);
                //printf("成绩:", pCur->result); //?
                printf("平均绩点:%.1lf\n", pCur->avg_credit);
                printf("排名:%d\n", pCur->Rank);
               // printf("总平均绩点:%.1lf\n", pCur->all_avg_credit);
                //printf("总排名:%d\n", pCur->all_Rank);
                return;
            }
            pCur = pCur->pNext;
        }
        if (pCur == NULL)
        {
            printf("\n数据表中没有该学生!\n");
        }
        break;
    case 2:
        printf("请输入要查找的姓名:");
        scanf("%s", _name);
        getchar();
        while (pCur != NULL)
        {
            if (strcmp(pCur->name, _name) == 0)
            {
                printf("姓名:%s\n", pCur->name);
                printf("学号:%d\n", pCur->student_number);
                printf("专业:%s\n", pCur->major_name);
                printf("年级:%d\n", pCur->grade);
                //printf("成绩:", pCur->result);//??
                printf("平均绩点:%.1lf\n", pCur->avg_credit);
                printf("排名:%d\n", pCur->Rank);
                //printf("总平均绩点:%lf\n", pCur->all_avg_credit);
               // printf("总排名:%d\n", pCur->all_Rank);
                return;
            }
            pCur = pCur->pNext;
        }
        if (pCur == NULL)
        {
            printf("\n数据表中没有该学生!\n");
        }
        break;
    }
}
#include"all.h"
void Statistics(Student* pHead) {//界面待优化。。。。。。。。。。
    extern subjects tmp_1[35]; 
    extern int st_1[15][35];
    printf("---------------【查找学科的及格率和优秀率】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.查找\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-1):");
    int tips = 0;
    int a, b = 0; int t = 0, m = 0;
    int pq1 = 1;
    Student* pcu = pHead;
    while (1) {
        scanf("%d", &tips);
        if (tips < 0 || tips>1) {
            printf("请您重新输入!\n");
        }
        switch (tips) {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            //system("pause");
            return ;
            break;
        case 1:
            printf("-------【请输入你要查找科目对应的数字】-------\n");
            printf2();
            for (int i = 0; i < 35; i++) {
                if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
            }printf2();
            scanf("%d", &a);
            b = 0, t = 0;
            while (pcu != NULL)
            {
                if ((pcu->result[a] != 0)) {

                    if (pcu->result[a] < 60) {
                        t++;
                    }
                    if (pcu->result[a] >= 90) {
                        m++;
                    }
                    b++;
                }
                pcu = pcu->pNext;

            }
            printf("---该学科总人数为%d-------", b);
            printf("---该学科不及格人数为%d---", t);
            printf("---该学科优秀人数为%d-----", m);
            system("pause");
            system("cls");
            printf("---------------【查找学科的及格率和优秀率】---------------\n\n");
            printf("\t\t0.返回菜单\n");
            printf("\t\t1.查找\n");
            printf("----------------------------------------------\n");
            printf("请输入(0-1):");
            break;
        }
    }
}
#include"all.h"
void stuMenu()
{
    printf("---------------【学生管理系统】---------------\n\n");
    printf("------------------【学生端】------------------\n\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.查询成绩\n");
    printf("\t\t2.查询推免名单\n");
    printf("\t\t3.返回主菜单\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-3):");
    //关于大四以下无法查询推免名单的优化
}

void stuKeyDown()
{
    int userKey;
    //struct student tempData;
    while (1) {
        scanf("%d", &userKey);
        if (userKey < 0 || userKey>3) {
            printf("请您重新输入!\n");
        }
        switch (userKey)
        {
        case 0:
            printf("\t\t【退出系统】\n");
            system("pause");
            exit(0);
            break;
        case 1:
            system("cls");
            stuSearch();
            printf("---------------【学生管理系统】---------------\n\n");
            printf("------------------【学生端】------------------\n\n");
            printf("\t\t0.退出系统\n");
            printf("\t\t1.查询成绩\n");
            printf("\t\t2.查询推免名单\n");
            printf("\t\t3.返回主菜单\n");
            printf("----------------------------------------------\n");
            printf("请输入(0-3):");
            break;
        case 2:
            system("cls");
            stuSort();
            printf("---------------【学生管理系统】---------------\n\n");
            printf("------------------【学生端】------------------\n\n");
            printf("\t\t0.退出系统\n");
            printf("\t\t1.查询成绩\n");
            printf("\t\t2.查询推免名单\n");
            printf("\t\t3.返回主菜单\n");
            printf("----------------------------------------------\n");
            printf("请输入(0-3):");
            //system("pause");
            break;
        case 3:
            //printf("\t\t【返回主菜单】\n");
            system("pause");
            while (1)
            {
                system("cls");
                Menu();
                Key();
                system("pause");

            }
            break;
        default:
            printf("输入错误!请重新输入:");
            break;
        }
    }

}
#include"all.h"
void stuSearch()
{
    printf("---------------【学生信息查找】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.查找学年学生信息\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-1):");
    int tip = 0;
    extern subjects tmp_1[35];
    extern int st_1[15][35];
    int G[10] = { 0 };
    subjects Y[10] = { 0 };
    Student X[100] = { 0 };
    while (1)
    {
        scanf("%d", &tip);
        if (tip < 0 || tip>1) {
            printf("请您重新输入!\n");
        }
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            return;
            break;
        case 1:
            int idx = 0;
            int cnt = 0;
            int number, g;
            int c;
            int canshu2 = 1;
            printf("\n请输入您的学号:");
            scanf("%d", &number);
            printf2();
            for (int i = 0; i < 15; i++) {
                if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu2 = huanhang(canshu2); }
            }
            printf2();
            printf("\n请输入您的学院编号:");//注释待补充。。。。。。。
            scanf("%d", &c);
            printf("\n请输入您要查询的学年:");
            scanf("%d", &g);
            char filename[10];//基础信息的文件名由入学年份(学号前2位)和年级组成
            printf("请输入文件名(包括入学年份,学年)\n");
            scanf("%s", filename);
            FILE* file = fopen(filename, "r");
            for (int i = 0;i <= 30;i++) {
                if (st_1[c][i] == 1) {
                    Y[idx] = tmp_1[i];
                    G[idx] = i;
                    idx++;
                }
            }
            if (file == NULL) {
                printf("无法打开文件: %s\n", filename);
                break;
            }
            while (fscanf(file, "%s%d%s%d%d%lf%lf%lf%lf%lf%lf%d%lf", &X[cnt].name, &X[cnt].student_number, &X[cnt].major_name,&X[cnt].college, & X[cnt].grade, &X[cnt].result[G[0]], &X[cnt].result[G[1]], &X[cnt].result[G[2]], &X[cnt].result[G[3]], &X[cnt].result[G[4]], &X[cnt].avg_credit, &X[cnt].Rank,&X[cnt].all_avg_credit) == 13) {
                cnt++;
            }
            fclose(file);
            printf("学生的在第%d学年的信息如下:\n", g);
            printf("学号\t姓名\t年级\t专业\t平均绩点\t排名\t%s\t%s\t%s\t%s\t%s\t\n", Y[0].name, Y[1].name, Y[2].name, Y[3].name, Y[4].name);
            for (int i = 0;i < cnt;i++) {
                if (X[i].student_number == number) {
                    printf("%d\t%s\t%d\t%s\t%.1lf\t\t%d\t", X[i].student_number, X[i].name, X[i].grade,X[i].major_name,X[i].avg_credit,X[i].Rank);
                    for (int j = 0; j < 35; j++) {
                        if (st_1[c][j] == 1) {
                            printf("%.1lf\t\t", X[i].result[j]);
                        }
                    }printf("\n");
                }
            }
            break;
        }
    }
}
#include"all.h"
void stuSort()
{
    printf("---------------【学生推免名单查询】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.打印推免名单\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-1):");
    int tip = 0;
    extern int tmp_4[15];
    extern int tuimian[15];
    Student X[100] = { 0 };
    int cnt = 0;
    //int g;
    int number;
    while (1)
    {
        scanf("%d", &tip);
        if (tip < 0 || tip>1) {
            printf("请您重新输入!\n");
        }
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            system("pause");
            return;
            break;
        case 1:
            char filename[10];//排名信息的文件名由入学年份(学号前2位)和_年级组成,推免排名文件名最后的年级改为5
            printf("\n请输入您的学号:\n");
            scanf("%d", &number);
            printf2(); printf("请输入学院数字\n");int canshu4 = 1;for (int i = 0; i < 15; i++) {
                if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu4 = huanhang(canshu4); }
            }printf2();
            //printf("\n请选择您的专业:\n");
            int a;
            scanf("%d", &a);
            printf("\n请以正确格式输入对应信息(入学年份+下划线+5+专业编号)");
            scanf("%s", filename);
            FILE* file = fopen(filename, "r");
            if (file == NULL) {
                printf("无法打开文件: %s\n", filename);
                break;
            }
            cnt = 0;
            while (fscanf(file, "%d%d%s%lf", &X[cnt].all_Rank ,&X[cnt].student_number,&X[cnt].name, &X[cnt].all_avg_credit ) == 4) {
                cnt++;
            }
            fclose(file);
            printf("排名\t学号\t姓名\t总绩点\t\n");
            for (int i = 1;i <= cnt&&i<=tuimian[a];i++) {
                printf("%d\t%d\t%s\t%.1lf\t\n", X[i-1].all_Rank, X[i - 1].student_number, X[i - 1].name, X[i - 1].all_avg_credit);
            }
            break;
        }
    }
}
//Add_quality_outcomes.c
#include"all.h"
void subject()
{
    //
    //注意完善学科备注包括学科名称对应数字。
    printf("---------------【学科信息增加、修改和删除】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.增加学科\n");
    printf("\t\t2.修改学科信息\n");
    printf("\t\t3.删除学科\n");
    printf("\t\t4.调整某专业的学科种类\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-4):");
    int tip;
    int pq2 = 1;
    int pq3 = 1;
    int pq4 = 1;
    extern subjects tmp_1[35];
    extern bool st_3[35];
    extern int  st_1[15][35];
    static int n = 29;
    while (1)
    {
        
        scanf("%d", &tip);
        if (tip < 0 || tip>4) {
            printf("请您重新输入!\n");
        }
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            maneMenu();
            maneKeyDown();
            system("pause");
            break;
        case 1:
            n++;
            printf("\n请输入您要增加的学科名称:\n");
            scanf("%s", &tmp_1[n].name);
            printf("\n请输入您要增加的学科类别:\n");
            int o;
            scanf("%d", &o);
            if (o == 1) {
                tmp_1[n].st = 1;
            }
            else {
                tmp_1[n].st = 0;
            }
            printf("\n请输入您要增加的学科学时\n");
            scanf("%d", &tmp_1[n].class_hour);
            printf("\n请输入您要增加的学科学分\n");
            scanf("%lf", &tmp_1[n].credit);
            st_3[n] = 1;
            printf("\n增加成功\n");
            system("cls");
            system("pause");
            subject();
            break;
        case 2:
            int x4;
            
            
            printf2();
            for (int i = 0; i < 35; i++) {
                if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq2 = huanhang(pq2); }
            }printf2();
            printf("\n请输入您要修改的学科编号:\n");
            scanf("%d", &x4);
            printf("\n请输入您要修改的学科名称:\n");
            scanf("%s", &tmp_1[x4].name);
            printf("\n请输入您要修改的学科类别:\n");
            int o1;
            scanf("%d", &o1);
            if (o1 == 1) {
                tmp_1[n].st = 1;
            }
            else {
                tmp_1[n].st = 0;
            }
            printf("\n请输入您要修改的学科学时\n");
            scanf("%d", &tmp_1[x4].class_hour);
            printf("\n请输入您要修改的学科学分\n");
            scanf("%lf", &tmp_1[x4].credit);
            printf("\n修改成功\n");
            system("cls");
            system("pause");
            subject();
            break;
        case 3:
            //subjects X;
            int x3;
            
            printf2();
            for (int i = 0; i < 35; i++) {
                if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq3 = huanhang(pq3); }
            }printf2();
            printf("\n请选择您要删除的学科编号:\n");
            scanf("%d", &x3);
            st_3[x3] = 0;
            printf("\n删除成功\n");
            system("cls");
            system("pause");
            subject();
            break;
        case 4:
           
            printf2();
            int p = 1;for (int i = 0; i < 15; i++) {
                if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); p = huanhang(p); }
            }printf2();
            int min = 0;
            printf("\n请选择您要调整课程的专业编号:\n");
            scanf("%d", &min);
            printf2();
            for (int i = 0; i < 35; i++) {
                if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq4 = huanhang(pq4); }
            }printf2();
            printf("\n请选择该专业新录入的学科,当输入-1时结束录入\n");
            int f[15] = { 0 };
            int i = 0;
            scanf("%d", &f[i]);
            while (f[i] != -1)//标记学科种类
            {
                i++;
                scanf("%d", &f[i]);
            }
            for (int j = 0;j <= n;j++) {//将该专业学科归0
                st_1[min][j] = 0;
            }
            for (int j = 0;j <= n;j++) {//更新学科种类
                if (f[j] != 0&&f[j]!=-1) {
                    st_1[min][j] = 1;
                }
            }
            system("cls");
            system("pause");
            subject();
            break;

        }
    }


}
#include"all.h"
void systemMenu()
{
    printf("---------------【学生管理系统】---------------\n\n");
    printf("------------------【教师端】------------------\n\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.录入信息\n");
    printf("\t\t2.浏览信息\n");
    printf("\t\t3.删除信息\n");
    printf("\t\t4.修改信息\n");
    printf("\t\t5.查找信息\n");
    printf("\t\t6.成绩排序\n");
    printf("\t\t7.各科成绩分析\n");
    printf("\t\t8.返回主菜单\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-8):");
}
void keyDown()
{
    int userKey;
    //struct student tempData;
    Student* pHead=NULL ;
    while (1) {
        scanf("%d", &userKey);
        if (userKey < 0 || userKey>8) {
            printf("请您重新输入!\n");
        }
        switch (userKey)
        {
        case 0:
            printf("\t\t【退出系统】\n");
            system("pause");
            exit(0);
            break;
        case 1:
            system("cls");
            pHead = Create();
            system("pause");
            system("cls");
            systemMenu();
            break;
        case 2:
            system("cls");
            all_student(pHead);
            system("pause");
            system("cls");
            systemMenu();
            break;
        case 3:
            system("cls");
            pHead = Delete(pHead);
            system("pause");
            system("cls");
            systemMenu();
            break;
        case 4:
            system("cls");
            Modify_students(pHead);
            system("pause");
            system("cls");
            systemMenu();
            break;
        case 5:
            system("cls");
            teaSearch(pHead);
            system("pause");
            system("cls");
            systemMenu();
            break;
        case 6:
            system("cls");
            teaSort(pHead);
            system("pause");
            system("cls");
            systemMenu();
            break;
        case 7:
            system("cls");
            Statistics(pHead);
            system("pause");
            system("cls");
            systemMenu();
            break;
        case 8:
            while (1)
            {
                system("cls");
                Menu();
                Key();
                system("pause");

            }
            break;
        default:
            printf("输入错误!请重新输入:");
            break;
        }
    }
}
#include"all.h"
void SwapStu(Student* Stu_1, Student* Stu_2)
{
	Student tmp;
	tmp = *Stu_1;
	*Stu_1 = *Stu_2;
	*Stu_2 = tmp;
}

void teaSort(Student*pHead)
{
    printf("---------------【学生排名】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.年度绩点排名\n");
    printf("\t\t2.推免排名\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-2):");
    int tip = 0;
	int flag = 0;
	Student* pCur = pHead, * pTemp = NULL;
	Student* pTemp1 = pHead;
	int i, iItem , iCount = 0;
	int avg_rank[15] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, };
	int all_rank[15] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, };
	int fg1 = 1;
	int fg = 1;
	int fg2 = 1;
	int canshu7 = 1;//学院备注
    while (1)
    {
        scanf("%d", &tip);
		if (tip < 0 || tip>2) {
			printf("请您重新输入!\n");
		}
		switch (tip)
		{
		case 0:
			printf("\n返回菜单\n");
			system("cls");
			system("pause");
			return;
			break;
		case 1:
			//Student * p, p1, p2;
			
			if (pCur == NULL)
			{
				printf("\n没有学生记录!\n");
				return;
			}
			do {
				iCount++;
				pCur = pCur->pNext;
			} while (pCur != NULL);
			pTemp = (Student*)malloc(iCount * sizeof(Student));
			//pTemp1= (Student*)malloc(iCount * sizeof(Student));
			pCur = pHead;
			for (i = 0; i < iCount; i++)
			{
				pTemp[i].student_number = pCur->student_number;
				strcpy(pTemp[i].name, pCur->name);
				pTemp[i].avg_credit = pCur->avg_credit;
				pTemp[i].college = pCur->college;
				pTemp[i].all_avg_credit = pCur->all_avg_credit;
				pCur = pCur->pNext;
			}
			pCur = pHead;
			
			//ShowSortMenu();
			printf("请选择排序方式:");
			printf("\n按1进行学号排序,按2进行成绩排序,按0结束排序\n");
			
			while (1)
			{
				scanf("%d", &iItem);
				int a1 = 0;int a = 0;
				if (flag == 1) {
					break;
				}
				switch (iItem)
				{
				case 0:
					flag = 1;
					printf("已结束排序\n");
					break;
				case 1:
					fg = 1;
					while (fg) {
						fg = 0;
						for (int j = 0;j + 1 < iCount;j++) {
							if (pTemp[j].student_number > pTemp[j + 1].student_number)
							{
								fg = 1;
								SwapStu(pTemp + j, pTemp + j + 1);
							}
						}
					}
					printf2(); for (int i = 0; i < 15; i++) {
						if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu7 = huanhang(canshu7); }
					}printf2();
					printf("\n请输入您要查看排名的学院编号:\n");
					scanf("%d", &a);
					for (int i = 0;i < iCount;i++) {
						if (pTemp[i].college == a) {
							printf("%s | %d| %.1lf\n", pTemp[i].name, pTemp[i].student_number, pTemp[i].avg_credit);
						}
					}
					break;
				case 2:
					fg1 = 1;
					while (fg1) {
						fg1 = 0;
						for (int j = 0;j + 1 < iCount;j++) {
							if (pTemp[j].avg_credit < pTemp[j + 1].avg_credit)
							{
								fg1 = 1;
								SwapStu(pTemp + j, pTemp + j + 1);
							}
						}
					}
					printf2();
					for (int i = 0; i < 15; i++) {
						if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu7 = huanhang(canshu7); }
					}
					printf2();
					printf("\n请输入您要查看排名的学院编号:\n");
					/*for (int i = 0;i < 15;i++) {
						if (st_4[i]) {
							printf("%d %s\t\t", i, tmp_3[i].name);
						}if ((i + 1) % 3 == 0) {
							printf("\n");
						}
					}*/
					scanf("%d", &a1);
					for (int i = 0;i < iCount;i++) {
						if (pTemp[i].college == a1) {
							pTemp[i].Rank = avg_rank[a1]++;
							printf(" %d| %s| %d| %.1lf\n", pTemp[i].Rank, pTemp[i].name, pTemp[i].student_number, pTemp[i].avg_credit);
						}
					}
					for (pTemp1;pTemp1;pTemp1 = pTemp1->pNext) {
						for (int i = 0;i < iCount;i++) {
							if (pTemp1->student_number == pTemp[i].student_number) {
								pTemp1->Rank = pTemp[i].Rank;
							}
						}
					}pTemp1 = pHead;
					char filename[10];
					printf("\n请输入文件名(学号前两位加下划线加年级加院系)\n");
					scanf("%s", filename);
					FILE* file = fopen(filename, "w");
					if (file == NULL) {
						printf("无法打开文件 %s", filename);
					}
					else {
						for (int i = 0; i < iCount; i++) {
							if (pTemp[i].college == a1) {
								fprintf(file, "%d |%d |%s |%.1lf\n", pTemp[i].Rank, pTemp[i].student_number, pTemp[i].name, pTemp[i].avg_credit);
							}
						}
						fclose(file);
					}break;
				}
			}
				/*system("palse");
				system("cls");
				teaSort(pHead);*/
				break;
			
        case 2:
			if (pCur == NULL)
			{
				printf("\n没有学生记录!\n");
				return;
			}
			iCount = 0;
			pCur = pHead;
			do {
				iCount++;
				pCur = pCur->pNext;
			} while (pCur != NULL);
			pTemp = (Student*)malloc(iCount * sizeof(Student));
			//pTemp1= (Student*)malloc(iCount * sizeof(Student));
			pCur = pHead;
			for (i = 0; i < iCount; i++)
			{
				pTemp[i].student_number = pCur->student_number;
				strcpy(pTemp[i].name, pCur->name);
				pTemp[i].avg_credit = pCur->avg_credit;
				pTemp[i].college = pCur->college;
				pTemp[i].all_avg_credit = pCur->all_avg_credit;
				pCur = pCur->pNext;
			}
			pCur = pHead;
			char filename[10];
			fg = 1;
			while (fg2) {
				fg2 = 0;
				for (int j = 0;j+1 < iCount;j++) {
					if (pTemp[j].all_avg_credit < pTemp[j + 1].all_avg_credit)
					{
						fg2 = 1;
						SwapStu(pTemp + j, pTemp + j + 1);
					}
				}
			}printf2(); for (int i = 0; i < 15; i++) {
				if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu7 = huanhang(canshu7); }
			}printf2();
			printf("\n请输入您要查看排名的学院编号:\n");
			int a2;
			scanf("%d", &a2);
			for (int i = 0;i < iCount;i++) {
				if (pTemp[i].college == a2) {
					pTemp[i].all_Rank = all_rank[a2]++;
					printf(" %d| %s| %d| %.1lf\n", pTemp[i].all_Rank,pTemp[i].name, pTemp[i].student_number, pTemp[i].all_avg_credit);
				}
			}
			printf("\n请输入文件名(学号前两位加下划线加5加院系)\n");
			scanf("%s", filename);
			FILE* file = fopen(filename, "w");
			if (file == NULL) {
				printf("无法打开文件 %s", filename);
			}
			for (int i = 0; i<iCount; i++) {
				if (pTemp[i].college == a2) {
					fprintf(file, "%d %d %s %.1lf\n", pTemp[i].all_Rank, pTemp[i].student_number, pTemp[i].name, pTemp[i].all_avg_credit);
				}
			}

			fclose(file);
			break;
        }
    }
}
#include"all.h"
void tuimian_modify()
{
    printf("---------------【推免人数修改】---------------\n\n");
    printf("\t\t0.返回菜单\n");
    printf("\t\t1.修改专业推免人数\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-1):");
    int tip = 0;
    extern int tuimian[15];
    int canshu3 = 1;
    while (1)
    {
        scanf("%d", &tip);
        if (tip < 0 || tip>1) {
            printf("请您重新输入!\n");
        }
        switch (tip)
        {
        case 0:
            printf("\n返回菜单\n");
            system("cls");
            system("pause");
            maneMenu();
            maneKeyDown();
            break;
        case 1:
            printf2();
            for (int i = 0; i < 15; i++) {
                if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu3 = huanhang(canshu3); }
            }
            printf2();
            printf("\n请选择您要修改推免人数的专业\n");
            int a;
            scanf("%d", &a);
            printf("\n请输入您要修改的人数:");
            int b;
            scanf("%d", &b);
            tuimian[a] = b;
            system("cls");
            system("pause");
            tuimian_modify();
            break;
        }
    }
}

效果图:

这个程序虽然有很多bug但好在还是能跑,功能有很多不合理的地方,但是我的第一个手打项目还是要纪念一下的,也希望能帮到有需要的人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值