C语言-学生成绩管理系统-程序设计综合训练(大一短学期课程,附源码)

C语言实现了学生成绩管理系统,可以对学生成绩进行录入、查询、修改、删除和排序。

#include 
#include 
#include 
int n;                                                //定义全局变量记录学生数量
struct stu{                                      //结构体定义 
	int num;
	char name[20];
	int shuxue;
	int cchengxu;
	int zongfen;
	struct stu *next;
} ;

struct stu*creat(void);     //创建一个链表并返回首地址 
struct stu*g1(void);     //实现第一个功能(键盘录入学生信息)
struct stu *g2(struct stu *head,struct stu *stud) ;   //实现第二个功能(插入数据) 
struct stu *g3(struct stu *head , int num) ;    //实现第三个功能(删除数据) 
void g4_1(struct stu * head ) ;/*数学成绩排序*/                   //实现第四个功能(排序)
void g4_2(struct stu * head ) ;/*程序设计成绩排序*/
void g4_3(struct stu * head ) ;/*总分排序*/
struct stu *g5_1(struct stu *head , int num) ;/*学号查询*/         //实现第五个功能(查询) 
void g5_2(struct stu *head , char num[20]) ; /*姓名查询*/ 
struct stu *g5_3(struct stu *head , int num) ;/*数学成绩查询*/ 
struct stu *g5_4(struct stu *head , int num) ;/*程序设计成绩 查询*/ 
struct stu *g5_5(struct stu *head , int num) ; /*总分查询*/ 
void g6(struct stu * head ) ;    //实现第六个功能(展示数据) 

int main()
{
	int k,z;
	struct stu *head;
	while(1){
        printf("┏------------------------------------------------------------------- ┐\n");    //友好界面显示 
        printf("|                  欢迎使用学生成绩管理系统                           |\n");
        printf("|                                                                     |\n");
        printf("|  ┏----------------------------------------------------------- ┐   |\n");
        printf("|  |请输入您要选择的功能:                                        |    |\n");
        printf("|  | 1.新建数据                                                  |    |\n");
        printf("|  | 2.添加数据                                                  |    |\n");
        printf("|  | 3.删除数据                                                  |    |\n");
        printf("|  | 4.排序                                                      |    |\n");
        printf("|  | 5.查询                                                      |    |\n");
        printf("|  | 6.展示全部数据                                              |    |\n");
        printf("|  | 0.退出系统                                                  |    |\n");
        printf("|  └----------------------------------------------------------- ┘   |\n");
        printf("└------------------------------------------------------------------- ┘\n");
        printf("\n·请输入您要选择的功能:");
        scanf("%d",&k);
        while(k<0||k>6){                                                                      //输入报错 
            printf("\n·您输入的信息有误,请重新输入:");
            fflush(stdin);
            scanf("%d",&k);}
         switch(k){
         	case 1:{head=g1();break;}
       		case 2:{struct stu new;
			   printf("·请输入学生的学号:");
               scanf("%d",&(new.num));
               printf("·请输入学生的姓名: ");
               scanf("%s",&(new.name));
               printf("·请输入学生的数学成绩: ");
               scanf("%d",&(new.shuxue));
               printf("·请输入学生的C程序设计成绩:");
               scanf("%d",&(new.cchengxu)) ;
               head=g2(head,&new);
			   break;}
         	case 3:{int z;printf("请输入要删除的学号:\n");
			 scanf("%d",&z);head=g3(head,z);
			 break;}
         	case 4:{int c;
	         	printf("1.数学成绩排序\n2.程序设计成绩排序\n3.总分排序\n4.返回主菜单");
	         	printf("\n\n请选择功能:\n");
				  scanf("%d",&c);
				  if(c==1){printf("        学号       姓名      数学          程序设计            总分\n");g4_1(head);break;}
				  else if(c==2){printf("        学号       姓名      数学          程序设计            总分\n");g4_2(head);break;}
				  else if(c==3){printf("        学号       姓名      数学          程序设计            总分\n");g4_3(head);break;}
				  else if(c==4){break;}
				  else {printf("输入有误!");break;}
	         	
	         }
         	case 5:{int c;
	         	printf("1.学号查询\n2.姓名查询\n3.数学成绩查询\n4.程序设计成绩查询\n5.总分查询\n6.返回主菜单");
	         	printf("\n\n请选择功能:\n");
				  scanf("%d",&c);
				  if(c==1){int z;printf("请输入学号:");scanf("%d",&z);g5_1(head,z);break;}
				  else if(c==2){char z[20];printf("请输入姓名:");scanf("%s",z);g5_2(head,z);break;}
				  else if(c==3){int z;printf("请输入数学成绩:");scanf("%d",&z);g5_3(head,z);break;}
				  else if(c==4){int z;printf("请输入程序设计成绩:");scanf("%d",&z);g5_4(head,z);break;}
				  else if(c==5){int z;printf("请输入总分:");scanf("%d",&z);g5_5(head,z);break;}
				  else if(c==6){break;}
				  else {printf("输入有误!");break;}
	         }
         	case 6:{g6(head);break;}
         	case 0:{printf("\n\n感谢使用学生管理系统 ^_^ Bye\n\n");exit(0);}
	}
	printf("您是否要退出系统(0.退出 1.不退出):");
      scanf("%d",&z);
	   while(k<0||k>1){                                                                      //输入报错 
            printf("\n·您输入的信息有误,请重新输入:");
            fflush(stdin);
            scanf("%d",&k);} 
      switch(z){
       case 0:{printf("\n\n感谢使用学生管理系统 ^_^ Bye\n\n");exit(0);break; }
       case 1:{break;}}
	}
 return 0;}


struct stu*creat(void){                                                     //创建链表 
 int k;
 struct stu *head,*end,*p;
 end=NULL;
  for(k=1;k<=n;k++){
  p=(struct stu*)malloc(sizeof(struct stu));
  p->next=NULL;
  if(end==NULL){
   head=p;
   end=p;
  }
  else{
   end->next=p;
   end=p;
  }
  end->next=NULL;
 }
 return head;
}

struct stu*g1(void){                                                  //功能一 (新建数据) 
 int i,j,k;
 struct stu *top,*q;
 i=1;
 printf("\n\n·请输入您想要输入的学生个数:");
 scanf("%d",&n);
 top=creat();
 for(q=top;q!=NULL;q=q->next,i++){
  printf("·请输入学生的学号:");
  scanf("%d",&(q->num));
  printf("·请输入学生的姓名: ");
  scanf("%s",&(q->name));
  printf("·请输入学生的数学成绩: ");
  scanf("%d",&(q->shuxue));
  printf("·请输入学生的C程序设计成绩:");
  scanf("%d",&(q->cchengxu)) ;
  
 }
 printf("·输入成功\n\n");
 return top;
}

struct stu *g2(struct stu *head,struct stu *stud)     //功能二(插入数据)  
 {struct stu *p0,*p1,*p2;
  p1=head; p0=stud;
  if(head==NULL) { head=p0; p0->next=NULL; }
  else 
  { while(( p0->num > p1->num )&&( p1->next!=NULL ))
    { p2=p1; p1=p1->next; }
    if(( p0->num > p1->num )&&( p1->next==NULL ))
	{p1->next=p0; p0->next=NULL;}
    if( p0->num <= p1->num )
    { if(head==p1) head=p0;  else p2->next=p0;
      p0->next=p1; 
    }
    else { p1->next=p0; p0->next=NULL; }
  }
  n=n+1;
  printf("添加成功!\n");
  return(head);
 } 

 struct stu *g3(struct stu *head ,int num)                      //功能三(删除数据) 
{
 struct stu *p1,*p2;  
 p1 = head;
 while(num!=p1->num && p1->next!=NULL) 
  { p2=p1; p1 = p1->next;}    	    //  定位 
 if(num==p1->num) 
  { if(p1==head) head=p1->next;
     else p2->next = p1->next;	    // 分离 
    free(p1); n=n-1;                    //  释放 
    printf("删除成功!\n");
  }
 else printf(" 未找到该数据!\n");
 return(head);
}

void g6(struct stu * head ) 
	{ struct stu *p; 
	  p = head;     /* p指向第一个数据结点 */ 
	  while( p!=NULL ) 
	  {printf("        学号       姓名      数学          程序设计            总分\n");
       printf("%10d%10s%10d%20d%20d\n",p->num,p->name,p->shuxue,p->cchengxu,(p->shuxue+p->cchengxu));
	    p = p->next ; 
       }            /* p 指向下一个数据结点 */ 
     }

struct stu *g5_1(struct stu *head , int num)         //按学号查询 
{ struct stu *p;  
   p = head;
   while((num!=p->num)&&(p->next!=NULL)){p=p->next;}
   if(num==p->num){printf("        学号       姓名      数学          程序设计            总分\n");
	               printf("%10d%10s%10d%20d%20d\n",p->num,p->name,p->shuxue,p->cchengxu,(p->shuxue+p->cchengxu));}
   else {printf("未找到该学生!\n");}
}    

void g5_2(struct stu *head , char num[20]){        //按姓名查询 
	struct stu *p;
	p = head;
    while(p!=NULL && (strcmp(num, p->name)!=0)) p=p->next;
    if(p!=NULL && strcmp(num, p->name)==0){
		printf("        学号       姓名      数学          程序设计            总分\n");
        printf("%10d%10s%10d%20d%20d\n", p->num, p->name, p->shuxue, p->cchengxu, (p->shuxue+p->cchengxu));
	}
    else printf("未找到该学生!\n");
}   

struct stu *g5_3(struct stu *head,int num)   //数学成绩查询 
{struct stu *p; int k,h=0; 
   p = head;
	 while( p!=NULL ) {
	 	if(num<p->shuxue)h=h+1;
 		p = p->next ; 
 	}
 	k=h+1;
 	printf("数学成绩高于%d的有%d人,你的数学排名为%d\n",num,h,k);
}

struct stu *g5_4(struct stu *head,int num)   //程序设计成绩查询 
{struct stu *p; int k,h=0; 
   p = head;
	 while( p!=NULL ) {
	 	if(num<p->cchengxu)h=h+1;
 		p = p->next ; 
 	}
 	k=h+1;
 	printf("程序设计成绩高于%d的有%d人,你的程序设计排名为%d\n",num,h,k);
}

struct stu *g5_5(struct stu *head,int num)   //总分查询 
{struct stu *p; int k,h=0; 
   p = head;
	 while( p!=NULL ) {
	 	if(num<(p->shuxue+p->cchengxu))h=h+1;
 		p = p->next ; 
 	}
 	k=h+1;
 	printf("总分高于%d的有%d人,你的总分排名为%d\n",num,h,k);
}

void g4_1(struct stu * head )            //数学成绩排序 
{
	struct stu *p,*p1;

	while(n!=0){p=head;long int max=0;
		while( p!=NULL ){
		if(max<p->shuxue){max=p->shuxue;p1=p;}
		p=p->next;}
		printf("%10ld%10s%10d%20d%20d\n", p1->num, p1->name, p1->shuxue, p1->cchengxu, (p1->shuxue+p1->cchengxu));
	    p1->shuxue=-1;
		n--;}
}

void g4_2(struct stu * head )          //程序设计成绩排序 
{
	struct stu *p,*p1;

	while(n!=0){p=head;long int max=0;
		while( p!=NULL ){
		if(max<p->cchengxu){max=p->cchengxu;p1=p;}
		p=p->next;}
		printf("%10ld%10s%10d%20d%20d\n", p1->num, p1->name, p1->shuxue, p1->cchengxu, (p1->shuxue+p1->cchengxu));
	    p1->cchengxu=-1;
		n--;}
}

void g4_3(struct stu * head )          //总分排序 
{
	struct stu *p,*p1;

	while(n!=0){p=head;long int max=0;
		while( p!=NULL ){
		if(max<(p->cchengxu+p->shuxue)){max=(p->cchengxu+p->shuxue);p1=p;}
		p=p->next;}
		printf("%10ld%10s%10d%20d%20d\n", p1->num, p1->name, p1->shuxue, p1->cchengxu, (p1->shuxue+p1->cchengxu));
	    p1->cchengxu=-1,p1->shuxue=-1;
		n--;}
}

你可能感兴趣的:(c语言,开发语言,vscode)