⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 学生管理系统.c

📁 无需解密,直接解压.一个简单的学生管理系统,老师布置的作业,适合学生用.
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define LEN sizeof(struct student)
typedef struct student
{   int num;
	char name[15];
	char glade[10];
	int math;
	int eng;
	int comp;
	struct student *next;
}st;


void *load()
{
	st *p,*q,*h;
	FILE *fp;
	if((fp=fopen("data.txt","rb"))==NULL)
	{
		printf("Cant't open file\n");
		exit(1);
	}
	p=(st *)malloc(LEN);
	if(!p)
	{
		printf("数据为空!\n");
	}
	h=p;
	rewind(fp);
	while(!feof(fp))
	{
		fscanf(fp,"%d%s%s%d%d%d",&p->num,p->name,p->glade,&p->math,
			&p->eng,&p->comp);
		p->next=(st *)malloc(LEN);
		if(!(p->next))
		{
			printf("数据结束!\n");
			return h;
		}
		q=p;
		p=p->next;
	}
	q->next=NULL;
	fclose(fp);
	return h;
}

st *sort(st *h)
{
    st *p,*q,*t,*h0;
    h0=h->next;
    h->next=NULL;
    while(h0!=NULL)
    {
	t=h0;
	h0=h0->next;
	p=h;
	q=h;
	while(strcmp(t->glade,p->glade)<0&&p!=NULL)
	{
	 q=p;
	 p=p->next;
	}
	if(q == p)
	{
	 t->next=p;
	 h=t;
	}
	else
	{
     t->next=p;
	 q->next=t;
	}
    }
    return h;
}

st *sort1(st *h)
{
    float ave1,ave2;
    st *p,*q,*t,*h0;
	h0=h->next;
	h->next=NULL;
    while(h0!=NULL)
	{	p=h;
	    q=h;
		t=h0;
		h0=h0->next;
		
		while(strcmp(t->glade,p->glade)==0&&p!=NULL)
		{
			ave1=(float)(t->math+t->eng+t->comp)/3;
			ave2=(float)(p->math+p->eng+p->comp)/3;
			if(ave1<ave2)
			{
				q=p;
                p=p->next;
			}
            else break;
		}
        if(q == p)
		{
			t->next=p;
		    h=t;
		}
	    else
		{
			t->next=p;
			q->next=t;
		}
	}
	return h;
}

void print(st *h)
{
    st *p;
    p=h;
    printf("\n\t学号      姓名         班级   数学    英语    计算机   平均分\n");
    printf("\t************************************************************************\n\n");
    while(p->next!=NULL)
    {
	printf("\t %d  \t%-16s%s\t%d\t%d\t%d\t%.2f\n",p->num,p->name,p->glade,
	      p->math,p->eng,p->comp,(float)(p->math+p->eng+p->comp)/3);
	if(strcmp(p->glade,p->next->glade)!=0&&p->next!=NULL)
	printf("\n");
	p=p->next;
    }
    printf("\t***********************************************************************\n");
}



void *findnum(st *h)
{
	st *p;
	int num;
	p=h;
	printf("请输入学生学号:\n");
	scanf("%d",&num);
	while(p->next!=NULL)
	{
		if(num==p->num)
		{printf("\n\t学号      姓名          班级    数学    英语   计算机  平均分\n");
			printf("\t %d  \t%-16s%s\t%d\t%d\t%d\t%.2f\n",p->num,p->name,p->glade,
	               p->math,p->eng,p->comp,(float)(p->math+p->eng+p->comp)/3);break;}
		p=p->next;
	}
	if(p->next==NULL)
		printf("该学号不存在!\n");
}


void *findname(st *h)
{
	st *p;
	char name[15];
	p=h;
	printf("请输入学生姓名:\n");
	scanf("%s",name);
	while(p->next!=NULL)
	{
		if(strcmp(name,p->name)==0)
			{printf("\n\t学号      姓名          班级    数学    英语   计算机  平均分\n");
			 printf("\t %d  \t%-16s%s\t%d\t%d\t%d\t%.2f\n",p->num,p->name,p->glade,
	                 p->math,p->eng,p->comp,(float)(p->math+p->eng+p->comp)/3);break;}
		p=p->next;
	}
	if(p->next==NULL)
		printf("该学生姓名不存在!\n");
}


void tongji(st *h)
{st *p;
 char glade[10],subject[6];
 int i=0,e1=0,e2=0,sum=0;
 printf("请输入要统计的班级:\n");
 scanf("%s",glade);
 if(strlen(glade)>10)
	{ printf("班级名称过长!\n");return;}
 printf("请输入要统计的科目:\n");
 printf("(数学:math 英语:eng 计算机:comp)\n");
 scanf("%s",subject);
 if(strlen(subject)>6)
	 printf("科目名称过长!\n");
 p=h;
 while(p->next!=NULL)
 {if(strcmp(p->glade,glade)==0)
	 {
		 i++;
		 if(strcmp("math",subject)==0)
		 {if(p->math>80)e1++;
		  if(p->math>60)e2++;
		  sum+=p->math;}
		 else if(strcmp("eng",subject)==0)
		 {if(p->eng>80)e1++;
		  if(p->eng>60)e2++;
		  sum+=p->eng;}
		 else if(strcmp("comp",subject)==0)
		 {if(p->comp>80)e1++;
		  if(p->comp>60)e2++;
		  sum+=p->comp;}
	 }
	 p=p->next;
 }
 if(i==0)
	 printf("你所查找的未能找到!\n");
 else
 {printf("\t班级      科目     平均分  优秀率   及格率\n");
 printf("\t%s%10s%10.2f%6d%%%8d%%\t\n",glade,subject,(float)sum/i,e1*100/i,e2*100/i);}
}




void menu()
{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 **************************************************\n");
}

 


main()
{
	int i;
	char ch;
    st *head;
star:menu();
    printf("请输入你的选择:\n");
    scanf("%d",&i);
	system("cls");
    switch(i)
	{
	case 1:
		{head=load(head);
         head=sort(head);
         head=sort1(head);
         print(head);
		 printf("press the enter to continue!\n");
		 getch();
		 system("cls");
		 goto star;}
    case 2:
		{head=load();
         findnum(head);
		 printf("press the enter to continue!\n");
		 getch();
		 system("cls");
		 goto star;}
	case 3:
		{head=load();
         findname(head);
		 printf("press the enter to continue!\n");
		 getch();
		 system("cls");
		 goto star;}
	case 4:
		{head=load();
		 tongji(head);
		 printf("press the enter to continue!\n");
		 getch();
		 system("cls");
		 goto star;}
	case 5:
		{printf("是否退出系统?(y/n)\n");
		 getchar();
		 ch=getchar();
		 getchar();
		 if(ch=='y'||ch=='Y')
		    exit(0); 
		 else
		 {
			 printf("press the enter to continue!\n");
			 getch();
		     system("cls");
			 goto star;
		 }
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -