C++实现基本的成绩管理系统

需求:

1-学生姓名等基本字段

2-学生成绩字段

3-实现成绩修改和基本统计输出

 #include<iostream>
#include<windows.h>
#include<fstream>
#include<cstring>
using namespace std;
const int MAX=;
const char* savefile="info.dat"; //文件保存地址
class student//先定义一个学生信息类,内部的成员变量是公有的。
{public:
char name[];//学生姓名
int stu_no;//学号,只能输入数字
double c_score;//分数,双浮点类型
};
class ManageStu
{public:
ManageStu();//初始化
~ManageStu();
void controlsystem();
private:
void menu();//菜单
void input();//输入学生成绩
void displayone(int i,int style=);
void search();//按照学号和姓名查询成绩
void ModifyScore() ;//修改学生成绩
void waitkey();//等待输入按键函数
void statistics();//统计,最低成绩,最高成绩,总成绩和平均成绩
void Initial();//从数据记录中下载数据
void Save();//将数据上传到数据库中
void displayarea(int low,int high);
void print();//显示输出
student stu[MAX];//最多放MAX的个学生
int N;//目前学生人数
};
//主菜单
void ManageStu::menu()
{
system("cls");
cout<<endl;
cout<<"\t\t ********************主菜单********************"<<endl;
cout<<"\t\t|| 1-输入学生成绩 ||"<<endl;
cout<<endl;
cout<<"\t\t|| 2-查询学生成绩 ||"<<endl;
cout<<endl;
cout<<"\t\t|| 3-修改学生成绩 ||"<<endl;
cout<<endl;
cout<<"\t\t|| 4-学生成绩分段显示 ||" <<endl;
cout<<endl;
cout<<"\t\t|| 5-成绩统计信息 ||" <<endl;
cout<<endl;
cout<<"\t\t|| 0-退出 ||"<<endl;
cout<<"\t\t **********************************************" <<endl;
cout<<"选择操作(0-5):";
}
//总控制函数,在里面将所有的功能选择使用
void ManageStu::controlsystem()
{
cout<<endl;
cout<<"===============================================================================\n"<<endl;
cout<<"\n\n 欢迎进入2013级计算机系C++学生成绩管理系统 ";
cout<<endl;
cout<<"\n\n 作者:陈龙\n";
cout<<"===============================================================================\n"<<endl;
Sleep() ;
OPEN://本段程序的标签,可以方便循环操作
menu();//调用菜单
int cho;//输入调用菜单中的选项
cin>>cho;
system("cls");//选择相应的操作后,清除屏幕上的其他信息,只显示要操作的信息
switch(cho)//选择结构,灵活进入各个功能
{
case :input();break;
case :search();break;
case :ModifyScore();break;
case :print();break;
case :statistics();break;
case :return;//程序结束的地方
default: goto OPEN; //输入错误,默认重新开始
}
goto OPEN;
}
void ManageStu::input()//输入函数实现代码
{//输入相应的信息
char conti='Y';
do{
cout<<"根据提示输入信息"<<endl;//提示信息
cout<<"学号:";cin>>stu[N].stu_no;
cout<<"姓名:";cin>>stu[N].name;
cout<<"C++成绩: ";cin>>stu[N].c_score;
cout<<"是否继续输出(y/n): ";cin>>conti;
N++;
}while(conti=='Y'||conti=='y');//判断是否继续输入
}
void ManageStu::displayone(int i,int style)
{
if(style==)
{
cout<<"学号:"<<stu[i].stu_no<<endl;
cout<<"姓名:"<<stu[i].name<<endl;
cout<<"C++成绩:" <<stu[i].c_score<<endl;
}
else
{
cout<<"学号:"<<stu[i].stu_no<<" ";
cout<<"姓名:"<<stu[i].name<<" ";
cout<<"C++成绩:" <<stu[i].c_score<<endl;
}
}
void ManageStu::search()
{//查询代码实现
int choice;
SEAR:{
system("cls");
cout<<"\t *************查询方式***************"<<endl;
cout<<"\t|| 1-学号查询 ||"<<endl;
cout<<endl;
cout<<"\t|| 2-姓名查询 ||"<<endl;
cout<<endl;
cout<<"\t|| 0-返回上一级菜单 ||"<<endl;
cout<<"\t ***********************************" <<endl;}
cout<<"选择查询方式(1,2):";cin>>choice;
int result=-;//保存查找到的信息
switch(choice)
{
case :{
int stuno;
cout<<"输入学号:";cin>>stuno;
for(int i=;i<N;i++)//遍历查询相符合的信息
{
if(stu[i].stu_no==stuno)
{
result=i;//保存到result
break;//退出查询
}
}
break;}
case :{
char name[];
cout<<"输入姓名:";cin>>name;
for(int i=;i<N;i++) //遍历查询
{
if(!strcmp(stu[i].name,name))
{
result=i;
break;
}
}
break;
}
case : return;
default: goto SEAR;//选择错误默认返回初始菜单状态
}
if(result==-)//如果result的值没有改变说明没有找到
{
cout<<"没有符合条件的学生!";
}
else{
cout<<"查询结果:"<<endl;
displayone(result);
}
char ch;
cout<<"是否继续查询(y/n):";cin>> ch;
if(ch=='y'||ch=='Y')goto SEAR;//如果继续查询则返回初始菜单状态
//否则默认退出本函数
}
void ManageStu::ModifyScore()
{//修改分数代码实现
MODI:
int result=-;//保存查找的结果
char name[];
cout<<"输入学生姓名:";cin>>name;
for(int i=;i<N;i++)
{
if(!strcmp(stu[i].name,name))
{
result=i;
break;
}
}
if(result==-)
{
cout<<"没有符合条件的学生"<<endl;
}
else
{
cout<<"查询结果:"<<endl;
displayone(result);
cout<<endl;
cout<<"输入"<<stu[result].name<<"的新成绩";cin>>stu[result].c_score;
cout<<"修改后的信息如下"<<endl;
displayone(result);
cout<<endl;
}
char ch;
cout<<"是否继续查询修改(y/n):";cin>> ch;
if(ch=='y'||ch=='Y')goto MODI;
}
void ManageStu::waitkey()//等待按键的函数实现代码
{
cout<<endl<<"按ENTER键退出"<<endl;
getchar();//等待按键,以留在所操作的节面上,
getchar();//按键后就可以返回主界面
}
void ManageStu::statistics()//统计学生信息实现代码
{
if(N==)
{
cout<<"没有学生信息"<<endl;
waitkey();return;
}
double sum=stu[].c_score;//保存总分
int result=;//保存分数最高者的编号
int lows=;//保存分数最低者的编号 for(int i=;i<N;i++)
{
if(stu[i].c_score>stu[result].c_score)
result=i;
else if(stu[i].c_score<stu[result].c_score)
lows=i;
sum+=stu[i].c_score;
}
cout<<"\t\t总成绩是:\t\t"<<sum<<endl;
cout<<"\t\t平均成绩是:\t\t"<<sum/N<<endl;
cout<<endl;
cout<<"=============================================="<<endl;
cout<<"\t\t最高成绩:\t\t"<<endl;
displayone(result) ;
cout<<endl;
cout<<"=============================================="<<endl;
cout<<"\t\t最低成绩:\t\t"<<endl;
displayone(lows);
cout<<endl;
waitkey();//代码作用同上
}
ManageStu::ManageStu()
{
N=;//初始化0个学生
Initial();//调用初始化代码,从文件中下载学生信息
}
ManageStu::~ManageStu()
{
Save();//当退出时自动保存到 文件中
}
void ManageStu::Initial()
{
ifstream in(savefile,ios::in);//打开文件,输入模式
while(in>>stu[N].stu_no)//直到将文件中的信息全部加载完为止
{
in>>stu[N].name>>stu[N].c_score;
N++;//自动使记录加一
}
in.close();//关闭文件句柄
}
void ManageStu::Save()//保存文件
{
ofstream out(savefile,ios::out);//打开文件,输出模式
for(int i=;i<N;i++)//将所有的信息保存到文件中
{
out<<stu[i].stu_no<<" "<<stu[i].name<<" "<<stu[i].c_score<<endl;
}
out.close();//关闭文件句柄
}
//按照最低分最高分查询相应分数段信息
void ManageStu::displayarea(int low,int high)
{
cout<<low<<"<=成绩 <"<<high<<" :"<<endl;
for(int i=;i<N;i++)
{
if(stu[i].c_score>=low&&stu[i].c_score<high)
{
displayone(i,);//调用输出单个信息的函数,指定style参数为1
//即按照第二种格式输出
} }
}
void ManageStu::print()
{//调用按照最低分和最高分查询信息的函数输出相应分数段的信息
if(N==){
cout<<"没有学生成绩" <<endl;
waitkey();return;
}
//>=90
displayarea(,);
//80-89
displayarea(,);
//70-79
displayarea(,);
//60-70
displayarea(,);
//0-60
displayarea(,);
waitkey();//在此等待按键,若不按键就会留在这个输出界面上
//否则无法留在输出界面,直接返回菜单,导致无法看到输出结果
}
int main()
{
ManageStu command;
command.controlsystem();//调用控制函数实现代码
return ;
}
05-15 01:21