#c语言 学生成绩管理系统#

分管理端、教师端、学生端

具有打印、登记、添加、排序、查询、修改、删除学生信息等功能

其中排序能按总成绩排序或分各科目成绩排序

查询功能则能按照学号、姓名查询

#c语言 学生成绩管理系统#_第1张图片

#c语言 学生成绩管理系统#_第2张图片

#include 
#include 
#include 
#include 
int g=3;                 //登陆密码时允许输入的次数
char prefix_a[8]="asdf"; //管理员密码
char prefix_t[8]="asdf"; //教师密码
char prefix_s[8]="asdf"; //学生密码
int number;              //全局变量学生人数

void menu();             //主界面函数
void administrator();    //管理端界面
void teachar();          //教师端界面
void student();          //学生端界面

void color(short x);     //改变字体颜色

void password_a();       //管理端密码登陆
void password_t();       //教师端密码登陆
void password_s();       //学生端密码登陆

void input();            //登记学生成绩
void delete_();          //删除学生信息
void search();           //查询学生成绩
void change();           //修改学生成绩
void show();             //打印学生信息
void add();              //添加学生信息

void print_table();       //列表头
void read();              //从文件中读取信息
void back_a();            //管理端返回上一界面
void back_t();            //教师端返回上一界面
void back_s();            //学生端返回上一界面
void save();              //保存学生信息函数

void back_sort_a();        //管理端排序功能 返回界面
void back_sort_t();        //教师端排序功能 返回界面
void sort_a();             //管理端排序学生成绩
void sort_t();             //教师端排序学生成绩
void sort_sum();           //按总成绩排序
void sort_grade1();        //按数学成绩排序
void sort_grade2();        //按英语成绩排序
void sort_grade3();        //按物理成绩排序

void search_a();           //管理端查询学生成绩
void search_t();           //教师端查询学生成绩
void search_s();           //学生端查询学生成绩
void search_id();          //按学号查询
void search_name();        //按学号查询
void back_search_a();      //管理端查询功能 返回界面
void back_search_t();      //教师端查询功能 返回界面
void back_search_s();      //学生端查询功能 返回界面

struct student{
 int   id;               //学号
 char  name[20];         //姓名
 char  sex[5];           //性别
 float grade1;           //高等数学
 float grade2;           //大学英语
 float grade3;           //大学物理
 float avg;              //平均分
 float sum;              //总分

 }stu[100];

int main()
{
    menu();
    return 0;
}

void menu()          //主界面
{
    int l;
            printf("\t欢迎使用学生信息系统\t\n");
            printf("\t     1.管理端 \t\n");
            printf("\t     2.教师端 \t\n");
            printf("\t     3.学生端 \t\n");
            printf("\t     4.退出   \n");
            printf("=================================\n");
            printf("请输入选择的登陆端: ");
            scanf("%d",&l);

    switch(l){
        case 1:
            system("cls");
            password_a();
            break;
        case 2:
            system("cls");
            password_t();
            break;
        case 3:
            system("cls");
            password_s();
            break;
        case 4:
            printf("感谢您的使用,已退出!\n");
            exit(0);
        default:
            color(772);
            printf("[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            system("cls");
            menu();
            break;
        }
}

void administrator() //管理端界面
{
    read();
    int l;
            printf("\t欢迎使用管理端系统\t\n");
            printf("\t   1.打印学生成绩 \t\n");
            printf("\t   2.登记学生成绩 \t\n");
            printf("\t   3.添加学生成绩 \t\n");
            printf("\t   4.排序学生成绩 \t\n");
            printf("\t   5.查询学生成绩\t\n");
            printf("\t   6.修改学生信息  \n");
            printf("\t   7.删除学生信息  \n");
            printf("\t   8.返回  \n");
            printf("\t   9.退出  \n");
            printf("=================================\n");
            printf("请输入要执行的操作: ");
            scanf("%d",&l);

    switch(l){
         case 1:
            system("cls");
            show();
            back_a();
            break;
        case 2:
            system("cls");
            input();
            back_a();
            break;
       case 3:
            system("cls");
            add();//添加学生信息();
            back_a();
            break;
        case 4:
            system("cls");
            sort_a();
            back_a();
            break;
        case 5:
            system("cls");
            search_a();
            back_a();
            break;
        case 6:
            system("cls");
            change();
            back_a();
            break;
        case 7:
            system("cls");
            delete_();
            back_a();
            break;
        case 8:
            system("cls");
            menu();
            break;
        case 9:
            printf("感谢您的使用,已退出!\n");
            exit(0);
        default:
            color(772);
            printf("[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            system("cls");
            administrator();
            break;
        }
}
void teachar()       //教师端界面
{
     read();
    int l;
            printf("\t欢迎使用教师端系统\t\n");
            printf("\t   1.打印学生成绩 \t\n");
            printf("\t   2.登记学生成绩 \t\n");
            printf("\t   3.排序学生成绩 \t\n");
            printf("\t   4.查询学生成绩\t\n");
            printf("\t   5.修改学生信息  \n");
            printf("\t   6.返回  \n");
            printf("\t   7.退出  \n");
            printf("=================================\n");
            printf("请输入要执行的操作: ");
            scanf("%d",&l);
    switch(l){
        case 1:
            system("cls");
            show();
            back_t();
            break;

        case 2:
            system("cls");
            input();
            back_t();
            break;
        case 3:
            system("cls");
            sort_t();
            back_t();
            break;
        case 4:
            system("cls");
            search_t();
            back_t();
            break;
        case 5:
            system("cls");
            change();
            back_t();
            break;
        case 6:
            system("cls");
            menu();
            break;
        case 7:
            printf("感谢您的使用,已退出!");
            exit(0);
        default:
            color(772);
            printf("[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            system("cls");
            teachar();
            break;
        }
}
void student()       //学生端界面
{
    read();
    int l;
            printf("\t欢迎使用学生端系统\t\n");
            printf("\t   1.打印学生成绩 \t\n");
            printf("\t   2.查询学生成绩\t\n");
            printf("\t   3.返回  \n");
            printf("\t   4.退出  \n");
            printf("=================================\n");
            printf("请输入要执行的操作: ");
            scanf("%d",&l);
    switch(l){
         case 1:
            system("cls");
            show();
            back_s();
            break;
        case 2:
            system("cls");
            search_s();
            back_s();
            break;
        case 3:
            system("cls");
            menu();
            break;
        case 4:
            printf("感谢您的使用,已退出!\n");
            exit(0);
        default:
            color(772);
            printf("[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            system("cls");
            student();
            break;
        }
}
void color(short x) //改变字体颜色
{
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
void password_a()   //管理端密码登陆
{
    char username[20];
    char password[20];
    int flag;
    while(g--){
    printf("\t管理员您好,欢迎使用登陆界面!\n");
    printf("请输入账户: ");
    scanf("%s",username);
    printf("请输入密码: ");
    scanf("%s",password);
    flag=strcmp(prefix_a,password);
    if(flag == 0)
        {
            color(2);
            printf("[输入正确]请等待3秒!\n");
            Sleep(3000);
            system("cls");
            color(7);
            administrator();
            break;
            }
    else
        {
            color(772);
            if(g==0){
                printf("[警告]您已输错三次,将自动退出系统!\n");
                color(7);
                exit(1);
            }
            printf("[输入错误]请3秒后重新输入正确密码!\n");
            Sleep(3000);
            system("cls");
            color(7);
            continue;
            }
     }
}
void password_t()   //教师端密码登陆
{
    char username[20];
    char password[20];
    int flag;
    while(g--){
    printf("\t老师您好,欢迎使用登陆界面!\n");
    printf("请输入账户: ");
    scanf("%s",username);
    printf("请输入密码: ");
    scanf("%s",password);
    flag=strcmp(prefix_t,password);
    if(flag == 0)
        {
            color(2);
            printf("[输入正确]请等待3秒!\n");
            Sleep(3000);
            system("cls");
            color(7);
            teachar();
            break;
            }
    else
        {
            color(772);
            if(g==0){
                printf("[警告]您已输错三次,将自动退出系统!\n");
                color(7);
                exit(1);
            }
            printf("[输入错误]请3秒后重新输入正确密码!\n");
            Sleep(3000);
            system("cls");
            color(7);
            continue;
            }
     }
}
void password_s()   //学生端密码登陆
{
    char username[20];
    char password[20];
    int flag;
    while(g--){
    printf("\t同学你好,欢迎使用登陆界面!\n");
    printf("请输入账户: ");
    scanf("%s",username);
    printf("请输入密码: ");
    scanf("%s",password);
    flag=strcmp(prefix_s,password);
    if(flag == 0)
        {
            color(2);
            printf("[输入正确]请等待3秒!\n");
            Sleep(3000);
            system("cls");
            student();
            break;
            }
    else
        {
            color(772);
            if(g==0){
                printf("[警告]您已输错三次,将自动退出系统!\n");
                color(7);
                exit(1);
            }
            printf("[输入错误]请3秒后重新输入正确密码!\n");
            Sleep(3000);
            system("cls");
            color(7);
            continue;
            }
     }
}

void back_a()       //管理端返回上一界面
{
    int l;
    printf("\n\t1.返回主界面");
    printf("\n\t2.返回上一级");
    printf("\n\t=========================");
    printf("\n\t请输入要执行的操作: ");
    scanf("%d",&l);
    switch(l){
         case 1:
            system("cls");
            menu();
            break;
        case 2:
            system("cls");
            administrator();
            break;
        default:
            color(772);
            printf("\t[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            back_a();
            break;
        }
}

void back_t()       //教师端返回上一界面
{
    int l;
    printf("\n\t1.返回主界面");
    printf("\n\t2.返回上一级");
    printf("\n\t=========================");
    printf("\n\t请输入要执行的操作: ");
    scanf("%d",&l);
    switch(l){
         case 1:
            system("cls");
            menu();
            break;
        case 2:
            system("cls");
            teachar();
            break;
        default:
            color(772);
            printf("\t[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            back_t();
            break;
        }
}

void back_s()       //学生端返回上一界面
{
    int l;
    printf("\n\t1.返回主界面");
    printf("\n\t2.返回上一级");
    printf("\n\t=========================");
    printf("\n\t请输入要执行的操作: ");
    scanf("%d",&l);
    switch(l){
         case 1:
            system("cls");
            menu();
            break;
        case 2:
            system("cls");
            student();
            break;
        default:
            color(772);
            printf("\t[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            back_s();
            break;
        }
}

void read()         //从文件中读取信息
{
    FILE *fp;
    int i;
    fp=fopen("学生信息.txt","r");
    if(fp==NULL)
        {
            color(772);
            printf("[警告]文件打开失败\n");
            color(7);
    }
        else {
            color(2);
            printf("[tip]文件读取成功\n");
            color(7);
             fscanf(fp,"%d\n",&number);
             for(i=0;i0){
    fprintf(fp,"%d\n",number);
   for(i=0;istu[max].sum)
            max=i;
    }
    save();
    print_table();
    show();
    printf("\t总分最高分: ");
    printf("\t%-10d%-10s%-10s%-10.0f%-10.0f%-10.0f%-9.1f(%.0f)\n",
    stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
    printf("\t总分最低分: ");
    printf("\t%-10d%-10s%-10s%-10.0f%-10.0f%-10.0f%-9.1f(%.0f)\n",
    stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
    printf("\t-------------------------------------------------------------------------------------------");
}

void sort_grade1()  //按数学成绩排序
{
    int k,j,min=0,max=0;
    struct student temp;
    for (k = 0; k< number ; k++)
        {
            for (j = 0; j < number - 1 - k; j++)
            {
                if (stu[j].grade1 < stu[j + 1].grade1)
                {
                    temp=stu[j];
                    stu[j]=stu[j+1];
                    stu[j+1]=temp;
                    }
                    }
                    }
    for(int i=0;istu[max].grade1)
            max=i;
    }
    save();
    print_table();
    show();
    printf("\t数学最高分: ");
    printf("\t%-10d%-10s%-9s(%-3.0f)\t%-10.0f%-10.0f%-10.1f%-10.0f\n",
    stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
    printf("\t数学最低分: ");
    printf("\t%-10d%-10s%-9s(%-3.0f)\t%-10.0f%-10.0f%-10.1f%-10.0f\n",
    stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
    printf("\t-------------------------------------------------------------------------------------------");
}

void sort_grade2()  //按英语成绩排序
{
     int k,j,min=0,max=0;
    struct student temp;
    for (k = 0; k< number ; k++)
        {
            for (j = 0; j < number - 1 - k; j++)
            {
                if (stu[j].grade2 < stu[j + 1].grade2)
                {
                    temp=stu[j];
                    stu[j]=stu[j+1];
                    stu[j+1]=temp;
                    }
                    }
                    }
    for(int i=0;istu[max].grade2)
            max=i;
    }
    save();
    print_table();
    show();
    printf("\t英语最高分: ");
    printf("\t%-10d%-10s%-10s%-9.0f(%-3.0f)\t  %-10.0f%-10.1f%-10.0f\n",
    stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
    printf("\t英语最低分: ");
    printf("\t%-10d%-10s%-10s%-9.0f(%-3.0f)\t  %-10.0f%-10.1f%-10.0f\n",
    stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
    printf("\t-------------------------------------------------------------------------------------------");
}

void sort_grade3()  //按物理成绩排序
{
     int k,j,min=0,max=0;
    struct student temp;
    for (k = 0; k< number ; k++)
        {
            for (j = 0; j < number - 1 - k; j++)
            {
                if (stu[j].grade3 < stu[j + 1].grade3)
                {
                    temp=stu[j];
                    stu[j]=stu[j+1];
                    stu[j+1]=temp;
                    }
                    }
                    }
    for(int i=0;istu[max].grade3)
            max=i;
    }
    save();
    print_table();
    show();
    printf("\t物理最高分: ");
    printf("\t%-10d%-10s%-10s%-10.0f%-9.0f(%-3.0f)\t    %-10.1f%-10.0f\n",
    stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
    printf("\t物理最低分: ");
    printf("\t%-10d%-10s%-10s%-10.0f%-9.0f(%-3.0f)\t    %-10.1f%-10.0f\n",
    stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
    printf("\t-------------------------------------------------------------------------------------------");
}

void search_a()     //管理端查询学生成绩
{
    int l;
            printf("\t欢迎使用成绩查询系统\t\n");
            printf("\t   1.按学号查询 \t\n");
            printf("\t   2.按姓名查询 \t\n");
            printf("\t   3.返回  \n");
            printf("\t   4.退出  \n");
            printf("\t=================================\n");
            printf("\t请输入要执行的操作: ");
            scanf("%d",&l);

    switch(l){
         case 1:
            system("cls");
            search_id();
            back_search_a();
            break;
        case 2:
            system("cls");
            search_name();
            back_search_a();
            break;
        case 3:
            system("cls");
            administrator();
           break;
        case 4:
            printf("感谢您的使用,已退出!\n");
            exit(0);
        default:
            color(772);
            printf("[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            system("cls");
            search_a();
            break;
        }
}

void search_t()     //教师端查询学生成绩
{
    int l;
            printf("\t欢迎使用成绩查询系统\t\n");
            printf("\t   1.按学号查询 \t\n");
            printf("\t   2.按姓名查询 \t\n");
            printf("\t   3.返回  \n");
            printf("\t   4.退出  \n");
            printf("\t=================================\n");
            printf("\t请输入要执行的操作: ");
            scanf("%d",&l);
    switch(l){
         case 1:
            system("cls");
            search_id();
            back_search_t();
            break;
        case 2:
            system("cls");
            search_name();
            back_search_t();
            break;
        case 3:
            system("cls");
            teachar();
           break;
        case 4:
            printf("感谢您的使用,已退出!\n");
            exit(0);
        default:
            color(772);
            printf("[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            system("cls");
            search_t();
            break;
        }
}

void search_s()     //学生端查询学生成绩
{
     int l;
           printf("\t欢迎使用成绩查询系统\t\n");
            printf("\t   1.按学号查询 \t\n");
            printf("\t   2.按姓名查询 \t\n");
            printf("\t   3.返回  \n");
            printf("\t   4.退出  \n");
            printf("\t=================================\n");
            printf("\t请输入要执行的操作: ");
            scanf("%d",&l);

    switch(l){
         case 1:
            system("cls");
            search_id();
            back_search_s();
            break;
        case 2:
            system("cls");
            search_name();
            back_search_s();
            break;
        case 3:
            system("cls");
            student();
           break;
        case 4:
            printf("感谢您的使用,已退出!\n");
            exit(0);
        default:
            color(772);
            printf("[输入错误]请3秒后重新输入有效数字!\n");
            Sleep(3000);
            color(7);
            system("cls");
            search_s();
            break;
        }
}

void search_id()    //按学号查询
{
    int id3,i;
    printf("\t学生的学号:");
	scanf("%d",&id3);
	for ( i =0;i 0){
		do
		{
			flag = 1;
			printf("\n\t请输入第%d位学生的信息:\n", i + 1);
			while (flag)
			{
				flag = 0;

				printf("\t学号: ");
				scanf("%d", &stu[i].id);
				for (j = 0; j < i; j++){
					if (stu[i].id==stu[j].id){
						color(772);
                        printf("\t[错误]已存在该学号学生,请重新输入!\n");
                        color(7);
						flag = 1;
						break;
					}
				}
			}
			printf("\t姓名: ");
            scanf("%s",stu[i].name);
            getchar();

            printf("\t性别: ");
            scanf("%s",stu[i].sex);
            getchar();

            printf("\t高等数学: ");
            scanf("%f",&stu[i].grade1);
            getchar();

            printf("\t大学英语: ");
            scanf("%f",&stu[i].grade2);
            getchar();

            printf("\t大学物理: ");
            scanf("%f",&stu[i].grade3);

            stu[i].sum= stu[i].grade1 +stu[i].grade2 + stu[i].grade3 ;
            stu[i].avg = (stu[i].sum)/3;

            if (0 == flag){
				i++;
			}
		} while (i

文件素材:

5
            9    李五    男    76    76    100    84.0    252
            6    丝丝    女    9    100    98    69.0    207
            2    李四    男    89    79    67    78.3    235
            1    张三    男    35    43    67    48.3    145
            7    苏苏    女    98    12    53    54.3    163

            

你可能感兴趣的:(c语言,开发语言,后端,算法,经验分享)