用C++编一个学生成绩管理系统
有谁会编一个C++的学生成绩管理系统,过几天就要交了!!有谁帮帮我呀!!!
[解决办法]
//350
#include <iomanip>
#include <iostream>
#include <fstream>
#include <vector>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <process.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
struct student
{
char name[10]; /// 姓名
char id[10]; /// 学号
float Ynum; /// 语文分数
float Snum; /// 数学分数
float Enum; /// 英语分数
float number; /// 总分
student *next;
};
///////////-------定义类-----------------------////////////
class stud
{
student *p1,*p2,*head;
public:
~stud() /////----析构函数------------------------
{
while(head)
{
p1=head-> next;
delete head;
head=p1;
}
}
///------------成员函数------------
void output(student *head); // 输出学生成绩
student * input(student *head); // 增加学生记录
student* del(student *head, char*p); // 删除记录
student* find(student *head,char *p,int &n); // 查找学生记录(可查找多个同名数据)
student* stat(student *head); //排序统计学生总分
friend void total(student*head); //统计学生总分
student* insert(student *head); //按学生总分插入记录
student* clear(student *head); // 删除当前表
void Inputs(student *p); //用于添加数据的子函数
};//----------------------------------------------------
////---------用于添加数据的子函数-------///////
void stud::Inputs(student*p)
{
cout < <setw(6) < < "姓名 " < <setw(8) < < " 学号 "
< <setw(8) < < "语文 " < <setw(8) < < "数学 "
< <setw(8) < < "英语 " < <endl;
cin> > p-> name > > p-> id;
cin > > p-> Ynum;
while(cin.fail())
{ cerr < < "您的输入有误,请重新输入 " < <endl;
cin.clear ();
cin.sync ();
cin> > p-> Ynum;
}
cin> > p-> Snum;
while(cin.fail())
{ cerr < < "您的输入有误,请重新输入 " < <endl;
cin.sync ();
cin.clear ();
cin> > p-> Snum;
}
cin> > p-> Enum;
while(cin.fail())
{ cerr < < "您的输入有误,请重新输入 " < <endl;
cin.clear ();
cin.sync ();
cin> > p-> Enum;
}
total(p); //计算出总分
}
////////-----输出学生成绩-----------------/////////////////////
void stud::output (student *head)
{ p1=head;
while(p1!=NULL)
{
cout < <setw(6) < <p1-> name < <setw(8)
< <p1-> id < <setw(8) < <p1-> Ynum
< <setw(8) < <p1-> Snum < <setw(8)
< <p1-> Enum < <setw(7) < <p1-> number < <endl;
p1=p1-> next ;
}
}
/////////------------插入学生成绩记录--------////////////////
student* stud::insert(student *head)
{
p1=new student;
Inputs(p1); //调用子函数 增加数据
p2=head;
student* p3=NULL;
while((p2-> number < p1-> number ) && p2-> next !=NULL)
{ p3=p2;
p2=p2-> next;
}
if(p2-> number > p1-> number)
{ p1-> next=p2;
if(p3==NULL) // 若当前值是最小的
return p1;
p3-> next =p1;
return head;
}
else
{ p2-> next=p1;
p1-> next=NULL;
return head;
}
}
//////----------清空数据------------/////////////
student* stud::clear(student*head)
{
while(head)
{ p1=head-> next ;
delete head;
head=p1;
}
return head;
}
//////////-----------排序统计函数-----------/////////////////
student *stud::stat(student *head)
{
p2=head;
p1=p2-> next;
while(p2-> next) //冒泡泡法, 呵呵`~~~
{
if(p2-> number > p1-> number)
{ // 把头指针指向当前比较小的节点
p2-> next=p1-> next;
p1-> next=head;
head=p1;
// 把用于比较的两个指针复位
//p2=head;
p1=p2-> next ;
}
else
{ // 指向下一个节点
p2=p2-> next ;
p1=p2-> next ;
}//-------------------------------------------
}
cout < < "当前表以按学生总分排序成功 " < <endl;
return head;
}
/////-----------删除记录-----------//////////////////////
student* stud::del (student *head,char *p)
{
p1=head;
p2=NULL;
while(strcmp(p1-> name ,p)&& p1-> next !=NULL)
{ p2=p1;
p1=p1-> next ;
}
if(!strcmp(p1-> name ,p))
{
if(p1==head)
head=p1-> next;
else
p2-> next=p1-> next ;
cout < < "删除成功,OK " < <endl;
delete p1;
}
else
cout < < " 没找到姓名 " < <p < < "的学生.\n "; //结点没找到
return head ;
}
///////----------统计总分---------------///////////////
void total(student *p)
{ p-> number = p-> Ynum + p-> Snum + p-> Enum;
}
///////-------------查找函数----------///////////////////
student* stud::find (student *head,char *p,int& n)
{
p2=head;
while(strcmp(p2-> name ,p) !=0 && p2-> next !=NULL)
p2=p2-> next ;
if(0==strcmp(p2-> name,p))
{
cout < <setw(6) < <p2-> name < <setw(8)
< <p2-> id < <setw(8) < <p2-> Ynum
< <setw(8) < <p2-> Snum < <setw(8)
< <p2-> Enum < <setw(7) < <p2-> number < <endl;
n++;
return p2;
}
else
if(n==0)
{
system( "cls ");
cout < < "对不起,没有您要查找的学生数据 " < <endl;
}
return NULL;
}
///////----------------增加学生记录-----------////////////////////////////
student *stud::input (student *head)
{ p1=new student;
p2=head;
Inputs(p1); //调用子函数 增加数据
if(head ==NULL)
{
head=p1;
p1-> next =NULL;
return head;
}
while(p2-> next !=NULL)
p2=p2-> next;
p2-> next=p1;
p1-> next=NULL;
return head;
}