班级问题(c++)

无聊做了一个代码,给我的粉丝们瞅瞅:

#include<bits/stdc++.h>
using namespace std;
#include <time.h>
#include <conio.h> /*清屏*/
#include <stdlib.h> /*显示目录*/
#define MAX 888  
int now_no=0; 

//先把所有要用到的函数写出来,下面写特定函数的时候就不需要注意顺序和函数之间的逻辑关系了 
void input(); void sort(); void sort1(); void sort2(); void sort3();  void display(); void display1(); void insert(); void del(); void average(); void find(); void find1(); void find2(); void dis_grade(); void save(); void read(); void del_file(); void modify();

struct student 
{ 
    int no,testScore; 
    char name[20],sex[4]; 
    float score1,score2,score3,sort,ave,sum; 
}stu[MAX],*p; 


void input()/*原始数据录入模块*/ 
{ 
    int i=0; 
    char ch; 
    do 
    { 
        printf("\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n",i+1); 
        
        printf("\n输入学生编号:"); 
        scanf("%d",&stu[i].no); 
        fflush(stdin); 
        
        printf("\n输入学员姓名:"); 
        fflush(stdin); 
        gets(stu[i].name); 
        
        printf("\n输入学员性别:"); 
        fflush(stdin); 
        gets(stu[i].sex); 
        
        printf("\n输入学员成绩1:"); 
        scanf("%f",&stu[i].score1); 
        printf("\n输入学员成绩2:"); 
        fflush(stdin); 
        scanf("%f",&stu[i].score2); 
        printf("\n输入学员成绩3:"); 
        fflush(stdin); 
        scanf("%f",&stu[i].score3); 
        printf("\n\n"); 
        
        i++; 
        now_no=i; 
        printf("是否继续输入?(Y/N)"); 
        fflush(stdin); 
        ch=getch(); 
        system("cls"); 
    } 
    while(ch!='n'&&ch!='N'); 
    system("cls"); 
} 

void average() /*求平均数*/ 
{ 
    for(int i=0;i<now_no;i++) 
    { 
        stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; 
        stu[i].ave=stu[i].sum/3; 
    } 
} 

void sort()/*排序数据函数*/ 
{ 
    struct student temp; 
    average();
    
    for(int i=1; i<now_no; i++) 
      for(int j=1; j<=now_no-i; j++) 
        if(stu[j-1].ave<stu[j].ave)  swap(stu[j],stu[j-1]);
    
    printf("排序以完成进入功能2可进行显示\n");
    system("pause");
    system("cls");
} 

void sort1()/*排序数据函数*/ 
{ 
    struct student temp; 
    for(int i=1; i<now_no; i++) 
      for(int j=1; j<=now_no-i; j++) 
        if(stu[j-1].score1<stu[j].score1)  swap(stu[j],stu[j-1]);
} 

void sort2()/*排序数据函数*/ 
{ 
    struct student temp; 
    for(int i=1; i<now_no; i++) 
      for(int j=1; j<=now_no-i; j++) 
        if(stu[j-1].score2<stu[j].score2)  swap(stu[j],stu[j-1]);
} 

void sort3()/*排序数据函数*/ 
{ 
    struct student temp; 
    for(int i=1;i<now_no;i++) 
      for(int j=1;j<=now_no-i;j++) 
        if(stu[j-1].score3<stu[j].score3)  swap(stu[j],stu[j-1]);
}

void display()/*显示数据函数*/ 
{ 
    char as; 
    average();    
    do 
    { 
        printf("\t\t\t班级学员信息列表\n"); 
        printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
	   
        for(int i=0;i<now_no&&stu[i].name[0];i++) 
            printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); 
        printf("\t\t按任意键返回主菜单."); 
      
        fflush(stdin); 
        as=getch(); 
    } 
    while(!as); 
    system("cls"); 
}

void display1()/*显示数据函数*/
{
    char as;   
    do 
    { 
        printf("\t\t\t班级学员score1成绩排序\n"); 
        printf("\t编号\t姓名\t性别\t成绩1\n");
        sort1();
        for(int i=0;i<now_no&&stu[i].name[0];i++)
            printf("\t%d\t%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1); 
            
        printf("\t\t\t班级学员score2成绩排序\n"); 
        printf("\t编号\t姓名\t性别\t成绩2\n");
        sort2();
        for(int i=0; i<now_no&&stu[i].name[0]; i++)
            printf("\t%d\t%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score2); 
			 
        printf("\t\t\t班级学员score3成绩排序\n"); 
        printf("\t编号\t姓名\t性别\t成绩3\n");
        sort3();
        for(int i=0; i<now_no&&stu[i].name[0]; i++)
            printf("\t%d\t%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score3); 
			 
        printf("\t\t按任意键返回主菜单."); 
        fflush(stdin); 
        as=getch(); 
    } 
    while(!as); 
    system("cls"); 
}

void dis_grade()
{
	char as;
	do 
    { 
	    printf("________________________________________________________\n");
	    printf("     |90分以上:A | 80~89分:B | 70~79分:C | 60~69分:D | 60分以下:E \n");
	    printf("--------------------------------------------------------\n");
	  
        for(int i=0; i<now_no&&stu[i].name[0]; i++) 
        {
      	    printf("\t%d\t%s\t%s",stu[i].no,stu[i].name,stu[i].sex);
      	    if(stu[i].ave>=90) printf("\t等级:A");
      	    else if(stu[i].ave>=80&&stu[i].ave<=89) printf("\t等级:B");
      	    else if(stu[i].ave>=70&&stu[i].ave<=79) printf("\t等级:C");
      	    else if(stu[i].ave>=60&&stu[i].ave<=69) printf("\t等级:D");
      	    else if(stu[i].ave<60) printf("\t等级:E");
	    }
	    
	    printf("--------------------------------------------------------\n");
        printf("\t\t按任意键返回主菜单."); 
        
        fflush(stdin); 
        as=getch(); 
    } 
	while(!as); 
    system("cls"); 
}

void insert()/*插入数据函数*/ 
{ 
    char ch; 
    do 
    { 
        printf("\n\t\t输入新插入学员队信息\n"); 
        
        printf("\n输入学生编号:"); 
        scanf("%d",&stu[now_no].no); 
        fflush(stdin); 
        
        printf("\n输入学员姓名:"); 
        fflush(stdin); 
        gets(stu[now_no].name); 
        
        printf("\n输入学员性别:"); 
        fflush(stdin); 
        gets(stu[now_no].sex); 
        
        printf("\n输入学员成绩1:"); 
        fflush(stdin); 
        scanf("%f",&stu[now_no].score1); 
        printf("\n输入学员成绩2:"); 
        fflush(stdin); 
        scanf("%f",&stu[now_no].score2); 
        printf("\n输入学员成绩3:"); 
        fflush(stdin); 
        scanf("%f",&stu[now_no].score3); 
        printf("\n\n"); 
        
        now_no=now_no+1; 
        sort(); 
        printf("是否继续输入?(Y/N)"); 
        fflush(stdin); 
        ch=getch(); 
        system("cls"); 
    } 
    while(ch!='n'&&ch!='N'); 
} 

void del()/*删除数据函数*/ 
{ 
    int k; 
    printf("输入要删除学员的编号:"); 
    fflush(stdin); 
    scanf("%d",&k); 
    for(int i=0; i<now_no; i++) 
    { 
        if(stu[i].no==k) 
        { 
            if(i==now_no)  now_no-=1; 
            else 
            { 
                stu[i]=stu[now_no-1]; 
                now_no-=1; 
            } 
            sort(); 
            break; 
        } 
    }
    system("cls"); 
} 

void save()/*保存数据函数*/ 
{ 
    FILE *fp; 
    char filepath[20]; 
    printf("输入要保存的文件路径:"); 
    fflush(stdin); 
    gets(filepath); 
    
    if( (fp=fopen(filepath,"w"))==NULL ) 
    { 
        printf("\n保存失败!"); 
        exit(0); 
    } 
    
    for(int i=0;i<now_no;i++) 
    { 
        stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; 
        stu[i].ave=stu[i].sum/3; 
        fprintf(fp,"\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); 
    } 
    fclose(fp); 
    
    printf("学生信息已保存在%s中!\n",filepath); 
    system("pause"); 
    system("cls"); 
} 

void find()/*查询函数*/ 
{ 
    char str[20],as; 
    do 
    { 
        printf("输入要查询的学生姓名:"); 
        fflush(stdin); 
        gets(str); 
        
        for(int i=0;i<now_no;i++) 
            if(!strcmp(stu[i].name,str)) 
            { 
                printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n"); 
                printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); 
            } 
            
        printf("\t\t按任意键返回主菜单."); 
        fflush(stdin); 
        as=getch(); 
    } 
    while(!as); 
    system("cls"); 
} 

void modify()/*修改数据函数*/ 
{ 
    char str[20]; 
    printf("输入要修改的学生姓名:"); 
    fflush(stdin); 
    gets(str); 
    
    for(int i=0; i<now_no; i++) 
    {
        if(!strcmp(stu[i].name,str)) 
        { 
            system("cls"); 
            printf("\n\t\t输入新插入学员队信息\n"); 
            printf("\n输入学生编号:"); 
            fflush(stdin); 
            scanf("%d",&stu[i].no); 
            
            printf("\n输入学员性别:"); 
            fflush(stdin); 
            gets(stu[i].sex); 
            
            printf("\n输入学员成绩1:"); 
            fflush(stdin); 
            scanf("%f",&stu[i].score1); 
            printf("\n输入学员成绩2:"); 
            fflush(stdin); 
            scanf("%f",&stu[i].score2); 
            printf("\n输入学员成绩3:"); 
            fflush(stdin); 
            scanf("%f",&stu[i].score3); 
            
            printf("\n\n"); 
            sort(); 
            break; 
       }
    }
    system("cls"); 
} 

void read() 
{ 
    FILE *fp; 
    char filepath[20]; 
    printf("输入要读入的文件路径:"); 
    fflush(stdin); 
    gets(filepath); 
    
    if( (fp=fopen(filepath,"r"))==NULL ) 
    { 
       printf("找不到%s文件!\n",filepath); 
       system("pause"); 
       exit(0); 
    } 
    
    now_no=0; 
    for(int i=0; i<MAX&&!feof(fp); i++) 
    { 
       fscanf(fp,"\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n",&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2,&stu[i].score3,&stu[i].ave); 
       now_no++; 
    } 
    
    fclose(fp); 
    printf("保存的在文件%s中的所有信息已经读入!\n",filepath); 
    system("pause"); /*按任意键继续*/
    system("cls"); 
} 

void del_file() 
{ 
    FILE *fp; 
    char filepath[20]; 
    printf("输入要删除的文件路径:"); 
    
    fflush(stdin); 
    gets(filepath); 
    fp=fopen(filepath,"w"); 
    fclose(fp); 
    printf("保存的在文件%s中的所有信息已经删除!\n",filepath); 
    
    system("pause"); 
    system("cls"); 
}


int main()/*主函数*/ 
{ 
    int as;
    char ch;
    do
	{
       start: printf("\n\n\n\t\t\t欢迎使用 XX 的学生成绩管理系统\n"); 
       printf("\n\n\n\n\n\n\t\t******************按任意键继续********************");
       ch=getch();
    }
    while(!ch); 
    system("cls");
    
    /*以下为功能选择模块*/ 
    do 
    { 
        printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员总成绩信息\n\t\t\t\t3.对总成绩排序\n\t\t\t\t4.显示学员单科成绩排序\n\t\t\t\t5.添加学员信息\n\t\t\t\t6.删除学员信息\n\t\t\t\t7.修改学员信息\n\t\t\t\t8.查询学员信息\n\t\t\t\t9.从文件读入学员信息\n\t\t\t\t10.删除文件中学员信息\n\t\t\t\t11.保存学员信息\n\t\t\t\t12.各学员学科平均成绩等级评定\n\t\t\t\t13.退出\n"); 
        printf("\t\t\t\t选择功能选项(输入所选功能前的数字):"); 
        fflush(stdin);
        /*可用可不用,用于清除缓存防止下次用scanf输入是出现错误*/ 
        scanf("%d",&as); 
        switch(as) 
        { 
            case 1:system("cls");    input();    break; 
            case 2:system("cls");    display();    break;
            case 3:system("cls");    sort();    break;
            case 4:system("cls");    display1();    break;
            case 5:system("cls");    insert();    break;
            case 6:system("cls");    del();    break; 
            case 7:system("cls");    modify();    break; 
            case 8:system("cls");    find();    break; 
            case 9:system("cls");    read();    break; 
            case 10:system("cls");    del_file();    break; 
       
            case 11:system("cls");    save();    break; 
       
	        case 12:system("cls");    dis_grade();    break; 
            case 13:system("exit");    exit(0);       
	        default:system("cls");    goto start; 
        } 
        
    }while(1);/*while(1),1表示真,所以while(1)表示永远循环下去,一般在while(1)的循环体内都有break 或者return 跳出循环*/ 
    /*至此功能选择结束*/ 
} 

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页