已经实现的功能

  • seek()查找功能
  • modify()修改信息
  • insert()插入学生信息
  • del()删除学生信息
  • display()显示所有学生信息
  • save()将学生信息保存到student.txt文件中
  • refresh()刷新学生信息

具体实现:

这里建立Student类来存储学生所拥有的多个属性,并且定义成员方法insert(),当插入新的学生时,调用该方法来输入新增学生的各个属性。
查找功能:
seek() 查找功能分为学号和姓名查询,用户选择之后,根据用户输入遍历定义的学生对象数组,查找有无此学生,如果有,打印该学生所有属性信息:

void seek() /*查找*/
{
    int i,item,flag;
    string s1; 
    printf("------------------\n");
    printf("-----1.按学号查询-----\n");
    printf("-----2.按姓名查询-----\n");
    printf("-----3.退出本菜单-----\n");
    printf("------------------\n");
    while(1)
    {
        printf("请选择子菜单编号:");   //选择功能
        scanf("%d",&item);
        flag=0;
        switch(item)
        {
        case 1:
            printf("请输入要查询的学生的学号:\n");
            cin>>s1;
            for(i=1;i<=n;i++)          //遍历学生对象数据的学号属性
                if(stu[i].num==s1)     //如果存在
                {
                    flag=1;
                    printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n");  //打印属性信息 
                    printf("--------------------------------------------------------------------\n");
                    cout<<stu[i].num<<" "<<stu[i].name<<"\t"<<stu[i].age<<"\t"<<stu[i].sex<<"\t"<<stu[i].score[0]<<"\t"<<stu[i].score[1]<<"\t "<<stu[i].score[2];
                }
                if(0==flag)
                    printf("该学号不存在!\n"); break;
        case 2:
            printf("请输入要查询的学生的姓名:\n");
            scanf("%s",s1);
            for(i=1;i<=n;i++)          //遍历学生对象数据的学号属性
                if(stu[i].name==s1)    //如果存在
                {
                    flag=1;
                    printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n");             
                    printf("--------------------------------------------------------------------\n");
                    cout<<stu[i].num<<" "<<stu[i].name<<"\t"<<stu[i].age<<"\t"<<stu[i].sex<<"\t"<<stu[i].score[0]<<"\t"<<stu[i].score[1]<<"\t "<<stu[i].score[2];
                }
                    if(0==flag)
                        printf("该姓名不存在!\n"); break;
        case 3:return;
        default:printf("请在1-3之间选择\n");
        }
    }
} 

修改信息功能:
修改信息功能是根据用户输入信息进行查找,如果查找存在该学生,便让用户选择修改该学生的哪一条信息。

void modify()             //修改信息
{
    int i,item,temp;
    string sex1,s1,s2;    // 以姓名和学号最长长度+1为准
    float score1;
    printf("请输入要要修改的学生的学号:\n");
    scanf("%s",s1);
    for(i=1;i<=n;i++)
        if(stu[i].num==s1)    //查找是否存在用户输入的学号
            temp=i;
        printf("------------------\n");
        printf("1.修改姓名\n");
        printf("2.修改年龄\n");
        printf("3.修改性别\n");
        printf("4.修改C语言成绩\n");
        printf("5.修改高等数学成绩\n");
        printf("6.修改大学英语成绩\n");
        printf("7.退出本菜单\n");
        printf("------------------\n");
        while(1)
        {
            printf("请选择子菜单编号:");   //选择要修改的属性信息
            scanf("%d",&item);
            switch(item)
            {
            case 1:
                printf("请输入新的姓名:\n");
                scanf("%s",s2);
                stu[temp].name==s2; break;
            case 2:
                printf("请输入新的年龄:\n");
                scanf("%d",stu[temp].age);break;
            case 3:
                printf("请输入新的性别:\n");
                scanf("%s",&sex1);
                stu[temp].sex==sex1; break;
            case 4:
                printf("请输入新的C语言成绩:\n");
                scanf("%f",&score1);
                stu[temp].score[0]=score1; break;
            case 5:
                printf("请输入新的高等数学成绩:\n");
                scanf("%f",&score1);
                stu[temp].score[1]=score1; break;
            case 6:
                printf("请输入新的大学英语成绩:\n");
                scanf("%f",&score1);
                stu[temp].score[2]=score1; break;
            case 7: return;
            default:printf("请在1-7之间选择\n");
            }
        }
} 

插入学生信息功能:
insert()我选择定义在函数内部,当用户选择新增学生信息时,便创建一个学生类对象并且调用insert()方法,让用户输入新增学生的属性信息。新增学生的属性信息均由用户输入。

void insert()     /* 插入函数*/
{
    cout<<"请输入学生的学号: ";
    cin>>num;
    cout<<"请输入学生的姓名: ";
    cin>>name;
    cout<<"请输入学生的年龄: ";
    cin>>age;
    cout<<"请输入学生性别: ";
    cin>>sex;
    cout<<"请输入学生的C语言成绩:";
    cin>>score[0];
    cout<<"请输入学生高等数学成绩: ";
    cin>>score[1];
    cout<<"请输入学生的大学英语成绩: ";
    cin>>score[2];
}

删除学生信息功能:
用户想要删除的学生,如果存在该学生,便将该学生后面的学生都前移一位,直接替换掉该学生的信息,即从学生对象数组中删除。


void del()            //完成删除学生信息功能
{
    int i,j,flag=0;
    string s1;
    printf("请输入要删除学生的学号:\n");  //输入学号搜索
    scanf("%s",s1);
    for(i=1;i<=n;i++)                     //遍历学生对象数组
        if(stu[i].num==s1)
        {
            flag=1;
            for(j=i;j<n-1;j++)            //循环将后一个前移,将当前学生信息直接删除
                stu[j].num=stu[j+1].num;
                stu[j].name=stu[j+1].name;
                stu[j].age=stu[j+1].age;    
                stu[j].sex=stu[j+1].sex;    
                stu[j].score[0]=stu[j+1].score[0];
                stu[j].score[1]=stu[j+1].score[1];
                stu[j].score[2]=stu[j+1].score[2];

        }
        if(flag==0)
            printf("该学号不存在!\n");
        if(flag==1)
        {
            printf("删除成功,显示结果请选择菜单\n");
            n--;
        }
}

显示学生信息功能:
直接将学生类对象数组里的多有信息按照固定格式循环打印即可:

void display()        //将学生信息显示出来
{
    int i;
    printf("共有%d位学生的信息:\n",n);
    if(0!=n)
    {
        printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n");                
        printf("--------------------------------------------------------------------\n");
        for(i=1;i<=n;i++)
        { 
            cout<<stu[i].num<<"  "<<stu[i].name<<"    "<<stu[i].age<<"\t   "<<stu[i].sex<<"\t"<<stu[i].score[0]<<"\t   "<<stu[i].score[1]<<"\t       "<<stu[i].score[2];
        }
    }
} 

刷新学生信息功能:

void refresh()
{
    ifstream infile("student.txt",ios::in);
    int i =1;
    string temp[4];
    if(!infile.is_open())
    {
        cout<<"\n打开student.txt文件失败!\n";
    }
    while(!infile.eof())               //n为当前学生数,循环将所有学生信息写入文件
    {
        infile>>stu[i].num>>stu[i].name>>stu[i].age>>stu[i].sex>>stu[i].score[0]>>stu[i].score[1]>>stu[i].score[2]>>temp[1]>>temp[2]>>temp[3]>>temp[0];
        i++;
        n=i;
        if(infile.fail())
        {
            break;
        }
        //fprintf(fp,"%f\n",stu[i].score[2]);
    }
    infile.close();
}

保存学生信息功能:

void save()   //添加将学生信息保存至文件
{
    //FILE *fp;
    ofstream outfile("student.txt",ios::app);
    int i;
//  fp = fopen("student.txt","a"); //打开文件
    if(!outfile.is_open())              //如果打开失败        
    {
        printf("\n打开student.txt文件失败!\n");
    }
    for (i=1;i<=n;i++) //n为当前学生数,循环将所有学生信息写入文件
    {
        outfile<<"\n"<<stu[i].num<<" "<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].sex<<" "<<stu[i].score[0]<<" "<<stu[i].score[1]<<" "<<stu[i].score[2];
        //fprintf(fp,"%f\n",stu[i].score[2]);
    }
    outfile.close();
}