请高手帮忙 编写一个简单的C语言学生成绩管理程序

2024-11-22 17:51:50
推荐回答(1个)
回答1:

C++版的,自己改一下,以前帮同学写的,忙着考试,没时间整了,抱歉,呵呵,希望对你有用!
#include
#include
#include //控制字符串的头文件
using namespace std;
class student//建立同学录的一个类
{
//头接点
public:
char name[20];
int num;
int age;
char sex;
double en;
double ma;
double com;
double ave;
student *next;
student *stu;
student(); //构造函数
void display()
{
cout<<"名字: "< }
student (char n[20],int nu, int ag, char se,double e,double m,double c,double av);
~ student ();
void Set();//添加
void Delete();//删除
void Alter();//修改
void List();//显示
void aver();
void ssearch();//查询
// void RearchN();
// void RearchNU();
void staxis(); //排序
void ssave(); //保存
void sload(); //读取
//排序函数
void pnumb();
void peng();
void pmat();
void pcomp();
friend void caozuo(int);

};
void student::aver()
{
double z;
z=en+ma+com;
ave=z/3;
}
student::student()//构造函数
{
strcpy(name, "nomame");
num=0;
sex='M';
age=0;
double en=0;
double ma=0;
double com=0;
double ave=0;

}
student::student (char n[20],int nu, int ag, char se,double e,double m,double c,double av)
{
strcpy(name, n);
num=nu;
sex=se;
age=ag;
en=e;
ma=m;
com=c;
ave=av;
}

student::~student(){};
student *s[50];
int i=0;
int j=0;

void student::Set()
{
cout<<"请输入姓名:"< cin>>name;
cout<<"请输入学号:"< cin>>num;
cout<<"请输入年龄:"< cin>>age;
cout<<"请输入性别:"< cin>>sex;
cout<<"请输入英语成绩:"< cin>>en;
cout<<"请输入数学成绩:"< cin>>ma;
cout<<"请输入计算机成绩:"< cin>>com;
j++;
s[i]=new student(name,num, age, sex,en,ma,com,ave);
i++;
}
void student:: Delete() //(2)删除人员(Delete)
{
cout<<"请输入您要删除的学生姓名:"< cin>>name;
for(int h=0;h {
if(strcmp(name,s[h]->name)==0)
{
i--;
s[h]=s[h+1];
h++;
}
else cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!";
}
}
void student::Alter() //(3)修改数据(Alter)
{
cout<<"请输入您要修改的学生的姓名:"< cin>>name;
for(int h=0;h {
if(strcmp(name,s[h]->name)==0)
{
int nu;
int ag;
char se;
double e;
double m;
double c;
cout<<"请输入学号: "< cin>>nu;
cout<<"请输入年龄:"< cin>>ag;
cout<<"请输入性别:"< cin>>se;
cout<<"请输入英语成绩:"< cin>>e;
cout<<"请输入数学成绩:"< cin>> m;
cout<<"请输入计算机成绩:"< cin>>c;
s[h]->num=nu;
s[h]->age=ag;
s[h]->sex=se;
s[h]->en=e;
s[h]->ma=m;
s[h]->com=c;
cout<<"数据修改成功!";
break;
}
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"< break;
}
}
}
void student::List() //(4)显示记录(List)
{
cout<<"本系统所有通讯录的数据如下:"< if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!"< for(int k=0;k {
s[k]->display();
}
}

void student::ssearch()//查询
{
//system("cls");
cout<<"\n** 查询学生信息 **\n"< cout<<"请输入查询方式:"< cout<<"1.按学号查询"< cout<<"2.按姓名查询"< cout<<"3.返回"< char c;
cin>>c;
switch (c)
{
case '1':
{ int n;
if(i==0)
{
cout<<"管理系统中没有输入数据!"< }
cout<<"请输入你要查询的学生的学号"< cin>>n;
for(int j=0;j {
if(s[j]->num==n)
{
cout<<"您要查询的学生是:"<name< cout<<"年龄: "<age<<" "<<"性别: "<sex<<" "<<"英语:"<en<<" "<<"数学:"<ma<<" "<<"计算机:"<com<<"平均分:"< break;
}

}
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"< }
break;
}
case '2':

{ if(i==0)
{ cout<<"管理系统中没有录入数据或者数据已经被删除!"< cout<<"请输入你要查询的学生姓名"< cin>>name;
for(int j=0;j {
if(strcmp(name,s[j]->name)==0)
{
cout<<"您要查询的学生是:"< //cout<<"学号:"< cout<<"学号:"< break;
};

if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"< }
}
break;}
case '3':
return ;
}

}

void student::pnumb()//按学号排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"< int i;
p1=stu;
for(i=1;i {
p1=stu;
if (p1->num>p1->next->num) // 如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->num) //中间的交换
{
p2=p1;
p1=p1->next;
if(p1->num>p1->next->num)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}

p1=stu;
do
{
p1->display();
p1=p1->next;
}while(p1);
}

void student::pmat() //按数学成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"< int i;
p1=stu;
for(i=1;i {
p1=stu;
if (p1->ma>p1->next->ma) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->ma>p1->next->ma)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->display();
p1=p1->next;
}while(p1);
}

void student::pcomp()//按语文成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{n++; p1=p1->next;}
cout<<"共有"< int i;
p1=stu;
for(i=1;i {
p1=stu;
if (p1->com>p1->next->com) // 如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{
p2=p1;
p1=p1->next;
if(p1->com>p1->next->com)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{
p1->display();
p1=p1->next;
}while(p1);
}

void student::peng()//按英语成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<int i;
p1=stu;
for(i=1;i{ p1=stu;
if (p1->en>p1->next->en) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->en>p1->next->en)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->display();
p1=p1->next;
}while(p1);
}

void student::staxis()//排序
{

char c;
cout<<"请选择以何种方式排序:"<cout<<"1……以学号排序"<cout<<"2……以英语成绩排序"<cout<<"3……以数学成绩排序"<cout<<"4……以计算机成绩排序"<
cout<<"5……返回"<cout<<"请选择(1-5)"<cin>>c;

switch (c)
{
case '1':pnumb(); break;
case '2':peng(); break;
case '3':pmat(); break;
case '4':pcomp(); break;

case '5':return;
}

}

void student::ssave() //保存到文件
{

char c;
cout<<"\n保存学生信息(将覆盖原文件),是否继续?[Y/N]:"; cin>>c;
if(toupper(c)!='Y') return;

ofstream tfile("date.txt",ios::binary);
student *p=stu;
while(p)// 写入文件
{
tfile<name<<"\t"<num<<"\t"<en<<"\t"<ma<<"\t"<com<<"\t"<ave;
tfile<p=p->next;
}
tfile.close();
cout<<"保存完毕..."<}

void student::sload() //读取
{
student *p;
p=stu;
while(p)
{
stu=p->next;
delete p;
p=stu;
}

ifstream tfile("date.txt",ios::binary);

char name1[20];
int num1;
char sex;
double en1,ma1,com1,ave1,age1;

tfile>>name1>>num1>>en1>>ma1>>com1>>ave1>>sex>>age1;
while(tfile.good())
{
//创建学生接点
student *s;
s=stu;
s=new student(name1,num1,age1,sex,en1,ma1,com1,ave1);
s->next=0;
s->ave=stu->ave;
if(stu) //若已经存在结点
{
student *p2;
p2=stu;
while(p2->next) //查找尾结点
{
p2=p2->next;
}
p2->next=s; //连接
}
else //若不存在结点(表空)
{
stu=s; //连接
}
tfile>>name1>>num1>>en1>>ma1>>com1>>ave1;
}
tfile.close();
cout<<"\n学生信息已经装入...\n";

}

void caozuo(int p)
{

student t;
switch(p)
{
case 0:t.Set();break;
case 1:t.Set();break;
case 2:t.Delete();break;
case 3:t.Alter();break;
case 4:t.List();break;
case 5:t.ssearch();//查询
case 6:t.staxis(); //排序
case 7:exit(0);break;
}
}
void main()
{
char w;
do
{
cout<<"请输入操作代码( 成绩录入/0 增加人员/1 删除人员/2 修改数据/3 显示记录/4 查询/5 排序/6 退出/7)"< int a;
cin>>a;
caozuo(a);
cout<<"您想继续进行其他操作吗?(y/n)"< cin>>w;
}while(w=='y');

} //利用while语句又回到了前面的循环