注册 登录
编程论坛 C++教室

自己写的一个简单学生信息管理,高手可以给我看看哪里出错了吗?

小俎俎 发布于 2013-07-31 09:41, 691 次点击
程序代码:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

class Student{
private:
    string NUM;
    string NAME;
    double SCORE;
    friend void OUTPUT();
public:
    Student(){}
    Student(string num,string name,double score){
        NUM = num;
        NAME = name;
        SCORE = score;
    }
    void setStudent(string num,string name,double score){
        NUM = num;
        NAME = name;
        SCORE = score;
    }
    void display(){
        cout<<NUM<<"\t"<<NAME<<"\t"<<SCORE<<endl;
    }
    double getSCORE(){return SCORE;}
    string getNUM(){return NUM;}
};
void WELCOM(){
    cout<<"***************************************"<<endl;
    cout<<"***************************************"<<endl;
    cout<<"**                                   **"<<endl;
    cout<<"**                                   **"<<endl;
    cout<<"**-------------欢迎使用--------------**"<<endl;
    cout<<"**                                   **"<<endl;
    cout<<"**                                   **"<<endl;
    cout<<"***************************************"<<endl;
    cout<<"***************************************"<<endl;
    cout<<"添加学生信息----add"<<endl;
    cout<<"查看学生信息----look"<<endl;
    cout<<"退出系统----exit"<<endl;
}
void INPUT(){
    int n;
    string num,name;
    double score;
    cout<<"请输入这次要存入学生的人数:";
    cin>>n;
    Student stu[n];
    ofstream ofile("student.dat",ios::app|ios::binary);
    ofile.seekp(0,ios::end);
    for(int i=0;i<n;i++){
            cout<<"编号:";cin>>num;
            cout<<"姓名:";cin>>name;
            cout<<"成绩:";cin>>score;
        stu[i].setStudent(num,name,score);
        ofile.write((char *)&stu[i],sizeof(stu[i]));
    }
    cout<<"已存入这"<<n<<"个学生的信息,请继续操作..."<<endl;
    ofile.close();
}
void OUTPUT(){
    char bol;
    string num;
    Student temp;
    ifstream ifile("student.dat",ios::in|ios::binary);
    ifile.seekg(0,ios::beg);
    cout<<"按编号查询(f)或显示全部(a)"<<endl;
    cin>>bol;
    if(bol=='f'){
        cout<<"请输入学生编号:";
        cin>>num;
        ifile.read((char *)&temp,sizeof(temp));
        while(!ifile.eof()){
            if(temp.NUM==num){temp.display();}
            ifile.read((char *)&temp,sizeof(temp));
        }
    }
    else if(bol=='a'){
        ifile.read((char *)&temp,sizeof(temp));
        cout<<"1"<<endl;
        temp.display();
        cout<<"2"<<endl;
        while(!ifile.eof()){
            temp.display();
            ifile.read((char *)&temp,sizeof(temp));
        }
    }
    ifile.close();
}
int main(){
    WELCOM();
    bool Judge=true;
    string Cal;
    while(Judge){
        cin>>Cal;
        if(Cal=="add"){INPUT();}
        else if(Cal=="look"){OUTPUT();}
        else if(Cal=="exit"){Judge=false;}
    }
    return 0;
}



代码如上,觉得是函数OUTPUT出了错,但是找了好久没找到错误。
错误表现为当输出学生信息时显示程序停止运行!我觉得最大的可能是ifile.read()并没有读出学生信息temp,但是,read()函数并没有错误!
理想状态下 输入look后再输入a显示存入的全部学生的信息,比如
输入a回车
101 张三 96
102 李四 97
103 王五 99
但错误状态为
输入a回车
出来对话框:程序停止运行
谢谢楼下的提醒...

[ 本帖最后由 小俎俎 于 2013-7-31 10:51 编辑 ]
7 回复
#2
rjsp2013-07-31 10:08
你得告诉别人哪里出错了,也就是你得描述一下你所谓的错误现象。
#3
peach54602013-07-31 10:38
回复 2楼 rjsp
他没听懂...

LZ:r同学问你的是,错误现象是什么?
比如,你写程序,是个加法程序
你可以描述现象为,理想状态下,输入1和1,返回2
错误现象,输入1和1返回3

然后如果你懂的自己分析的话,可以除了错误现象,再提供自我描述,比如说你觉得可能是哪个if或者哪个for有问题...或者哪个函数有问题...

[ 本帖最后由 peach5460 于 2013-7-31 10:40 编辑 ]
#4
小俎俎2013-07-31 10:47
回复 2楼 rjsp
当输出学生信息时程序停止运行了就。
#5
peach54602013-07-31 11:30
student.dat
路径不对,打不开所以抛异常退出了吧
#6
peach54602013-07-31 11:31
另外,这代码编不过啊,数组不能用变量声明大小
#7
小俎俎2013-07-31 11:42
回复 5楼 peach5460
"student.dat"没有路径啊,直接存在源程序的目录!!!
#8
小俎俎2013-07-31 11:44
回复 6楼 peach5460
可能不符合语法规范,我在改改语法上的错误,但是在 codeblocks中我编译过了,我觉得问题可能是OUTPUT()这个函数中!!!
1