前言:
又到了期末,还没开始复习的我,又开始帮别人写C语言期末作业了,既然是帮别人写学生成绩管理系统,那就贴出来好了。ps:我上半学期学完可是没做这个东西,既然别人让帮忙那不得做完装装逼。
不是我 不想用链表,人家不会 ,所以 只能写结构体版了 ,以后谁让我写链表版的我在贴出来就是了。
思路 :
1: 分析需求:
(1) 输入全班同学的信息。
(2) 统计每位同学的期末考试总成绩和平均成绩,并保存。
(3) 统计各科的最高分、最低分、不及格率,保存及输出,不及格率保留两位小数。
(4) 可以按照学号进行查找,输出查找到的信息。
(5) 按学号递增的顺序进行排序。
(6) 按总成绩递减的顺序进行排序。
所以说我的目录面板就确定了
2:设计:
1:我构造了 1个输入函数 和 4个输出函数 去对应 我需要的功能
2: 我想要在每次打印完所需内容后返回主菜单并清屏, 所以我多加了了一个清屏函数
3:我的习惯是从来不写函数声明(我懒),把函数写在主函数上面。ps:人家要求写,我也栏得改回去
3:实现
直接贴代码 如下
#include<stdio.h>
#include<stdlib.h>
struct student
{
int num; //学号
int math; //数学成绩
int eng; //英语成绩
int C; //C语言成绩
int sum; //总成绩
double av; //平均成绩
} st[100],t; //保存n个人的信息
int main()
{
int n; //n为学生人数
int i,j;
int cin1(); //信息录入函数声明
void output1(int n); //各科信息统计函数声明
void output2(int n); //查询(学号递增)函数声明
void output3(int n); //查询 (总分递减函数声明
void output4(int n); //查询(按序号)函数声明
void cls(); //清屏函数声明
while (1)
{
printf ("\t\t*****************************************\n");
printf ("\t\t* *\n");
printf ("\t\t* 学生信息管理系统 *\n");
printf ("\t\t* *\n");
printf ("\t\t* 1:信息录入 2:各科信息统计 *\n");
printf ("\t\t* 3:查询(学号递增) 4:查询 (总分递减)*\n");
printf ("\t\t* 5:查询(按序号) 6:退出 *\n");
printf ("\t\t* *\n");
printf ("\t\t*****************************************\n\n");
int n;
printf ("请输入所需功能的序号:\n");
int gn; //功能编号
scanf("%d",&gn);
if (gn==1)
{
n = cin1(); //录入入n个学生的信息
cls(); //清屏
}
else if (gn==2)
{
output1 (n); //查询各科信息
cls();
}
else if (gn==3)
{
output2 (n); //按学号查询
cls();
}
else if (gn==4)
{
output3 (n); //按总分查询
cls();
}
else if (gn==5)
{
output4 (n); //按学号查询成绩
cls();
}
else if (gn==6)
break;
}
return 0;
}
void cls() //清屏
{
getchar(); //吃掉在上次操作最后的回车
printf ("按回车继续:\n");
getchar();
system("cls");
}
int cin1()
{
int n;
printf ("请输入学生的个数:\n");
scanf("%d",&n);
int i;
for (i=0; i<n; i++) //录入n个学生成绩
{
printf ("请输入第%d个人的学号,数学成绩,英语成绩,C语言成绩(用空格隔开)\n",i+1);
scanf ("%d%d%d%d",&st[i].num,&st[i].math,&st[i].eng,&st[i].C);
st[i].sum = st[i].math+st[i].eng+st[i].C;
st[i].av = 1.0*st[i].sum/3;
}
return n;
}
void output1(int n)
{
int i;
int manm=0,mane=0,manc=0; //数学,英语, c 的不及格人数
int maxm=0,maxe=0,maxc=0; //数学,英语, c 最高分
int lowm=100,lowe=100,lowc=100; //数学,英语, c 最低分
for (i=0; i<n; i++)
{
if (st[i].math<60) // 累加小于60的人数
manm++;
if (st[i].eng<60)
mane++;
if (st[i].C<60)
manc++;
if (maxm<st[i].math) // 找出最高分
maxm = st[i].math;
if (maxe<st[i].eng)
maxe = st[i].eng;
if (maxc<st[i].C)
maxc = st[i].C;
if (lowm>st[i].math) 找出最低分
lowm = st[i].math;
if (lowe>st[i].eng)
lowe = st[i].eng;
if (lowc>st[i].C)
lowc = st[i].C;
}
double ram,rae,rac; //各科不及格比例
ram = 1.0*manm/n;
rae = 1.0*mane/n;
rac = 1.0*manc/n;
printf ("\t\t*****************************************\n");
printf ("\t\t 数学 英语 C语言 \n");
printf ("\t\t 最高分 %d %d %d \n",maxm,maxe,maxc);
printf ("\t\t 最低分 %d %d %d \n",lowm,lowe,lowc);
printf ("\t\t 不及格率 %.2lf%% %.2lf%% %.2lf%% \n",100*ram,100*rae,100*rac);
printf ("\t\t*****************************************\n\n");
}
void output2(int n)
{
int i,j;
for (i=0; i<n; i++) //按学号递增排序
{
for (j=i+1; j<n; j++)
{
if (st[i].num>st[j].num)
{
t = st[i];
st[i] = st[j];
st[j] = t;
}
}
}
printf ("\t\t***********************学号递增************************\n");
printf ("\t\t* 学号 数学 英语 C语言 总分*\n");
for (i=0; i<n; i++)
{
printf ("\t\t* %d %d %d %d %d *\n",st[i].num,st[i].math,st[i].eng,st[i].C,st[i].sum);
}
}
void output3(int n)
{
int i,j;
for (i=0; i<n; i++) //按总分递减排序
{
for (j=i+1; j<n; j++)
{
if (st[i].sum>st[j].sum)
{
t = st[i];
st[i] = st[j];
st[j] = t;
}
}
}
printf ("\t\t***********************总分递减***********************\n");
printf ("\t\t* 学号 数学 英语 C语言 总分*\n");
for (i=0; i<n; i++)
{
printf ("\t\t* %d %d %d %d %d *\n",st[i].num,st[i].math,st[i].eng,st[i].C,st[i].sum);
}
}
void output4(int n)
{
int i,num1,flag=0;
printf ("请输入需要查询的学生学号:\n");
scanf("%d",&num1);
for (i=0; i<n; i++)
{
if (st[i].num==num1) //当找到该学号后输出
{
flag=1;
printf ("\t\t* 学号 数学 英语 C语言 总分*\n");
printf ("\t\t* %d %d %d %d %d *\n",st[i].num,st[i].math,st[i].eng,st[i].C,st[i].sum);
}
}
if (flag==0)
printf ("该学生不存在\n");
}
附上几章例图 自己感受一下 ,匆忙写完,有新想法再回来改
一直没发现程序无法运行, 经学弟提醒 检查后发现缺少一个头文件 #include <stdlib.h> 此头文件 在此功能调用system(“cls”); 清屏函数
特此感谢某位不认识的学弟