/***********************************************************************************/
/* The student management system uses class array */
/* Programming language:C++ */
/* By:your name */
/* Date:2017/11/27 */
/***********************************************************************************/
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;
/*头文件区 iostream输入输出 string使用C风格字符串及库函数 stdlib使用system函数 使程序暂停以及清屏 fstream文件读写*/
/*定义数组最大长度 使用堆空间*/
int MAX_STUDENT_NUM=100;
/*类定义 包含学号 姓名 平时成绩 期末成绩*/
class Student
{
public:
void inputId();
void inputName();
void inputRegularGrade();
void inputfinalExam();
int getId();
void output();
float CalTotalMark();
private:
int id;//学号
char name[20];//姓名
float regularGrade;//平时成绩
float finalExam;//期末成绩
};
/*该函数计算总分 总分=期末成绩的一半+平时成绩的一半*/
/*返回值即总分*/
float Student::CalTotalMark()
{
return 0.5*regularGrade+0.5*finalExam;
}
/*该函数用来输出学生信息*/
void Student::output()
{
cout<<id<<"\t"<<name<<"\t"<<regularGrade<<"\t\t"<<finalExam<<"\t\t"<<CalTotalMark()<<endl;
}
/*该函数用来读取学生学号*/
/*返回值即学号*/
int Student::getId()
{
return id;
}
/*该函数用来获取期末成绩*/
/*由于成绩有范围 所以有范围判断*/
void Student::inputfinalExam()
{
cout<<"请输入期末成绩(0~100)"<<endl;
cin>>finalExam;
while(finalExam<0||finalExam>100)
{
cout<<"输入错误,成绩应该在0到100之间"<<endl;
cout<<"请输入期末成绩(0~100)"<<endl;
cin>>finalExam;
}
}
/*该函数用来获取平时成绩*/
/*由于成绩有范围 所以有范围判断*/
void Student::inputRegularGrade()
{
cout<<"请输入平时成绩(0~100)"<<endl;
cin>>regularGrade;
while(regularGrade<0||regularGrade>100)
{
cout<<"输入错误,成绩应该在0到100之间"<<endl;
cout<<"请输入平时成绩(0~100)"<<endl;
cin>>regularGrade;
}
}
/*该函数用来输入学生姓名*/
void Student::inputName()
{
char temp[20];
cout<<"请输入姓名"<<endl;
cin>>temp;
strcpy(name,temp);
}
/*该函数用来输入学生学号*/
void Student::inputId()
{
cout<<"请输入学号"<<endl;
cin>>id;
}
/*该函数用来显示主菜单*/
/*并获取用户选择*/
/*返回值为用户选择的序号*/
int Select_Menu()
{
int n;
system("cls");//清屏 即控制台全黑
cout<<" =================================="<<endl;
cout<<" = 欢迎使用成绩管理系统 ="<<endl;
cout<<" = 1=录入学生 2=显示信息 ="<<endl;
cout<<" = 3=排序总评 4=查找学生 ="<<endl;
cout<<" = 5=插入学生 6=删除学生 ="<<endl;
cout<<" = 7=统计人数 0=退出 ="<<endl;
cout<<" =================================="<<endl;
cout<<"请选择:"<<endl;
cin>>n;
while(n>7||n<0)
{
cout<<"输入非法请重新输入!"<<endl;
cin>>n;
}
switch(n)
{
case 1:
cout<<"你选择了1=录入学生"<<endl;
break;
case 2:
cout<<"你选择了2=显示信息"<<endl;
break;
case 3:
cout<<"你选择了3=排序总评"<<endl;
break;
case 4:
cout<<"你选择了4=查找学生"<<endl;
break;
case 5:
cout<<"你选择了5=插入学生"<<endl;
break;
case 6:
cout<<"你选择了6=删除学生"<<endl;
break;
case 7:
cout<<"你选择了7=统计人数"<<endl;
break;
case 0:
cout<<"你选择了0=退出"<<endl;
break;
}
return n;
}
/*新增学生信息*/
int Input(Student stu[],int num)
{
int temp;
S0:
stu[num].inputId();
for(int i=0;i<num;i++)
{
if(stu[i].getId()==stu[num].getId())
{
cout<<"该学号已存在,请重新输入"<<endl;
goto S0;
}
}
stu[num].inputName();
stu[num].inputRegularGrade();
stu[num].inputfinalExam();
num++;
cout<<"录入成功!"<<endl;
cout<<"继续输入?1确定,任意键取消!"<<endl;
cin>>temp;
if(temp==1)
{
if(num==MAX_STUDENT_NUM)
{
cout<<"人数已达到上限,无法再输入!"<<endl;
return num;
}
goto S0;
}
else
{
return num;
}
}
/*插入学生信息 与新增没什么区别*/
int Insert(Student stu[],int num)
{
int temp;
S0:
stu[num].inputId();
for(int i;i<num;i++)
{
if(stu[i].getId()==stu[num].getId())
{
cout<<"该学号已存在,请重新输入"<<endl;
goto S0;
}
}
stu[num].inputName();
stu[num].inputRegularGrade();
stu[num].inputfinalExam();
num++;
cout<<"录入成功!"<<endl;
cout<<"继续输入?1确定,任意键取消!"<<endl;
cin>>temp;
if(temp==1)
{
goto S0;
}
else
{
return num;
}
}
/*输出学生信息*/
void Output(Student stu[],int num)
{
if(0==num)
{
cout<<"无学生信息"<<endl;
system("pause");
return ;
}
cout<<"学号\t姓名\t平时成绩\t期末成绩\t总评成绩"<<endl;
for(int i=0;i<num;i++)
{
stu[i].output();
}
system("pause");
}
/*查找学生*/
void Search(Student stu[],int num)
{
int i,temp;
cout<<"请输入要查找的学生学号"<<endl;
cin>>temp;
for(i=0;i<num;i++)
{
if(temp==stu[i].getId())
{
cout<<"学号\t姓名\t平时成绩\t期末成绩\t总评成绩"<<endl;
stu[i].output();
break;
}
}
if(i==num)
{
cout<<"无该学号信息"<<endl;
}
system("pause");
}
/*统计学生信息*/
void Statis(Student stu[],int num)
{
int temp[5]={0};
cout<<"\t100~90\t89~80\t79~70\t69~60\t<60"<<endl;
for(int i=0;i<num;i++)
{
if(stu[i].CalTotalMark()<60)
{
temp[4]++;
}
else if(stu[i].CalTotalMark()>=60&&stu[i].CalTotalMark()<70)
{
temp[3]++;
}
else if(stu[i].CalTotalMark()>=70&&stu[i].CalTotalMark()<80)
{
temp[2]++;
}
else if(stu[i].CalTotalMark()>=80&&stu[i].CalTotalMark()<90)
{
temp[1]++;
}
else
{
temp[0]++;
}
}
cout<<"\t"<<temp[0];
cout<<"\t"<<temp[1];
cout<<"\t"<<temp[2];
cout<<"\t"<<temp[3];
cout<<"\t"<<temp[4]<<endl;;
system("pause");
}
/*删除学生信息*/
int Delete(Student stu[],int num)
{
int temp,i,j,n,flag=0;
do
{
flag=0;
cout<<"请输入要删除的学号"<<endl;
cin>>temp;
for(i=0;i<num;i++)
{
if(temp==stu[i].getId())
{
for(j=i;j<num;j++)
{
stu[j]=stu[j+1];
}
num--;
flag=1;
cout<<"删除成功!"<<endl;
break;
}
}
if(0==flag)
{
cout<<"无该学号"<<endl;
}
cout<<"是否继续删除,1继续,任意键退出"<<endl;
cin>>n;
}while(n==1);
return num;
}
/*对学生信息按总分排序*/
void Order(Student stu[],int num)
{
int i,j;
Student temp;
for(i=0;i<num;i++)
{
for(j=i+1;j<num;j++)
{
if(stu[i].CalTotalMark()<stu[j].CalTotalMark())
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
cout<<"排序成功!"<<endl;
cout<<endl;
system("pause");
}
/*保存内存内容至文件*/
void Save_File(Student* stu,int n)
{
ofstream fileout("students.dat",ios::binary);
if(!fileout)
{
cout<<"文件不能被打开!"<<endl;
return ;
}
for(int i=0;i<n;i++)
{
fileout.write((char*)&stu[i],sizeof(Student));
}
fileout.close();
}
/*读取文件内容至内存*/
int Open_File(Student*stu)
{
int i=0;
ifstream filein("students.dat",ios::binary);
while(filein)
{
filein.read((char*)&stu[i],sizeof(Student));
i++;
}
if(i>=1)
{
return i-1;
}
return 0;
}
/*主函数 循环运行Select_Menu供用户选择功能*/
/*根据选择 调用相关函数 进入相应功能 */
int main()
{
Student* stu;
stu=new Student[MAX_STUDENT_NUM];//申请堆空间
int n,num;
num=Open_File(stu);//读取文件
do
{
n=Select_Menu();
switch(n)
{
case 1:
num=Input(stu,num);
break;
case 2:
Output(stu,num);
break;
case 3:
Order(stu,num);
break;
case 4:
Search(stu,num);
break;
case 5:
num=Insert(stu,num);
break;
case 6:
num=Delete(stu,num);
break;
case 7:
Statis(stu,num);
break;
}
}while(n!=0);
Save_File(stu,num);//保存信息
delete[] stu;//释放堆空间
return 0;
}
成绩管理系统
最新推荐文章于 2021-08-19 16:46:11 发布