这是代码,然后最后面的保存学生信息为文件功能不太完整,最后保存的文档功能实现不了,保存后没有数据可以存到文档里,希望有人可以指导指导,谢谢。
#include<fstream>
#include <iostream>
#include <string>
using namespace std;
#define null NULL
class student
{
private:
friend class studentMessage;
student *next; //节点指针
string name; //学生姓名
int age; //年纪
int id; //学号
double score[5]; //五科成绩
double total; //总分
double average; //平均成绩
public:
student(string _name,int _age,int _id,double *_score)
{
name = _name;
age = _age;
id = _id;
score[0] = _score[0];
score[1] = _score[1];
score[2] = _score[2];
score[3] = _score[3];
score[4] = _score[4];
total = score[0]+score[1]+score[2]+score[3]+score[4];
average = total/5;
next = NULL;
}
student() //为studentMessage初始化头结点用
{
name = "null";
age = 0;
id = 0;
score[0]=score[1]=score[2]=score[3]=score[4]=0;
total = 0; average = 0;
next = NULL;
}
~student(){}
void swap(student*);
};
void student::swap(student *q)
{
string _name;
int _age,_id;
double _score[5],_total,_average;
_name = name;
name = q->name;
q->name = _name;
_age = age;
age = q->age;
q->age = _age;
_id = id;
id = q->id;
q->id = _id;
_score[0] = score[0];
score[0] = q->score[0];
q->score[0] = _score[0];
_score[1] = score[1];
score[1] = q->score[1];
q->score[1] = _score[1];
_score[2] = score[2];
score[2] = q->score[2];
q->score[2] = _score[2];
_score[3] = score[3];
score[3] = q->score[3];
q->score[3] = _score[3];
_score[4] = score[4];
score[4] = q->score[4];
q->score[4] = _score[4];
_total = total;
total = q->total;
q->total = _total;
_average = average;
average = q->average;
q->average = _average;
}
class studentMessage
{
private:
student *first; //头指针
int num; //信息中的学生人数
public:
studentMessage()
{
num = 0; //初始化学生人数为0
first = new student; //初始化头结点
}
~studentMessage(){delete first;}
void Insret(void); //添加
void Display(void); //显示
void Delete(void); //删除
void Search(void); //搜索
void Change(void); //改动
void sortByLesson1(void); //按成绩一来排序
void sortByLesson2(void); //按成绩二来排序
void sortByLesson3(void); //按成绩三来排序
void sortByLesson4(void); //按成绩四来排序
void sortByLesson5(void); //按成绩五来排序
void sortByTotal(void); //按总分来排序
void SearchByid(void); //按照学号查找
void SearchByname(void); //按照姓名查找
int menu(void); //初始的菜单
void clear(void); //清空列表
void Save(void);//保存文件
};
int studentMessage::menu(void)
{
int ch;
cout<<"**********************************************************************"<<endl;
cout<<"======================================================================"<<endl;
cout<<"***************************学生成绩管理系统***************************"<<endl;cout<<endl;
cout<<"1.显示所有学生成绩"<<endl;
cout<<"2.添加学生信息"<<endl;
cout<<"3.查询学生信息"<<endl;
cout<<"4.修改学生信息"<<endl;
cout<<"5.删除最后一个学生信息"<<endl;
cout<<"6.删除所有信息"<<endl;
cout<<"7.保存文件"<<endl;
cout<<"0.退出系统"<<endl;cout<<endl;
cout<<"********************计算机科学与技术一班 黄烨彬,陈深**************************"<<endl;
cout<<"======================================================================="<<endl;
cout<<"***********************************************************************"<<endl;
cin >> ch;
cout<<"\n\n\n"<<endl;
return ch;
}
//添加
void studentMessage::Insret(void)
{
string name;
int age;
int id;
double score[5];
cout<<"请输入学生姓名: ";
cin>>name;
cout<<"请输入学生年龄: ";
cin>>age;
cout<<"请输入学生学号: ";
cin>>id;
cout<<"下面请输入学生五门课程成绩: ";
cout<<endl;
cout<<"请输入学生的高等数学的成绩: ";cin>>score[0];
cout<<"请输入学生的英语成绩: ";cin>>score[1];
cout<<"请输入学生的面向对象成绩: ";cin>>score[2];
cout<<"请输入学生的电路原理成绩";cin>>score[3] ;
cout<<"请输入学生的离散数学成绩";cin>>score[4];
cout<<endl;
student *newstu = new student(name,age,id,score);
student *p = first;
while(p->next != NULL)
{
p = p->next;
}
p->next = newstu;
newstu->next = null;
num++;
}
void studentMessage::Display(void)
{
if(num == 0)
{
cout<<"当前记录中无学生..."<<endl;
}
else
{
student *p = first->next;
while(p != null)
{
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" "<<p->score[3]<<" "<<p->score[4]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
p = p->next;
}
}
}
void studentMessage::Delete(void)
{
student *p = first;
student *pre = first;
while(p->next != NULL)
{
pre = p;
p = p->next;
}
pre->next = NULL;
delete p;
num--;
}
void studentMessage::Search(void)
{
int temp = 0;
cout<<"请输入查找的条件,有如下选项..."<<endl;
cout<<"按照学号查找(请输入【1】) 按照姓名查找(请输入【2】)"<<endl;
cin>>temp;
switch(temp)
{
case 1: SearchByid(); break;
case 2: SearchByname(); break;
default: cout<<"输入有误..."<<endl;
}
}
void studentMessage::SearchByid(void)
{
int _id;
int flag = 0;
cout<<"请输入待查找学生的学号:";
cin >> _id;
student *p = first->next;
while(p != null)
{
if(p->id == _id)
{
flag = 1;
cout<<"下面是查找匹配结果:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"三门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
p = p->next;
}
if(flag == 0)
{
cout<<"抱歉,记录中没有查找匹配项..."<<endl;
}
}
void studentMessage::SearchByname(void)
{
string _name;
int flag = 0;
cout<<"请输入待查找的学生姓名: ";
cin >> _name;
student *p = first->next;
while(p != null)
{
if(p->name == _name)
{
flag = 1;
cout<<"下面是查找匹配结果:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" "<<p->score[3]<<" "<<p->score[4]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
p = p->next;
}
if(flag == 0)
{
cout<<"抱歉,记录中没有查找匹配项..."<<endl;
}
}
void studentMessage::Change(void)
{
string _name;
int flag = 0,temp;
int _id,_age;
int course = 0;
cout<<"请输入需要改动信息的学生的姓名: ";
cin >> _name;
student *p = first->next;
while(p != null)
{
if(p->name == _name)
{
flag = 1;
cout<<"该学生当前信息如下:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" "<<p->score[3]<<" "<<p->score[4]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
cout<<"请指明哪一项需要修改..."<<endl;
cout<<"修改学号(输入【1】) 修改年龄(输入【2】)修改成绩(输入【3】)"<<endl;
cin >> temp;
switch(temp)
{
case 1:
{
cout<<"请输入新的学号:";cin>>_id;
p->id = _id;
}
break;
case 2:
{
cout<<"请输入新的年龄:";cin>>_age;
p->age = _age;
}
break;
case 3:
{
cout<<"请按指示修改课程成绩..."<<endl;
cout<<"是否需要修改高等数学成绩?(需要输入【1】不需要输入【0】)"<<endl;
cin >> course;
if(course == 1)
{
cout<<"请输入修改后的高等数学成绩:"; cin >> p->score[0];
}
course = 0;
cout<<"是否需要修改英语成绩?(需要输入【1】不需要输入【0】)"<<endl;
cin >> course;
if(course == 1)
{
cout<<"请输入修改后的英语成绩:"; cin >> p->score[1];
}
course = 0;
cout<<"是否需要修改电路原理成绩?(需要输入【1】不需要输入【0】)"<<endl;
cin >> course;
if(course == 1)
{
cout<<"请输入修改后的电路原理成绩:"; cin >> p->score[2];
}
course = 0;
p->total = p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4];
p->average = p->total/3;
cout<<"修改后的信息如下: "<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" "<<p->score[3]<<" "<<p->score[4]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
break;
default: cout<<"输入有误..."<<endl;
}
}
p = p->next;
}
if(flag == 0)
cout<<"当前记录中没有次学生..."<<endl;
}
/*排序我均采用冒泡排序法,均是从小到大排序*/
//按照科目一排序
void studentMessage::sortByLesson1(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[0] > q->score[0])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照科目二排序
void studentMessage::sortByLesson2(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[1] > q->score[1])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照科目三排序
void studentMessage::sortByLesson3(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[2] > q->score[2])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照科目四排序
void studentMessage::sortByLesson4(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[3] > q->score[3])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照科目五排序
void studentMessage::sortByLesson5(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[4] > q->score[4])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照总成绩排序
void studentMessage::sortByTotal(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->total > q->total)
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
void studentMessage::clear(void)
{
student *p = first->next;
while(p != null)
{
first->next = p->next;
p->next = null;
delete p;
p = first->next;
}
}
/*保存学生信息*/
void studentMessage::Save(void)
{int i;
FILE *fp;
fp=fopen("chengji.txt","w");
student *p = first->next;
while(p != null)
{
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" "<<p->score[3]<<" "<<p->score[4]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
p = p->next;
}
cout<<"\n\n*******************恭喜,保存完成!*******************\n\n"<<endl;
}
int main()
{
studentMessage stulist;
int ch;
while(ch = stulist.menu())
{
switch(ch)
{
case 1: stulist.Display(); break;
case 2: stulist.Insret(); break;
case 3: stulist.Search(); break;
case 4: stulist.Change(); break;
case 5: stulist.Delete(); break;
case 6: stulist.clear(); break;
case 7: stulist.Save(); break;
default: cout<<"请按要求输入..."<<endl;
}
}
return 0;
}