广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现学生档案管理系统
  • 601
分享到

C语言实现学生档案管理系统

2024-04-02 19:04:59 601人浏览 八月长安
摘要

本文实例为大家分享了C语言实现学生档案管理系统的具体代码,供大家参考,具体内容如下     #include<stdio.h&

本文实例为大家分享了C语言实现学生档案管理系统的具体代码,供大家参考,具体内容如下    


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<coNIO.h>
#include<windows.h>
#define N sizeof(struct Student)
#define M sizeof(struct PassWord)
#define MAX 1000
 
 
struct Student
{
    char number[10];   //学号
    char name[10];   //姓名
    char sex[2];  //性别
    struct Birthday  //出生日期 
    {
        int year;   //年
        int month;  //月
        int day;    //日 
    }birtnday;
    struct Score  //成绩
    {
        float c_language;  //c语言
        float math;  //高数
        float Russian;//俄语
        float Russian_hearing; //俄语听力
        float professional;  //专业导论
        float politics;  //政治 
    }score;
    char remark[100];  //备注 
    int num;
    struct Student *next;
};
typedef struct Student Stu;
typedef Stu *Stup;
 
 
typedef struct Password
{
    char password[18];
    struct Password *next;
}pass;
typedef pass *passw;
 
typedef struct TOTAL    //总分 
{
    char number[10];
    char name[10];
    char sex[2];
    float c_language;  //c语言
    float math;  //高数
    float Russian;//俄语
    float Russian_hearing; //俄语听力
    float professional;  //专业导论
    float politics;  //政治
    float sum;
}Total; 
Total total[MAX];
 
 
//好多自定义函数 
void color(short x);//设置颜色
void HideCursor();     //隐藏光标
void toxy(int x, int y);     //将光标移动到X,Y坐标处
void menu();    //主菜单 
void over();   //退出软件
void signin();   //登陆 
passw ff();    //将文件中的内容读入链表,返回值为表头地址 
void save_password(passw p);//保存密码 
void amend_password();   //修改密码 
void input_infORMation();  //信息录入 
void amend_information();  //修改信息 
void delete_information();  //删除信息 
void delete_number();  //按学号查询删除
void delete_name();   //按姓名查询删除 
void save_information(Stup p);   //保存信息 
void print_information();    //信息显示 
Stup ss();   //将文件中的内容读入链表,返回值为表头地址
void find_information();   ///查找信息 
void find_number_information();   //按学号查询 
void find_name_information();   //按姓名查询 
void statistics_information();  //信息统计 
void average_score();   //平均分
void total_score_ranked();   //总分排名
void fail_numbers();     //各科不及格人数 
void assignment();   //将信息赋值到一个结构体中 
void grade_table();   //各科成绩分布 
void analyze_c();   //c语言 
void analyze_math();//高数 
void analyze_Russian();//俄语 
void analyze_Russian_hearing();//俄语听力 
void analyze_professional();//专业导论 
void analyze_politics();   //政治 
int cmp(const void *a,const void *b);
int cmp1(const void *a,const void *b);  //快速排序 
int cmp2(const void *a,const void *b);
int cmp3(const void *a,const void *b);
int cmp4(const void *a,const void *b);
int cmp5(const void *a,const void *b);
int cmp6(const void *a,const void *b);
 
 
 
char _password[18];
passw password_head;
int len;
 
void color(short x)    //设置颜色 
{
    if(x>=0&&x<=15)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
    }
    else
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
    }
} 
 
void HideCursor()     //隐藏光标
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
void toxy(int x, int y)      //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos); 
}
 
int cmp(const void *a,const void *b)  //快速排序 
{
    return ((*(Total *)b).sum)-((*(Total *)a).sum);
}
 
int cmp1(const void *a,const void *b)  //快速排序 
{
    return ((*(Total *)b).c_language)-((*(Total *)a).c_language);
}
 
int cmp2(const void *a,const void *b)  //快速排序 
{
    return ((*(Total *)b).math)-((*(Total *)a).math);
}
 
int cmp3(const void *a,const void *b)  //快速排序 
{
    return ((*(Total *)b).Russian)-((*(Total *)a).Russian);
}
 
int cmp4(const void *a,const void *b)  //快速排序 
{
    return ((*(Total *)b).Russian_hearing)-((*(Total *)a).Russian_hearing);
}
 
int cmp5(const void *a,const void *b)  //快速排序 
{
    return ((*(Total *)b).professional)-((*(Total *)a).professional);
}
 
int cmp6(const void *a,const void *b)  //快速排序 
{
    return ((*(Total *)b).politics)-((*(Total *)a).politics);
}
 
void menu()   //主菜单
{
    do
    {
        system("cls");    //清屏 
        fflush(stdin);   //清空缓存 
        color(14);
        char t;
        toxy(45,6);
        printf("-----学生档案管理系统-----"); 
        toxy(45,7);
        printf("|                        |");
        toxy(45,8);
        printf("|       1.信息录入       |");
        toxy(45,9);
        printf("|                        |");
        toxy(45,10);
        printf("|       2.信息修改       |");
        toxy(45,11);
        printf("|                        |");
        toxy(45,12);
        printf("|       3.信息删除       |");
        toxy(45,13);
        printf("|                        |");
        toxy(45,14);
        printf("|       4.信息显示       |");
        toxy(45,15);
        printf("|                        |");
        toxy(45,16);
        printf("|       5.信息查找       |");
        toxy(45,17);
        printf("|                        |");
        toxy(45,18);
        printf("|       6.信息统计       |");
        toxy(45,19);
        printf("|                        |");
        toxy(45,20);
        printf("|       7.修改密码       |");
        toxy(45,21);
        printf("|                        |");
        toxy(45,22);
        printf("|       8.退出软件       |");
        toxy(45,23);
        printf("--------------------------");
        t=getch();
        switch(t)
        {
            case '1':input_information();break;
            case '2':amend_information();break;
            case '3':delete_information();break;
            case '4':print_information();break;
            case '5':find_information();break;
            case '6':statistics_information();break;
            case '7':amend_password();break;
            case '8':over();break;
            default :break;
        }
    }while(1);//永远为真 
} 
 
passw ff()     //将文件中的内容读入链表,返回值为表头地址 
{
    FILE *fp;  //文件指针 
    passw password_head=NULL;
    fp=fopen("password","a+");   //以追加和读的方式打开名为password的文件 
    if(fp==NULL)
    {
        printf("cannot open file"); 
    }
    //printf("%p\n",password_head);
    password_head=(passw)malloc(M);   //申请空间 
    strcpy(password_head->password," ");  //初始化密码 
    //printf("%s\n",password_head);
    fread(password_head,M,1,fp);   
    fclose(fp);    //关闭文件 
    return password_head;   //返回值表头地址 
}
 
void signin()    //登录 
{
    do
    {
        system("cls");
        color(13);   //好看的颜色 
        passw p,head;
        int i=0;
        char k;
        head=ff();   //调用函数,返回值为表头地址 
        p=head;     
        //printf("%s\n",p->password);
        //printf("%p\n",p);
        char str[]="000000";   //初始密码 
        toxy(45,6);
        printf("-----学生档案管理系统-----");
        toxy(45,8);
        printf("请输入管理者密码:");
        for(;;)              //此处为输入密码不回显操作 
        {
            k=getch();       //输入k 
            if(k=='\r')      //如果输入k为回车,则跳出循环 
            {
                break;
            }
            else if(k=='\b')  //如果输入k为删除键 
            {
                if(i>0)       //如若密码还没完全删除 
                {
                    printf("\b");
                    printf(" ");
                    printf("\b");
                    i--;
                }
            }
            else              //如果输入的k既不是删除键,也不是回车键 
            {
                _password[i]=k;   //把k的值赋给_password[i]; 
                printf("*");      //输出*号,保护用户隐私 
                i++;              //密码位数加1 
            }
        }
        _password[i]='\0';
        if(strcmp(p->password," ")==0)   //判断程序是否是第一次运行,
        {
            strcpy(p->password,str);//如果是,则将初始密码000000赋值给p->password 
            save_password(p);   //保存p 
        }
        if(strcmp(head->password,_password)==0)   //判断密码是否输入正确 
        {
            system("cls");
            toxy(45,8);
            printf("正在登陆....");
            Sleep(500);
            menu();
        }
        else
        {
            toxy(45,10);
            printf("密码错误!");
            Sleep(500);
        }
    }while(1);
}
 
void amend_password()   //修改密码 
{
    system("cls");         //清屏 
    color(12);    //看着舒服的颜色  
    passw p,head;       //隐藏光标,看着更舒服 
    head=ff();
    do
    { 
        system("cls");         //清屏
        p=head;
        char password[18],newpassword[18],t,k;
        int i=0;
        toxy(45,6);          //将光标移动到坐标为(50,5)的位置 
        printf("学生档案管理系统");
        toxy(48,8);
        printf("修改密码");
        toxy(45,10);
        printf("请输入旧密码:");
        for(;;)              //此处为输入密码不回显操作 
        {
            k=getch();       //输入k 
            if(k=='\r')      //如果输入k为回车,则跳出循环 
            {
                break;
            }
            else if(k=='\b')  //如果输入k为删除键 
            {
                if(i>0)       //如若密码还没完全删除 
                {
                    printf("\b");
                    printf(" ");
                    printf("\b");
                    i--;
                }
            }
            else              //如果输入的k既不是删除键,也不是回车键 
            {
                password[i]=k;   //把k的值赋给_password[i]; 
                printf("*");      //输出*号,保护用户隐私 
                i++;              //密码位数加1 
            }
        }
        password[i]='\0';
        i=0;
        toxy(45,12);
        printf("请输入新密码:");
        for(;;)              //此处为输入密码不回显操作 
        {
            k=getch();       //输入k 
            if(k=='\r')      //如果输入k为回车,则跳出循环 
            {
                break;
            }
            else if(k=='\b')  //如果输入k为删除键 
            {
                if(i>0)       //如若密码还没完全删除 
                {
                    printf("\b");
                    printf(" ");
                    printf("\b");
                    i--;
                }
            }
            else              //如果输入的k既不是删除键,也不是回车键 
            {
                newpassword[i]=k;   //把k的值赋给_password[i]; 
                printf("*");      //输出*号,保护用户隐私 
                i++;              //密码位数加1 
            }
        }
        newpassword[i]='\0';
        if(p!=NULL)                   //如果p不为空 
        {
            if(strcmp(p->password,password)==0)          //如果旧密码输入正确 
            {
                strcpy(p->password,newpassword);         //将旧密码改为新密码 
                break;                                   //跳出循环 
            }
            else                                         //如果旧密码输入错误 
            {
                system("cls");
                toxy(46,8);
                printf("--------------------------");
                toxy(46,9);
                printf("|                        |");
                toxy(46,10);
                printf("|  密码错误!是否继续?  |");
                toxy(46,11);
                printf("|                        |");
                toxy(46,12);
                printf("|  1.是           2.否   |");
                toxy(46,13);
                printf("|                        |");
                toxy(46,14);
                printf("--------------------------");
                while(1)
                {
                    t=getch();                              //输入t 
                    if(t=='1')
                    {
                        system("cls");
                        break;
                    }
                    else if(t=='2')
                      menu();
                }
            }
        }
    }while(1);       
    save_password(p);                         //永远为真 
    system("cls");
    toxy(45,10);
    printf("修改成功!即将返回主菜单...."); 
    Sleep(500);
    menu();
} 
 
void save_password(passw p)   //将p所指向的内容保存到文件中 
{
    FILE *fp;
    fp=fopen("password","w");   //以只写的方式打开名为password的文件 
    if(fp==NULL)
    {
        printf("cannot open file"); 
    }
    if(fwrite(p,M,1,fp)!=1)   //将p所指向的一段大小为M的内容写入fp所指向的文件中 
    {
        printf("write error!"); 
    }
    fclose(fp);   //关闭文件 
}
 
Stup ss()     //将文件中的内容读出到链表中 
{
    FILE *fp;    //文件指针 
    Stup head=NULL,p,p1,pr=NULL;
    int n=0;
    fp=fopen("student","ab+");
    if(fp==NULL)
    {
        printf("cannot open file");
    }
    while(!feof(fp))// feof函数可以检查文件读写位置标志是否移动到文件末尾,feof(fp)检查fp所指向的文件是否结束,如果是
    {                //则函数值为真,否则为假,即“!feof(fp)”为真,在while循环中检查 “!feof(fp)”为真,就执行循环体
        n++;
        p=(Stup)malloc(N); //向内存申请一段空间
        fread(p,N,1,fp); //从fp所指向的文件读入1个大小为M的数据,存储到p所指向的空间中 
        if(n==1)
        {
            head=p;
            p1=p;
        }
        else
        {
            pr=p1;
            p1->next=p;
            p1=p;
        }
    }
    if(pr!=NULL)
       pr->next=NULL;
    else if(pr==NULL)
        head=NULL;
    fclose(fp);
    return head;
}
 
void input_information()//录入信息 
{
    system("cls");
    color(15);
    int i=0,n;
    Stup p;
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(50,7);
    printf("信息录入");
    toxy(45,8);
    printf("你需要录入多少个学生的信息?请输入:");
    scanf("%d",&n);getchar();    
    while(i!=n)
    {
        system("cls");
        i++;
        p=(Stup)malloc(N);
        toxy(45,6);
        printf("-----学生档案管理系统-----");
        toxy(50,7);
        printf("信息录入");
        toxy(45,8);
        printf("请输入学生学号:");
        gets(p->number);
        toxy(45,9);
        printf("请输入学生姓名:");
        gets(p->name);
        toxy(45,10);
        printf("请输入学生性别(男或女):");
        gets(p->sex);
        toxy(45,11);
        printf("请输入学生出生日期(年月日,以空格隔开):");
        scanf("%d%d%d",&p->birtnday.year,&p->birtnday.month,&p->birtnday.day);getchar();
        toxy(45,12);
        printf("请输入c语言成绩:");
        scanf("%f",&p->score.c_language);getchar();
        toxy(45,13);
        printf("请输入高数成绩:");
        scanf("%f",&p->score.math);getchar();
        toxy(45,14);
        printf("请输入俄语成绩:");
        scanf("%f",&p->score.Russian);getchar();
        toxy(45,15);
        printf("请输入俄语听力成绩:");
        scanf("%f",&p->score.Russian_hearing);getchar();
        toxy(45,16);
        printf("请输入专业导论成绩:");
        scanf("%f",&p->score.professional);getchar();
        toxy(45,17);
        printf("请输入政治成绩:");
        scanf("%f",&p->score.politics);getchar();
        toxy(45,18);
        printf("请输入备注:");
        gets(p->remark);
        save_information(p);
    }
    toxy(48,19);
    printf("录入完毕!按任意键返回主菜单!");
    getch();
}
 
void amend_information()  //修改信息 
{
    system("cls");         //清屏 
    color(11);
    Stup p,head;
    FILE *fp;
    int i=15,j=0,c; 
    char number[10];   //学号
    char name[10],_name[10];   //姓名
    char sex[2];  //性别
    int year;   //年
    int month;  //月
    int day;    //日
    float c_language;  //c语言
    float math;  //高数
    float Russian;//俄语
    float Russian_hearing; //俄语听力
    float professional;  //专业导论
    float politics;  //政治 
    char remark[100];  //备注
    char ch,t;
    head=ss();
    p=head;
    do
    {
        system("cls");
        toxy(45,6);
        printf("-----学生档案管理系统-----");
        toxy(45,7);
        printf("修改信息");
        toxy(40,9);
        printf("请输入您要修改的信息:");
        gets(_name);
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("学号   姓名   性别   出生--日期     c语言   高 数   俄 语   俄语听力   专业导论   政 治   备注");
        toxy(20,10);
        printf("----------------------------------------------------------------------------------------------");
        i=11;j=0;
        while(p!=NULL)   //将每个结点的p->num都赋为0,以免后面数据干扰 
        {
            p->num=0;
            p=p->next;
        }
        p=head;      //重新让p指向head 
        while(p!=NULL)
        {
            if(strcmp(p->name,_name)==0)
            {
                toxy(18,i);
                j++;
                if(p->birtnday.month<10&&p->birtnday.day<10) 
                    printf("%d.%s    %s    %s     %d.0%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month<10&&p->birtnday.day>=10)
                    printf("%d.%s    %s    %s     %d.0%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month>=10&&p->birtnday.day<10)
                    printf("%d.%s    %s    %s     %d.%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else
                    printf("%d.%s    %s    %s     %d.%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                i++;
                p->num=j;      //给p->num赋值,即给满足搜索要求的结点编号 
            }
            p=p->next;
        }
        if(j==0)                   //如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息 
        { 
            toxy(50,i);
            printf("没有找到相应的信息!(按0返回,按1重新搜索)");
            while(1)               //死循环是为了防止除0和1的其他按键干扰 
            {
                ch=getch();     
                if(ch=='0')
                {
                    menu();break;
                }
                else if(ch=='1')
                {
                    break;
                }
            }
            if(ch=='1')     //如果输入的ch等于1,则结束本次循环 
               continue;
        }
        while(1)
        {
            toxy(50,i);
            printf("请输入您要修改的信息的标号:");
            scanf("%d",&c);
            getchar();
            i++;  
            if(c<=j)              //如果c<=j,即输入正确 
                break;
            else if(c>j)         //否则,输入错误 
            {
                toxy(50,i);
                printf("没有找到您所要修改的信息,请重新输入!");
                i++;
                Sleep(500);      //暂停0.5秒 
            }
        }
        p=head;      //让p重新指向head,即第一个结点 
        while(p!=NULL&&p->num!=c)    //遍历链表,寻找满足要求的结点 
        {
            p=p->next;
        }
        if(p!=NULL)      //如果寻找成功,进入修改部分 
        {
            system("cls");    //清屏 
            toxy(45,8);
            printf("请输入学生学号:");
            gets(number);
            strcpy(p->number,number);
            toxy(45,9);
            printf("请输入学生姓名:");
            gets(name);
            strcpy(p->name,name);
            toxy(45,10);
            printf("请输入学生性别(男或女):");
            gets(sex);
            strcpy(p->sex,sex);
            toxy(45,11);
            printf("请输入学生出生日期(年月日,以空格隔开):");
            scanf("%d%d%d",&year,&month,&day);getchar();
            p->birtnday.year=year;
            p->birtnday.month=month;
            p->birtnday.day=day;
            toxy(45,12);
            printf("请输入c语言成绩:");
            scanf("%f",&c_language);getchar();
            p->score.c_language=c_language;
            toxy(45,13);
            printf("请输入高数成绩:");
            scanf("%f",&math);getchar();
            p->score.math=math;
            toxy(45,14);
            printf("请输入俄语成绩:");
            scanf("%f",&Russian);getchar();
            p->score.Russian=Russian;
            toxy(45,15);
            printf("请输入俄语听力成绩:");
            scanf("%f",&Russian_hearing);getchar();
            p->score.Russian_hearing=Russian_hearing;
            toxy(45,16);
            printf("请输入专业导论成绩:");
            scanf("%f",&professional);getchar();
            p->score.professional=professional;
            toxy(45,17);
            printf("请输入政治成绩:");
            scanf("%f",&politics);getchar();
            p->score.politics=politics;
            toxy(45,18);
            printf("请输入备注:");
            gets(remark);
            strcpy(p->remark,remark);
            toxy(46,16);
            printf("-------------------------");
            toxy(46,17);
            printf("|                       |");
            toxy(46,18);
            printf("|     是否确认修改?    |");
            toxy(46,19);
            printf("| 1.确认         2.取消 |");
            toxy(46,20);
            printf("|                       |");
            toxy(46,21);
            printf("-------------------------");
            while(1)    //死循环为防止其他按键干扰 
            {
                t=getch();
                if(t=='1')
                   break;
                else if(t=='2')
                {
                    menu();
                }
             } 
             if(t=='1')  //如果t等于1,则跳出循环 
             {
                 break; 
             }
        }
    }while(1);
    p=head;     //p重新指向头节点 
    system("cls");
    toxy(44,12);
    printf("正在修改....");
    fp=fopen("student","wb");   //打开文件的同时清除文件内的内容 
    if(fp==NULL)
    {
        printf("cannot open file");
    }
    while(p!=NULL)
    {
        if(fwrite(p,N,1,fp)!=1)    //将p所指向的内容存入fp所指向的文件中 
        {
            printf("file write error\n");
        }
        p=p->next;
    }
    fclose(fp);     //关闭文件 
    Sleep(500);
    system("cls");
    toxy(44,12);
    printf("修改成功!正在自动跳转到主菜单....");
    Sleep(500);
    menu();
}
 
void delete_information()  //删除信息 
{
    do
    {
        system("cls");
        color(12);
        char t;
        toxy(45,6);
        printf("-----学生档案管理系统-----");
        toxy(48,7);
        printf("信息删除");
        toxy(45,9);
        printf("1)  按学号查询删除");
        toxy(45,11);
        printf("2)  按姓名查询删除");
        toxy(48,13);
        printf("按0返回主菜单");
        t=getch();
        switch(t)
        {
            case '0':menu();break;
            case '1':delete_number();break;
            case '2':delete_name();break;
            default :break;
        }
    }while(1);
}
 
void delete_number()  //按学号查询删除 
{
    do
    {
        system("cls");
        color(10);
        char number[10];
        char t,c;
        int i=11,j=0;
        Stup head,p,pre=NULL ;
        FILE *fp;
        toxy(48,9);
        printf("请输入你要删除的学生的学号:");
        gets(number);
        head=ss();
        p=head;
        toxy(45,6);
        printf("-----学生档案管理系统-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("学号   姓名   性别   出生--日期     c语言   高 数   俄 语   俄语听力   专业导论   政 治   备注");
        toxy(20,10);
        printf("----------------------------------------------------------------------------------------------");
        while(p!=NULL&&strcmp(p->number,number)!=0)
        {
            pre=p;
            p=p->next;
        }
        if(p!=NULL)
        {
            toxy(20,i);
            if(p->birtnday.month<10&&p->birtnday.day<10) 
                printf("%s    %s    %s     %d.0%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
            else if(p->birtnday.month<10&&p->birtnday.day>=10)
                printf("%s    %s    %s     %d.0%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
            else if(p->birtnday.month>=10&&p->birtnday.day<10)
                printf("%s    %s    %s     %d.%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
            else
                printf("%s    %s    %s     %d.%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
            toxy(45,i+1);
            printf("1.删除        2.取消");
            while(1)
            {
                c=getch();
                if(c=='1')
                    break;
                else if(c=='2')
                    delete_number();
            }
            if(pre==NULL)
                head=head->next;
            else
                pre->next=p->next;
            system("cls"); 
            toxy(45,10);
            printf("正在删除....");
            p=head->next;
            fp=fopen("student","wb");
            if(fp==NULL)
            {
                printf("cannot open file"); 
            }
            if(fwrite(head,N,1,fp)!=1)
            {
                printf("write error");
            } 
            fclose(fp);
            fp=fopen("student","ab");
            if(fp==NULL)
            {
                printf("cannot open file"); 
            }
            while(p!=NULL)
            {
                if(fwrite(p,N,1,fp)!=1)
                {
                    printf("write error");
                } 
                p=p->next;
            }
            fclose(fp);
            Sleep(500);
            system("cls");
            toxy(45,10);
            printf("删除成功!正在返回....");
            Sleep(500);
            delete_information(); 
        }
        else if(p==NULL)
        {
            toxy(48,i);
            printf("您输入的信息不存在!按0返回主菜单,1返回上一级菜单,2重新查找");
            while(1)
            {
                t=getch();
                if(t=='0')
                {
                    menu();
                }
                else if(t=='1')
                {
                    delete_information();
                }
                else if(t=='2')
                {
                    break;
                }
            }
        }
        free(p);
    }while(1);
}
 
void delete_name()   //按姓名查询删除 
{
    do
    {
        system("cls");
        color(10);
        char name[10];
        char t,c;
        int i=11,j=0,key;
        Stup head,p,pre;
        FILE *fp;
        toxy(48,9);
        printf("请输入你要删除的学生的姓名:");
        gets(name);
        head=ss();
        p=head;
        while(p!=NULL)
        {
            p->num=0;
            p=p->next;
        }
        p=head;
        toxy(45,6);
        printf("-----学生档案管理系统-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("学号   姓名   性别   出生--日期     c语言   高 数   俄 语   俄语听力   专业导论   政 治   备注");
        toxy(20,10);
        printf("----------------------------------------------------------------------------------------------");
        while(p!=NULL)
        {
            if(strcmp(p->name,name)==0)
            {
                toxy(18,i);
                j++;
                if(p->birtnday.month<10&&p->birtnday.day<10) 
                    printf("%d.%s    %s    %s     %d.0%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month<10&&p->birtnday.day>=10)
                    printf("%d.%s    %s    %s     %d.0%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month>=10&&p->birtnday.day<10)
                    printf("%d.%s    %s    %s     %d.%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else
                    printf("%d.%s    %s    %s     %d.%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                i++;
                p->num=j;
            }
            p=p->next;
        }
        if(j==0)
        {
            toxy(48,i);
            printf("您输入的信息不存在!按0返回主菜单,1返回上一级菜单,2重新查找");
            while(1)
            {
                t=getch();
                if(t=='0')
                {
                    menu();
                }
                else if(t=='1')
                {
                    delete_information();
                }
                else if(t=='2')
                {
                    break;
                }
            }
            if(t=='2')
                continue;
        }
        while(1)
        {
            toxy(50,i);
            printf("请输入您要删除的信息的标号:");
            scanf("%d",&key);
            getchar();
            i++;
            if(key<=j)              //如果c<=j,即输入正确 
                break;
            else if(key>j)         //否则,输入错误 
            {
                toxy(50,i);
                printf("没有找到您所要删除的信息,请重新输入!");
                i++;
                Sleep(500);      //暂停0.5秒 
            }
        }
        toxy(46,16);
        printf("-------------------------");
        toxy(46,17);
        printf("|                       |");
        toxy(46,18);
        printf("|       确认删除?      |");
        toxy(46,19);
        printf("| 1.确认         2.取消 |");
        toxy(46,20);
        printf("|                       |");
        toxy(46,21);
        printf("-------------------------");
        
        while(1)
        {
            p=head;
            pre=NULL;
            c=getch();
            if(c=='1')
            {
                while(p!=NULL&&p->num!=key)
                {
                    pre=p;
                    p=p->next;
                }
                if(p!=NULL)
                {
                    if(pre==NULL)
                        head=head->next;
                    else
                        pre->next=p->next;
                }
                free(p);
                break;
            }
            else if(c=='2')
                delete_number();
        }
        system("cls"); 
        toxy(45,10);
        printf("正在删除....");
        fp=fopen("student","wb");
        if(fp==NULL)
        {
            printf("cannot open file"); 
        }
        if(head!=NULL&&fwrite(head,N,1,fp)!=1)
        {
            printf("write error");
        } 
        fclose(fp);
        if(head!=NULL)
        {
            p=head->next;
            fp=fopen("student","ab");
            if(fp==NULL)
            {
                printf("cannot open file"); 
            }
            while(p!=NULL)
            {
                if(fwrite(p,N,1,fp)!=1)
                {
                    printf("write error");
                } 
                p=p->next;
            }
            fclose(fp);
        }
        Sleep(500);
        system("cls");
        toxy(45,10);
        printf("删除成功!正在返回....");
        Sleep(500);
        delete_information(); 
    }while(1);
}
 
void print_information()  //输出信息 
{
    system("cls");
    color(11);
    Stup head,p;
    int i=11;
    head=ss();
    p=head;
    toxy(45,6);
    printf("-----学生档案管理系统-----"); 
    toxy(20,8);
    printf("----------------------------------------------------------------------------------------------");
    toxy(20,9);
    printf("学号   姓名   性别   出生--日期     c语言   高 数   俄 语   俄语听力   专业导论   政 治   备注");
    toxy(20,10);
    printf("----------------------------------------------------------------------------------------------");
    while(p!=NULL)
    {
        toxy(20,i);
        if(p->birtnday.month<10&&p->birtnday.day<10) 
            printf("%s    %s    %s     %d.0%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
        else if(p->birtnday.month<10&&p->birtnday.day>=10)
            printf("%s    %s    %s     %d.0%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
        else if(p->birtnday.month>=10&&p->birtnday.day<10)
            printf("%s    %s    %s     %d.%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
        else
            printf("%s    %s    %s     %d.%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
        i++;
        p=p->next;
    }
    toxy(45,i);
    printf("按任意键返回主菜单!");
    getch();
}
 
void find_information()  //查找信息 
{ 
    do
    {
        system("cls");
        char t;
        color(10);
        toxy(45,6);
        printf("-----学生档案管理系统-----");
        toxy(50,7);
        printf("查找信息");
        toxy(48,9);
        printf("1)  学号查询");
        toxy(48,11);
        printf("2)  姓名查询");
        toxy(48,13);
        printf("按0返回主菜单");
        t=getch();
        switch(t)
        {
            case '0':menu();break;
            case '1':find_number_information();break;
            case '2':find_name_information();break;
            default :break;
        }
    }while(1);
}
 
void find_number_information()  //按学号查找 
{
    do
    {
        system("cls");
        color(10);
        char number[10];
        char t;
        int i=11,j=0;
        Stup head,p;
        toxy(48,9);
        printf("请输入你要查找的学生的学号:");
        gets(number);
        head=ss();
        p=head;
        toxy(45,6);
        printf("-----学生档案管理系统-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("学号   姓名   性别   出生--日期     c语言   高 数   俄 语   俄语听力   专业导论   政 治   备注");
        toxy(20,10);
        printf("----------------------------------------------------------------------------------------------");
        while(p!=NULL)
        {
            if(strcmp(p->number,number)==0)
            {
                toxy(20,i);
                if(p->birtnday.month<10&&p->birtnday.day<10) 
                    printf("%s    %s    %s     %d.0%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month<10&&p->birtnday.day>=10)
                    printf("%s    %s    %s     %d.0%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month>=10&&p->birtnday.day<10)
                    printf("%s    %s    %s     %d.%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else
                    printf("%s    %s    %s     %d.%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                i++;
                j++;
           }
            p=p->next;
        }
        if(j==0)
        {
            toxy(48,i);
            printf("您输入的信息不存在!");
        }
        toxy(48,i+1);
        printf("按0继续查找,按1返回");
        while(1)
        {
            t=getch();
            if(t=='0')
            {
                break;
            }
            else if(t=='1')
            {
                find_information();
            }
         } 
    }while(1);
}
 
void find_name_information()   //按姓名查找 
{
    do
    {
        system("cls");
        color(10);
        char name[10];
        char t;
        int i=11,j=0;
        Stup head,p;
        toxy(48,9);
        printf("请输入你要查找的学生的姓名:");
        gets(name);
        head=ss();
        p=head;
        toxy(45,6);
        printf("-----学生档案管理系统-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("学号   姓名   性别   出生--日期     c语言   高 数   俄 语   俄语听力   专业导论   政 治   备注");
        toxy(20,10);
        printf("----------------------------------------------------------------------------------------------");
        while(p!=NULL)
        {
            if(strcmp(p->name,name)==0)
            {
                toxy(20,i);
                if(p->birtnday.month<10&&p->birtnday.day<10) 
                    printf("%s    %s    %s     %d.0%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month<10&&p->birtnday.day>=10)
                    printf("%s    %s    %s     %d.0%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else if(p->birtnday.month>=10&&p->birtnday.day<10)
                    printf("%s    %s    %s     %d.%d.0%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                else
                    printf("%s    %s    %s     %d.%d.%d     %.2f   %.2f   %.2f     %.2f     %.2f     %.2f    %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
                i++;
                j++;
           }
            p=p->next;
        }
        if(j==0)
        {
            toxy(48,i);
            printf("您输入的信息不存在!");
        }
        toxy(48,i+1);
        printf("按0继续查找,按1返回");
        while(1)
        {
            t=getch();
            if(t=='0')
            {
                break;
            }
            else if(t=='1')
            {
                find_information();
            }
         } 
    }while(1);
}
 
void assignment()   //将链表的内容赋值给一个结构体数组 
{
    Stup head,p;
    head=ss();
    p=head;
    int i=0;
    while(p!=NULL)
    {
        strcpy(total[i].number,p->number);
        strcpy(total[i].name,p->name);
        strcpy(total[i].sex,p->sex);
        total[i].c_language=p->score.c_language;
        total[i].math=p->score.math;
        total[i].Russian=p->score.Russian;
        total[i].Russian_hearing=p->score.Russian_hearing;
        total[i].professional=p->score.professional;
        total[i].politics=p->score.politics;
        total[i].sum=total[i].c_language+total[i].math+total[i].Russian+total[i].Russian_hearing+total[i].professional+total[i].politics;
        i++;
        p=p->next;
    }
    len=i;
}
 
void statistics_information()   //数据统计 
{
    do
    {
        system("cls");
        color(6);
        char t;
        toxy(45,6);
        printf("-----学生档案管理系统-----");
        toxy(50,7);
        printf("数据统计");
        toxy(48,9);
        printf("1)  平均分");
        toxy(48,11);
        printf("2)  总分排名");
        toxy(48,13);
        printf("3)  各学科不及格人数");
        toxy(48,15);
        printf("4)  各科成绩分布分析"); 
        toxy(45,17);
        printf("按0返回主菜单");
        t=getch();
        switch(t)
        {
            case '0':menu();break;
            case '1':average_score();break;
            case '2':total_score_ranked();break;
            case '3':fail_numbers();break;
            case '4':grade_table();break;
            default :break;
        }
    }while(1);
}
 
void average_score()   //平均分 
{
    system("cls");
    color(10);
    float sum_c=0,sum_math=0,sum_Russian=0,sum_Russian_hearing=0,sum_professional=0,sum_politics=0;
    float average_c,average_math,average_Russian,average_Russian_hearing,average_professional,average_politics;
    int i=0;
    Stup head,p;
    head=ss();
    p=head;
    while(p!=NULL)
    {
        sum_c+=p->score.c_language;
        sum_math+=p->score.math;
        sum_Russian+=p->score.Russian;
        sum_Russian_hearing+=p->score.Russian_hearing;
        sum_professional+=p->score.professional;
        sum_politics+=p->score.politics;
        p=p->next;
        i++;
    }
    average_c=sum_c*1.0/i;
    average_math=sum_math*1.0/i;
    average_Russian=sum_Russian*1.0/i;
    average_Russian_hearing=sum_Russian_hearing*1.0/i;
    average_professional=sum_professional*1.0/i;
    average_politics=sum_politics*1.0/i;
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(48,7);
    printf("各学科平均分");
    toxy(30,8);
    printf("----------------------------------------------------");
    toxy(30,9);
    printf("  c语言   高数   俄语   俄语听力   专业导论   政治");
    toxy(30,10);
    printf("----------------------------------------------------");
    toxy(30,11);
    printf("  %.2f   %.2f  %.2f    %.2f     %.2f    %.2f",average_c,average_math,average_Russian,average_Russian_hearing,average_professional,average_politics);
    toxy(45,12);
    printf("总人数为:%d",i);
    toxy(50,13);
    printf("按任意键返回主菜单");
    getch(); 
    
}
 
void total_score_ranked()  //总分排名 
{
    system("cls");
    color(10);
    assignment();
    int j,k=11;
    qsort(total,len,sizeof(Total),cmp);   //快速排序 
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(48,7);
    printf("总分排名");
    toxy(20,8);
    printf("--------------------------------------------------------------------------------------------");
    toxy(20,9);
    printf("学号   姓名   性别     c语言    高 数    俄 语   俄语听力   专业导论   政 治     总分   名次");
    toxy(20,10);
    printf("--------------------------------------------------------------------------------------------");
    for(j=0;j<len;j++)
    {
        toxy(20,k);
        printf("%s     %s    %s      %.2f    %.2f    %.2f    %.2f      %.2f     %.2f    %.2f    %d\n",total[j].number,total[j].name,total[j].sex,total[j].c_language,total[j].math,total[j].Russian,total[j].Russian_hearing,total[j].professional,total[j].politics,total[j].sum,j+1);
        k++;
    }
    toxy(45,k);
    printf("按任意键返回主菜单");
    getch();
}
 
void fail_numbers()   //各科不及格人数 
{
    system("cls");
    color(10);
    int fail_c=0,fail_math=0,fail_Russian=0,fail_Russian_hearing=0,fail_professional=0,fail_politics=0; 
    int i;
    assignment();
    for(i=0;i<len;i++)
    {
        if(total[i].c_language<60)
            fail_c++;
        if(total[i].math<60)
            fail_math++;
        if(total[i].Russian<60)
            fail_Russian++;
        if(total[i].Russian_hearing<60)
            fail_Russian_hearing++;
        if(total[i].professional<60)
            fail_professional++;
        if(total[i].politics<60)
            fail_politics++;
    }
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(48,7);
    printf("各科不及格人数");
    toxy(30,8);
    printf("-----------------------------------------------------");
    toxy(30,9);
    printf("c语言    高 数    俄 语   俄语听力   专业导论   政 治");
    toxy(30,10);
    printf("-----------------------------------------------------");
    toxy(30,11);
    printf("%-10d%-10d%-10d%-10d%-10d%-10d",fail_c,fail_math,fail_Russian,fail_Russian_hearing,fail_professional,fail_politics);
    toxy(45,12);
    printf("请按任意键返回");
    getch();
}
 
void grade_table()    //各科各分数段人数信息统计 
{
    do
    {
        system("cls");
        color(10);
        char t;
        toxy(45,6);
        printf("-----学生档案管理系统-----");
        toxy(50,7);
        printf("各分数段统计");
        toxy(48,9);
        printf("(1)  c语言");
        toxy(48,11);
        printf("(2)  高等数学");
        toxy(48,13);
        printf("(3)  俄语");
        toxy(48,15);
        printf("(4)  俄语听力");
        toxy(48,17);
        printf("(5)  专业导论");
        toxy(48,19);
        printf("(6)  政治");
        toxy(48,21);
        printf("按0返回上一级");
        t=getch();
        switch(t)
        {
            case '0':statistics_information();break;
            case '1':analyze_c();break;
            case '2':analyze_math();break;
            case '3':analyze_Russian();break;
            case '4':analyze_Russian_hearing();break;
            case '5':analyze_professional();break;
            case '6':analyze_politics();break;
            default :break;
        }
    }while(1);
}
 
void analyze_c()  //c语言 
{
    system("cls");
    color(11);
    assignment();
    qsort(total,len,sizeof(Total),cmp1);   //快速排序 
    int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
    int i,j,k=12;
    for(i=0;i<len;i++)
    {
        switch((int)(total[i].c_language/10))
        {
            case 10:
            case 9:numbers_A++;break;
            case 8:numbers_B++;break;
            case 7:numbers_C++;break;
            case 6:numbers_D++;break;
            default:numbers_E++;break;
        }
    }
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(50,7);
    printf("c语言--各分数段统计");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("学号           姓名           性别           分数");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人数为:%d",numbers_A);
    for(j=0;j<numbers_A;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
        k++;
    }
    k++;
    toxy(18,k);
    printf("80~90人数为:%d",numbers_B);
    for(j=numbers_A;j<numbers_A+numbers_B;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
        k++;
    }
    k++;
    toxy(18,k);
    printf("70~80人数为:%d",numbers_C);
    for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
        k++;
    }
    k++;
    toxy(18,k);
    printf("60~70人数为:%d",numbers_D);
    for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
        k++;
    }
    k++;
    toxy(18,k);
    printf("0~60人数为:%d",numbers_E);
    for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
        k++;
    }
    toxy(48,k);
    printf("按任意键返回上一级");
    getch();
} 
 
void analyze_math()  //高数 
{
    system("cls");
    color(11);
    assignment();
    qsort(total,len,sizeof(Total),cmp2);   //快速排序 
    int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
    int i,j,k=12;
    for(i=0;i<len;i++)
    {
        switch((int)(total[i].math/10))
        {
            case 10:
            case 9:numbers_A++;break;
            case 8:numbers_B++;break;
            case 7:numbers_C++;break;
            case 6:numbers_D++;break;
            default:numbers_E++;break;
        }
    }
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(50,7);
    printf("高数--各分数段统计");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("学号           姓名           性别           分数");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人数为:%d",numbers_A);
    for(j=0;j<numbers_A;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
        k++;
    }
    k++;
    toxy(18,k);
    printf("80~90人数为:%d",numbers_B);
    for(j=numbers_A;j<numbers_A+numbers_B;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
        k++;
    }
    k++;
    toxy(18,k);
    printf("70~80人数为:%d",numbers_C);
    for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
        k++;
    }
    k++;
    toxy(18,k);
    printf("60~70人数为:%d",numbers_D);
    for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
        k++;
    }
    k++;
    toxy(18,k);
    printf("0~60人数为:%d",numbers_E);
    for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
        k++;
    }
    toxy(48,k);
    printf("按任意键返回上一级");
    getch();
}
 
void analyze_Russian()   //俄语 
{
    system("cls");
    color(11);
    assignment();
    qsort(total,len,sizeof(Total),cmp3);   //快速排序 
    int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
    int i,j,k=12;
    for(i=0;i<len;i++)
    {
        switch((int)(total[i].Russian/10))
        {
            case 10:
            case 9:numbers_A++;break;
            case 8:numbers_B++;break;
            case 7:numbers_C++;break;
            case 6:numbers_D++;break;
            default:numbers_E++;break;
        }
    }
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(50,7);
    printf("俄语--各分数段统计");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("学号           姓名           性别           分数");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人数为:%d",numbers_A);
    for(j=0;j<numbers_A;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
        k++;
    }
    k++;
    toxy(18,k);
    printf("80~90人数为:%d",numbers_B);
    for(j=numbers_A;j<numbers_A+numbers_B;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
        k++;
    }
    k++;
    toxy(18,k);
    printf("70~80人数为:%d",numbers_C);
    for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
        k++;
    }
    k++;
    toxy(18,k);
    printf("60~70人数为:%d",numbers_D);
    for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
        k++;
    }
    k++;
    toxy(18,k);
    printf("0~60人数为:%d",numbers_E);
    for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
        k++;
    }
    toxy(48,k);
    printf("按任意键返回上一级");
    getch();
}
 
void analyze_Russian_hearing()  //俄语听力 
{
    system("cls");
    color(11);
    assignment();
    qsort(total,len,sizeof(Total),cmp4);   //快速排序 
    int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
    int i,j,k=12;
    for(i=0;i<len;i++)
    {
        switch((int)(total[i].Russian_hearing/10))
        {
            case 10:
            case 9:numbers_A++;break;
            case 8:numbers_B++;break;
            case 7:numbers_C++;break;
            case 6:numbers_D++;break;
            default:numbers_E++;break;
        }
    }
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(50,7);
    printf("俄语听力--各分数段统计");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("学号           姓名           性别           分数");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人数为:%d",numbers_A);
    for(j=0;j<numbers_A;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
        k++;
    }
    k++;
    toxy(18,k);
    printf("80~90人数为:%d",numbers_B);
    for(j=numbers_A;j<numbers_A+numbers_B;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
        k++;
    }
    k++;
    toxy(18,k);
    printf("70~80人数为:%d",numbers_C);
    for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
        k++;
    }
    k++;
    toxy(18,k);
    printf("60~70人数为:%d",numbers_D);
    for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
        k++;
    }
    k++;
    toxy(18,k);
    printf("0~60人数为:%d",numbers_E);
    for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
        k++;
    }
    toxy(48,k);
    printf("按任意键返回上一级");
    getch();
}
 
void analyze_professional()  //专业导论 
{
    system("cls");
    color(11);
    assignment();
    qsort(total,len,sizeof(Total),cmp5);   //快速排序 
    int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
    int i,j,k=12;
    for(i=0;i<len;i++)
    {
        switch((int)(total[i].professional/10))
        {
            case 10:
            case 9:numbers_A++;break;
            case 8:numbers_B++;break;
            case 7:numbers_C++;break;
            case 6:numbers_D++;break;
            default:numbers_E++;break;
        }
    }
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(50,7);
    printf("专业导论--各分数段统计");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("学号           姓名           性别           分数");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人数为:%d",numbers_A);
    for(j=0;j<numbers_A;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
        k++;
    }
    k++;
    toxy(18,k);
    printf("80~90人数为:%d",numbers_B);
    for(j=numbers_A;j<numbers_A+numbers_B;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
        k++;
    }
    k++;
    toxy(18,k);
    printf("70~80人数为:%d",numbers_C);
    for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
        k++;
    }
    k++;
    toxy(18,k);
    printf("60~70人数为:%d",numbers_D);
    for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
        k++;
    }
    k++;
    toxy(18,k);
    printf("0~60人数为:%d",numbers_E);
    for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
        k++;
    }
    toxy(48,k);
    printf("按任意键返回上一级");
    getch();
}
 
void analyze_politics()  //政治 
{
    system("cls");
    color(11);
    assignment();
    qsort(total,len,sizeof(Total),cmp6);   //快速排序 
    int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
    int i,j,k=12;
    for(i=0;i<len;i++)
    {
        switch((int)(total[i].politics/10))
        {
            case 10:
            case 9:numbers_A++;break;
            case 8:numbers_B++;break;
            case 7:numbers_C++;break;
            case 6:numbers_D++;break;
            default:numbers_E++;break;
        }
    }
    toxy(45,6);
    printf("-----学生档案管理系统-----");
    toxy(50,7);
    printf("政治--各分数段统计");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("学号           姓名           性别           分数");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人数为:%d",numbers_A);
    for(j=0;j<numbers_A;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
        k++;
    }
    k++;
    toxy(18,k);
    printf("80~90人数为:%d",numbers_B);
    for(j=numbers_A;j<numbers_A+numbers_B;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
        k++;
    }
    k++;
    toxy(18,k);
    printf("70~80人数为:%d",numbers_C);
    for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
        k++;
    }
    k++;
    toxy(18,k);
    printf("60~70人数为:%d",numbers_D);
    for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
        k++;
    }
    k++;
    toxy(18,k);
    printf("0~60人数为:%d",numbers_E);
    for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
    {
        toxy(36,k);
        printf("%s             %s           %s             %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
        k++;
    }
    toxy(48,k);
    printf("按任意键返回上一级");
    getch();
}
 
void save_information(Stup p)   //将p所指向的内容写入文件中 
{
    FILE *fp;
    fp=fopen("student","ab+");
    if(fp==NULL)
    {
        printf("cannot open file"); 
    }
    if(fwrite(p,N,1,fp)!=1)
    {
        printf("write error");
    } 
    fclose(fp);
}
 
void over()       //退出软件 
{
    char t;
    toxy(45,11);
    printf("--------------------------");
    toxy(45,12);
    printf("|    您确定要退出吗?    |");
    toxy(45,14);
    printf("|  1.确定      2.取消    |");
    toxy(45,15);
    printf("--------------------------");
    while(1)
    {
        t=getch();         //输入t
        switch(t)
        {
            case '1':
            system("cls");
            color(6);
            toxy(48,10);
            printf("正在安全退出....");
            Sleep(1000);     //暂停1秒 
            system("cls");
            color(8);
            toxy(48,10);
            printf("已安全退出软件");
            toxy(48,12);
            printf("谢谢使用!");
            toxy(48,14);
            printf("by-by^_^");
            free(password_head);
            exit(0);  break; //终止程序 
            case '2':
            menu(); break;   //调用函数,进入菜单 
            default :break;
        }
    }
}
 
main()  //简单明了的主函数^_^ 
{
    HideCursor();
    signin();  //登录界面 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现学生档案管理系统

本文链接: https://www.lsjlt.com/news/150111.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现学生档案管理系统
    本文实例为大家分享了C语言实现学生档案管理系统的具体代码,供大家参考,具体内容如下     #include<stdio.h&...
    99+
    2022-11-13
  • C语言如何实现学生档案管理系统
    今天小编给大家分享一下C语言如何实现学生档案管理系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。#include<s...
    99+
    2023-06-30
  • C++实现学生档案管理系统
    本文实例为大家分享了C++实现学生档案管理系统的具体代码,供大家参考,具体内容如下 课题描述: 1.为学生档案管理人员编写一个学生档案管理系统 ,用菜单选择方式完成下列功能: 2.学...
    99+
    2022-11-13
  • C语言实现学生宿舍管理系统
    本文实例为大家分享了C语言实现学生宿舍管理系统的具体代码,供大家参考,具体内容如下 实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等,系...
    99+
    2022-11-13
  • C语言实现简易学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,如:简单的增,删,改,查,即:录入成绩...
    99+
    2022-11-13
  • C语言实现班级学生管理系统
    本文实例为大家分享了C语言实现班级学生管理系统的具体代码,供大家参考,具体内容如下 下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始  按顺序录入,...
    99+
    2022-11-12
  • c语言实现学生管理系统详解
    目录infor.htest.cinfor.c总结 该学生管理系统的实现是通过分文件的方式来写的,infor.h 文件为头文件,源文件infor.c实现源文件tes...
    99+
    2022-11-12
  • C语言编写实现学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 项目介绍 学生信息管理系统是一个基于C语言开发的系统,其中有用到冒泡排序、指针、结构体、二位数组等知识...
    99+
    2022-11-13
  • C语言实现学生管理系统总结
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 前言 本周完成了学生管理系统,在完成的过程中遇见了许多问题,今天来总结上周写管理系统一些比较困难的模块...
    99+
    2022-11-13
  • C语言实现学生消费管理系统
    本文实例为大家分享了C语言实现学生消费管理系统的具体代码,供大家参考,具体内容如下 代码可以实现的功能: (1)直接从终端键盘输入信息(2)从磁盘文件录入学生信息(3)可以查询学生消...
    99+
    2022-11-13
    C语言学生消费系统 C语言消费管理系统 C语言学生管理系统
  • C语言实现学生信息管理系统
    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include <stdi...
    99+
    2022-11-13
  • 基于C语言实现学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 1.目标要求: 1.学生成绩管理系统2.可增、删、改、查、浏览3.数据保存在文件中 2.C语言代码: ...
    99+
    2022-11-13
  • C语言模拟实现学生学籍管理系统
    学生学籍管理系统的C语言模拟实现是对链表、指针、结构体、文件操作等知识点的综合运用,需要实现的功能主要包含:输入学生信息、显示学生信息、查询学生信息、新增学生信息、删除学生信息、修改...
    99+
    2022-11-13
  • java实现学生成绩档案管理系统
    本文实例为大家分享了java实现学生成绩档案管理系统的具体代码,供大家参考,具体内容如下 实验要求 • 学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次; ...
    99+
    2022-11-12
  • C语言实现简单的学生学籍管理系统
    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 一 .课题设计内容与主要功能 1.1问题描述: 通过该系统实现对学生学籍信息进行录入、显示、修改、...
    99+
    2022-11-13
  • C语言实现学生信息管理系统(链表)
    目录1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1).定义提示菜单2).增加学生记录3).输入学号接口·4).遍历表...
    99+
    2022-11-13
  • C语言如何实现简易学生管理系统
    本篇内容主要讲解“C语言如何实现简易学生管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简易学生管理系统”吧!首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,...
    99+
    2023-07-02
  • C语言实现学生成绩管理系统项目
    本文实例为大家分享了C语言实现学生成绩管理系统项目,供大家参考,具体内容如下 1、数据结构:学生信息:学号、姓名、年龄、性别、3课成绩 2、功能: (1)  增加学生记录(...
    99+
    2022-11-13
  • C语言实现学生宿舍信息管理系统
    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 功能描述 该学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生...
    99+
    2022-11-13
  • C语言代码实现学生成绩管理系统
    某班有最多不超过 30 人(具体人数由键盘输人)参加期未考试,考试科目 最多不超过 6 门(具体门数由键盘输入,但不少于 3 门),学生成绩管理系统是一 个非常实用的程序,如果能够把...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作