学生成绩管理(简单版)
学生成绩管理(简单版)
学生成绩管理系统(简单版)
要求:存储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);
}
}