各位大哥,大姐过来帮帮忙,小弟的程序出问题了,还要交作业里,谢谢了,急回!!!
存在的问题,主要是在运行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); }