c++用结构体定义一个

用结构体定义一个学生信息,包括姓名、学号、年龄、c语言课程成绩,有10个学生,要求:输入十个学生信息,求并输出平均分、最高分及学号、最低分及学号。


//写一个学生信息管理系统,实现增删查改,遍历:学号,姓名,性别,年龄,成绩
//往文件里面写,可以改
 
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
 
class studentsystem
{
    public:
        studentsystem(){}
        studentsystem(int number,char name[20],char gender[10],int age,int grade)
        {
            this->number = number;
            strcpy(this->name,name);
            strcpy(this->gender,gender);
            this->age = age;
            this->grade = grade;
        }
        void menu();
        void add();
        void find();
        void updat();
        void delet();
        void display();
 
    public:
        int number;//学号
        char name[20];//姓名
        char gender[10];//性别
        int age;//年龄
        int grade;//成绩
 
 
};
 
void studentsystem::menu()
{
    cout<<"***************************************"<<endl;
    cout<<"1.增加学生信息           2.查看学生信息"<<endl;
    cout<<"3.删除学生信息           4.修改学生信息"<<endl;
    cout<<"5.显示学生信息           6.退出学生系统"<<endl;
    cout<<"***************************************"<<endl;
}
 
void studentsystem::add()
{
    studentsystem s1;
    ofstream fout;
    fout.open("binary.dat", ios::binary |ios::app);//二进制写
    ofstream fout1;
    fout1.open("temp.dat", ios::binary |ios::app);//二进制写
    
    //fout.seekp(0,ios::end);
  
    cout<<fout.tellp()<<endl;
    while(1) 
    {   
        cout<<"请输入学生姓名:(输入’end‘退出添加学生信息)"<<endl;
        cin>>s1.name;
 
        if(strcmp(s1.name, "end") == 0)
        {
            break;
        }
 
        cout<<"请输入学生学号号:";
        cin>>s1.number;
      //  cout<<endl;
 
        cout<<"请输入学生学年龄:";
        cin>>s1.age;
        //cout<<endl;
 
        cout<<"请输入学生学性别:";
        cin>>s1.gender;
        //cout<<endl;
 
        cout<<"请输入学生成绩:";
        cin>>s1.grade;
        //cout<<endl;
       // cout<<s1.name<<s1.age<<endl;
        fout.write((char*)&s1,sizeof(studentsystem));
    }
 
    fout.close();
     fout1.close();
 
}
 
void studentsystem::find()
{
    studentsystem s1;
    ifstream fin;
    char s[20];
    int flag = 0;
    //fin.seekg(0,ios::beg);
    cout<<"请输入查找学生的姓名:";
    cin>>s;
    fin.open("binary.dat",ios::in | ios::binary);//二进制读
    
    while(fin.read((char*)&s1,sizeof(studentsystem)))
    {
        if(strcmp(s1.name,s) == 0)
        {
            cout<<s1.name<<" "<<s1.number<<" "<<s1.age<<" "<<s1.gender<<" "
            <<s1.grade<<endl;
            flag = 1;
            break;
        }
        
    }
 
    if(flag == 0)
    {
        cout<<"没有找到该学生信息"<<endl;
    }
    fin.close();
}
 
void studentsystem::updat()
{
    int flag = 0;
    char str[20];
 
    fstream fs("binary.dat",ios::in | ios:: out);
    fs.seekg(0,ios::end);//将读的光标移动到文件的末尾
 
    int num = fs.tellg() / sizeof(studentsystem);
   // cout<<num<<endl;
 
    fs.seekg(0,ios::beg);//读的光标移回开头
    int i = 0 ;
 
    studentsystem s;
 
    cout<<"请输入要修改信息的学生姓名:";
    cin>>str;
 
    while(i < num)
    {
        fs.read((char *)&s,sizeof(s));
        if(strcmp(s.name,str) == 0)//找到名字
        {
            cout<<"请输入修改后姓名:";
            cin>>s.name;
 
            cout<<"请输入修改后学号:";
            cin>>s.number;
        //  cout<<endl;
 
            cout<<"请输入修改后年龄:";
            cin>>s.age;
            //cout<<endl;
 
            cout<<"请输入修改后性别:";
            cin>>s.gender;
            //cout<<endl;
 
            cout<<"请输入修改后成绩:";
            cin>>s.grade;
            fs.seekp(sizeof(s)*i,ios::beg);
            fs.write((char *)&s,sizeof(s));
            flag = 1;
            break;
        }
 
        i++;
    }
 
    if(flag == 0)
    {
        cout<<"没有找到该学生信息"<<endl;
    }
 
    fs.close();
}
 
void studentsystem::display()
{
    studentsystem s1;
    ifstream fin;
    int flag = 0;
    //fin.seekg(0,ios::beg);
    
    fin.open("binary.dat",ios::in | ios::binary);//二进制读
    
    while(fin.read((char*)&s1,sizeof(studentsystem)))
    {
        cout<<s1.name<<" "<<s1.number<<" "<<s1.age<<" "<<s1.gender<<" "
            <<s1.grade<<endl;
 
        flag = 1;
    }
 
    if(flag == 0)
    {
        cout<<"无学生信息"<<endl;
    }
 
    fin.close();
}
 
void studentsystem::delet()
{
    int flag = 0;
    char str[20];
 
    fstream fs("binary.dat",ios::in | ios:: out);
    fstream fp("temp.dat",ios::in | ios:: out |ios::trunc);
    fs.seekg(0,ios::end);//将读的光标移动到文件的末尾
 
    int num = fs.tellg() / sizeof(studentsystem);
 
    fs.seekg(0,ios::beg);//读的光标移回开头
    fp.seekg(0,ios::beg);
    int i = 0 ;
 
    studentsystem s1;
 
    cout<<"请输入要删除的学生姓名:";
    cin>>str;
    //cout<<"num"<<num<<endl;
 
    while(i < num)
    {
        fs.read((char *)&s1,sizeof(s1));
        if(strcmp(s1.name,str) != 0)
        {
            
            //cout<<"s1"<<s1.name<<endl;
            fp.write((char *)&s1,sizeof(s1));
        }
        else
        {
            flag = 1;
        }
 
        i++;
       // cout<<"i"<<i<<endl;
 
    }
    
    fs.close();
 
 
    ofstream fout;
    fout.open("binary.dat", ios::binary |ios::out);//二进制写
 
    i = 0;
 
    if(flag == 0)
    {
        cout<<"没有找到该学生信息"<<endl;
    }
    else
    {
        //cout<<"L"<<endl;
        fp.seekg(0,ios::end);
        int num = fp.tellg() / sizeof(s1);
 
        //cout<<num<<endl<<i<<endl;
        fp.seekg(0,ios::beg);
        if(num == 0)
        {
            cout<<"无学生信息"<<endl;
        }
        else
        {
            while(i < num)
            {
                fp.read((char *)&s1,sizeof(s1));
              //  cout<<s1.name;
                fout.write((char *)&s1,sizeof(s1));
                i++;
                //cout<<"6";
            }
 
            cout<<"删除成功!"<<endl;  
        }
    }
 
    fout.close();
    fp.close();
}
 
int main()
{
    studentsystem s;
 
    int cmd;
    while(1)
    {
        s.menu();
        cmd = 0;
        cin>>cmd;
        switch(cmd)
        {
        case 1:s.add();
            break;
 
        case 2:s.find();
            break;
 
        case 3:s.delet();
            break;
 
        case 4:s.updat();
            break;
 
        case 5:s.display();
            break;
 
        case 6:exit(0);
            break;
        default:
            break;
        }
        
    }
    return 0;
};

#include "stdio.h"
int main()
{
struct
{
char name[10];//名字
int num;//学号
char sex[2];//性别
int age;//年龄
}student[10];
//printf("%d",sizeof(wchar_t));
int i;
for(i=0;i<10;i++)
{
printf("请输入第%d个学生的信息:名字,学号,性别和年龄:\n",i+1);
scanf("%s%d%s%d",student[i].name,&student[i].num,student[i].sex,&student[i].age);
}
printf("十个学生的信息如下:\n");
for(i=0;i<10;i++)
{
printf("姓名:%s\t学号:%d\t性别:%s\t年龄:%d\n",student[i].name,student[i].num,student[i].sex,student[i].age);
}
return 0;
}

 typedef struct student
    {
        string name;    //姓名
        int num;        //学号
        int age;        //年龄
        double score;   //c成绩

    }stu;

    stu Stu[10];
    for (int i = 0; i < 10; i++)
    {
        cin >> Stu[i].name;
        cin >> Stu[i].num;
        cin >> Stu[i].age;
        cin >> Stu[i].score;
    }
    double avg = 0;
    vector<double>v_score;
    vector<double>v_num;
    for (int i = 0; i < 10; ++i)
    {
        avg += Stu[i].score;
        v_score.push_back(Stu[i].score);
        v_num.push_back(Stu[i].num);
    }
    sort(v_score.begin(), v_score.end());
    avg /= 10;//平均分
    double max_score = v_score[0];//最高分
    double min_score = v_score[9];//最低分

可以试试这个功能不是很完善:

#include<iostream>
#include<string>

using namespace std;

#define MAX 5   //设置学生人数5

struct student {
    string name;
    int student_ID;
    int age;
    int c_score;
};
int main() {
    student score_list[MAX];  //学生结构的列表数组
    int avg, max, min;        //平均分、最高分、最低分变量
    int max_index, min_index; //最高分、最低分在数组中下标
    for (int i = 0; i < MAX; i++) {  //按提示输入单个学生信息回车下一个
        std::cout<<"请输入第"<<i+1<<"名学生姓名、学号、年龄及成绩:";
        std::cin>>score_list[i].name;
        std::cin >> score_list[i].student_ID;
        std::cin >> score_list[i].age;
        std::cin >> score_list[i].c_score;
        if (i == 0) {  //记录第一个学生成绩为变量初始化
            avg = score_list[i].c_score;
            max = score_list[i].c_score;
            max_index = i;
            min = score_list[i].c_score;
            min_index = i;
        }
        else {
            avg = avg + score_list[i].c_score;  //每次输入学生信息求和
            if (max < score_list[i].c_score) {  //比较并将最高分保存到max
                max = score_list[i].c_score;
                max_index = i;  //将最高分学生在数组中下标保存
            }
            if (min > score_list[i].c_score) {  //比较并将最高分保存到min
                min = score_list[i].c_score;
                min_index = i;  //将最低分学生在数组中下标保存
            }    
        }
    }
    std::cout<<"本次考试成绩平均分为:"<< avg/ MAX <<std::endl;
    std::cout << "本次考试成绩最高分为:"<<max
        << "分 学号为:" << score_list[max_index].student_ID<<std::endl;
    std::cout << "本次考试成绩最低分为:"<<min
        <<"分 学号为:"<<score_list[min_index].student_ID << std::endl;
    return 0;
}

可以自己设置人数:

img