学生成绩管理系统(简单版)

学生成绩管理系统(简单版)

要求:存储50个学生下信息(学号,姓名,性别,成绩1,成绩2)计算平均成绩,与等级(等级要求自定义),按照平均成绩倒序输出,并且可以统计是否具有重名学生,若有输出相同个数。

数组版

#include <cstdio>
#include <cstring>
using namespace std;
#define N 2
int main() {
	int ID[N];
    char name[N][10];
    char sex[N][10],level[N];
    double s1[N],s2[N];
    double v[N];
    int n=0;
    //输入数据,并计算不重复的学生姓名
    for(int i=0;i<N;i++){
        printf("请输入第%d个学生信息\n",i+1);
        scanf("%d %s %s %lf %lf",&ID[i],name[i],sex[i],&s1[i],&s2[i]);
        v[i]=(s1[i]+s2[i])/2;
        switch ((int)v[i]/10) {
            case 9:level[i]='A';break;
            case 8:level[i]='B';break;
            case 7:level[i]='C';break;
            case 6:level[i]='D';break;
            default:level[i]='E';
        }
        int flag=1;
        for(int k=0;k<i;k++){
            if(strcmp(name[i],name[k])==0){
                flag=0;break;     //通过flag进行判断,如果出现相同的名字,后面就不执行n++
            }
        }
        if(flag) n++;
    }
    printf("输入完毕\n");
//冒泡排序 
    for(int i=0;i<N-1;i++){
        for(int j=0;j<N-1-i;j++){
            if(v[j]<v[j+1]){
            	//swap 交换j与,j+1的学生
               int p1=ID[j];ID[j]=ID[j+1];ID[j+1]=p1;
			   char p2[10];strcpy(p2,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],p2);
			   char p3[10];strcpy(p3,sex[j]);strcpy(sex[j],sex[j+1]);strcpy(sex[j+1],p3);
			   double p4=s1[j];s1[j]=s1[j+1];s1[j+1]=p4;
			   double p5=s1[j];s2[j]=s2[j+1];s2[j+1]=p5;
			   double p6=v[j];v[j]=v[j+1];v[j+1]=p6;
			   char p7=level[j];level[j]=level[j+1];level[j+1]=p7;
            }
        }
    }
    //输出
    for(int i=0;i<N;i++){
        printf("学号:%d 姓名:%s 性别:%s 成绩1:%.2lf 成绩2:%.2lf 平均成绩:%.2lf 等级:%c\n",
               ID[i],name[i],sex[i],s1[i],s2[i],v[i],level[i]);
    }
    printf("重名有:%d 位",N-n);

    return 0;
}

结构体版

#include <cstdio>
#include <cstring>
using namespace std;
#define N 50
struct student{
    int ID;
    char name[10];
    char sex[10],level;
    double s1,s2;
    double v;
}stu[N];
int main() {
    int n=0;
    for(int i=0;i<N;i++){
        printf("请输入第%d个学生信息\n",i+1);
        scanf("%d %s %s %lf %lf",&stu[i].ID,stu[i].name,stu[i].sex,&stu[i].s1,&stu[i].s2);
        stu[i].v=(stu[i].s1+stu[i].s2)/2;
        switch ((int)stu[i].v/10) {
            case 9:stu[i].level='A';break;
            case 8:stu[i].level='B';break;
            case 7:stu[i].level='C';break;
            case 6:stu[i].level='D';break;
            default:stu[i].level='E';
        }
        int flag=1;
        for(int k=0;k<i;k++){
            if(strcmp(stu[i].name,stu[k].name)==0){
                flag=0;break;
            }
        }
        if(flag) n++;
    }
    printf("输入完毕\n");

    for(int i=0;i<N-1;i++){
        for(int j=0;j<N-1-i;j++){
            if(stu[j].v<stu[j+1].v){
                struct student p=stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=p;
            }
        }
    }
    for(int i=0;i<N;i++){
        printf("学号:%d 姓名:%s 性别:%s 成绩1:%.2lf 成绩2:%.2lf 平均成绩:%.2lf 等级:%c\n",
               stu[i].ID,stu[i].name,stu[i].sex,stu[i].s1,stu[i].s2,stu[i].v,stu[i].level);
    }
    printf("重名有:%d 位",N-n);


    return 0;
}

函数版

#include <cstdio>
#include <cstring>
using namespace std;
#define N 2
struct student{
    int ID;
    char name[10];
    char sex[10],level;
    double s1,s2;
    double v;
}stu[N];

void input();
void sort();
void show();

int main() {
    input();
    sort();
    show();
    return 0;
}

void input(){
	int n=0;
    for(int i=0;i<N;i++){
        printf("请输入第%d个学生信息\n",i+1);
        scanf("%d %s %s %lf %lf",&stu[i].ID,stu[i].name,stu[i].sex,&stu[i].s1,&stu[i].s2);
        stu[i].v=(stu[i].s1+stu[i].s2)/2;
        switch ((int)stu[i].v/10) {
            case 9:stu[i].level='A';break;
            case 8:stu[i].level='B';break;
            case 7:stu[i].level='C';break;
            case 6:stu[i].level='D';break;
            default:stu[i].level='E';
        }
        int flag=1;
        for(int k=0;k<i;k++){
            if(strcmp(stu[i].name,stu[k].name)==0){
                flag=0;break;
            }
        }
        if(flag) n++;
    }
    printf("输入完毕\n");
    printf("重名有:%d 位\n",N-n);
}
void sort(){
	for(int i=0;i<N-1;i++){
        for(int j=0;j<N-1-i;j++){
            if(stu[j].v<stu[j+1].v){
                struct student p=stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=p;
            }
        }
    }
}
void show(){
	 for(int i=0;i<N;i++){
        printf("学号:%d 姓名:%s 性别:%s 成绩1:%.2lf 成绩2:%.2lf 平均成绩:%.2lf 等级:%c\n",
               stu[i].ID,stu[i].name,stu[i].sex,stu[i].s1,stu[i].s2,stu[i].v,stu[i].level);
    }
}
  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值