用c++结构体来编程,跪求高手解答一道题,如下

实现简单的学生成绩管理系统。问题描述:编制一个统计学生考试分数的管理程序,设学生成绩以一个学生一个记录的形式存储,每位学生记录包含的信息有:姓名,学号和数学、英语、计算机三门功课的成绩。
基本要求:
(1) 从键盘输入20个学生的各项信息;
(2) 求出各门课程的总分,平均分;
(3) 按姓名寻找其记录并显示,如输入“张三”,即可输出该同学的学号和三门功课
的成绩;
(4) 按学号寻找其记录并显示,如输入“09001”,即可输出该同学的姓名和三门功
课的成绩;
(5) 浏览全部学生的各项信息;
(6) 按总分由高到低显示学生信息等
功能实现:
(1) 上述各功能请分别用函数实现;
(2) 输入输出要有必要的提示说明;
(3) 学生记录用结构体数组实现。如:
struct record
{
char name[20]; /* 姓名 */
char code[20]; /* 学号 */
int mathmark; /* 数学课程成绩 */
int englishmark; /* 英语课程成绩 */
int compmark; /* 计算机课程成绩 */
}stu[20];

第1个回答  推荐于2016-03-28
#include <iostream.h>
#include <string.h>
#include <iomanip.h>
#define N 20
struct student
{
char code[N];
char name[N];
int mathmark; // 数学课程成绩
int englishmark; // 英语课程成绩
int compmark;//计算机课程成绩
};
student stu[N];
void input()
{
cout<<"请输入学生信息"<<endl;
for (int i=0; i<N; i++)
{
cout<<"学号:";
cin>>stu[i].code;
}
for (i=0; i<N; i++)
{
cout<<"姓名:";
cin>>stu[i].name;
}
for (i=0; i<N; i++)
{
cout<<"数学:";
cin>>stu[i].mathmark;
}
for (i=0; i<N; i++)
{
cout<<"英语:";
cin>>stu[i].englishmark;
}
for (i=0; i<N; i++)
{
cout<<"计算机:";
cin>>stu[i].compmark;
}
cout<<"输入完毕!"<<endl;
}
void search()//查找
{
int op;
char names[N];
char codes[N];
char choice;
cout<<"1.以学号查找"<<endl;
cout<<"2.以姓名查找"<<endl;
cin>>op;
if (op==1)
{
int n=0;
cout<<"请输入你要查找的学生的学号"<<endl;
cin>>codes;
for (int i=0; i<N; i++)
if (strcmp(stu[i].code,codes)==0)
cout<<"学号:"<<stu[i].code<<" 姓名:"<<stu[i].name<<" 数学:"<<stu[i].mathmark<<"英语:"<<stu[i].englishmark<<"计算机:"<<stu[i].compmark<<endl;
n++;
if (n==0)
cout<<"没有该人的数据"<<endl;
cout<<"是否继续查找(是(y)/否(n))"<<endl;
cin>>choice;
if (choice=='y')
search();
else
cout<<"请输入您的操作"<<endl;
}
if (op==2)
{
int n=0;
cout<<"请输入你要查找的学生的姓名"<<endl;
cin>>names;
for (int i=0; i<N; i++)
if (strcmp(stu[i].name,names)==0)
cout<<"学号:"<<stu[i].code<<" 姓名:"<<stu[i].name<<" 数学:"<<stu[i].mathmark<<"英语:"<<stu[i].englishmark<<"stu[i].compmark"<<endl;
n++;
if (n==0)
cout<<"没有该人的数据"<<endl;
cout<<"是否继续查找(是(y)/否(n))"<<endl;
cin>>choice;
if (choice=='y')
search();
else
cout<<"请输入您的操作"<<endl;
}
}
void sort()//总分排序
{
int total[N];//总分
student temp;
for(int i=0; i<N; i++)
{
total[i] = stu[i].compmark+stu[i].englishmark+stu[i].mathmark;//求出总分
}
for (i=1; i<=N-1; i++)
for (int j=0; j<=N-i-1; j++)
if (total[j] < total[j+1])//冒泡排序
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
for (i=0; i<N; i++)
{
cout<<"学号"<<" "<<"姓名"<<" "<<"总分"<<endl;
cout<<stu[i].code<<" "<<stu[i].name<<" "<<total[i]<<endl;
}
}
void averagescore()
{
double mathaverages=0;//平均分
double englishaverages=0;
double compaverages=0;
int mathaverage=0;//平均分
int englishaverage=0;
int compaverage=0;

for (int i=0; i<N; i++)
{
mathaverage += (stu[i].mathmark);
englishaverage += (stu[i].englishmark);
compaverage += (stu[i].compmark);
}
mathaverages=mathaverage/N;
englishaverages=englishaverage/N;
compaverages=compaverage/N;
cout<<"数学:"<<mathaverages<<"英语:"<<englishaverages<<"计算机:"<<compaverages<<endl;
}
void show()//显示
{
for (int i=0; i<N; i++)
{
cout<<"学号:";
cout<<stu[i].code<<endl;
}
for (i=0; i<N; i++)
{
cout<<"姓名:";
cout<<stu[i].name<<endl;
}
for (i=0; i<N; i++)
{
cout<<"数学:";
cout<<stu[i].mathmark<<endl;
}
for (i=0; i<N; i++)
{
cout<<"英语:";
cout<<stu[i].englishmark<<endl;
}
for (i=0; i<N; i++)
{
cout<<"计算机:";
cout<<stu[i].compmark<<endl;
}
}
void menu()
{
cout<<"**学生管理系统**"<<endl;
cout<<"1.输入学生成绩"<<endl;
cout<<"2.显示学生成绩"<<endl;
cout<<"3.排序学生成绩"<<endl;
cout<<"4.查找学生成绩"<<endl;
cout<<"5.显示各科平均分"<<endl;
cout<<"0.退出系统"<<endl;
}
void main()
{
int op;
menu();
cout<<"请输入您的操作:"<<endl;
do
{
cin>>op;
switch (op)
{
case 1: input();break;
case 2: show();break;
case 3: sort();break;
case 4: search();break;
case 5: averagescore();break;
case 0: break;
}
}while (op);
}
//差不多了,大致的意思是这样的,你看还有什么不完善的地方可以自己看着加工一下。OK.....
//这代码敲的....多敲敲代码,不要ctrl+c,ctrl+v追问

那个总成绩排序的地方好像出错了,附上图文
不过还是非常感谢了,交个朋友吧,你的思路好清晰额,以后有什么问题希望还能交个朋友!
分奉上

本回答被提问者采纳
相似回答