一个学生成绩管理系统 有点问题 大家指点指点
/*
该系统主要处理学生的成绩信息。
2)学生信息主要包括:学号、班级、姓名、科目1、科目2、科目3等内容。
3)完成以下的操作:实现成绩信息的添加、修改、删除和查询,可以计算每个学生的平均成绩及各科目的平均成绩,将学生信息保存为文件。
提示:
1)建立学生类
2)学生信息的初始化
3)学生信息的添加、修改、删除、查找
4)学生信息的输出
5)对学生信息按学号、成绩排序
6)计算一门课的平均分和总分
*/
#include<iostream> //输入输出头文件
#include<string> //字符串头文件
#include<fstream> //输出文件
using namespace std;
class student //学生类
{
public:
void student_information(); //学生信息的初始化
//~student();
int getstudent_number(); //得到学生学号
string getname(); //得到学生姓名
int getsubject1(); //第一个科目
int getsubject2(); //第二个科目
int getsubject3(); //第三个科目
int getsum1(); //第四个科目
void show(); //输出学生姓名、学号、成绩
void showall();
int scount();
private:
int student_number;
string clas;
string name;
int subject1;
int subject2;
int subject3;
float sum1;
float average1;
static int count;
static float sum;
static float ave;
};
void student::student_information()//输入学生信息
{
cout<<"输入学号:";
cin>>student_number;
cout<<"输入姓名:";
cin>>name;
cout<<"输入班级:";
cin>>clas;
cout<<"科目1:";
cin>>subject1;
cout<<"科目2:";
cin>>subject2;
cout<<"科目3:";
cin>>subject3;
++count;
sum1=subject1+subject2+subject3; //求和
average1=sum/3; //求平均值
sum=sum+sum1;
}
int student::getstudent_number() //获取学生学号
{
return student_number;
}
string student::getname() //获取学生姓名
{
return name;
}
int student::getsubject1() //获取第一科成绩
{
return subject1;
}
int student::getsubject2() //获取第二科成绩
{
return subject2;
}
int student::getsubject3() //获取第三科成绩
{
return subject3;
}
int student::scount()
{
return count--;
}
int student::getsum1()
{
return sum1;
}
void student::show() //显示学生的信息
{
cout<<"学号:"<<student_number<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"科目1成绩:"<<subject1<<endl;
cout<<"科目2成绩:"<<subject2<<endl;
cout<<"科目3成绩:"<<subject3<<endl;
cout<<"总分:"<<sum1<<endl;
}
void student::showall() //显示总人数 总分数 平均分
{
cout<<"\n总人数:"<<count
<<"\n总分数:"<<sum
<<"\n平均分:"<<ave;
}
class manage //链表
{
public:
manage();//管理
void add();//添加
void modify();//修改
void del();//删除
void search();//寻找
void coutall();//
void sort();//排序
int getout();//
void readf();//读文件
void writef();//写文件
//friend ostream &operator<<(ostream &os,Node &node);
//friend istream &operator>>(istream &is,Node &node);
private:
struct node
{
student a;
struct node *next;
};
struct node *head,*ptr;
fstream *op;
};
manage::manage()
{
head=NULL;
ptr=NULL;
}
void manage::add() //增加信息
{
node *temp;
temp=new node;
temp->a.student_information();
temp->next=head;
head=temp;
}
void manage::modify() //修改信息
{
if(head==NULL)
{
cout<<"信息库为空!"<<endl;
return;
}
int n;
cout<<"输入修改对象的学号:";
cin>>n;
cout<<endl;
for(ptr=head;ptr!=NULL;ptr=ptr->next)
{
if(ptr->a.getstudent_number()==n)
{
student b;
ptr->a=b;
break;
}
if(ptr->next=NULL)
cout<<"输入的学号有误或者无此人"<<endl;
}
}
void manage::del() //删除某个学生的信息
{
if(head==NULL) //判断信息库中是否有人
{
cout<<"信息库为空!"<<endl;
return;
}
int n;
node *t;
cout<<"输入删除对象的学号:";
cin>>n;
cout<<endl;
if(head->a.getstudent_number()==n)
{
t=head;
delete head;
head=t->next;
head->a.scount();
return;
}
else ptr=head;
do
{
t=ptr;
ptr=ptr->next;
}
while(ptr->next!=NULL);
if(ptr->a.getstudent_number()==n)
{
delete ptr;
head->a.scount();
t->next=NULL;
return;
}
for(ptr=head;ptr!=NULL;)
{
t=ptr;
ptr=ptr->next;
if(ptr->a.getstudent_number()==n)
{
t->next=ptr->next;
delete ptr;
head->a.scount();
return;
}
}
cout<<"输入的学号有误或者查无此人"<<endl;
}
void manage::search() //查找
{
int flag=1;
if(head==NULL)
{
cout<<"信息库为空!"<<endl;
return;
}
int n;
cout<<"输入查找对象的学号:";
cin>>n;
for(ptr=head;ptr!=NULL;ptr=ptr->next)
{
if(ptr->a.getstudent_number()==n)
{
ptr->a.show();
flag=0;
break;
}
}
if(flag==1)
cout<<"输入的学号有误或者无此人"<<endl;
}
void manage::coutall() //遍历
{
if(head==NULL)
{
cout<<"信息库为空!"<<endl;
return;
}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
ptr->a.show();
}
void manage::sort() //排序
{
int m=0;
char ch;
node *p,*b;
if(head==NULL)
{
cout<<"信息库为空!"<<endl;
return;
}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
m++;
cout<<"按学号排序按a"<<endl;
cout<<"按总分排序按b"<<endl;
cin>>ch;
switch(ch)
{
case 'a':
if(m==1)
{
ptr->a.show();
return;
}
else
for(int j=1;j<m;j++)
{
ptr=head;
p=head->next;
if(head->a.getstudent_number()>p->a.getstudent_number())
{
head->next=p->next;
p->next=head;
head=p;
b=head;
ptr=head->next;
}
else
{
b=ptr;
ptr=head->next;
}
for(int i=1;i<m-j;i++)
{
p=ptr->next;
if(ptr->a.getstudent_number()>p->a.getstudent_number())
{
b->next=p;
ptr->next=p->next;
p->next=ptr;
b=p;
}
else
{
b=ptr;
ptr=p;
}
}
}
break;
case 'b':
if(m==1)
{
ptr->a.show();
return;
}
else
for(int j=1;j<m;j++)
{
ptr=head;
p=head->next;
if(head->a.getsum1()>p->a.getsum1())
{
head->next=p->next;
p->next=head;
head=p;
b=head;
ptr=head->next;
}
else
{
b=head;
ptr=head->next;
}
for(int i=1;i<m-j;i++)
{
p=ptr->next;
if(ptr->a.getsum1()>p->a.getsum1())
{
b->next=p;
ptr->next=p->next;
p->next=ptr;
b=p;
}
else
{
b=ptr;
ptr=p;
}
}
}
break;
default:break;
}
}
void manage::readf() //读文件
{
fstream io("test",ios::beg);
if(!io)
{
cout<<"文件打开失败"<<endl;
return;
}
while(!io.eof())
{
node *temp;
temp=new node;
temp->next=head;
io>>temp->a.getstudent_number();
io>>temp->a.getname();
io>>temp->a.getsubject1();
io>>temp->a.getsubject2();
io>>temp->a.getsubject3();
io>>temp->a.getsum1();
head=temp;
}
cout<<"写入成功****!";
io.close();
}
void manage::writef() //写文件
{
fstream io("test");
if(!io)
{
cout<<"文件打开失败"<<endl;
}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
{
io<<ptr->a.getstudent_number()
<<ptr->a.getname()
<<ptr->a.getsubject1()
<<ptr->a.getsubject2()
<<ptr->a.getsubject3()
<<ptr->a.getsum1();
}
cout<<"写入成功****!"<<endl;
io.close();
}
int manage::getout() //退出
{
return 1;
}
int student::count=0;
float student::sum=0;
float student::ave=0;
int main()
{
char n;
int m=0;
manage l;
//l.readf();
for(;;)
{
cout
<<"学生信息管理系统"<<endl
<<"添加请按1"<<endl
<<"修改请按2"<<endl
<<"删除请按3"<<endl
<<"查找请按4"<<endl
<<"输出请按5"<<endl
<<"排序请按6"<<endl
<<"退出请按0"<<endl;
cin>>n;
switch(n)
{
case '1': l.add();
break;
case '2': l.modify();
break;
case '3': l.del();
break;
case '4': l.search();
break;
case '5': l.coutall();
break;
case '6': l.sort();
break;
case '0': l.getout();
break;
default:
break;
}
m=l.getout();
if(m==1) break;
}
l.writef();
return 0;
}