C语言实训--简单的学籍管理系统 用最简单的函数来完成目的

要求:
(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;
	            }
} //按平均数排序函数


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、学籍管理系统 1.问题提出 为了分析教学效果并进行相应的学籍处理,各学校每到期末都对综合成绩进行分类统计、上报成绩汇总结果等,这给每位老师和学籍管理人员带来很大工作量。使用学籍管理系统可以减少工作者的工作负担。 2.功能要求 循环显示如图7(a)所示的主菜单。 ………………………………………………….        .………………………………………………………        …………………………………………………………. 请输入选项编号(0 ~4):.        . 请输入选项编号(0 ~4):.        .请输入选项编号(0 ~4):. ………………………………………………….        .………………………………………………………        …………………………………………………………. . 1——录入成绩.                . 1——按学号排序.               . 1——生成并打印补考通知单 . . 2——统计成绩.                . 2——计算平均分并排序 .         . 2——生成并打印退学通知单 . . 3——处理学籍.                . 3——统计分数段.               . 3——生成并打印新名册. . 4——创新功能.                . 4——返回.                    . 4——返回. . 0——退出系统.                . 0——退出系统.                 . 0——退出系统. ……………………………………………………         ……………………………………………………….        …………………………………………………………. 图7(a) 学籍管理主菜单            (b)成绩统计子菜单               (c)学籍处理子菜单 在主菜单中选择1:录入成绩。假设某班的原始成绩形式如下: 学号        姓名        高数    英语    物理    编程    马哲 0909339105 Huangying  89      92      85     88     82 0909339102 Zhangchen  72      68      83     90     78 0909339108 Linan      91      84      90     79     81 …… 其中,原始数据的排列是无序的。系统应能够保留原始成绩单。 在主菜单中选择2:进入如图7(b)所示的子菜单,并统计成绩。在此可以计算平均分、统计各分数段、按学号排序、按平均分排序。在子菜单选择1时,将该班学生成绩学号升序排序后的顺序存入std.dat文件中,以方便打印。在子菜单选择2时,求出每位学生的平均分,并按平均分从高到低的顺序进行排序后,写入文件sort.dat中。在子菜单选择3时,统计出各门课、各分数段学生的人数,并如表1所示的形式输出。在子菜单选择4时,返回主菜单;选择0,退出整个系统。 在主菜单选择3:进入如图7(c)所示的子菜单,并处理学籍。为不及格的学生打印重考通知单时,应在通知单上写明重考的课程、时间和地点(由键盘输入)。为了参加多门课重考的学生完成补考,应避免时间重复。为3门以上不及格的学生打印退学通知单。通知单上应写明学生学号、姓名、退学原因(几门课不及格,成绩多少)。删除已退学的学生信息,将该班中升入高年级的学生信息写入文件next.dat中。在子菜单选择4,返回主菜单;选择0,退出整个系统。 在主菜单中选择4:此项功能学生自由发挥,根据本组爱好增加与本题止相关的新功能。 在主菜单中选择0:显示结束信息(如“感谢使用本软件!已正常退出,按任意键结束。”),按任意键后,退出本功能。 表1 各门课、各分数段学生的人数 ……………………………………………………………………………………………………………….   . 90以上. 80~89分.70~79分.60~69分.60分以下. 高数.      .       .       .       .       . 英语.      .       .       .       .       . 物理.      .       .       .       .       . 编程.      .       .       .       .       . 马哲.      .       .       .       .       . ……………………………………………………………………………………………………………….

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值