源码、经验交流QQ群:613879714,有问题QQ群提问,这里不能及时回复
1. 主要功能
- 输入学生数据
- 显示学生数据
- 计算成绩
- 成绩排序
- 成绩查找
- 成绩修改
- 添加学生数据
- 删除学生成绩
2.演示
C语言-学生成绩管理系统
3.源码
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<string.h>
#define N 30
struct student
{ long num;
char name[10];
unsigned int score[3];
float sum;
float ave;
};
int n;
//进入系统界面
void in()
{
printf("\t\t┌───────────────┐\n");
printf("\t\t│ │\n");
printf("\t\t│ 学生成绩管理系统 │\n");
printf("\t\t│ │\n");
printf("\t\t│ 欢迎使用 │\n");
printf("\t\t│ │\n");
printf("\t\t│ 按任意键进入系统…… │\n");
printf("\t\t└───────────────┘\n");
getch();
}
//1.这是输入函数
void input(struct student stu[])
{
int i,j;
system("cls"); //清屏函数
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│输入学生数据│\n");
printf("\t\t\t└──────┘\n");
printf("请输入学生人数(1-30):\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%ld",&stu[i].num);
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d个学生的3门课程成绩(0-100):\n",i+1);
for(j=0;j<3;j++)
scanf("%d",&stu[i].score[j]);
}
printf("按任意键返回主菜单:\n");
getch();
}// 2.这是显示函数
void display(struct student stu[N])
{
int i;
system("cls");
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│显示学生数据│\n");
printf("\t\t\t└──────┘\n");
printf("%d 个学生数据为:\n",n);
printf("学号\t姓名\tC语言\t高数\t英语\n");
for(i=0;i<n;i++)
printf("%ld\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2]);
printf("按任意键返回主菜单:\n");
getch();
}
//3.这是计算成绩
void aver(struct student stu[N])
{
int i,j;
system("cls"); //清屏函数
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│ 计算成绩 │\n");
printf("\t\t\t└──────┘\n");
for(i=0;i<n;i++)
{
stu[i].ave=0;
stu[i].sum=0;
for(j=0;j<3;j++)
stu[i].sum+=stu[i].score[j];
stu[i].ave=stu[i].sum/3;
}
printf("%d个学生的数据:\n",n);
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
for(i=0;i<n;i++)
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
printf("按任意键返回主菜单:\n");
getch();
}
//4.这是排序函数
void sort(struct student stu[N])
{
int i,k,j;
system("cls"); //清屏函数
struct student temp;
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│ 成绩排序 │\n");
printf("\t\t\t└──────┘\n");
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(stu[k].ave<stu[j].ave) k=j;
if(k!=i)
{ temp=stu[i];stu[i]=stu[k];stu[k]=temp;}
}
printf("学生成绩按从高到低排序后:\n");
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
for(i=0;i<n;i++)
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
printf("按任意键返回主菜单:\n");
getch();
}
//5(1).学号查找
void order(struct student stu[N])
{
int i,m;
system("cls"); //清屏函数
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│ 按学号查找 │\n");
printf("\t\t\t└──────┘\n");
printf("请输入要查找的学号:");
scanf("%d",&m);
for(i=0;i<N;i++)
{
if(m==stu[i].num)
{
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
break;
}
}
if(i>=N)
printf("找不到该学号!\n");
printf("按任意键返回上一级:\n");
getch();
}
//5(2).姓名查找
void binary(struct student stu[N])
{
system("cls"); //清屏函数
int i;
char ch[10];
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│ 按姓名查找 │\n");
printf("\t\t\t└──────┘\n");
printf("请输入要查找的姓名:");
scanf("%s",ch);
for(i=0;i<N;i++)
{if(strcmp(ch,stu[i].name)==0)
{
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
break;
}
}
if(i>=N)
printf("找不到该姓名!\n");
printf("按任意键返回上一级:\n");
getch();
}
//5(3).这是求最高成绩
void highENDlow(struct student stu[])
{
int i;
system("cls"); //清屏函数
printf("\t\t\t┌─────────┐\n");
printf("\t\t\t│最高成绩和最低成绩│\n");
printf("\t\t\t└─────────┘\n");
struct student max,min;
max=stu[0];
min=stu[0];
for(i=1;i<n;i++)
{
if(stu[i].ave>max.ave) max=stu[i];
{
printf("最高分的学生数据是:\n");
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
printf("\n");
}
if(stu[i].ave<max.ave) max=stu[i];
{
printf("最低分的学生数据是:\n");
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
printf("\n");
}
}
printf("按任意键返回主菜单:\n");
getch();
}
//5.查找
void find(struct student stu[])
{
struct student *p;
p=stu;
int n;
while(1)
{
system("cls");
printf("\t\t┌───────────────┐\n");
printf("\t\t│ 成绩查找 │\n");
printf("\t\t├───────────────┤\n");
printf("\t\t│ 1. 按学号查找 │\n");
printf("\t\t│ 2. 按姓名查找 │\n");
printf("\t\t│ 3. 查找最高/低成绩 │\n");
printf("\t\t│ 4. 返回主菜单 │\n");
printf("\t\t└───────────────┘\n");
printf("请选择(1-3):");
scanf("%d",&n);
switch(n)
{
case 1: order(p); break;
case 2: binary(p);break;
case 3: highENDlow(p);break;
case 4: return;
}
}
}
//6.修改
void modi(struct student stu[])
{
system("cls"); //清屏函数
int i,m,j,score;
char ch,y='Y',n='N';
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│ 修改成绩 │\n");
printf("\t\t\t└──────┘\n");
printf("请输入要修改学生的学号:");
scanf("%d",&m);
for(i=0;i<N;i++)
if(m==stu[i].num)
{
printf("找到要该学生,信息如下:\n");
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
printf("修改C语言成绩输入0,高数输入1,英语输入2:");
scanf("%d",&j);
printf("要修改为:");
scanf("%d",&score);
printf("╔════════╗\n");
printf("║确认是否修改?Y/N║\n");
printf("╚════════╝\n");
scanf("%s",&ch);
if(ch==y)
printf("修改成功!\n");
if(ch==n)
{
printf("否!");
goto end;
}
switch(j)
{
case 0: stu[i].score[0]=score;break;
case 1: stu[i].score[1]=score;break;
case 2: stu[i].score[2]=score;break;
}
printf("修改后该学生,信息如下:\n");
printf("学号\t姓名\tC语言\t高数\t英语\n");
printf("%ld\t%s\t%d\t%d\t%d\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2]);
break;
}
if(i>=N)
printf("找不到该学生信息!\n");
end:printf("按任意键返回主菜单:\n");
getch();
}
//7.添加学生数据
void add(struct student stu[])
{
int i,j,m;
system("cls"); //清屏函数
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│添加学生数据│\n");
printf("\t\t\t└──────┘\n");
printf("请输入添加学生人数(30以内):\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("请输入第%d个学生的学号:",n+i+1);
scanf("%ld",&stu[n+i].num);
printf("请输入第%d个学生的姓名:",n+i+1);
scanf("%s",stu[n+i].name);
printf("请输入第%d个学生的3门课程成绩:\n",n+i+1);
for(j=0;j<3;j++)
scanf("%d",&stu[n+i].score[j]);
}
printf("添加成功!\n");
printf("按任意键返回主菜单:\n");
n+=m;
getch();
}
//8.删除学生数据
void del(struct student stu[])
{
system("cls"); //清屏函数
int i,a;
int flag=0;
printf("\t\t\t┌──────┐\n");
printf("\t\t\t│删除学生数据│\n");
printf("\t\t\t└──────┘\n");
printf("请输入要删除学生数据的学号:");
scanf("%d",&a);
for(i=0;i<n;i++)
{
if(a==stu[i].num)
{
flag=1;
printf("学号\t姓名\tC语言\t高数\t英语\t总成绩\t平均成绩\n");
printf("%ld\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].ave);
printf("╔════════╗\n");
printf("║确认是否删除?Y/N║\n");
printf("╚════════╝\n");
if (getchar()=='N')
{
break;
}
if(getchar()=='Y')
{
for(i;i<n;i++)
{
stu[i].num=stu[i+1].num;
strcpy(stu[i].name,stu[i+1].name);
stu[i].score[0]=stu[i+1].score[0];
stu[i].score[1]=stu[i+1].score[1];
stu[i].score[2]=stu[i+1].score[2];
}
n--;
printf("删除成功!\n");
}
}
if(flag==0)
printf("找不到该学号!\n");
}
printf("按任意键返回主菜单:\n");
getch();
}
//这是主函数
int main()
{
int n;
struct student *p,stu[N];
p=stu;
system("cls"); //清屏函数
in();
while(1)
{
system("cls");
printf("\t\t┌───────────────┐\n");
printf("\t\t│ 学生成绩管理系统 │\n");
printf("\t\t├───────────────┤\n");
printf("\t\t│ 1. 输入学生数据 │\n");
printf("\t\t│ 2. 显示学生数据 │\n");
printf("\t\t│ 3. 计算成绩 │\n");
printf("\t\t│ 4. 成绩排序 │\n");
printf("\t\t│ 5. 成绩查找 │\n");
printf("\t\t│ 6. 成绩修改 │\n");
printf("\t\t│ 7. 添加学生数据 │\n");
printf("\t\t│ 8. 删除学生成绩 │\n");
printf("\t\t│ 0. 退出 │\n");
printf("\t\t└───────────────┘\n\n");
printf("请选择(0-8):");
scanf("%d",&n);
switch(n)
{
case 1: input(p); break;
case 2: display(p);break;
case 3: aver(p); break;
case 4: sort(p);break;
case 5: find(p);break;
case 6: modi(p);break;
case 7: add(p);break;
case 8: del(p);break;
case 0:exit(1);
}
}
return 0;
}