学生成绩管理系统(c++)控制台应用程序

【问题描述】

用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
【具体要求】

建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
 程序运行时显示一个简单的菜单,例如:
   (1):信息输入(INPUT)

(2):总分统计(COUNT)

(3):总分排序(SORT)

(4):查询(QUERY)

其中:

    (1):对4个学生的信息进行输入;
    (2):对每个学生的3门课程统计总分;
      (3):对4个学生的总分按降序排序并显示出来;
      (4):查询输入一个学号后,显示出该学生的有关信息;

程序:

#include<iostream>
#include<string>
using namespace std;
int n;
struct Student
{
int num;
string name;
int score[3];
int all;
}stu[100];
void PrintMenu()
{
cout<<"(1) 信息输入"<<endl;
cout<<"(2) 总分统计"<<endl;
cout<<"(3) 总分排序"<<endl;
cout<<"(4) 查询(输入学号)"<<endl;
cout<<"(5) 退出"<<endl;
}
void Input()
{
cout<<"请输入个数及他们的学号姓名三门课成绩"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>stu[i].num>>stu[i].name;
cout<<"c语言成绩:";
cin>>stu[i].score[0];
cout<<"FOX成绩";
cin>>stu[i].score[1];
cout<<"英语成绩";
cin>>stu[i].score[2];
}

}
void Count()
{
for(int i=0;i<n;i++)
for(int j=0;j<3;j++)
{
stu[i].all+=stu[i].score[j];
}
}
void Sort()
{
Student tem;
for(int j=1;j<n;j++)
for(int i=1;i<n;i++)
if(stu[i].all>stu[i-1].all)
{
tem=stu[i];
stu[i]=stu[i-1];
stu[i-1]=tem;
}
cout<<"排序后结果"<<endl;
for(int i=0;i<n;i++)
cout<<"第"<<i+1<<"名"<<stu[i].num<<" "<<stu[i].name<<" "<<stu[i].all<<endl;
}
void Query()
{
cout<<"请输入要查询的学生学号"<<endl;
int t,i;
cin>>t;
for( i=0;i<n;i++)
if(stu[i].num==t)break;
if(i>=n)cout<<"学生不存在"<<endl;
else
{
cout<<"学号"<<stu[i].num<<" "<<"姓名"<<stu[i].name;
cout<<"c语言成绩:"<<stu[i].score[0];
cout<<"FOX成绩"<<stu[i].score[1];
cout<<"英语成绩"<<stu[i].score[2];
cout<<endl;
}

}
int main()
{
int Num=0,n=0;
while(1)
{
int mark=0;
PrintMenu();
cin>>Num;
switch(Num)
{
case 1:{Input();break;}
case 2:{if(n!=0)Count();else cout<<"请输入学生信息!!";break;}
case 3:{if(n!=0)Sort();else cout<<"请输入学生信息!!";break;}
case 4:{if(n!=0)Query();else cout<<"请输入学生信息!!";break;}
case 5:{mark=1;break;}
default:{cout<<"error!"<<endl;break;}
}
if(mark==1)break;
system("pause");
system("cls");
}
return 0;
}

这里的排序用的是冒泡排序

下面是我写的新版本,能把学生额的信息保存在文本文件(二进制)里,并随时能用程序访问到。代码如下。前提是先在源文件的目录下建一个“学生管理.txt”

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int n;
struct Student
{
int num;
char name[20];
int score[3];
int all;
}stu[100];
int Empty()
{
ifstream infile("学生管理.txt",ios::in|ios::binary);

infile.seekg (0, ios_base::end);
int length = infile.tellg();
if(length==0)
return 1;
else return 0;
infile.close();
}
void Read()
{
ifstream infile("学生管理.txt",ios::in|ios::binary);
if(!infile)
{
cout<<"open error!"<<endl;
exit(1);
}
infile.read((char*)&n,sizeof(n));
for(int i=0;i<n;i++)
{
infile.read((char*)&stu[i],sizeof(stu[i]));
}
infile.close();
}
void Write()
{
ofstream outfile("学生管理.txt",ios::out|ios::binary);///默认存在源文件下|ios::trunc
if(!outfile)
{
cout<<"opean error!"<<endl;
exit(1);
}
outfile.write((char*)&n,sizeof(n));
for(int i=0;i<n;i++)
{
outfile.write((char*)&stu[i],sizeof(stu[i]));
}
outfile.close();///关闭流
}
void Show()
{
ifstream infile("学生管理.txt",ios::in|ios::binary);
if(!infile)
{
cout<<"open error!"<<endl;
exit(1);
}
infile.read((char*)&n,sizeof(n));

cout<<n<<"个"<<endl;

for(int i=0;i<n;i++)
{
infile.read((char*)&stu[i],sizeof(stu[i]));
cout<<"学号 "<<stu[i].num<<"姓名 "<<stu[i].name<<"总分 "<<stu[i].all<<endl;
}
infile.close();
}
void PrintMenu()
{
cout<<"(1) 信息输入"<<endl;
cout<<"(2) 总分统计"<<endl;
cout<<"(3) 总分排序"<<endl;
cout<<"(4) 查询(输入学号)"<<endl;
cout<<"(5) 展示信息"<<endl;
cout<<"(6) 清空所有信息,包括之前存的!"<<endl;
cout<<"(7) 退出"<<endl;
}
void Input()
{
cout<<"请输入个数及他们的学号姓名三门课成绩"<<endl;
int k;
n=0;
cin>>k;
if(!Empty())Read();
for(int i=n;i<n+k;i++)
{
cin>>stu[i].num>>stu[i].name;
cout<<"c语言成绩:";
cin>>stu[i].score[0];
cout<<"FOX成绩";
cin>>stu[i].score[1];
cout<<"英语成绩";
cin>>stu[i].score[2];
}
n=n+k;
Write();
}
void Count()
{
Read();
for(int i=0;i<n;i++)
for(int j=0;j<3;j++)
{
stu[i].all+=stu[i].score[j];
}
Write();
}
void Sort()
{
Read();
Student tem;
for(int j=1;j<n;j++)
for(int i=1;i<n;i++)
if(stu[i].all>stu[i-1].all)
{
tem=stu[i];
stu[i]=stu[i-1];
stu[i-1]=tem;
}
cout<<"排序后结果"<<endl;
for(int i=0;i<n;i++)
cout<<"第"<<i+1<<"名"<<stu[i].num<<" "<<stu[i].name<<" "<<stu[i].all<<endl;
Write();
}
void Query()
{
Read();
cout<<"请输入要查询的学生学号"<<endl;
int t,i;
cin>>t;
for( i=0;i<n;i++)
if(stu[i].num==t)break;
if(i>=n)cout<<"学生不存在"<<endl;
else
{
cout<<"学号"<<stu[i].num<<" "<<"姓名"<<stu[i].name;
cout<<"c语言成绩:"<<stu[i].score[0];
cout<<"FOX成绩"<<stu[i].score[1];
cout<<"英语成绩"<<stu[i].score[2];
cout<<endl;
}
Write();
}
void Clear()
{
ofstream outfile("学生管理.txt",ios::out|ios::binary);///默认存在源文件下|ios::trunc
if(!outfile)
{
cout<<"opean error!"<<endl;
exit(1);
}
outfile.close();
}
int main()
{
int Num=0,n=0;
while(1)
{
int mark=0;
PrintMenu();
cin>>Num;
switch(Num)
{
case 1:{Input();break;}
case 2:{if(!Empty())Count();else cout<<"请输入学生信息!!";break;}
case 3:{if(!Empty())Sort();else cout<<"请输入学生信息!!";break;}
case 4:{if(!Empty())Query();else cout<<"请输入学生信息!!";break;}
case 5:{if(!Empty())Show();else cout<<"请输入学生信息!!";break;}
case 6:{if(!Empty())Clear();else cout<<"请输入学生信息!!";break;}
case 7:{mark=1;break;}
default:{cout<<"error!"<<endl;break;}
}
if(mark==1)break;
system("pause");
system("cls");
}
return 0;
}


  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值