溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

發(fā)布時間:2022-05-30 10:23:09 來源:億速云 閱讀:245 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

/*
    課程設(shè)計(jì)項(xiàng)目名稱:學(xué)生檔案管理系統(tǒng)
    作者:施瑞文 
    時間:2018.3.3 
*/
#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];   //學(xué)號
    char name[10];   //姓名
    char sex[2];  //性別
    struct Birthday  //出生日期 
    {
        int year;   //年
        int month;  //月
        int day;    //日 
    }birtnday;
    struct Score  //成績
    {
        float c_language;  //c語言
        float math;  //高數(shù)
        float Russian;//俄語
        float Russian_hearing; //俄語聽力
        float professional;  //專業(yè)導(dǎo)論
        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;  //高數(shù)
    float Russian;//俄語
    float Russian_hearing; //俄語聽力
    float professional;  //專業(yè)導(dǎo)論
    float politics;  //政治
    float sum;
}Total; 
Total total[MAX];
 
 
//好多自定義函數(shù) 
void color(short x);//設(shè)置顏色
void HideCursor();     //隱藏光標(biāo)
void toxy(int x, int y);     //將光標(biāo)移動到X,Y坐標(biāo)處
void menu();    //主菜單 
void over();   //退出軟件
void signin();   //登陸 
passw ff();    //將文件中的內(nèi)容讀入鏈表,返回值為表頭地址 
void save_password(passw p);//保存密碼 
void amend_password();   //修改密碼 
void input_information();  //信息錄入 
void amend_information();  //修改信息 
void delete_information();  //刪除信息 
void delete_number();  //按學(xué)號查詢刪除
void delete_name();   //按姓名查詢刪除 
void save_information(Stup p);   //保存信息 
void print_information();    //信息顯示 
Stup ss();   //將文件中的內(nèi)容讀入鏈表,返回值為表頭地址
void find_information();   ///查找信息 
void find_number_information();   //按學(xué)號查詢 
void find_name_information();   //按姓名查詢 
void statistics_information();  //信息統(tǒng)計(jì) 
void average_score();   //平均分
void total_score_ranked();   //總分排名
void fail_numbers();     //各科不及格人數(shù) 
void assignment();   //將信息賦值到一個結(jié)構(gòu)體中 
void grade_table();   //各科成績分布 
void analyze_c();   //c語言 
void analyze_math();//高數(shù) 
void analyze_Russian();//俄語 
void analyze_Russian_hearing();//俄語聽力 
void analyze_professional();//專業(yè)導(dǎo)論 
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)    //設(shè)置顏色 
{
    if(x>=0&&x<=15)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
    }
    else
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
    }
} 
 
void HideCursor()     //隱藏光標(biāo)
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
void toxy(int x, int y)      //將光標(biāo)移動到X,Y坐標(biāo)處
{
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("-----學(xué)生檔案管理系統(tǒng)-----"); 
        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.信息統(tǒng)計(jì)       |");
        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);//永遠(yuǎn)為真 
} 
 
passw ff()     //將文件中的內(nèi)容讀入鏈表,返回值為表頭地址 
{
    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);    //關(guān)閉文件 
    return password_head;   //返回值表頭地址 
}
 
void signin()    //登錄 
{
    do
    {
        system("cls");
        color(13);   //好看的顏色 
        passw p,head;
        int i=0;
        char k;
        head=ff();   //調(diào)用函數(shù),返回值為表頭地址 
        p=head;     
        //printf("%s\n",p->password);
        //printf("%p\n",p);
        char str[]="000000";   //初始密碼 
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----");
        toxy(45,8);
        printf("請輸入管理者密碼:");
        for(;;)              //此處為輸入密碼不回顯操作 
        {
            k=getch();       //輸入k 
            if(k=='\r')      //如果輸入k為回車,則跳出循環(huán) 
            {
                break;
            }
            else if(k=='\b')  //如果輸入k為刪除鍵 
            {
                if(i>0)       //如若密碼還沒完全刪除 
                {
                    printf("\b");
                    printf(" ");
                    printf("\b");
                    i--;
                }
            }
            else              //如果輸入的k既不是刪除鍵,也不是回車鍵 
            {
                _password[i]=k;   //把k的值賦給_password[i]; 
                printf("*");      //輸出*號,保護(hù)用戶隱私 
                i++;              //密碼位數(shù)加1 
            }
        }
        _password[i]='\0';
        if(strcmp(p->password," ")==0)   //判斷程序是否是第一次運(yùn)行,
        {
            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;       //隱藏光標(biāo),看著更舒服 
    head=ff();
    do
    { 
        system("cls");         //清屏
        p=head;
        char password[18],newpassword[18],t,k;
        int i=0;
        toxy(45,6);          //將光標(biāo)移動到坐標(biāo)為(50,5)的位置 
        printf("學(xué)生檔案管理系統(tǒng)");
        toxy(48,8);
        printf("修改密碼");
        toxy(45,10);
        printf("請輸入舊密碼:");
        for(;;)              //此處為輸入密碼不回顯操作 
        {
            k=getch();       //輸入k 
            if(k=='\r')      //如果輸入k為回車,則跳出循環(huán) 
            {
                break;
            }
            else if(k=='\b')  //如果輸入k為刪除鍵 
            {
                if(i>0)       //如若密碼還沒完全刪除 
                {
                    printf("\b");
                    printf(" ");
                    printf("\b");
                    i--;
                }
            }
            else              //如果輸入的k既不是刪除鍵,也不是回車鍵 
            {
                password[i]=k;   //把k的值賦給_password[i]; 
                printf("*");      //輸出*號,保護(hù)用戶隱私 
                i++;              //密碼位數(shù)加1 
            }
        }
        password[i]='\0';
        i=0;
        toxy(45,12);
        printf("請輸入新密碼:");
        for(;;)              //此處為輸入密碼不回顯操作 
        {
            k=getch();       //輸入k 
            if(k=='\r')      //如果輸入k為回車,則跳出循環(huán) 
            {
                break;
            }
            else if(k=='\b')  //如果輸入k為刪除鍵 
            {
                if(i>0)       //如若密碼還沒完全刪除 
                {
                    printf("\b");
                    printf(" ");
                    printf("\b");
                    i--;
                }
            }
            else              //如果輸入的k既不是刪除鍵,也不是回車鍵 
            {
                newpassword[i]=k;   //把k的值賦給_password[i]; 
                printf("*");      //輸出*號,保護(hù)用戶隱私 
                i++;              //密碼位數(shù)加1 
            }
        }
        newpassword[i]='\0';
        if(p!=NULL)                   //如果p不為空 
        {
            if(strcmp(p->password,password)==0)          //如果舊密碼輸入正確 
            {
                strcpy(p->password,newpassword);         //將舊密碼改為新密碼 
                break;                                   //跳出循環(huán) 
            }
            else                                         //如果舊密碼輸入錯誤 
            {
                system("cls");
                toxy(46,8);
                printf("--------------------------");
                toxy(46,9);
                printf("|                        |");
                toxy(46,10);
                printf("|  密碼錯誤!是否繼續(xù)?  |");
                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);                         //永遠(yuǎn)為真 
    system("cls");
    toxy(45,10);
    printf("修改成功!即將返回主菜單...."); 
    Sleep(500);
    menu();
} 
 
void save_password(passw p)   //將p所指向的內(nèi)容保存到文件中 
{
    FILE *fp;
    fp=fopen("password","w");   //以只寫的方式打開名為password的文件 
    if(fp==NULL)
    {
        printf("cannot open file"); 
    }
    if(fwrite(p,M,1,fp)!=1)   //將p所指向的一段大小為M的內(nèi)容寫入fp所指向的文件中 
    {
        printf("write error!"); 
    }
    fclose(fp);   //關(guān)閉文件 
}
 
Stup ss()     //將文件中的內(nèi)容讀出到鏈表中 
{
    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函數(shù)可以檢查文件讀寫位置標(biāo)志是否移動到文件末尾,feof(fp)檢查fp所指向的文件是否結(jié)束,如果是
    {                //則函數(shù)值為真,否則為假,即“!feof(fp)”為真,在while循環(huán)中檢查 “!feof(fp)”為真,就執(zhí)行循環(huán)體
        n++;
        p=(Stup)malloc(N); //向內(nèi)存申請一段空間
        fread(p,N,1,fp); //從fp所指向的文件讀入1個大小為M的數(shù)據(jù),存儲到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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(50,7);
    printf("信息錄入");
    toxy(45,8);
    printf("你需要錄入多少個學(xué)生的信息?請輸入:");
    scanf("%d",&n);getchar();    
    while(i!=n)
    {
        system("cls");
        i++;
        p=(Stup)malloc(N);
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----");
        toxy(50,7);
        printf("信息錄入");
        toxy(45,8);
        printf("請輸入學(xué)生學(xué)號:");
        gets(p->number);
        toxy(45,9);
        printf("請輸入學(xué)生姓名:");
        gets(p->name);
        toxy(45,10);
        printf("請輸入學(xué)生性別(男或女):");
        gets(p->sex);
        toxy(45,11);
        printf("請輸入學(xué)生出生日期(年月日,以空格隔開):");
        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("請輸入高數(shù)成績:");
        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("請輸入專業(yè)導(dǎo)論成績:");
        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];   //學(xué)號
    char name[10],_name[10];   //姓名
    char sex[2];  //性別
    int year;   //年
    int month;  //月
    int day;    //日
    float c_language;  //c語言
    float math;  //高數(shù)
    float Russian;//俄語
    float Russian_hearing; //俄語聽力
    float professional;  //專業(yè)導(dǎo)論
    float politics;  //政治 
    char remark[100];  //備注
    char ch,t;
    head=ss();
    p=head;
    do
    {
        system("cls");
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----");
        toxy(45,7);
        printf("修改信息");
        toxy(40,9);
        printf("請輸入您要修改的信息:");
        gets(_name);
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("學(xué)號   姓名   性別   出生--日期     c語言   高 數(shù)   俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治   備注");
        toxy(20,10);
        printf("----------------------------------------------------------------------------------------------");
        i=11;j=0;
        while(p!=NULL)   //將每個結(jié)點(diǎn)的p->num都賦為0,以免后面數(shù)據(jù)干擾 
        {
            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賦值,即給滿足搜索要求的結(jié)點(diǎn)編號 
            }
            p=p->next;
        }
        if(j==0)                   //如果j=0,即沒有進(jìn)入前面的搜索循環(huán),也就是沒有找到相應(yīng)的信息 
        { 
            toxy(50,i);
            printf("沒有找到相應(yīng)的信息!(按0返回,按1重新搜索)");
            while(1)               //死循環(huán)是為了防止除0和1的其他按鍵干擾 
            {
                ch=getch();     
                if(ch=='0')
                {
                    menu();break;
                }
                else if(ch=='1')
                {
                    break;
                }
            }
            if(ch=='1')     //如果輸入的ch等于1,則結(jié)束本次循環(huán) 
               continue;
        }
        while(1)
        {
            toxy(50,i);
            printf("請輸入您要修改的信息的標(biāo)號:");
            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,即第一個結(jié)點(diǎn) 
        while(p!=NULL&&p->num!=c)    //遍歷鏈表,尋找滿足要求的結(jié)點(diǎn) 
        {
            p=p->next;
        }
        if(p!=NULL)      //如果尋找成功,進(jìn)入修改部分 
        {
            system("cls");    //清屏 
            toxy(45,8);
            printf("請輸入學(xué)生學(xué)號:");
            gets(number);
            strcpy(p->number,number);
            toxy(45,9);
            printf("請輸入學(xué)生姓名:");
            gets(name);
            strcpy(p->name,name);
            toxy(45,10);
            printf("請輸入學(xué)生性別(男或女):");
            gets(sex);
            strcpy(p->sex,sex);
            toxy(45,11);
            printf("請輸入學(xué)生出生日期(年月日,以空格隔開):");
            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("請輸入高數(shù)成績:");
            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("請輸入專業(yè)導(dǎo)論成績:");
            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("|     是否確認(rèn)修改?    |");
            toxy(46,19);
            printf("| 1.確認(rèn)         2.取消 |");
            toxy(46,20);
            printf("|                       |");
            toxy(46,21);
            printf("-------------------------");
            while(1)    //死循環(huán)為防止其他按鍵干擾 
            {
                t=getch();
                if(t=='1')
                   break;
                else if(t=='2')
                {
                    menu();
                }
             } 
             if(t=='1')  //如果t等于1,則跳出循環(huán) 
             {
                 break; 
             }
        }
    }while(1);
    p=head;     //p重新指向頭節(jié)點(diǎn) 
    system("cls");
    toxy(44,12);
    printf("正在修改....");
    fp=fopen("student","wb");   //打開文件的同時清除文件內(nèi)的內(nèi)容 
    if(fp==NULL)
    {
        printf("cannot open file");
    }
    while(p!=NULL)
    {
        if(fwrite(p,N,1,fp)!=1)    //將p所指向的內(nèi)容存入fp所指向的文件中 
        {
            printf("file write error\n");
        }
        p=p->next;
    }
    fclose(fp);     //關(guān)閉文件 
    Sleep(500);
    system("cls");
    toxy(44,12);
    printf("修改成功!正在自動跳轉(zhuǎn)到主菜單....");
    Sleep(500);
    menu();
}
 
void delete_information()  //刪除信息 
{
    do
    {
        system("cls");
        color(12);
        char t;
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----");
        toxy(48,7);
        printf("信息刪除");
        toxy(45,9);
        printf("1)  按學(xué)號查詢刪除");
        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()  //按學(xué)號查詢刪除 
{
    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("請輸入你要刪除的學(xué)生的學(xué)號:");
        gets(number);
        head=ss();
        p=head;
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("學(xué)號   姓名   性別   出生--日期     c語言   高 數(shù)   俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治   備注");
        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("請輸入你要刪除的學(xué)生的姓名:");
        gets(name);
        head=ss();
        p=head;
        while(p!=NULL)
        {
            p->num=0;
            p=p->next;
        }
        p=head;
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("學(xué)號   姓名   性別   出生--日期     c語言   高 數(shù)   俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治   備注");
        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("請輸入您要刪除的信息的標(biāo)號:");
            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("|       確認(rèn)刪除?      |");
        toxy(46,19);
        printf("| 1.確認(rèn)         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("-----學(xué)生檔案管理系統(tǒng)-----"); 
    toxy(20,8);
    printf("----------------------------------------------------------------------------------------------");
    toxy(20,9);
    printf("學(xué)號   姓名   性別   出生--日期     c語言   高 數(shù)   俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治   備注");
    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("-----學(xué)生檔案管理系統(tǒng)-----");
        toxy(50,7);
        printf("查找信息");
        toxy(48,9);
        printf("1)  學(xué)號查詢");
        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()  //按學(xué)號查找 
{
    do
    {
        system("cls");
        color(10);
        char number[10];
        char t;
        int i=11,j=0;
        Stup head,p;
        toxy(48,9);
        printf("請輸入你要查找的學(xué)生的學(xué)號:");
        gets(number);
        head=ss();
        p=head;
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("學(xué)號   姓名   性別   出生--日期     c語言   高 數(shù)   俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治   備注");
        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繼續(xù)查找,按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("請輸入你要查找的學(xué)生的姓名:");
        gets(name);
        head=ss();
        p=head;
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----"); 
        toxy(20,8);
        printf("----------------------------------------------------------------------------------------------");
        toxy(20,9);
        printf("學(xué)號   姓名   性別   出生--日期     c語言   高 數(shù)   俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治   備注");
        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繼續(xù)查找,按1返回");
        while(1)
        {
            t=getch();
            if(t=='0')
            {
                break;
            }
            else if(t=='1')
            {
                find_information();
            }
         } 
    }while(1);
}
 
void assignment()   //將鏈表的內(nèi)容賦值給一個結(jié)構(gòu)體數(shù)組 
{
    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()   //數(shù)據(jù)統(tǒng)計(jì) 
{
    do
    {
        system("cls");
        color(6);
        char t;
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----");
        toxy(50,7);
        printf("數(shù)據(jù)統(tǒng)計(jì)");
        toxy(48,9);
        printf("1)  平均分");
        toxy(48,11);
        printf("2)  總分排名");
        toxy(48,13);
        printf("3)  各學(xué)科不及格人數(shù)");
        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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(48,7);
    printf("各學(xué)科平均分");
    toxy(30,8);
    printf("----------------------------------------------------");
    toxy(30,9);
    printf("  c語言   高數(shù)   俄語   俄語聽力   專業(yè)導(dǎo)論   政治");
    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("總?cè)藬?shù)為:%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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(48,7);
    printf("總分排名");
    toxy(20,8);
    printf("--------------------------------------------------------------------------------------------");
    toxy(20,9);
    printf("學(xué)號   姓名   性別     c語言    高 數(shù)    俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治     總分   名次");
    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()   //各科不及格人數(shù) 
{
    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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(48,7);
    printf("各科不及格人數(shù)");
    toxy(30,8);
    printf("-----------------------------------------------------");
    toxy(30,9);
    printf("c語言    高 數(shù)    俄 語   俄語聽力   專業(yè)導(dǎo)論   政 治");
    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()    //各科各分?jǐn)?shù)段人數(shù)信息統(tǒng)計(jì) 
{
    do
    {
        system("cls");
        color(10);
        char t;
        toxy(45,6);
        printf("-----學(xué)生檔案管理系統(tǒng)-----");
        toxy(50,7);
        printf("各分?jǐn)?shù)段統(tǒng)計(jì)");
        toxy(48,9);
        printf("(1)  c語言");
        toxy(48,11);
        printf("(2)  高等數(shù)學(xué)");
        toxy(48,13);
        printf("(3)  俄語");
        toxy(48,15);
        printf("(4)  俄語聽力");
        toxy(48,17);
        printf("(5)  專業(yè)導(dǎo)論");
        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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(50,7);
    printf("c語言--各分?jǐn)?shù)段統(tǒng)計(jì)");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("學(xué)號           姓名           性別           分?jǐn)?shù)");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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()  //高數(shù) 
{
    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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(50,7);
    printf("高數(shù)--各分?jǐn)?shù)段統(tǒng)計(jì)");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("學(xué)號           姓名           性別           分?jǐn)?shù)");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(50,7);
    printf("俄語--各分?jǐn)?shù)段統(tǒng)計(jì)");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("學(xué)號           姓名           性別           分?jǐn)?shù)");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(50,7);
    printf("俄語聽力--各分?jǐn)?shù)段統(tǒng)計(jì)");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("學(xué)號           姓名           性別           分?jǐn)?shù)");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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()  //專業(yè)導(dǎo)論 
{
    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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(50,7);
    printf("專業(yè)導(dǎo)論--各分?jǐn)?shù)段統(tǒng)計(jì)");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("學(xué)號           姓名           性別           分?jǐn)?shù)");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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("-----學(xué)生檔案管理系統(tǒng)-----");
    toxy(50,7);
    printf("政治--各分?jǐn)?shù)段統(tǒng)計(jì)");
    toxy(36,9);
    printf("-------------------------------------------------");
    toxy(36,10);
    printf("學(xué)號           姓名           性別           分?jǐn)?shù)");
    toxy(36,11);
    printf("-------------------------------------------------");
    toxy(18,12);
    printf("90~100人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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人數(shù)為:%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所指向的內(nèi)容寫入文件中 
{
    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;   //調(diào)用函數(shù),進(jìn)入菜單 
            default :break;
        }
    }
}
 
main()  //簡單明了的主函數(shù)^_^ 
{
    HideCursor();
    signin();  //登錄界面 
}

以上就是“C語言如何實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI