用C语言编写学生成绩管理系统

2025-03-13 23:47:44
推荐回答(3个)
回答1:

用c++弄的,楼主可以参考:

#include
#include
#include
#include
#define Smax 200
using namespace std;
struct student
{

string num;
string name;
float eng;
float math;
float clang;//定义c++

float gete(){return eng;}
float getm(){return math;}
float getcl(){return clang;}
string getn(){return num;}
string getna(){return name;}
int rank[3];
int row;//排名
int sinto(string,string,float,float,float);//输入数据
void sshow();//输出数据
float sall();// 求和
float save();//求平均
void objrank();//成绩分类

};

void shows()//普通函数
{
cout< < < }

int student::sinto(string a1,string a2,float b1,float b2,float b3 )
{
num=a1;name=a2;
eng=b1;math=b2;clang=b3;
return 0;
}

void student::sshow()//输出
{
cout< < < cout<}

float student::sall()//求总分
{ return eng+math+clang;
}

float student::save()//求平均分
{return sall()/3;}

void student::objrank()
{ int n;
rank[0]=(int)eng;
rank[1]=(int)math;
rank[2]=(int)clang;
for(int i=0;i<3;i++)
{ n=rank[i]/10;
switch(n)
{
case 9:n=1;break;
case 8:n=2;break;
case 7:n=3;break;
case 6:n=4;break;
default:n=5;}
rank[i]=n;
}
}

//类student结束

//类leo开始
class leo
{private:
student item[Smax];
int size;
public:
leo();
void lsize(int);//设置数组大小

void linit();//清空
void linsert();//添加
void ldelet(string);//删除
void lsearch(string);//查找
void lchan(string);//修改
void lpcent();//成绩分类
void lrow();//排序
void obave();//求平均
void lview();//显示全部数据
void lcin();//从磁盘输出
void lcout();//储存到磁盘
};
leo::leo()
{ student item[Smax];
lsize(0);
}

void leo::lsize(int i)
{size=i;
}

void leo::linit()
{ lsize(0);
cout<<"学生数据清除成功"< cout<<"当前无学生数据。请添加...."<}

void leo::ldelet(string a)
{
int k=0;string c;
for(int i=0;i if(item[i].getn()==a)
{
cout<<"你将要删除的数据如下:"< shows();

item[i].sshow();
cout<<"确定删除吗?请输入(y/n):";
cin>>c;
if(c=="y"||c=="Y") {item[i]=item[--size];k=1;}
}

if(k!=1)cout<<"\n删除失败!"< else cout<<"\n删除成功!"<}
void leo::linsert()//添加
{
string a="y";

while(a=="y")
{ int mn=0;
if(size>Smax)cout<<"超出范围,不能再添加!"< else
{
cout<<"\n请输入学号,姓名,英语,数学,c++成绩:"< string a1,a2;float b1,b2,b3;
cin>>a1>>a2>>b1>>b2>>b3;
for(int i=0;i if(item[i].getn()==a1)
{ mn++;
cout<<"输入学号与下面的数据重复!"< shows();//输出重复的学号,姓名,英语,数学,c++成绩
item[i].sshow();}
if(!mn)
{item[size++].sinto(a1,a2,b1,b2,b3);
cout<<"\n添加成功!";}
}
cout<<"是否继续输入?(y/n)";
cin>>a;
}
}

void leo::lsearch(string a)//查找
{int N=0;
for(int i=0;i if(item[i].getn()==a)
{
N++;
shows();//输出学号,姓名,英语,数学,c++

item[i].sshow();
}
if(!N)cout<<"输入有误或该学生数据不存在"<}
void leo::lchan(string a)//修改
{ if(size==0){cout<<"当前学生数据为空,请添加...."< else{
int N=0;
for(int i=0;i if(item[i].getn()==a)
{ N++;
cout<<"你将要修改的数据如下:"< shows();item[i].sshow();
cout<<"请输入要修改学生的学号,姓名,英语,数学,c++成绩"< string a1,a2;
float b1,b2,b3;
cin>>a1>>a2>>b1>>b2>>b3;
item[i].sinto(a1,a2,b1,b2,b3);
cout<<"修改成功!"< }
if(!N)cout<<"输入的学号有误!"<
}

void leo::lrow()//排序
{ student temb;
if(size>1)
{
for(int i=0;i { temb=item[i];
for(int j=i+1;j if(item[i].sall() { item[i]=item[j];
item[j]=temb; }
item[0].row=1;
for(int i=0;i if(item[i].sall()>item[i+1].sall())
item[i+1].row=i+2;
else item[i+1].row=i+1;//并列排名
}}
else if(size==1) item[0].row=1;
}
void leo::lview()//显示
{
if(size==0){cout<<"当前学生数据为空,请添加...."< else
{ cout<<"共有学生数据"< shows();
for(int i=0;i {
item[i].sshow();
}
}
}
void leo::obave()//统计科目
{ if(size!=0)
{
float sum[3]={0};
for(int i=0;i {
sum[0]+=item[i].gete();
sum[1]+=item[i].getm();
sum[2]+=item[i].getcl();}
cout<<"英语平均的成绩为:"
< cout<<"数学平均的成绩为:"< cout<<"c++的平均成绩是:"< cout<}
else cout<<"当前无学生数据,请添加......";
}

void leo::lpcent() //成绩分类
{ int p[3][200];
float tem=100.0/size;
string a[3]={"英语","数学","c++"};
if(size!=0)
{
for(int i=0;i { item[i].objrank();
p[0][i]=item[i].rank[0];
p[1][i]=item[i].rank[1];
p[2][i]=item[i].rank[2];
}

for(int k=0;k<3;k++)
{ int b[5]={0};
for(int i=0;i {
switch(p[k][i])
{
case 1: b[0]++;break;
case 2: b[1]++;break;
case 3: b[2]++;break;
case 4: b[3]++;break;
case 5: b[4]++;break;
default:break; }
}
cout<<<"人 中"< cout< < <<(float)b[1]*tem<<"% 中"<<(float)b[2]*tem<<"% 及"
<<(float)b[3]*tem<<"% 不及"<<(float)b[4]*tem<<"%"< cout< }
}
}
void leo::lcin()
{ string a[200],b[200];float c[200],d[200],e[200];
int f[200];
ifstream infile("ok.txt",ios::in);
if(! infile) cerr<<"文件打开失败。"<for(int i=0;i<200;i++)
{
infile>>a[i]>>b[i]>>c[i]>>d[i]>>e[i]>>f[i];
item[size].sinto(a[i],b[i],c[i],d[i],e[i]);size++;
if(f[i]==1) break;
}
infile.close();

}
void leo::lcout()
{ofstream outfile("ok.txt",ios::out);
if(! outfile) cerr<<"文件打开失败。"<for(int i=0;i outfile<
outfile.close();

}
}

void showmenu()
{
cout<<" ";
cout<<"|----------------------------------------------------------------|"< cout<<" ";
cout<<"|----------学生成绩统计管理系统--------------------------|"< cout<<" ";
cout<<"|----------------------------------------------------------------|"< cout<<" ";
cout<<"| 1.显示:显示所有学生数据(按总分排序)|"< cout<<" ";
cout<<"| 2.查看:查看所有统计结果 |"< cout<<" ";
cout<<"| 3.添加:插入一个学生数据 |"< cout<<" ";
cout<<"| 4.删除:删除一个学生数据 |"< cout<<" ";
cout<<"| 5.查找: 查找指定学生数据 |"< cout<<" ";
cout<<"| 6.修改:修改指定学生数据 |"< cout<<" ";
cout<<"| 7.清空:清除所有学生数据 |"< cout<<" ";
cout<<"| 8.帮助:查看系统注意事项 |"< cout<<" ";
cout<<"| 0.退出:将数据保存到磁盘 |"< cout<<" ";
cout<<"|----------------------------------------------------------------|"<}
void showtip()
{
cout<<"\n\t\t----------------操作完成!-----------------"< cout<<"\t\t----------------选择0-8继续------------------"<}

int main()
{
leo leo1;
string c="s",a;
system("cls");//清屛
showmenu();
cout<<"正在打开文件,请稍后..."< leo1.lcin();
cout<<"\t\t\t请选择菜单中的数字以便处理数据:";
cin>>c;
while(c!="0")
{

system("cls");
showmenu();
if(c=="1")
{ cout<<"你选择了1,学生数据显示如下:"< leo1.lrow();//排序
leo1.lview();
}
if(c=="2")
{ cout<<"你选择了2,统计结果如下:"< leo1.obave();//各科平均成绩,
leo1.lpcent();//各科分类情况

}
if(c=="3")
{ cout<<"你选择了3,";
leo1.linsert();
}
if(c=="4")
{ cout<<"你选择了4,请输出要删除的学号:"< cin>>a;
leo1.ldelet(a);
}
if(c=="5")
{
cout<<"你选择了5,请输出要查找的学号:"< cin>>a;
leo1.lsearch(a);
}
if(c=="6")
{
cout<<"你选择了6,请输出要修改的学号:"< cin>>a;
leo1.lchan(a);
}
if(c=="7")
{ cout<<"你选择了7,全部数据将要清空"< cout<<"你确定清空吗?输入y确定,n退出"< cin>>a;
if(a=="y"||a=="Y")
leo1.linit();
}
if(c=="8")
{ cout<<"1.本系统最多可以容纳200个学生数据."< cout<<"2.选择相应的数字输入,不同数据间留空隔,
输完后按回车键 ."< cout<<"3.注意操作完后将数据保存."< }
showtip();
cin>>c;
system("cls");leo1.lcout();
}

cout<<"谢谢您的使用!"<return 0;}

回答2:

网上百度,我以前百度到一份,不过看得云里雾里,哈哈……这种作业还是自己看书做做比较好……不然以后工作啦还是不会的

回答3:

兄弟这是个大工程,问问中,没多少人帮你的,除非粘贴别人的源码