C语言关于学生成绩报表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<iostream>
#include<fstream>
#include<cstring>
#include<string>
#include<iomanip>
#include<windows.h>
#include<conio.h>
#include<stdio.h>
using namespace std;
class Student{ //定义学生类
protected:
string Name;
public:
float Cpp;
float Math;
float English;
float Average;
float Sum;
string Number ;
void Ofile(ofstream &of); //将数据输入到文件
void Infile(ifstream &f); //从文件中提取数据
void Out(); //输出信息
void Set(string name,string number,float cpp,float math,float english,float sum,float average);
string GetName();
string GetNumber();
float GetCpp();
float GetMath();
float GetEnglish();
float GetSum();
Student *Next;
Student *Student_First;
};
string Student::GetName(){return Name;}
string Student::GetNumber(){return Number;}
float Student::GetCpp(){return Cpp;}
float Student::GetMath(){return Math;}
float Student::GetEnglish(){return English;}
float Student::GetSum(){return Sum;}
void Student::Set(string name,string number,float cpp,float
math,float english,float sum,float average)
{
Name=name;
Number=number;
Cpp=cpp;
Math=math;
English=english;
Sum=sum;
Average=average;
}
void Student::Infile(ifstream &f) //从文件中提取数据
{
f>>Name>>Number>>Cpp>>Math>>English>>Sum>>Average;
}
void Student::Ofile(ofstream &of) //将数据输入到文件
{
of<<endl<<setw(10)<<Name<<setw(15)<<Number<<setw(10)<<Cpp<<setw(10)<< Math
<<setw(10)<<English<<setw(10)<<Sum<<setw(10)<<Average;
}
void Student::Out() //输出信息
{
cout<<setw(10)<<Name<<setw(15)<<Number<<setw(10)<<Cpp<<setw(10)<<Math <<setw(10)<<English<<setw(10)<<Sum<<setw(10)<<Average<<endl;
}
class Function //功能类
{
private:
Student *Student_First;
void Read(); //读取学生成绩函数
void Save(); //保存学生成绩信息函数
public:
Function(); //构造函数
~Function(); //析构函数
void Menu(); //菜单函数
void Add(); //录入学生成绩函数
void Search(); //查询学生成绩函数
void Delete(); //删除学生成绩函数
void Modify(); //修改学生成绩函数
void landon() ; //登陆界面函数
void passtj(); //统计及格率
void rankmessage(); //显示学生成绩函数
void Show(); //按已有顺序输出
void rankNumber() ; //按学号升序排序
void rankSum(); //按总分排序
void tabsum(); //按总分区间输出
void winexit(); //退出系统函数
int studentSize(Student *pMem); //求链表长度
};
Function::Function() //构造函数
{
Student_First=new Student;
Read();
}
Function::~Function() //析构函数
{
delete Student_First;
}
//-----------------------------链表长度------------------- int Function::studentSize(Student *pMem)
{
int count = 0;
Student *pTemp=pMem;
while(pTemp->Next)
{
++count;
pTemp = pTemp->Next;
}
return count;
}
//--------------------按学号排序--------------------
void Function::rankNumber()
{
char choose;
int stusize;
Student *pl,*pSave,*pr,*pTemp,*pMem; pSave=pTemp=pMem=pl=pr=Student_First; pl = pMem->Next;
pr = pMem->Next->Next;
pSave = pMem;
stusize = studentSize(pMem);
for(int i =0;i<=(stusize);i++)
{
for(int j = 0;j<=(stusize);j++)
{
if(pr!=NULL) //如果为空就不能进行比较{
if((pl->Number) > (pr->Number ))
{
if(pr->Next!= NULL)
{ pl->Next= pr->Next;
pr->Next= pl;
pSave->Next= pr;
}
else
{ pl->Next= NULL;
pr->Next= pl;
pSave->Next= pr;
}
pTemp = pl;//指针交换
pl = pr;
pr = pTemp;
}
else
{ pl = pl ->Next;
pr = pr ->Next;
pSave = pSave ->Next;
}
}
}
pl = pMem->Next;
pr = pMem->Next->Next;
pSave = pMem;
}
system("cls");
cout<<setw(10)<<"姓名"<<setw(15)<<"学号"<<setw(10)<<"C++成绩
"<<setw(10)<<"数学成绩"
<<setw(10)<<"英语成绩"<<setw(10)<<"总分"<<setw(10)<<"平均分"<<endl; pSave=pSave->Next; //先移动一位
while(stusize--)
{ pSave->Out();
pSave= pSave->Next;
}
cout<<"\n\t1.返回主菜单\n\t2.返回显示成绩函数菜单"<<endl;
cin>>choose;
while(choose!='1'&&choose!='2')
{
cout<<"\n\t请输入正确选项!\n\t1.返回主菜单\n\t2.返回显示成绩函数菜单"<<endl;
cin>>choose;
}
if(choose=='1')
Menu();
else if(choose=='2')
rankmessage();
}
//-------------------按总分升序排序-----------
void Function::rankSum()
{
char choose;
int stusize;
Student *pl,*pSave,*pr,*pTemp,*pMem;
pSave=pTemp=pMem=pl=pr=Student_First;
pl = pMem->Next;
pr = pMem->Next->Next;
pSave = pMem;
stusize = studentSize(pMem);
for(int i =0;i<=(stusize);i++)
{
for(int j = 0;j<=(stusize);j++)
{
if(pr!=NULL)
{
if((pl->Sum) > (pr->Sum ))
{
if(pr->Next!= NULL)
{ pl->Next= pr->Next;
pr->Next= pl;
pSave->Next= pr;
}
else
{ pl->Next= NULL;
pr->Next= pl;
pSave->Next= pr;
}
pTemp = pl; //指针交换
pl = pr;
pr = pTemp;
}
else
{ pl = pl ->Next;
pr = pr ->Next;
pSave = pSave ->Next;
}
}
}
pl = pMem->Next;
pr = pMem->Next->Next;
pSave = pMem;
}
system("cls");
cout<<setw(10)<<"姓名"<<setw(15)<<"学号"<<setw(10)<<"C++成绩
"<<setw(10)<<"数学成绩"
<<setw(10)<<"英语成绩"<<setw(10)<<"总分"<<setw(10)<<"平均分"<<endl; pSave= pSave->Next;//先移动一位
while(stusize--)
{ pSave->Out();
pSave= pSave->Next;
}
cout<<"\n\t1.返回主菜单\n\t2.返回显示成绩函数菜单"<<endl;
cin>>choose;
while(choose!='1'&&choose!='2')
{
cout<<"\n\t请输入正确选项!\n\t1.返回主菜单\n\t2.返回显示成绩函数菜单"<<endl;
cin>>choose;
}
if(choose=='1')
Menu();
else if(choose=='2')
rankmessage();
}
//-------------------统计及格率函数---------------
void Function::passtj()
{
int count;
char choose;
float count1=0.0,count2=0,count3=0;
Student *p,*pMem;
p=pMem=Student_First;
count = studentSize(pMem);
while(p)
{
if(p->GetCpp()>=60)
count1+=1.000;
if(p->GetMath()>=60)
count2+=1.000;
if(p->GetEnglish()>=60)
count3+=1.000;
p=p->Next;
}
cout<<endl;
cout<<"三科成绩的及格率分别为:"<<endl;
cout<<"\tC++ :"<<count1/count*100<<"%"<<endl;
cout<<"\t数学 :"<<count2/count*100<<"%"<<endl;
cout<<"\t英语 :"<<count3/count*100<<"%"<<endl;
cout<<"\n\t1.返回主菜单\n\t2.返回显示学生成绩菜单"<<endl;
cin>>choose;
while(choose!='1'&&choose!='2')
{
cout<<"\n\t请选择正确选项!\n\t1.返回主菜单\n\t2.返回显示学生成绩菜单"<<endl;
cin>>choose;
}
if(choose=='1')
Menu();
else if(choose=='2')
rankmessage();
}
//---------------------按总分区间输出----------------
void Function::tabsum()
{
int count=0;
char choose ;
float sumup,sumdown;
Student *p,*pMem;
p=pMem=Student_First;
cout<<"请输入要查询的总分下限: ";
cin>>sumup;
cout<<"请输入要查询的总分上限: ";
cin>>sumdown;
system("cls");
cout<<setw(10)<<"姓名"<<setw(15)<<"学号"<<setw(10)<<"C++成绩
"<<setw(10)<<"数学成绩"
<<setw(10)<<"英语成绩"<<setw(10)<<"总分"<<setw(10)<<"平均分"<<endl; while(p)
{
if(p->GetSum()>=sumup&&p->GetSum()<=sumdown)
{ p->Out();
count++;
}
p=p->Next;
}
cout<<"\n总分在"<<sumup<<"分~~"<<sumdown<<"分之间的学生共有
"<<count<<"人!"<<endl;
cout<<"\n\t1.返回主菜单\n\t2.返回显示学生成绩菜单"<<endl;
cin>>choose;
while(choose!='1'&&choose!='2')
{
cout<<"\n\t请选择正确选项!\n\t1.返回主菜单\n\t2.返回显示学生成绩菜单"<<endl;
cin>>choose;
}
if(choose=='1')
Menu();
else if(choose=='2')
rankmessage();
}
//----------------------光标移动函数----------------
void gotoxy(int x, int y) {
COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
//----------------------录入学生成绩信息函数------------------
void Function::Add()
{
string name;
string number;
float cpp;
float math;
float english;
float average;
float sum;
char choose;
Student *f1,*p,*f2;
system("cls");
f1=Student_First;
f2=Student_First->Next;
while(f1->Next)
f1=f1->Next;
do
{
system("cls");
p=new Student;
cout<<"\n\t请输入您要添加的学生成绩信息:"<<endl;
cout<<"请输入学生姓名: ";
cin>>name;
cout<<"请输入学号: ";
cin>>number;
while(f2)
{
if(f2->GetName()==name&&f2->GetNumber()==number)
{ cout<<"该学生已存在,请确定姓名和学号!是否继续输入?(Y/N)"<<endl; cin>>choose;
if(choose=='y'||choose=='Y')
Add();
else
Menu();
}
else
f2=f2->Next;
}
cout<<"请输入C++成绩: ";
cin>>cpp;
cout<<"请输入数学成绩: ";
cin>>math;
cout<<"请输入英语成绩: ";
cin>>english;
sum=(cpp+math+english); //得到总分
average=(sum/3.000); //得到平均分
p->Set(name,number,cpp,math,english,sum,average);
f1->Next=p;
p->Next=NULL;
f1=f1->Next;
cout<<"数据添加成功!"<<endl;
Sleep(1000); //延时1秒
cout<<"是否继续输入信息?(Y\\N) "<<endl;
cin>>choose;
}while(choose=='y'||choose=='Y');
Menu();
}
//--------------------------删除信息函数--------------------
}
//---------------------------修改学生信息函数---------------------- //------------------------主菜单界面函数--------------------
void Function::Menu()
{
char choose;
system("cls");
cout<<endl;
cout<<" ********************************************************* "<<endl;
cout<<" 湘南学院欢迎你 "<<endl;
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<<endl;
cin>>choose;
switch(choose)
{ case '1': Add(); break;
case '2': Search(); break;
case '3': Delete(); break;
case '4': Modify(); break;
case '5': rankmessage(); break;
case '6': winexit(); break;
default:
{ cout<<"请按规定输入选择项!"<<endl;
Sleep(1000); //延时1秒
Menu();
}
}
}
//---------------------登陆界面函数-------------
void Function::landon()
{
string Name;
string Number;
Student *p;
cout<<endl;
cout<<" ********************************************************* "<<endl;
cout<<" 湘南学院欢迎你 "<<endl;
cout<<" 学生成绩管理系统 "<<endl;
cout<<" ********************************************************* "<<endl;
cout<<endl;
cout<<"\t"<<" ┏━━━━━━━━━━━━┓ "<<endl;
cout<<"\t"<<"请输入账号(姓名):┃ ┃ "<<endl;
cout<<"\t"<<" ┗━━━━━━━━━━━━┛ "<<endl;
cout<<"\t"<<" ┏━━━━━━━━━━━━┓ "<<endl;
cout<<"\t"<<"请输入密码(学号):┃ ┃ "<<endl;
cout<<"\t"<<" ┗━━━━━━━━━━━━┛ "<<endl;
gotoxy(28,8);
cin>>Name;
cout<<endl;
gotoxy(28,11);
cin>>Number;
getchar();
cout<<endl;
for(p=Student_First->Next;p!=NULL;p=p->Next)
{
if(p->GetName()==Name&&p->GetNumber()==Number)
{
cout<<" ------------ ☆ 登 ";
Sleep(600); //延时0.6秒
cout<<" 陆 ";
Sleep(500);
cout<<" 成 ";
Sleep(400);
cout<<" 功! ☆ ------------ ";
Sleep(300);
Menu();
}
}
cout<<"\t"<<"账号或密码错误! 请重新输入!"<<endl; Sleep(1500);
system("cls");
landon();
}
void main()
{
system("color f2");
Function function; //定义功能接口
ndon(); //登陆界面
}。