要求:
(1)原始数据的排列是无序的,系统应对原始成绩单给予保留。
(2)需要有一个菜单,可以进行操作和退出。
(3)将该班学生的成绩按学号顺序排序并存入std数组中,以方便打印。
(4)求出每位学生的平均分,并按平均分从高到低的顺序进行排序后,写到数组sort中。
(5)统计出各门课、各分数段学生的人数,按以下形式输出:
90分以上 80-89分 70-79分 60-69分 60分以下
高等数学
大学英语
普通物理
电路
C程序设计
(5)将该班中升入高年级的学生信息写入文件next数组中。
思路:
字写的不好,哈哈哈…
除了基本的stdio库 还涉及了结构体的stdlib库 和字符串的string库
排序使用经典的冒泡法进行
void paixu(float a[3])
{
int i,t,j;
for(j=2;j>=0;j--)
for(i=2;i>=0;i--)
if(a[i]<a[i-1])
{
t=a[i];
a[i]=a[i-1];
a[i-1]=t;
}
}
每次进行条件输入时,最后不忘记加一个:
scanf("%d",&a_1);
或者
scanf("%d",&b_1);
用a_1 和 b_1的值来进行最基本的选择。
我们用a_1来进行第一次选择。
用b_1来进行第二次选择。
当a_1==1
时,退出。
当b_1==0
时,返回上一选项。
开始 ,提供一个:
printf("|------------------------------------|\n");
printf("| 请输入选项编号(0-3):|\n");
printf("|------------------------------------|\n");
printf("| 1--成绩录入 |\n");
printf("| 2--成绩统计 |\n");
printf("| 3--学籍处理 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------------|\n");
scanf("%d",&a_1);
当我们输入a_1的值后加:
while(a_1!=0)
然后进行第一部分操作。
p=fopen("D:/write/f1.txt","w+");
用fopen函数进行数据的写入,我们的文本文档在D盘,write文件夹,叫f1(首先我们得新建这个文本文档)
“w+”可以让我们写入信息
在我们记录数据的时候运用了结构体类型。
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//制作人:毛子涵
void paixu(float a[3]);
void my1(char a[3]);
FILE*p;
int a1=0,a2=0,a3=0,a4=0,a5=0,b1=0,b2=0,b3=0,b4=0,b5=0;
int c1=0,c2=0,c3=0,c4=0,c5=0,d1=0,d2=0,d3=0,d4=0,d5=0;
int e1=0,e2=0,e3=0,e4=0,e5=0;//统计分数段的变量
int meijige=0;//记录没及格的人数
int n_1;//记录不及格科目的数目
int a_1,b_1;//主菜单和子菜单的选项控制
int i,e,j;//用于控制for循环的变量
float m[3];//存放平均数的数组
int t,n[3];//用于交换
struct student
{
int num;/*学号*/
char name[20];/*姓名*/
int x;/*数学*/
int y;/*英语*/
int w;/*物理*/
int d;/*电路*/
int c;/*C语言*/
}s[3],std[3];
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--成绩录入 |\n");
printf("| 2--成绩统计 |\n");
printf("| 3--学籍处理 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&a_1);
while(a_1!=0)
{
if(a_1==1)
{
printf("成绩录入。。。依次录入学号,姓名,以及5科成绩\n");
for(i=0;i<3;i++)
{
scanf("%d",&s[i].num);
scanf("%s",s[i].name);
scanf("%d",&s[i].x);
scanf("%d",&s[i].y);
scanf("%d",&s[i].w);
scanf("%d",&s[i].d);
scanf("%d",&s[i].c);
printf("您输入内容为:%d,%s,%d %d %d %d %d\n",s[i].num,s[i].name,s[i].x,s[i].y,s[i].w,s[i].d,s[i].c);
}
//成绩录入的程序 ok
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--成绩录入 |\n");
printf("| 2--成绩统计 |\n");
printf("| 3--学籍处理 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&a_1);
}
if(a_1==2)
{
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--按学号排序 |\n");
printf("| 2--计算平均分并排序 |\n");
printf("| 3--统计分数段 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
if(b_1==1)
{
printf("学号排序...\n");
for(j=1;j<4;j++)
for(i=0;i<3;i++)
{
if(s[i].num==j)
{
std[i].num=s[i].num;
strcpy(std[i].name,s[i].name);
std[i].x=s[i].x;
std[i].y=s[i].y;
std[i].w=s[i].w;
std[i].d=s[i].d;
std[i].c=s[i].c;
printf("%d,%s,%d %d %d %d %d\n",s[i].num,s[i].name,s[i].x,s[i].y,s[i].w,s[i].d,s[i].c);
}
}
//学号排序的程序
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--按学号排序 |\n");
printf("| 2--计算平均分并排序 |\n");
printf("| 3--统计分数段 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
}
if(b_1==2)
{
printf("计算平均分并排序...\n");
for(i=0;i<3;i++)
{
m[i]=(s[i].x+s[i].y+s[i].w+s[i].d+s[i].c)/5;
}
paixu(m);
j=1;
for(i=2;i>=0;i--)
{
printf("第%d名同学的均分为%f\n",j,m[i]);
j++;
}
//计算平均数的函数
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--按学号排序 |\n");
printf("| 2--计算平均分并排序 |\n");
printf("| 3--统计分数段 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
}
if(b_1==3)
{
printf("统计分数段...\n");
for(i=0;i<3;i++)
{
if(s[i].x>=90)
a1++;
if(s[i].x>=80&&s[i].x<90)
a2++;
if(s[i].x>=70&&s[i].x<80)
a3++;
if(s[i].x>=60&&s[i].x<70)
a4++;
if(s[i].x<60)
a5++;/*数学结束*/
if(s[i].y>=90)
b1++;
if(s[i].y>=80&&s[i].y<90)
b2++;
if(s[i].y>=70&&s[i].y<80)
b3++;
if(s[i].y>=60&&s[i].y<70)
b4++;
if(s[i].y<60)
b5++;/*英语结束*/
if(s[i].w>=90)
c1++;
if(s[i].w>=80&&s[i].w<90)
c2++;
if(s[i].w>=70&&s[i].w<80)
c3++;
if(s[i].w>=60&&s[i].w<70)
c4++;
if(s[i].w<60)
c5++;/*物理结束*/
if(s[i].d>=90)
d1++;
if(s[i].d>=80&&s[i].d<90)
d2++;
if(s[i].d>=70&&s[i].d<80)
d3++;
if(s[i].d>=60&&s[i].d<70)
d4++;
if(s[i].d<60)
d5++;/*电路结束*/
if(s[i].c>=90)
e1++;
if(s[i].c>=80&&s[i].c<90)
e2++;
if(s[i].c>=70&&s[i].c<80)
e3++;
if(s[i].c>=60&&s[i].c<70)
e4++;
if(s[i].c<60)
e5++;/*C程序设计结束*/
}
printf("分 数 \t90以上\t80~90\t70~80\t60~70\t60以下\n");
printf("高等数学 \t %d \t %d \t %d \t %d \t %d \n",a1,a2,a3,a4,a5);
printf("大学英语 \t %d \t %d \t %d \t %d \t %d \n",b1,b2,b3,b4,b5);
printf("普通物理 \t %d \t %d \t %d \t %d \t %d \n",c1,c2,c3,c4,c5);
printf("电 路 \t %d \t %d \t %d \t %d \t %d \n",d1,d2,d3,d4,d5);
printf("c程序设计\t %d \t %d \t %d \t %d \t %d \n",e1,e2,e3,e4,e5);
//统计分数段
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--按学号排序 |\n");
printf("| 2--计算平均分并排序 |\n");
printf("| 3--统计分数段 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
}
if(b_1==0)
{
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--成绩录入 |\n");
printf("| 2--成绩统计 |\n");
printf("| 3--学籍处理 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&a_1);
}
}
if(a_1==3)
{
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--生成并打印补考通知单 |\n");
printf("| 2--生成并打印退学通知单 |\n");
printf("| 3--生成并打印新名册 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
if(b_1==1)
{
n_1=0;//记录不及格的科目数目
printf("生成并打印补考通知单...\n");
for(i=0;i<=2;i++)
{
if(s[i].x<60)printf("%s同学 数学 科目需要补考\n",s[i].name);
if(s[i].y<60)printf("%s同学 英语 科目需要补考\n",s[i].name);
if(s[i].w<60)printf("%s同学 物理 科目需要补考\n",s[i].name);
if(s[i].d<60)printf("%s同学 电路 科目需要补考\n",s[i].name);
if(s[i].c<60)printf("%s同学 c语言 科目需要补考\n",s[i].name);
}
//打印补考通知单
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--生成并打印补考通知单 |\n");
printf("| 2--生成并打印退学通知单 |\n");
printf("| 3--生成并打印新名册 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
}
if(b_1==2)
{
printf("生成并打印退学通知单...\n");
for(i=0;i<=2;i++)
{
n_1=0;
if(s[i].x<60)n_1++;
if(s[i].y<60)n_1++;
if(s[i].w<60)n_1++;
if(s[i].d<60)n_1++;
if(s[i].c<60)n_1++;
if(n_1>=3)
{
meijige++;
printf("予%s同学学号于退学处理,原因3门及以上科目不及格\n",s[i].name);
for(j=i;j<2;j++)
{
s[j].num=s[j+1].num;
strcpy(s[j].name,s[j+1].name);
s[j].x=s[j+1].x;
s[j].y=s[j+1].y;
s[j].w=s[j+1].w;
s[j].d=s[j+1].d;
s[j].c=s[j+1].c;
}
printf("删除%s同学的信息\n",s[i].name);
}
}
}
//生成退学通知单
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--生成并打印补考通知单 |\n");
printf("| 2--生成并打印退学通知单 |\n");
printf("| 3--生成并打印新名册 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
}
if(b_1==3)/
{
p=fopen("D:/write/f1.txt","w+");
for(i=0;i<=2;i++)
{
n_1=0;
if(s[i].x<60)n_1++;
if(s[i].y<60)n_1++;
if(s[i].w<60)n_1++;
if(s[i].d<60)n_1++;
if(n_1<3)
printf("予%s同学升级\n",s[i].name);
if(p==NULL)
printf("open error");
fprintf(p,"%s\t%d\t%d\t%d\t%d\t%d\n",s[i].name,s[i].x,s[i].y,s[i].w,s[i].d,s[i].c);
}
if(fclose(p))
printf("close defeat");
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--生成并打印补考通知单 |\n");
printf("| 2--生成并打印退学通知单 |\n");
printf("| 3--生成并打印新名册 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&b_1);
}
if(b_1==0)
{
printf("|------------------------------|\n");
printf("| 请输入选项编号(0-3): |\n");
printf("|------------------------------|\n");
printf("| 1--成绩录入 |\n");
printf("| 2--成绩统计 |\n");
printf("| 3--学籍处理 |\n");
printf("| 0--退出 |\n");
printf("|------------------------------|\n");
scanf("%d",&a_1);
}
}
return 0;
}
void paixu(float a[3])
{
int i,t,j;
for(j=2;j>=0;j--)
for(i=2;i>=0;i--)
if(a[i]<a[i-1])
{
t=a[i];
a[i]=a[i-1];
a[i-1]=t;
}
} //按平均数排序函数