使用C++结合文件操作和链表实现学生成绩管理系统
来源:程序员人生 发布时间:2014-09-08 22:44:38 阅读次数:2833次
对于学生成绩管理系统,我是不会陌生,几乎学习C语言的人,做项目的时候都会想到学生成绩管理系统,我也不例外,在学了一段时间C语言后,也用C语言做了一个学生管理系统,后来联系做了几个,算过来,这个系统对前面的系统有所改进,增加了文件操作可以不用手动输入学生信息,可以直接从文件中读取学生信息,从而简化了操作
使用C语言实现学生成绩管理系统 http://blog.csdn.net/u010105970/article/details/17752193
使用链表实现学生成绩管理系统
http://blog.csdn.net/u010105970/article/details/25058379
使用C++实现学生成绩管理系统
http://blog.csdn.net/u010105970/article/details/27958237
程序模块
首先定义两个类Student类和Node类
Student类用于表示学生信息
class Student//学生类
{
public:
Student();//构造函数
void SetLen(int l);//设置学生的人数
void SetName(string N);//设置学生的姓名
void SetAge(int A);//设置学生的年龄
void SetNo(int N);//设置学生的编号
void SetCpp(int C);//设置C++成绩
void SetMath(int M);//设置高数成绩
void SetEnglish(int E);//设置英语成绩
void CountTotal();//计算总分
void CountAve();//计算平均分
void SetS(int S);//设置序号(用于排名)
int GetLen();//得到学生的人数
string GetName();//得到学生的姓名
int GetAge();//得到学生的年龄
int GetNo();//得到学生的编号
int GetCpp();//得到学生的C++成绩
int GetMath();//得到学生的高数成绩
int GetEnglish();//得到学生的英语成绩
int GetTotal();//得到学生的总分
float GetAve();//得到学生的平均分
int GetS();//得到序号(用于排名)
private:
int len; //学生的人数
string Name; //姓名
int Age; //年龄
int No; //学号
int Cpp; //C++成绩
int Math; //高数成绩
int English; //英语成绩
int Total; //总分
float Ave; //平均分
int Sort; //排名
};
定义Student类中的成员函数
//构造函数
Student::Student()
{
Sort = 0;
}
void Student::SetLen(int l)//设置学生的人数
{
len = l;
}
void Student::SetName(string N)//设置学生的姓名
{
Name = N;
}
void Student::SetAge(int A)//设置学生的年龄
{
Age = A;
}
void Student::SetNo(int N)//设置学生的编号
{
No = N;
}
void Student::SetCpp(int C)//设置C++成绩
{
Cpp = C;
}
void Student::SetMath(int M)//设置高数成绩
{
Math = M;
}
void Student::SetEnglish(int E)//设置英语成绩
{
English = E;
}
void Student::CountTotal()//计算总分
{
Total = Cpp + Math + English;
}
void Student::CountAve()//计算学生的平均分
{
Ave = Total / 3;
}
void Student::SetS(int s)//设置序号(用于排名)
{
Sort = s;
}
int Student::GetLen()//得到学生的人数
{
return len;
}
string Student::GetName()//得到学生的姓名
{
return Name;
}
int Student::GetAge()//得到学生的年龄
{
return Age;
}
int Student::GetNo()//得到学生的编号
{
return No;
}
int Student::GetCpp()//得到学生的C++成绩
{
return Cpp;
}
int Student::GetMath()//得到学生的高数成绩
{
return Math;
}
int Student::GetEnglish()//得到学生的英语成绩
{
return English;
}
int Student::GetTotal()//得到学生的总分
{
return Total;
}
float Student::GetAve()//得到学生的平均分
{
return Ave;
}
int Student::GetS()//得到序号(用于排名)
{
return Sort;
}
定义Node类用于处理学生信息
class Node//结点类
{
public:
void InputStudent();//输入学生信息
void OutputStudent();//输出学生信息
Node* AddStudent();//增加学生信息
bool DeleteStudent();//删除学生信息
void ChangeStudent();//修改学生信息
void SearchStudent();//查找学生信息
void SortCpp();//将C++成绩按照从大到小排序
void SortMath();//将高数成绩按照从大到小排序
void SortEnglish();//将英语成绩按照从大到小排序
void SortTotal();//将总分按照从大到小排序
void SetScort();//设置排名
void ChangeNo(Node *p);//修改学生的学号
private:
Student st;//数据域
Node *pNext;//指针域
Node *pHead;//头结点
};
typedef Node NODE;
typedef Node* PNODE;
/*
NODE 相当于 Node
PNODE 相当于 Node*
*/
定义Node类的成员函数
//输入学生信息
void Node::InputStudent()
{
//创建一个头结点
pHead = new NODE[sizeof(NODE)];
if(NULL == pHead)
{
cout<<"动态内存分配失败,程序终止!"<<endl;
exit(0);
}
PNODE pTail = pHead;//创建一个指向头结点的指针
pTail->pNext = NULL;//初始化指针的指针域为NULL
//将文件中的数据输入到程序中
ifstream infile("score.dat", ios::in);
if(!infile)
{
cout<<"文件打开失败,程序终止!"<<endl;
exit(0);
}
int l;//人数
string name;//姓名
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
cout<<"请输入学生的人数:";
cin>>l;
for(int i=1; i<=l; i++)
{
//创建一个保存数据的新结点
PNODE pNew = new NODE[sizeof(NODE)];
if(NULL == pNew)
{
cout<<"动态内存分配失败,程序终止!"<<endl;
exit(0);
}
//读取文件中的数据
infile>>name>>age>>no>>cpp>>math>>english;
//初始化结点
pNew->st.SetLen(l);//学生的人数
pNew->st.SetName(name);//学生的姓名
pNew->st.SetAge(age);//学生的年龄
pNew->st.SetNo(no);//学生的编号
pNew->st.SetCpp(cpp);//学生的C++成绩
pNew->st.SetMath(math);//学生的数学成绩
pNew->st.SetEnglish(english);//学生的英语成绩
pNew->st.CountTotal();//计算学生的总分
pNew->st.CountAve();//计算学生的平均分
pTail->pNext = pNew;//将pNew挂在老结点的后面
pTail = pNew;//将指针pTail移到pNew上
pTail->pNext = NULL;//清空指针域
}
//关闭文件
infile.close();
cout<<"已经成功的向程序中输入了"<<l<<"个学生的信息"<<endl;
}
//遍历链表
void Node::OutputStudent()
{
PNODE p = pHead->pNext;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
//遍历学生信息
while(NULL != p)
{
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<" "<<p->st.GetS()<<endl;
p = p->pNext;
}
}
PNODE Node::AddStudent(void)//增加学生信息
{
PNODE p = pHead->pNext;
Student st;//定义一个学生类
int i = 1000;
int pos;
string name;//姓名
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
cout<<"请输入一个学生的学号:";
cin>>pos;
cout<<"你将在学号为"<<pos<<"的学生后增加一个学生"<<endl;
st.SetNo(pos+1);//设置需要添加的学生的学号
cout<<"增加的学生的学号为"<<pos+1<<endl;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的姓名:";
cin>>name;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的年龄:";
cin>>age;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的C++成绩:";
cin>>cpp;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的数学成绩:";
cin>>math;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的英语成绩:";
cin>>english;
while(NULL != p && i<pos-1)
{
p = p->pNext;
i++;
}
if(NULL == p || i>pos)
{
cout<<"程序错误!"<<endl;
exit(1);
}
PNODE pt = new NODE[sizeof(NODE)];
if(NULL == pt)
{
printf("动态内存分配失败,程序终止!
");
exit(-1);
}
//初始化结点
pt->st.SetName(name);//学生的姓名
pt->st.SetAge(age);//学生的年龄
pt->st.SetNo(pos+1);//学生的学号
pt->st.SetCpp(cpp);//学生的C++成绩
pt->st.SetMath(math);//学生的数学成绩
pt->st.SetEnglish(english);//学生的英语成绩
pt->st.CountTotal();//计算学生的总分
pt->st.CountAve();//计算学生的平均分
PNODE q = p->pNext;
p->pNext = pt;
pt->pNext = q;
return p->pNext;
}
bool Node::DeleteStudent()//删除学生信息
{
int i = 1000;
int pos;
PNODE p = pHead;
cout<<"请输入要删除的学生的学号:";
cin>>pos;
cout<<"
删除学号为"<<pos<<"后的学生信息:"<<endl;
while(NULL != p && i<pos-1)
{
p = p->pNext;
i++;
}
if(NULL == p || i>pos)
{
return true;
}
PNODE q = p->pNext;
p->pNext = p->pNext->pNext;
delete []q;
return true;
}
void Node::ChangeStudent()//修改学生信息
{
PNODE p = pHead->pNext;
string name;//姓名
int flag = 0;//标识符,初始化表示没找到
cout<<"请输入你需要修改的学生的姓名:";
cin>>name;
//遍历学生信息
while(NULL != p)
{
if(name == p->st.GetName())
{
flag = 1;
cout<<"
修改前的学生信息:"<<endl;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<endl;
break;
}
p = p->pNext;
}
if(0 == flag)
{
cout<<"没找到你需要修改的学生信息!
"<<endl;
return;
}
cout<<"
你将修改学号为"<<p->st.GetNo()<<"的学生信息"<<endl;
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
no = p->st.GetNo();//得到学生的学号
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的姓名:";
cin>>name;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的年龄:";
cin>>age;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的C++成绩:";
cin>>cpp;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的数学成绩:";
cin>>math;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的英语成绩:";
cin>>english;
//初始化结点
p->st.SetName(name);//学生的姓名
p->st.SetAge(age);//学生的年龄
p->st.SetNo(no);//学生的编号
p->st.SetCpp(cpp);//学生的C++成绩
p->st.SetMath(math);//学生的数学成绩
p->st.SetEnglish(english);//学生的英语成绩
p->st.CountTotal();//计算学生的总分
p->st.CountAve();//计算学生的平均分
cout<<"
修改后的学生信息:"<<endl;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<endl;
}
void Node::SearchStudent()//查找学生信息
{
PNODE p = pHead->pNext;
string name;//姓名
int flag = 0;//标识符,初始化表示没找到
cout<<"请输入你需要查找的学生的姓名:";
cin>>name;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
//遍历学生信息
while(NULL != p)
{
if(name == p->st.GetName())
{
flag = 1;
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<endl;
break;//退出循环
}
p = p->pNext;
}
if(0 == flag)
{
cout<<"没找到你需要的学生信息!"<<endl;
}
}
void Node::SortCpp()//将C++成绩按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetCpp() < q->st.GetCpp())//当前一个学生的C++成绩小于后一个学生的C++成绩时
{
temp.st = p->st;//交换学生的位置
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SortMath()//将高数成绩按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetMath() < q->st.GetMath())//当前一个学生的高数成绩小于后一个学生的高数成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SortEnglish()//将英语成绩按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetEnglish() < q->st.GetEnglish())//当前一个学生的英语成绩小于后一个学生的英语成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SortTotal()//将总分按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetTotal() < q->st.GetTotal())//当前一个学生的总分小于后一个学生的总分时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SetScort()//设置排名
{
PNODE p;//定义一个指向结点的指针
int i;//保存排名
//给学生的排名赋值
for(p=pHead->pNext, i=1; NULL !=p; p=p->pNext, i++)
{
p->st.SetS(i);
}
}
//修改学生的学号
void Node::ChangeNo(PNODE p)
{
int i = p->st.GetNo();//提供修改的数据
//遍历学生信息
while(NULL != p)
{
p->st.SetNo(i);
i++;
p = p->pNext;
}
}
程序的全部代码
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
using namespace std;
class Student//学生类
{
public:
Student();//构造函数
void SetLen(int l);//设置学生的人数
void SetName(string N);//设置学生的姓名
void SetAge(int A);//设置学生的年龄
void SetNo(int N);//设置学生的编号
void SetCpp(int C);//设置C++成绩
void SetMath(int M);//设置高数成绩
void SetEnglish(int E);//设置英语成绩
void CountTotal();//计算总分
void CountAve();//计算平均分
void SetS(int S);//设置序号(用于排名)
int GetLen();//得到学生的人数
string GetName();//得到学生的姓名
int GetAge();//得到学生的年龄
int GetNo();//得到学生的编号
int GetCpp();//得到学生的C++成绩
int GetMath();//得到学生的高数成绩
int GetEnglish();//得到学生的英语成绩
int GetTotal();//得到学生的总分
float GetAve();//得到学生的平均分
int GetS();//得到序号(用于排名)
private:
int len; //学生的人数
string Name; //姓名
int Age; //年龄
int No; //学号
int Cpp; //C++成绩
int Math; //高数成绩
int English; //英语成绩
int Total; //总分
float Ave; //平均分
int Sort; //排名
};
//构造函数
Student::Student()
{
Sort = 0;
}
void Student::SetLen(int l)//设置学生的人数
{
len = l;
}
void Student::SetName(string N)//设置学生的姓名
{
Name = N;
}
void Student::SetAge(int A)//设置学生的年龄
{
Age = A;
}
void Student::SetNo(int N)//设置学生的编号
{
No = N;
}
void Student::SetCpp(int C)//设置C++成绩
{
Cpp = C;
}
void Student::SetMath(int M)//设置高数成绩
{
Math = M;
}
void Student::SetEnglish(int E)//设置英语成绩
{
English = E;
}
void Student::CountTotal()//计算总分
{
Total = Cpp + Math + English;
}
void Student::CountAve()//计算学生的平均分
{
Ave = Total / 3;
}
void Student::SetS(int s)//设置序号(用于排名)
{
Sort = s;
}
int Student::GetLen()//得到学生的人数
{
return len;
}
string Student::GetName()//得到学生的姓名
{
return Name;
}
int Student::GetAge()//得到学生的年龄
{
return Age;
}
int Student::GetNo()//得到学生的编号
{
return No;
}
int Student::GetCpp()//得到学生的C++成绩
{
return Cpp;
}
int Student::GetMath()//得到学生的高数成绩
{
return Math;
}
int Student::GetEnglish()//得到学生的英语成绩
{
return English;
}
int Student::GetTotal()//得到学生的总分
{
return Total;
}
float Student::GetAve()//得到学生的平均分
{
return Ave;
}
int Student::GetS()//得到序号(用于排名)
{
return Sort;
}
class Node//结点类
{
public:
void InputStudent();//输入学生信息
void OutputStudent();//输出学生信息
Node* AddStudent();//增加学生信息
bool DeleteStudent();//删除学生信息
void ChangeStudent();//修改学生信息
void SearchStudent();//查找学生信息
void SortCpp();//将C++成绩按照从大到小排序
void SortMath();//将高数成绩按照从大到小排序
void SortEnglish();//将英语成绩按照从大到小排序
void SortTotal();//将总分按照从大到小排序
void SetScort();//设置排名
void ChangeNo(Node *p);//修改学生的学号
private:
Student st;//数据域
Node *pNext;//指针域
Node *pHead;//头结点
};
typedef Node NODE;
typedef Node* PNODE;
/*
NODE 相当于 Node
PNODE 相当于 Node*
*/
//输入学生信息
void Node::InputStudent()
{
//创建一个头结点
pHead = new NODE[sizeof(NODE)];
if(NULL == pHead)
{
cout<<"动态内存分配失败,程序终止!"<<endl;
exit(0);
}
PNODE pTail = pHead;//创建一个指向头结点的指针
pTail->pNext = NULL;//初始化指针的指针域为NULL
//将文件中的数据输入到程序中
ifstream infile("score.dat", ios::in);
if(!infile)
{
cout<<"文件打开失败,程序终止!"<<endl;
exit(0);
}
int l;//人数
string name;//姓名
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
cout<<"请输入学生的人数:";
cin>>l;
for(int i=1; i<=l; i++)
{
//创建一个保存数据的新结点
PNODE pNew = new NODE[sizeof(NODE)];
if(NULL == pNew)
{
cout<<"动态内存分配失败,程序终止!"<<endl;
exit(0);
}
//读取文件中的数据
infile>>name>>age>>no>>cpp>>math>>english;
//初始化结点
pNew->st.SetLen(l);//学生的人数
pNew->st.SetName(name);//学生的姓名
pNew->st.SetAge(age);//学生的年龄
pNew->st.SetNo(no);//学生的编号
pNew->st.SetCpp(cpp);//学生的C++成绩
pNew->st.SetMath(math);//学生的数学成绩
pNew->st.SetEnglish(english);//学生的英语成绩
pNew->st.CountTotal();//计算学生的总分
pNew->st.CountAve();//计算学生的平均分
pTail->pNext = pNew;//将pNew挂在老结点的后面
pTail = pNew;//将指针pTail移到pNew上
pTail->pNext = NULL;//清空指针域
}
//关闭文件
infile.close();
cout<<"已经成功的向程序中输入了"<<l<<"个学生的信息"<<endl;
}
//遍历链表
void Node::OutputStudent()
{
PNODE p = pHead->pNext;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
//遍历学生信息
while(NULL != p)
{
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<" "<<p->st.GetS()<<endl;
p = p->pNext;
}
}
PNODE Node::AddStudent(void)//增加学生信息
{
PNODE p = pHead->pNext;
Student st;//定义一个学生类
int i = 1000;
int pos;
string name;//姓名
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
cout<<"请输入一个学生的学号:";
cin>>pos;
cout<<"你将在学号为"<<pos<<"的学生后增加一个学生"<<endl;
st.SetNo(pos+1);//设置需要添加的学生的学号
cout<<"增加的学生的学号为"<<pos+1<<endl;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的姓名:";
cin>>name;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的年龄:";
cin>>age;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的C++成绩:";
cin>>cpp;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的数学成绩:";
cin>>math;
cout<<"请输入学号为"<<st.GetNo()<<"的学生的英语成绩:";
cin>>english;
while(NULL != p && i<pos-1)
{
p = p->pNext;
i++;
}
if(NULL == p || i>pos)
{
cout<<"程序错误!"<<endl;
exit(1);
}
PNODE pt = new NODE[sizeof(NODE)];
if(NULL == pt)
{
printf("动态内存分配失败,程序终止!
");
exit(-1);
}
//初始化结点
pt->st.SetName(name);//学生的姓名
pt->st.SetAge(age);//学生的年龄
pt->st.SetNo(pos+1);//学生的学号
pt->st.SetCpp(cpp);//学生的C++成绩
pt->st.SetMath(math);//学生的数学成绩
pt->st.SetEnglish(english);//学生的英语成绩
pt->st.CountTotal();//计算学生的总分
pt->st.CountAve();//计算学生的平均分
PNODE q = p->pNext;
p->pNext = pt;
pt->pNext = q;
return p->pNext;
}
bool Node::DeleteStudent()//删除学生信息
{
int i = 1000;
int pos;
PNODE p = pHead;
cout<<"请输入要删除的学生的学号:";
cin>>pos;
cout<<"
删除学号为"<<pos<<"后的学生信息:"<<endl;
while(NULL != p && i<pos-1)
{
p = p->pNext;
i++;
}
if(NULL == p || i>pos)
{
return true;
}
PNODE q = p->pNext;
p->pNext = p->pNext->pNext;
delete []q;
return true;
}
void Node::ChangeStudent()//修改学生信息
{
PNODE p = pHead->pNext;
string name;//姓名
int flag = 0;//标识符,初始化表示没找到
cout<<"请输入你需要修改的学生的姓名:";
cin>>name;
//遍历学生信息
while(NULL != p)
{
if(name == p->st.GetName())
{
flag = 1;
cout<<"
修改前的学生信息:"<<endl;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<endl;
break;
}
p = p->pNext;
}
if(0 == flag)
{
cout<<"没找到你需要修改的学生信息!
"<<endl;
return;
}
cout<<"
你将修改学号为"<<p->st.GetNo()<<"的学生信息"<<endl;
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
no = p->st.GetNo();//得到学生的学号
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的姓名:";
cin>>name;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的年龄:";
cin>>age;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的C++成绩:";
cin>>cpp;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的数学成绩:";
cin>>math;
cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的英语成绩:";
cin>>english;
//初始化结点
p->st.SetName(name);//学生的姓名
p->st.SetAge(age);//学生的年龄
p->st.SetNo(no);//学生的编号
p->st.SetCpp(cpp);//学生的C++成绩
p->st.SetMath(math);//学生的数学成绩
p->st.SetEnglish(english);//学生的英语成绩
p->st.CountTotal();//计算学生的总分
p->st.CountAve();//计算学生的平均分
cout<<"
修改后的学生信息:"<<endl;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<endl;
}
void Node::SearchStudent()//查找学生信息
{
PNODE p = pHead->pNext;
string name;//姓名
int flag = 0;//标识符,初始化表示没找到
cout<<"请输入你需要查找的学生的姓名:";
cin>>name;
cout<<"姓名 "<<"年龄 "<<"学号 "<<"C++ "<<"数学 "<<"英语 "<<"总分 "<<"平均分 "<<"排名"<<endl;
//遍历学生信息
while(NULL != p)
{
if(name == p->st.GetName())
{
flag = 1;
cout<<p->st.GetName()<<" "<<p->st.GetAge()<<" "<<p->st.GetNo()<<" "<<p->st.GetCpp()
<<" "<<p->st.GetMath()<<" "<<p->st.GetEnglish()<<" "<<p->st.GetTotal()<<" "<<p->st.GetAve()<<endl;
break;//退出循环
}
p = p->pNext;
}
if(0 == flag)
{
cout<<"没找到你需要的学生信息!"<<endl;
}
}
void Node::SortCpp()//将C++成绩按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetCpp() < q->st.GetCpp())//当前一个学生的C++成绩小于后一个学生的C++成绩时
{
temp.st = p->st;//交换学生的位置
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SortMath()//将高数成绩按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetMath() < q->st.GetMath())//当前一个学生的高数成绩小于后一个学生的高数成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SortEnglish()//将英语成绩按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetEnglish() < q->st.GetEnglish())//当前一个学生的英语成绩小于后一个学生的英语成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SortTotal()//将总分按照从大到小排序
{
PNODE p, q;//定义两个指针
NODE temp;//定义一个临时结点
for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
if(p->st.GetTotal() < q->st.GetTotal())//当前一个学生的总分小于后一个学生的总分时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
}
void Node::SetScort()//设置排名
{
PNODE p;//定义一个指向结点的指针
int i;//保存排名
//给学生的排名赋值
for(p=pHead->pNext, i=1; NULL !=p; p=p->pNext, i++)
{
p->st.SetS(i);
}
}
//修改学生的学号
void Node::ChangeNo(PNODE p)
{
int i = p->st.GetNo();//提供修改的数据
//遍历学生信息
while(NULL != p)
{
p->st.SetNo(i);
i++;
p = p->pNext;
}
}
void main()
{
cout<<"================================================================================
"<<endl;
cout<<"================================================================================
"<<endl;
cout<<"*************************欢迎使用学生成绩管理系统*******************************
"<<endl;
cout<<"-----------------------------------------------------------------制作人:梅沙小子
"<<endl;
cout<<"********************************************************************************
"<<endl;
cout<<"================================================================================
"<<endl;
cout<<"请按任意将进入学生管理系统:";
getchar();
system("cls");
cout<<"===============================================================================
";
cout<<"------------------------ 请选择要操作的命令:----------------------------------
";
cout<<"-------------------------- 1 输入学生信息--------------------------------------
";
cout<<"-------------------------- 2 输出学生信息--------------------------------------
";
cout<<"-------------------------- 3 增加学生信息--------------------------------------
";
cout<<"-------------------------- 4 删除学生信息--------------------------------------
";
cout<<"-------------------------- 5 修改学生信息--------------------------------------
";
cout<<"-------------------------- 6 查找学生信息--------------------------------------
";
cout<<"-------------------------- 7 将学生的C++成绩按从大到小排----------------------
";
cout<<"-------------------------- 8 将学生的高数成绩按从大到小排----------------------
";
cout<<"-------------------------- 9 将学生的英语成绩按从大到小排----------------------
";
cout<<"--------------------------10 将学生的总成绩按从大到小排------------------------
";
cout<<"===============================================================================
";
int Item;//操作命令
NODE pHead;//定义一个结点
while(1)
{
cout<<"
请选择操作命令:";
cin>>Item;
system("cls");//清屏
switch(Item)
{
case 1://输入学生信息
{
//创建链表
pHead.InputStudent();
}
break;
case 2://输出学生信息
{
//遍历链表
pHead.OutputStudent();
}
break;
case 3://增加学生信息
{
PNODE q;
q = pHead.AddStudent();
pHead.ChangeNo(q);//修改学号8
}
break;
case 4://删除学生信息
{
pHead.DeleteStudent();
pHead.OutputStudent();
}
break;
case 5://修改学生信息
{
pHead.ChangeStudent();
}
break;
case 6://查找学生信息
{
pHead.SearchStudent();
}
break;
case 7://对学生的C++成绩排序
{
pHead.SortCpp();//C++排序
cout<<"C++成绩排序后的结果:"<<endl;
pHead.SetScort();//设置排名
pHead.OutputStudent();//打印排序后的结果
}
break;
case 8://对学生的高数成绩排序
{
pHead.SortMath();//高数排序
cout<<"高数成绩排序后的结果:"<<endl;
pHead.SetScort();//设置排名
pHead.OutputStudent();//打印排序后的结果
}
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
------分隔线----------------------------
------分隔线----------------------------