读书人

大姐过来帮帮忙小弟的程序出有关问

发布时间: 2012-06-07 15:05:14 作者: rapoo

各位大哥,大姐过来帮帮忙,小弟的程序出问题了,还要交作业里,谢谢了,急回!!!
存在的问题,主要是在运行add函数时,总是出现错误,各位高手请看看是哪里出现错误了?小弟不胜感激了。
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
#define max 100
#define null 0
class student
{
public:
student *next;
public:
string name;
long num;
string nianji;
string major;
int x,y,z; //英语、网络、C语言
int zongfen;
int averge;
int pm;

void display()
{
cout<<"学号:"<<num<<"姓名:"<<name<<"级别:"<<nianji<<"专业:"<<major<<"英语:"<<x<<"网络:"<<y<<"c语言"<<z
<<"总分:"<<zongfen<<"平均分:"<<averge<<"排名:"<<pm<<endl;
}

student(long snum,string sname,string snianji,string smajor,int sx,int sy,int sz,int spm)
{
num=snum;
name=sname;
nianji=snianji;
major=smajor;
x=sx;
y=sy;
z=sz;
pm=spm;


}



};

class cla
{
public:
cla()
{
stu=0; //空地址。
sload(); //调用读取函数。

}
~cla()
{
student *p;
p=stu;
while(p)
{
p=p->next;
delete stu; //撤销空间。
stu=p;

}
stu=0;


}

void add(); //添加
void remove(); //删除
void xiugai(); //修改
void search(); //查询
void save(); //保存
void sload(); //读取
void scholar(); //奖学金评定

private:
student *stu; //头结点




};


void cla::add()
{
student *q;
string namel;
long numl;
string nianjil;
string majorl;
int xl,yl,zl;
int pml;
system("cls");

cout<<"\n 增加学生 \n"<<endl;
cout<<"请输入学生的(中间用空格间开)"<<endl;
cout<<"学号 姓名 年级 专业 英语 网络 C语言 成绩排名"<<endl;
cin>>numl>>namel>>majorl>>majorl>>xl>>yl>>zl>>pml;
//q=new student(namel,numl,majorl,xl,yl,zl,pml);//开辟一个存放类成员数据的空间。
q->next=0;
q->zongfen=xl+yl+zl;
q->averge=(xl+yl+zl)/3;

if(stu)
{
student *t; //定义对象指针。
t=stu; //把stu地址赋给t;
if(t->num==numl)
{
cout<<"学号已存在,请重新输入"<<endl;
return;
}
while(t->next) //指向下一结点
{

if(t->num==numl)
{
cout<<"学号已存在,请重新输入"<<endl;
return;
}
t=t->next; //指向下一结点

}
t->next=q; //把新开辟的空间赋给t指向的下一结点。

}
else
{
stu=q;

}


cout<<"输入完毕"<<endl;


}

void cla::remove()
{
system("cls");
int numl;
cout<<"\n 删除学生信息 \n"<<endl;
cin>>numl;
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==numl)
break;
else
{
p2=p1;
p1=p1->next;
}

} //找到删除结点。

if(p1!=null) //如找到结点,就删除。
{
cout<<"确定要删除吗?[Y/N]"<<endl;
char c;
cin>>c;
if(toupper(c)!='Y') //大小写字母转换
return;
if(p1==stu) //若要删除的是第一个结点。
{


stu=p1->next;
delete p1;

}
else //若要删除的是后续结点。
{
p2->next=p1->next;
delete p1;


}
cout<<"找到学号为"<<numl<<"的学生,并删除"<<endl;

}
else
cout<<"未找到想要删除的学生"<<endl;

}

void cla::xiugai()
{
system("cls");
long numl;
cout<<" 修改学生信息 "<<endl;
cout<<" 输入修改学生的学号 "<<endl;
cin>>numl;

student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==numl)
break;
else
{
p2=p1;
p1=p1->next;

}

}

if(p1!=null)
{
cout<<"学号是"<<numl<<"的信息"<<endl;
cout<<"姓名 "<<p1->name<<" 英语"<<p1->x<<" 网络"<<p1->y<<" C语言"<<p1->z<<endl;
cout<<"请输入修改后的信息: 姓名 英语 网络 C语言"<<endl;
cin>>p1->name>>p1->x>>p1->y>>p1->z;
p1->zongfen=p1->x+p1->y+p1->z;
cout<<"修改成功"<<endl;



}
else
cout<<"未找到"<<endl;


}

void cla::search()
{
system("cls");
cout<<" 查询学生信息 "<<endl;
cout<<" 输入查询的方式 "<<endl;
cout<<"1按学号查找 "<<endl;
cout<<"2按姓名查找 "<<endl;
cout<<"3返回 "<<endl;
char c;
cin>>c;
switch(c)
{
case'1':
{
long numl;
cout<<"要查询的学号"<<endl;
cin>>numl;
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==numl)
break;
else
{
p2=p1;
p1=p1->next;
}

}
if(p1!=null)
{

cout<<"学号是"<<numl<<"的信息"<<endl;
cout<<"学号:"<<p1->num<<p1->name<<"级别:"<<p1->nianji<<"专业:"<<p1->major<<"英语:"<<p1->x<<"网络:"<<p1->y<<"c语言"<<p1->z
<<"总分:"<<p1->zongfen<<"平均分:"<<p1->averge<<"排名:"<<p1->pm<<endl;
cout<<"查询完毕"<<endl;

}
else
cout<<"未找到"<<endl;
break;

}
case'2':
{
string namel;
cout<<"要查询的学生姓名"<<endl;
cin>>namel;
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->name==namel)
break;
else
{
p2=p1;
p1=p1->next;
}

}
if(p1!=null)
{

cout<<namel<<"的信息"<<endl;
cout<<"学号:"<<p1->num<<"姓名:"<<p1->name<<"级别:"<<p1->nianji<<"专业:"<<p1->major<<"英语:"<<p1->x<<"网络:"<<p1->y<<"c语言"<<p1->z
<<"总分:"<<p1->zongfen<<"平均分:"<<p1->averge<<"排名:"<<p1->pm<<endl;


cout<<"查询完毕"<<endl;

}
else
cout<<"未找到"<<endl;
break;

}

case'3':return;

}

}

void cla::save()
{
system("cls");
char c;
cout<<"\n保存学生奖学金结果(将覆盖原文件),是否继续?[Y/N]"<<endl;
cin>>c;
if(toupper(c)!='Y') return;
ofstream tfile("data.txt",ios::binary);
student *p=stu;
while(p)
{
tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;
tfile<<endl;
p=p->next;


}
tfile.close();
cout<<"保存完毕 "<<endl;





}

void cla::sload()
{
student *p;
p=stu;
while(p)
{
stu=p->next;
delete p;
p=stu;

}

ifstream tfile("data.txt",ios::binary);
string namel;
long numl;
string nianjil;
string majorl;
int xl,yl,zl;
int pml;
tfile>>namel>>numl>>nianjil>>majorl>>xl>>yl>>zl>>pml;
while(tfile.good())
{ //创建学生结点
student *s;
s=stu;
//s=new student(namel,numl,nianjil,majorl,xl,yl,zl,pml);
s->next=0;
s->zongfen=xl+yl+zl;
if(stu) //若已存在结点
{
student *p2;
p2=stu;
while(p2->next) //查找尾结点
{
p2=p2->next;
}

p2->next=s; //连接

}
else //若不存在结点。
{

stu=s; //连接


}

tfile>>namel>>numl>>nianjil>>majorl>>xl>>yl>>zl;

}
tfile.close();
cout<<"\n欢迎使用郑州航院奖学金评定系统\n"<<endl;


}

void cla::scholar()
{
system("cls"); //清除屏幕上的信息。
long numl;
cout<<" 郑州航院学生奖学金评定 "<<endl;
cout<<" 输入要评定奖学金的学号 "<<endl;
cin>>numl;
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==numl)
break;
else
{
p2=p1;
p1=p1->next;
}


}

if(p1!=null)
{
cout<<"输出学号"<<numl<<"的奖学金评定结果"<<endl;
if(p1->pm>=max*0.3)
cout<<"一等奖学金"<<endl;
else if(p1->pm>=max*0.17&&p1->pm<max*0.3)
cout<<"二等奖学金"<<endl;
else if(p1->pm>=max*0.3&&p1->pm<max*0.17)
cout<<"三等奖学金"<<endl;
else
cout<<"很可惜你未能得到奖学金"<<endl;

}


}

void main()
{
char c;
cla a;
do
{


cout<<"********欢迎使用郑州航院奖学金评定系统**********"<<endl;
cout<<"1......增加学生信息"<<endl;
cout<<"2......删除学生信息"<<endl;
cout<<"3......修改学生信息"<<endl;
cout<<"4......学生奖学金评定"<<endl;
cout<<"5......查询学生信息"<<endl;
cout<<"6......保存学生信息"<<endl;
cout<<"7......读取学生信息"<<endl;
cout<<"8......退出"<<endl;
cout<<"*********************"<<endl;
cout<<"请选择1-8:"<<endl;
cin>>c;
switch(c)
{
case'1':a.add();break;
case'2':a.remove();break;
case'3':a.xiugai();break;
case'4':a.scholar();break;
case'5':a.search();break;
case'6':a.save();break;
case'7':a.sload();break;
}
}while(c!=8);

}
//小弟我的积分实在是不够用了,对不住大哥大姐们了。

[解决办法]

C/C++ code

[解决办法]
C/C++ code
//存在的问题,主要是在运行add函数时,总是出现错误,各位高手请看看是哪里出现错误了?小弟不胜感激了。#include <iostream>#include <iomanip>#include <fstream>#include <string>using namespace std;#define max 100#define null 0class student  {public:    student *next;public:    string name;    long num;    string nianji;    string major;    int x,y,z; //英语、网络、C语言    int zongfen;    int averge;    int pm;        void display()    {        cout<<"学号:"<<num<<"姓名:"<<name<<"级别:"<<nianji<<"专业:"<<major<<"英语:"<<x<<"网络:"<<y<<"c语言"<<z            <<"总分:"<<zongfen<<"平均分:"<<averge<<"排名:"<<pm<<endl;    }        student(long snum,string sname,string snianji,string smajor,int sx,int sy,int sz,int spm)    {        num=snum;        name=sname;        nianji=snianji;        major=smajor;        x=sx;        y=sy;        z=sz;        pm=spm;            }            };class cla{public:    cla()    {        stu=0; //空地址。        sload(); //调用读取函数。            }    ~cla()    {        student *p;        p=stu;        while(p)        {            p=p->next;            delete stu; //撤销空间。            stu=p;                       }        stu=0;                    }        void add(); //添加    void remove(); //删除    void xiugai(); //修改    void search(); //查询    void save(); //保存    void sload(); //读取    void scholar(); //奖学金评定    private:    student *stu; //头结点                };void cla::add(){    student *q;    string namel;    long numl;    string nianjil;    string majorl;    int xl,yl,zl;    int pml;    system("cls");    fflush(stdin);    cout<<"\n 增加学生 \n"<<endl;    cout<<"请输入学生的(中间用空格间开)"<<endl;    cout<<"学号 姓名 年级 专业 英语 网络 C语言 成绩排名"<<endl;    cin>>numl>>namel>>nianjil>>majorl>>xl>>yl>>zl>>pml;    q=new student(numl,namel,nianjil,majorl,xl,yl,zl,pml);//开辟一个存放类成员数据的空间。    q->next=0;      q->zongfen=xl+yl+zl;    q->averge=(xl+yl+zl)/3;        if(stu)    {        student *t; //定义对象指针。        t=stu; //把stu地址赋给t;        if(t->num==numl)        {            cout<<"学号已存在,请重新输入"<<endl;            return;        }        while(t->next) //指向下一结点        {                        if(t->num==numl)            {                cout<<"学号已存在,请重新输入"<<endl;                return;            }            t=t->next; //指向下一结点                    }        t->next=q; //把新开辟的空间赋给t指向的下一结点。            }    else    {        stu=q;            }            cout<<"输入完毕"<<endl;        }void cla::remove(){    system("cls");    fflush(stdin);    int numl;    cout<<"\n 删除学生信息 \n"<<endl;    cin>>numl;    student *p1,*p2;    p1=stu;    while(p1)    {        if(p1->num==numl)            break;        else        {            p2=p1;            p1=p1->next;        }            } //找到删除结点。        if(p1!=null) //如找到结点,就删除。    {        cout<<"确定要删除吗?[Y/N]"<<endl;        char c;        cin>>c;        if(toupper(c)!='Y') //大小写字母转换            return;        if(p1==stu) //若要删除的是第一个结点。        {            stu=p1->next;            delete p1;                    }        else //若要删除的是后续结点。        {            p2->next=p1->next;            delete p1;                                }        cout<<"找到学号为"<<numl<<"的学生,并删除"<<endl;            }    else          cout<<"未找到想要删除的学生"<<endl;    }void cla::xiugai(){    system("cls");    fflush(stdin);    long numl;    cout<<" 修改学生信息 "<<endl;    cout<<" 输入修改学生的学号 "<<endl;    cin>>numl;        student *p1,*p2;    p1=stu;    while(p1)    {        if(p1->num==numl)            break;        else        {            p2=p1;            p1=p1->next;                    }            }        if(p1!=null)    {        cout<<"学号是"<<numl<<"的信息"<<endl;        cout<<"姓名 "<<p1->name<<" 英语"<<p1->x<<" 网络"<<p1->y<<" C语言"<<p1->z<<endl;        cout<<"请输入修改后的信息: 姓名 英语 网络 C语言"<<endl;        cin>>p1->name>>p1->x>>p1->y>>p1->z;        p1->zongfen=p1->x+p1->y+p1->z;        cout<<"修改成功"<<endl;                            }    else        cout<<"未找到"<<endl;        }void cla::search(){    system("cls");    cout<<" 查询学生信息 "<<endl;    cout<<" 输入查询的方式 "<<endl;    cout<<"1按学号查找 "<<endl;    cout<<"2按姓名查找 "<<endl;    cout<<"3返回 "<<endl;    fflush(stdin);    char c;    cin>>c;    switch(c)    {    case'1':        {            long numl;            cout<<"要查询的学号"<<endl;            cin>>numl;            student *p1,*p2;            p1=stu;            while(p1)            {                if(p1->num==numl)                    break;                else                {                    p2=p1;                    p1=p1->next;                }                            }            if(p1!=null)            {                                cout<<"学号是"<<numl<<"的信息"<<endl;                cout<<"学号:"<<p1->num<<p1->name<<"级别:"<<p1->nianji<<"专业:"<<p1->major<<"英语:"<<p1->x<<"网络:"<<p1->y<<"c语言"<<p1->z                    <<"总分:"<<p1->zongfen<<"平均分:"<<p1->averge<<"排名:"<<p1->pm<<endl;                cout<<"查询完毕"<<endl;                            }            else                cout<<"未找到"<<endl;            break;                    }    case'2':        {            string namel;            cout<<"要查询的学生姓名"<<endl;            cin>>namel;            student *p1,*p2;            p1=stu;            while(p1)            {                if(p1->name==namel)                    break;                else                {                    p2=p1;                    p1=p1->next;                }                            }            if(p1!=null)            {                                cout<<namel<<"的信息"<<endl;                cout<<"学号:"<<p1->num<<"姓名:"<<p1->name<<"级别:"<<p1->nianji<<"专业:"<<p1->major<<"英语:"<<p1->x<<"网络:"<<p1->y<<"c语言"<<p1->z                    <<"总分:"<<p1->zongfen<<"平均分:"<<p1->averge<<"排名:"<<p1->pm<<endl;                cout<<"查询完毕"<<endl;                            }            else                cout<<"未找到"<<endl;            break;                    }            case'3':return;            }    }void cla::save(){    system("cls");    fflush(stdin);    char c;    cout<<"\n保存学生奖学金结果(将覆盖原文件),是否继续?[Y/N]"<<endl;    cin>>c;    if(toupper(c)!='Y') return;    ofstream tfile("data.txt",ios::binary);    student *p=stu;    while(p)    {        tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;        tfile<<endl;        p=p->next;                    }    tfile.close();    cout<<"保存完毕 "<<endl;                    }void cla::sload(){    student *p;    p=stu;    while(p)    {        stu=p->next;        delete p;        p=stu;            }        ifstream tfile("data.txt",ios::binary);    string namel;    long numl;    string nianjil;    string majorl;    int xl,yl,zl;    int pml;    tfile>>namel>>numl>>nianjil>>majorl>>xl>>yl>>zl>>pml;    while(tfile.good())    { //创建学生结点        student *s;        s=stu;        //s=new student(namel,numl,nianjil,majorl,xl,yl,zl,pml);        s->next=0;        s->zongfen=xl+yl+zl;        if(stu) //若已存在结点        {            student *p2;            p2=stu;            while(p2->next) //查找尾结点            {                p2=p2->next;            }                        p2->next=s; //连接                    }          else //若不存在结点。        {                        stu=s; //连接                                }                tfile>>namel>>numl>>nianjil>>majorl>>xl>>yl>>zl;            }    tfile.close();    cout<<"\n欢迎使用郑州航院奖学金评定系统\n"<<endl;        }void cla::scholar(){    system("cls"); //清除屏幕上的信息。    fflush(stdin);    long numl;    cout<<" 郑州航院学生奖学金评定 "<<endl;    cout<<" 输入要评定奖学金的学号 "<<endl;    cin>>numl;    student *p1,*p2;    p1=stu;    while(p1)    {        if(p1->num==numl)            break;        else        {            p2=p1;            p1=p1->next;           }                       }           if(p1!=null)    {        cout<<"输出学号"<<numl<<"的奖学金评定结果"<<endl;        if(p1->pm>=max*0.3)            cout<<"一等奖学金"<<endl;        else if(p1->pm>=max*0.17&&p1->pm<max*0.3)            cout<<"二等奖学金"<<endl;        else if(p1->pm>=max*0.3&&p1->pm<max*0.17)            cout<<"三等奖学金"<<endl;        else            cout<<"很可惜你未能得到奖学金"<<endl;               }          }  void main(){    char c;    cla a;    do      {        cout<<"********欢迎使用郑州航院奖学金评定系统**********"<<endl;        cout<<"1......增加学生信息"<<endl;        cout<<"2......删除学生信息"<<endl;        cout<<"3......修改学生信息"<<endl;        cout<<"4......学生奖学金评定"<<endl;        cout<<"5......查询学生信息"<<endl;        cout<<"6......保存学生信息"<<endl;        cout<<"7......读取学生信息"<<endl;        cout<<"8......退出"<<endl;        cout<<"*********************"<<endl;        cout<<"请选择1-8:"<<endl;        cin>>c;        switch(c)        {        case'1':a.add();break;        case'2':a.remove();break;        case'3':a.xiugai();break;        case'4':a.scholar();break;        case'5':a.search();break;        case'6':a.save();break;        case'7':a.sload();break;        }    }while(c!=8);    } 

读书人网 >C++

热点推荐