64,636
社区成员
发帖
与我相关
我的任务
分享
//存在的问题,主要是在运行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);
}
//存在的问题,主要是在运行add函数时,总是出现错误,各位高手请看看是哪里出现错误了?小弟不胜感激了。