使用C++名单在文档处理和学生成绩管理系统相结合
对于学生成绩管理系统,我并不陌生,几乎学习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 SetInfo(string N, int A);//设置学生的信息(设置姓名、年龄)
void SetNo(int N);//设置学生的编号
void SetScore(int C, int M, int E);//设置学生的成绩(C++、高数、英语)
void CountTotal();//计算总分
void CountAve();//计算平均分
void SetS(int S);//设置序号(用于排名)
void GetInfo(string *pN, int *pA);//得到学生的信息(得到姓名、年龄)
int GetNo();//得到学生的编号 //得到学生的分数(C++ 高数 英语 总分 平均分)
void GetScore(int *pC, int *pM, int *pE, int *pT, int *pA);
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::SetInfo(string N, int A)//设置学生的信息(设置姓名、年龄)
{
Name = N;
Age = A;
} void Student::SetNo(int N)//设置学生的编号
{
No = N;
} void Student::SetScore(int C, int M, int E)//设置学生的成绩(C++、高数、英语)
{
Cpp = C;
Math = M;
English = E;
} void Student::CountTotal()//计算总分
{
Total = Cpp + Math + English;
} void Student::CountAve()//计算学生的平均分
{
Ave = Total / 3;
} void Student::SetS(int s)//设置序号(用于排名)
{
Sort = s;
} void Student::GetInfo(string *pN, int *pA)//得到学生的信息(得到姓名、年龄)
{
*pN = Name;
*pA = Age;
} int Student::GetNo()//得到学生的编号
{
return No;
} //得到学生的分数(C++ 高数 英语 总分 平均分)
void Student::GetScore(int *pC, int *pM, int *pE, int *pT, int *pA)
{
*pC = Cpp;//得到C++成绩
*pM = Math;//得到数学成绩
*pE = English;//得到英语成绩
*pT = Total;//得到总分
*pA = 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.SetInfo(name, age);//学生的姓名和年龄
pNew->st.SetNo(no);//学生的编号
pNew->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)
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<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; string name;
int age;
int cpp;
int math;
int english;
int total;
int ave; //遍历学生信息
while(NULL != p)
{
p->st.GetInfo(&name, &age);
p->st.GetScore(&cpp, &math, &english, &total, &ave); cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<"\t"<<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("动态内存分配失败,程序终止!\n");
exit(-1);
} //初始化结点
pt->st.SetInfo(name, age);//学生的姓名和年龄
pt->st.SetNo(pos+1);//学生的学号
pt->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)
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<<"\n删除学号为"<<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 age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
int total;//总分
int ave;//平均分 int flag = 0;//标识符,初始化表示没找到 cout<<"请输入你须要改动的学生的姓名:";
cin>>name; string nm;//姓名 //遍历学生信息
while(NULL != p)
{
//得到学生的姓名和年龄
p->st.GetInfo(&nm, &age);
p->st.GetScore(&cpp, &math, &english, &total, &ave); if(name == nm)
{
flag = 1; cout<<"\n改动前的学生信息:"<<endl; cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; cout<<nm<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl; break;
} p = p->pNext;
} if(0 == flag)
{
cout<<"没找到你须要改动的学生信息!\n"<<endl; return;
} cout<<"\n你将改动学号为"<<p->st.GetNo()<<"的学生信息"<<endl; 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.SetInfo(name, age);//学生的姓名和年龄
p->st.SetNo(no);//学生的编号
p->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)
p->st.CountTotal();//计算学生的总分
p->st.CountAve();//计算学生的平均分 cout<<"\n改动后的学生信息:"<<endl;
cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; //得到学生的姓名和年龄吧
p->st.GetInfo(&name, &age); //得到学生的成绩
p->st.GetScore(&cpp, &math, &english, &total, &ave); cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;
} void Node::SearchStudent()//查找学生信息
{
PNODE p = pHead->pNext; string name;//姓名 int flag = 0;//标识符,初始化表示没找到 cout<<"请输入你须要查找的学生的姓名:";
cin>>name; cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; string nm;//姓名
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
int total;//总分
int ave;//平均分 //遍历学生信息
while(NULL != p)
{
//得到学生的姓名和年龄
p->st.GetInfo(&nm, &age); //得到学生的成绩
p->st.GetScore(&cpp, &math, &english, &total, &ave); if(name == nm)
{
flag = 1; cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl; break;//退出循环
} p = p->pNext;
} if(0 == flag)
{
cout<<"没找到你须要的学生信息!"<<endl;
}
} void Node::SortCpp()//将C++成绩依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(cpp1 < cpp2)//当前一个学生的C++成绩小于后一个学生的C++成绩时
{
temp.st = p->st;//交换学生的位置
p->st = q->st;
q->st = temp.st;
}
}
}
} void Node::SortMath()//将高数成绩依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(math1 < math2)//当前一个学生的高数成绩小于后一个学生的高数成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
} void Node::SortEnglish()//将英语成绩依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(english1 < english2)//当前一个学生的英语成绩小于后一个学生的英语成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
} void Node::SortTotal()//将总分依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(total1 < total2)//当前一个学生的总分小于后一个学生的总分时
{
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 SetInfo(string N, int A);//设置学生的信息(设置姓名、年龄)
void SetNo(int N);//设置学生的编号
void SetScore(int C, int M, int E);//设置学生的成绩(C++、高数、英语)
void CountTotal();//计算总分
void CountAve();//计算平均分
void SetS(int S);//设置序号(用于排名)
void GetInfo(string *pN, int *pA);//得到学生的信息(得到姓名、年龄)
int GetNo();//得到学生的编号 //得到学生的分数(C++ 高数 英语 总分 平均分)
void GetScore(int *pC, int *pM, int *pE, int *pT, int *pA);
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::SetInfo(string N, int A)//设置学生的信息(设置姓名、年龄)
{
Name = N;
Age = A;
} void Student::SetNo(int N)//设置学生的编号
{
No = N;
} void Student::SetScore(int C, int M, int E)//设置学生的成绩(C++、高数、英语)
{
Cpp = C;
Math = M;
English = E;
} void Student::CountTotal()//计算总分
{
Total = Cpp + Math + English;
} void Student::CountAve()//计算学生的平均分
{
Ave = Total / 3;
} void Student::SetS(int s)//设置序号(用于排名)
{
Sort = s;
} void Student::GetInfo(string *pN, int *pA)//得到学生的信息(得到姓名、年龄)
{
*pN = Name;
*pA = Age;
} int Student::GetNo()//得到学生的编号
{
return No;
} //得到学生的分数(C++ 高数 英语 总分 平均分)
void Student::GetScore(int *pC, int *pM, int *pE, int *pT, int *pA)
{
*pC = Cpp;//得到C++成绩
*pM = Math;//得到数学成绩
*pE = English;//得到英语成绩
*pT = Total;//得到总分
*pA = 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.SetInfo(name, age);//学生的姓名和年龄
pNew->st.SetNo(no);//学生的编号
pNew->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)
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<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; string name;
int age;
int cpp;
int math;
int english;
int total;
int ave; //遍历学生信息
while(NULL != p)
{
p->st.GetInfo(&name, &age);
p->st.GetScore(&cpp, &math, &english, &total, &ave); cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<"\t"<<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("动态内存分配失败,程序终止!\n");
exit(-1);
} //初始化结点
pt->st.SetInfo(name, age);//学生的姓名和年龄
pt->st.SetNo(pos+1);//学生的学号
pt->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)
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<<"\n删除学号为"<<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 age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
int total;//总分
int ave;//平均分 int flag = 0;//标识符,初始化表示没找到 cout<<"请输入你须要改动的学生的姓名:";
cin>>name; string nm;//姓名 //遍历学生信息
while(NULL != p)
{
//得到学生的姓名和年龄
p->st.GetInfo(&nm, &age);
p->st.GetScore(&cpp, &math, &english, &total, &ave); if(name == nm)
{
flag = 1; cout<<"\n改动前的学生信息:"<<endl; cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; cout<<nm<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl; break;
} p = p->pNext;
} if(0 == flag)
{
cout<<"没找到你须要改动的学生信息!\n"<<endl; return;
} cout<<"\n你将改动学号为"<<p->st.GetNo()<<"的学生信息"<<endl; 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.SetInfo(name, age);//学生的姓名和年龄
p->st.SetNo(no);//学生的编号
p->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)
p->st.CountTotal();//计算学生的总分
p->st.CountAve();//计算学生的平均分 cout<<"\n改动后的学生信息:"<<endl;
cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; //得到学生的姓名和年龄吧
p->st.GetInfo(&name, &age); //得到学生的成绩
p->st.GetScore(&cpp, &math, &english, &total, &ave); cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;
} void Node::SearchStudent()//查找学生信息
{
PNODE p = pHead->pNext; string name;//姓名 int flag = 0;//标识符,初始化表示没找到 cout<<"请输入你须要查找的学生的姓名:";
cin>>name; cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl; string nm;//姓名
int age;//年龄
int no;//学号
int cpp;//C++成绩
int math;//数学成绩
int english;//英语成绩
int total;//总分
int ave;//平均分 //遍历学生信息
while(NULL != p)
{
//得到学生的姓名和年龄
p->st.GetInfo(&nm, &age); //得到学生的成绩
p->st.GetScore(&cpp, &math, &english, &total, &ave); if(name == nm)
{
flag = 1; cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp
<<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl; break;//退出循环
} p = p->pNext;
} if(0 == flag)
{
cout<<"没找到你须要的学生信息!"<<endl;
}
} void Node::SortCpp()//将C++成绩依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(cpp1 < cpp2)//当前一个学生的C++成绩小于后一个学生的C++成绩时
{
temp.st = p->st;//交换学生的位置
p->st = q->st;
q->st = temp.st;
}
}
}
} void Node::SortMath()//将高数成绩依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(math1 < math2)//当前一个学生的高数成绩小于后一个学生的高数成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
} void Node::SortEnglish()//将英语成绩依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(english1 < english2)//当前一个学生的英语成绩小于后一个学生的英语成绩时
{
temp.st = p->st;//交换学生的位置(交换结点中的数据域)
p->st = q->st;
q->st = temp.st;
}
}
}
} void Node::SortTotal()//将总分依照从大到小排序
{
PNODE p, q;//定义两个指针 NODE temp;//定义一个暂时结点 int cpp1, cpp2;//C++成绩
int math1, math2;//数学成绩
int english1, english2;//英语成绩
int total1, total2;//总分
int ave1, ave2;//平均分 for(p = pHead->pNext; NULL != p; p = p->pNext)
{
for(q = p->pNext; NULL != q; q = q->pNext)
{
p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);
q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2); if(total1 < total2)//当前一个学生的总分小于后一个学生的总分时
{
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<<"================================================================================\n"<<endl;
cout<<"================================================================================\n"<<endl;
cout<<"*************************欢迎使用学生成绩管理系统*******************************\n"<<endl;
cout<<"-----------------------------------------------------------------制作人:梅沙小子\n"<<endl;
cout<<"********************************************************************************\n"<<endl;
cout<<"================================================================================\n"<<endl; cout<<"请按随意将进入学生管理系统:";
getchar();
system("cls"); cout<<"===============================================================================\n\n";
cout<<"------------------------ 请选择要操作的命令:----------------------------------\n\n";
cout<<"-------------------------- 1 输入学生信息--------------------------------------\n\n";
cout<<"-------------------------- 2 输出学生信息--------------------------------------\n\n";
cout<<"-------------------------- 3 添加学生信息--------------------------------------\n\n";
cout<<"-------------------------- 4 删除学生信息--------------------------------------\n\n";
cout<<"-------------------------- 5 改动学生信息--------------------------------------\n\n";
cout<<"-------------------------- 6 查找学生信息--------------------------------------\n\n";
cout<<"-------------------------- 7 将学生的C++成绩按从大到小排----------------------\n\n";
cout<<"-------------------------- 8 将学生的高数成绩按从大到小排----------------------\n\n";
cout<<"-------------------------- 9 将学生的英语成绩按从大到小排----------------------\n\n";
cout<<"--------------------------10 将学生的总成绩按从大到小排------------------------\n\n";
cout<<"===============================================================================\n\n"; int Item;//操作命令 NODE pHead;//定义一个结点 while(1)
{
cout<<"\n请选择操作命令:";
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();//打印排序后的结果
}
break; case 9://对学生的英语成绩排序
{
pHead.SortEnglish();//英语排序
cout<<"英语成绩排序后的结果:"<<endl;
pHead.SetScort();//设置排名
pHead.OutputStudent();//打印排序后的结果
}
break; case 10://对学生的总分排序
{
pHead.SortTotal();//总分排序
cout<<"总分排序后的结果:"<<endl;
pHead.SetScort();//设置排序
pHead.OutputStudent();//打印排序后的结果
}
break;
default:
break;
}
} system("pause");
}
測试程序:
特别说明在測试前应在project文件夹或者程序文件夹下放一个score.dat文件以实现文件操作(程序执行时会从score.dat文件里读取学生信息到程序中)
score.dat的下载地址
http://download.csdn.net/detail/u010105970/7841327
score.dat中的部分学生信息
程序主界面
功能选择界面
输入学生信息:从score.dat文件里读取10个学生的信息到程序中
显示学生信息:显示读取到程序中的10个学生的信息
在学号为1009的学生后添加一个学生信息
学生信息为 姓名:张三 年龄:20 C++成绩:78 高数成绩:89 英语成绩:89
由于是在学号为1009的学生后添加的学生信息, 所以新增的学生的学号系统会自己主动将其设置为1010,曾经的学号为
1010的学生的学号会自己主动变为1011
加入后的效果:
删除学生信息:删除学号为1010的学生的学生信息
改动学生信息:改动姓名为贺祺的学生信息
查看改动后的学生信息:
对学生的C++成绩排序:
对学生的高数成绩排序
使用C++名单在文档处理和学生成绩管理系统相结合的更多相关文章
- Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化
在写api的时候,数据一般是以json格式进行传输的,没有对象可以直接使用.这个时候,对数据的序列化转换就很重要,Eloquent提供了很方便的方法和约定,不仅可以转换,还可以控制里面的键值. 基本用 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
在博客园很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览 ...
- [转载]基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
在博客园很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览 ...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
http://www.cnblogs.com/wuhuacong/p/3871991.html 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览 在博客园很多文章 ...
- SpringSecurity权限管理系统实战—二、日志、接口文档等实现
系列目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战 ...
- Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统
Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...
- SpingMVC 核心技术帮助文档
声明:本篇文档主要是用于参考帮助文档,没有实例,但几乎包含了SpringMVC 4.2版本的所有核心技术,当前最新版本是4.3,4.2的版本已经经是很新的了,所以非常值得大家一读,对于读完这篇文档感觉 ...
- SAS文档:简单的随机点名器
本次实验,我们设计了一个简单的随机点名系统,下面我来介绍一下它的SRS文档. 1.功能需求: 1.1 模块1 在此模块中,我们设置了RandomName类,创建一个随机点名器,里面加入了所在课程的名单 ...
- L18 如何快速查找文档获得帮助
原地址:http://www.howzhi.com/course/286/lesson/2121 查找文档快速 苹果提供了丰富的文档,以帮助您成功构建和部署你的应用程序,包括示例代码,常见问题解答,技 ...
随机推荐
- Oracle静态监听与动态监听概念全解析
基于11g,linux5.5做出的测试,单实例数据库做出的测试. 1.注册 Instance到监听器去注册自己的Instance_name与ORACLE_HOME,还可以选择添加global_dbna ...
- delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)
//from http://kingron.myetang.com/zsfunc0d.htm (*// 标题:充分利用pascal字符串类型 说明:和PChar不同,string可以保存# ...
- Android菜鸟的成长笔记(7)——什么是Activity
原文:[置顶] Android菜鸟的成长笔记(7)——什么是Activity 前面我们做了一个小例子,在分析代码的时候我们提到了Activity,那么什么是Activity呢? Activity是An ...
- 同步linux服务器的时间
1:看系统时间的时候发现有点儿误差,大概在2分钟左右. 于是想自动同步系统的时间. 2:找到ntpdate命令,没有就安装.debian(apt-get install ntpdate) 3:获取时间 ...
- camel-name-utils 在驼峰风格跟下划线风格之间切换
用处 用来将字符串在驼峰风格跟下划线风格之间切换. 对于一般人可能没用.对于写orm框架的人有点作用. 样例: company_name -> companyName 安装方式 加入下面依赖到p ...
- Android学习-----如何使用sqlite对于后台数据交换,sqlite使用例程入门
SQLite 这是一个非常流行的嵌入式数据库.它支持 SQL 查询,和只使用很少的内存.Android 在集成实施 SQLite,所以每 Android 应用程序能够使用 SQLite 数据库. ...
- JSP的include指令
JSP的include 指令:向当前页面中插入的一个静态文件的内容. 在test5.jsp里面 <%@ include file="test5_1.jsp" %> 新建 ...
- ActiveX 暴漏你全部信息的可怕的插件!
近期在项目中常常接触ActiveX控件,对于这个名词相信仅仅要是上网看视频的用户一定都会遇到adobe更新或者载入的提示,这就是一个ActiveX控件.一直以为Active控件是处理复杂的页面逻辑提供 ...
- java学习笔记08--泛型
java学习笔记08--泛型 泛型可以解决数据类型的安全性问题,它主要的原理,是在类声明的时候通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化的时候只要指定好需 ...
- LINUX编程学习笔记(十三) 遍历目录的两种方法
1 默认情况下 实际用户和有效用户是一样的 实际用户:执行用户 有效用户:权限用户 getuid() 实际用户 geteuid() 有效用户 chmod u+s 之后 ,其他人执行文件时,实际 ...