学生成绩管理系统

#include <stdio.h>
#include <string.h>
#include<stdlib.h>
struct stu                       
	{
	int id;                     
	char name[10];              
	int subnum;                 
	char subname[10];
	int score;
	 float credit;
	}f[10000];
		
	int x=0,n,choose,s=0,score=0,c;
	long int id,subnum;          
	char name[10],subname[10];
void  add()                          \\定义"添加"函数
{
	printf("你要添加几个学生的成绩");
	 scanf("%d",&n);                 \\对添加的几个学生n赋值
	 printf("学号    姓名    课程编号   课程名称   成绩   学分\n");
 n=n+s;                          \\计算共有几个学生
	 for (x=0;x<n;x++)                 \\在0~n之间循环
	 {
	 	scanf ("%ld%s%ld%s%d%f",&f[x].id,&f[x].name,&f[x].subnum,&f[x].subname,&f[x].score,&f[x].credit); 
\\对结构体中学生信息赋值
	 	s++;                         \\循环一次学生人数增加一
	 }
	 for (x=0;x<s;x++)                 \\在0~s之间循环
	 {
	  printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
	  printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);                                 \\输出学生信息
	 }
	 FILE *fp;
	fp=fopen("my.txt","wb");
	for(x=0;x<s;x++)
	fwrite(&f[x],sizeof(f[x]),1,fp);
	fclose(fp);
 }
 void cut()                          \\定义"删除"函数
{
int y=0;
printf("1.按学号查找;2.按姓名查找\n");
scanf ("%d",&choose);                 \\为选择函数赋值
switch(choose)                       
	{
	case 1:
	printf("输入学号:\n");
	scanf ("%ld",&id);                 \\输入要查找的学号
	for (x=0;x<s;x++)
		{
		if (f[x].id==id)                \\判断数据里的学号与要查询的是否一致
		 	{
		 printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
	     printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);
   	     	}	
    	printf("\n\n");
		y++;
		}
for (y=0;y<s;y++)
	{
	strcpy(f[y].name,f[y+1].name);
	f[y].id=f[y+1].id;
	f[y].subnum=f[y+1].subnum;
	strcpy(f[y].subname,f[y+1].subname);
	f[y].score=f[y+1].score;
	f[y].credit=f[y+1].credit;
	}s--;
	for (x=0;x<s;x++)
		{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
	        printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);                                 \\输出删除后的数据
			}
		printf("删除成功\n");break;
		
	
	case 2:
	printf ("输入姓名:");
	scanf ("%s",&name);                \\输入要查询的姓名
	for (x=0;x<s;x++)
	 	{
		 if (strcmp(f[x].name,name)==0)	 \\判断数据里的姓名与要查询的是否一致
	 		{
	printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");       printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);
	 		printf("\n\n");
		 	}
		y++;
		}
	for (y=0;y<s;y++)
		{
strcpy(f[y].name,f[y+1].name);
f[y].id=f[y+1].id;
f[y].subnum=f[y+1].subnum;
strcpy(f[y].subname,f[y+1].subname);
f[y].score=f[y+1].score;
f[y].credit=f[y+1].credit;
}s--;
for (x=0;x<s;x++)
	{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
	        printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);
			}
		printf("删除成功\n");break;
		}
FILE *fp;
fp=fopen("my.txt","wb");
for(x=0;x<s;x++)
fwrite(&f[x],sizeof(f[x]),1,fp);
fclose(fp);
}

void  student()
{
	printf ("1.按学号查找。2.按姓名查找。");
	scanf ("%d",&choose);               \\给查找条件赋值
switch(choose)
{
case 1:
	printf("输入学号:\n");
	scanf ("%ld",&id);                 \\输入学号
	for (x=0;x<s;x++)
 	{
	 if (f[x].id==id)                   \\判断数据里的学号与要查询的是否一致
		{
	printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");    printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);                 \\输出查询结果
		 }
	}break;
 case 2:
	printf ("输入姓名:");
	scanf ("%s",&name);                \\输入姓名
	for (x=0;x<s;x++)
	{
	    if (strcmp(f[x].name,name)==0)	  \\判断数据里的学号与要查询的是否一致
	 	{
		 printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);                   \\输出查询结果
	 	}
		break;
	}
	}
}
void   classes()
{
	int sum=0,b=0;
	float  ave,c;
printf ("输入课程序号:\n");
scanf ("%ld",&subnum);                \\输入课程序号
for (x=0;x<s;x++)
	{
	if(f[x].subnum==subnum)               \\判断数据里课程序号和与查询序号是否一致
		{
	printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");   printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);                    \\输出查询结果
		sum+=f[x].score;                  \\计算总成绩
		}
		ave=(float)sum/s;		            \\计算平均成绩
	}
	printf ("平均分:%.3f\n",ave);            
	for (x=0;x<s;x++)
		{
			if(f[x].score>=60)               \\判断成绩是否超过60
			b++;                          \\成绩超过60,人数加一
		}
		c=(float)b/s;                         \\计算及格率
		printf("及格率:%.3f",c);
}

int main()                                   \\主函数
{
	unsigned  a;
FILE *fp;
fp=fopen("my.txt","rb");	
fread(&f[s],sizeof(f[s]),1,fp);
while(!feof(fp))
{
s++;
fread(&f[s],sizeof(f[s]),1,fp);
}
fclose(fp);

while(1)
{ 
printf("\n\n\n");		
printf("           成绩记录簿\n");
printf("        1: 添      加\n");
printf("        2: 删      除\n");
printf("        3: 查学生成绩\n");
printf("        4: 查班成绩表\n");
printf("        0: 退      出\n");
printf("  请输入数字选择:      ");

scanf("%d",&a);
 switch(a)
 {
 case 1: add(); break;
 case 2: cut();break; 
 case 3:student();break;
 case 4:classes(); break;
 case 0:exit(0);
 default: ;
 }
}
}

 

posted @ 2019-09-26 17:34  JackieDYH  阅读(2)  评论(0编辑  收藏  举报  来源