各位大哥,大姐过来帮帮忙,小弟的程序出问题了,还要交作业里,谢谢了,急回!!!

浮生如梦VIP 2012-05-26 07:47:36
存在的问题,主要是在运行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);

}
//小弟我的积分实在是不够用了,对不住大哥大姐们了。
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
浮生如梦VIP 2012-05-27
  • 打赏
  • 举报
回复
//引用二楼、三楼的回复,我按你的修改后的程序进行调试了,成功了,但是有两个子函数的功能没有实现,一个是读取函数,一个是奖学金评定,另外,我又增加了一个排序函数,但是却没有起到任何效果,请高手们指教。小弟不胜感激了!!!等着交作业,急回!!!!



#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(); //奖学金评定
void sort(); //按总分排序

private:
student *stu; //头结点




};

void cla::sort()
{
student *p,*q;
int n=0;
p=stu;
while(p)
{
p=p->next;
n++;
}
p=q=stu;
for(int i=0;i<n;i++)
{
while(p)
{
if(p->zongfen<p->next->zongfen)
{
p->pm=p->pm+1;p->next->pm=p->next->pm-1;
q=p;p=q->next;p->next=q;
}

q=p->next;
p=p->next;

}

}

}

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;

cla::sort();


}

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.03)
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;

}


}

int 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);

return 1;

}

浮生如梦VIP 2012-05-27
  • 打赏
  • 举报
回复
还有我发的这个程序,怎么在读取函数的时候失败呢?另外怎么实现按总成绩的排序呢?进而实现奖学金的评定呢?谢谢了!
te_esperare 2012-05-26
  • 打赏
  • 举报
回复
so long ```
bobowahaha 2012-05-26
  • 打赏
  • 举报
回复
水平有限 你那代码吓倒好多人
bsnry 2012-05-26
  • 打赏
  • 举报
回复
lz 这代码太长了吧

無_1024 2012-05-26
  • 打赏
  • 举报
回复

//存在的问题,主要是在运行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");
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);

}


無_1024 2012-05-26
  • 打赏
  • 举报
回复


//存在的问题,主要是在运行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>>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");
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);

}

//再试一试
xinxianquan222 2012-05-26
  • 打赏
  • 举报
回复
add这个函数不在cla里边吧,实现函数的时候不要void cla::add()
,要不就把add放到cla里边去

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧