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

📄 kaohe.cpp

📁 用链表做的学生成绩管理程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
#define NULL 0

struct Student
{
	char name[30];
    int math;
	int English;
	int c;
	int xiandai;
	int physics;
	struct Student *next;
};

struct Student *creattab(int n);                  
struct Student *insert(struct Student *phead); 
struct Student *print(struct Student *phead);
struct Student *del(struct Student *phead);
struct Student *find(struct Student *phead);
struct Student *modify(struct Student *phead);
struct Student *range(struct Student *phead);
struct Student *enter(struct Student *phead);
struct Student *unget(struct Student *phead);
void enterdata(struct Student *pnew);
void range1(struct Student *phead);
void range2(struct Student *phead);
void range3(struct Student *phead);
void range4(struct Student *phead);
void range5(struct Student *phead);
void save(struct Student *phead);
void read(struct Student *phead);

//-------------------主函数----------------------
int main()
{   	
	int a;
	int m=1;
	int n=34;
    struct Student *phead=NULL;

    system("color 2E");

    while(m)
	{   
		
		printf(" 学生成绩管理程序          \n");
		printf("                           \n");
		printf("  1.创建学生信息           \n");
		printf("  2.插入学生信息           \n");
        printf("  3.修改学生信息           \n"); 
		printf("  4.删除学生信息           \n");
		printf("  5.单科学习成绩录入       \n");
		printf("  6.单科成绩排名           \n");
		printf("  7.输出学生信息           \n");
		printf("  8.不及格超过2科的学生    \n");
		printf("  9.查找某个人的各科成绩   \n");
                           printf(" 10.保存学生信息          \n");
                printf(" 11.输出学生信息          \n");
		printf(" 12.退出                   \n");
	      
		scanf("%d",&a);
        getchar();
		 	
	    switch(a)	 
		{
		case 1:
                phead=creattab(n);
			    break;
		case 2:
				phead=insert(phead);
			    break;
        case 3: 
			    phead=modify(phead);
			    break;	    		    
		case 4:
			    phead=del(phead);
				break;
		case 5:  
			    phead=enter(phead);
			    break;	 
		case 6:	 
			    phead=range(phead);	 
				break;   
		case 7:
			    phead=print(phead); 
				break;
		case 8:	 
			    phead=unget(phead);	 
				break;	     
		case 9:
			    phead=find(phead);
			    break;  
		case 10:
			    save(phead);
				break;
		case 11:
			    read(phead);
				break;
		case 12:
			    m=0;
			    break;
	    default:
			printf("\n输入错误,请重新输入\n、");
			break;
		}
	
	}  
   return 0;	
}

//-------------------
void enterdata(struct Student *pnew)
{
    printf("请输入姓名 :");
    scanf("%s", pnew->name);

    printf("请输入高数成绩 :");
	scanf("%d", &pnew->math); 

	while (pnew->math<0 || pnew->math>100)
	{
		printf("您的输入错误,请重新输入:");
		getchar();
        scanf("%d", &pnew->math);
	}
      
    printf("请输入英语成绩 :");
	scanf("%d", &pnew->English);

	while (pnew->English<0 || pnew->English>100)
	{
        printf("您的输入错误,请重新输入:");
        getchar();
        scanf("%d", &pnew->English);
	}
    
    printf("请输入线代成绩 :");
	scanf("%d", &pnew->xiandai);

	while (pnew->xiandai<0 || pnew->xiandai>100)
	{
        printf("您的输入错误,请重新输入:");
        getchar();
        scanf("%d", &pnew->xiandai);
	}

    printf("请输入C语言成绩:");
	scanf("%d", &pnew->c);

	while (pnew->c<0 || pnew->c>100)
	{
        printf("您的输入错误,请重新输入:");
        getchar();
        scanf("%d", &pnew->c);
	}

    printf("请输入物理成绩:");
	scanf("%d", &pnew->physics);

	while (pnew->physics<0 || pnew->physics>100)
	{
        printf("您的输入错误,请重新输入:");
        getchar();
        scanf("%d", &pnew->physics);
	}

    printf("\n\n");
	printf("姓名             高数       英语       C语言       线代        物理  \n");
	printf("                                                                     \n");          
    printf("%-15s%4d%10d%12d%12d%12d\n", pnew->name, pnew->math, pnew->English, pnew->c, pnew->xiandai,pnew->physics);
	printf("\n\n");		 	 
}
//-----------------创建学生信息--------------
struct Student *creattab(int n)      
{  
	int  i; 
	char ch; 
	struct Student *phead;
    struct Student *pnew;
    struct Student *ptail;

	pnew=(struct Student *)malloc(sizeof(struct Student));
    phead=pnew;
    ptail=pnew;

	enterdata(pnew); 

    pnew->next=NULL;
    
    printf("是否继续,输入Y继续,输入其它键停止:");
    getchar();
    ch=getchar();
    if (ch=='y')
    {  
      for (i=2; i<=n; i++) 
	  {
         pnew=(struct Student *)malloc(sizeof(struct Student));
 
         enterdata(pnew);
	          
         pnew->next=NULL;
         ptail->next=pnew;
         ptail=pnew;

         printf("\n是否继续,输入Y继续,输入其它键停止:");
         getchar();
         ch=getchar();
		 if(ch!='y')
		 {
			 break;
		 }
	  }
	}

   system("cls");

   return (phead);
} 

//--------------删除学生信息---------------------------
struct Student *del(struct Student *phead)
{   
	int m;
	char stu[30];
    struct Student *p1;
    struct Student *p2;

	if(phead == NULL)
	{
		printf("此表为空\n");
		return (phead);
	}

    printf("请输入您要删除人的姓名:\n");
	scanf("%s", stu);
	p1=phead;

	while( (m=strcmp(stu,p1->name) )!=0 && p1->next!=NULL)
	{
		p2=p1;
		p1=p1->next;
	}

	if((m=strcmp(stu,p1->name)) == 0)
	{
		if(p1 == phead)
		{
			phead=p1->next;
		}
		else 
		{
			p2->next=p1->next;
		}

		free(p1);
		printf("delete:  %s\n", stu);
	} 
	else 
	{
		printf("没有找到 %s \n", stu);
	}

	return (phead);
}

//-----------插入学生信息-------------------------
struct Student *insert(struct Student *phead) 
{     
	    struct Student *pnew;
        struct Student *p;

	    p=phead;

        if(phead == NULL)
	   {
	      printf("此表为空...下面开始新建信息:\n\n");
		  pnew=(struct Student *)malloc(sizeof(struct Student));
          phead=pnew;  
	        
		  enterdata(pnew);

          pnew->next=NULL;
		  return (phead);
		} 

	    while(p->next != NULL)
		{ 
		   p=p->next;
		}

		pnew=(struct Student *)malloc(sizeof(struct Student));
        
		enterdata(pnew);
		 
        pnew->next=NULL;
        p->next =pnew; 
	    
     	return (phead);        
}
  
//---------------- 遍历 ----- 输出数据 ------------
struct Student *print(struct Student *phead) 
{    
    int i;
    int j;
	int n1=0;
    struct Student *pnew[34];
    struct Student *p;
    struct Student *temp;

    p=phead;

    for(i=0; i<34; i++)
	{ 
	   if(p != NULL)
	   {
	      pnew[i]=p;
	      p=p->next;
	      n1++;
	   }
	}	   

   for(i=0; i<n1-1; i++)
   {
	   for(j=i+1; j<n1; j++)
	   {
		   if(strcmp(pnew[i]->name, pnew[j]->name )<0)
		   {   
			   temp=pnew[j];
			   pnew[j]=pnew[i];
			   pnew[i]=temp;
		   }
	   }
   } 

  p=phead;
	if(phead!=NULL)
	{
		printf("姓名             高数       英语       C语言       线代        物理  \n");
	    printf("                                                                     \n");
	   do
	   {    
			printf("%-15s%4d%10d%12d%12d%12d\n", p->name, p->math, p->English, p->c, p->xiandai,p->physics);
			p=p->next;
		}while(p != NULL);
	} 	 
    else 
	{
		printf("此表为空...\n");
	 	return (phead); 
	}
   	 
    return (phead); 
}


//------------------单科学习成绩录入------------------------------
struct Student *enter(struct Student *phead)
{  
	int t;
	struct Student *pnew;
	struct Student *p ;

	p=phead;

    if(phead == NULL)
	{
	    printf("此表为空...下面开始新建信息:\n\n");
		pnew=(struct Student *)malloc(sizeof(struct Student));
        phead=pnew;  
	        
		enterdata(pnew);

        pnew->next=NULL;

		return (phead);
	} 
 
    while(p->next != NULL)
	{
	    p=p->next;
	} 
    
	pnew=(struct Student *)malloc(sizeof(struct Student));
	 	 	 
    pnew->English = NULL;
	pnew->math = NULL;
    pnew->c = NULL;
    pnew->xiandai = NULL;
    pnew->physics = NULL;

    printf("请输入姓名:    \n");
    scanf("%s", pnew->name);

	do
	{
	printf("                  \n");
	printf("  1.输入高数成绩  \n");
    printf("  2.输入英语成绩  \n");
    printf("  3.输入C语言成绩 \n");
    printf("  4.输入线代成绩  \n");
    printf("  5.输入物理成绩  \n");
	printf("  6.退出          \n");
	printf("                  \n");
    printf("  请选择:        \n");

	scanf("%d",&t);
	getchar();

	switch(t)
	{

	case 1:
		printf("请输入高数成绩:\n");
		scanf("%d", &pnew->math);

        while (pnew->math<0 || pnew->math>100)
		{
           printf("输入错误,请重新输入:");
           getchar();
           scanf("%d", &pnew->math);
		}

		break;

	case 2:	
		printf("请输入英语成绩:\n");
		scanf("%d", &pnew->English);

        while (pnew->English<0 || pnew->English>100)
		{
           printf("输入错误,请重新输入:");
           getchar();
           scanf("%d", &pnew->English);
		}

		break;

	case 3:
	    printf("请输入c成绩:\n");
		scanf("%d", &pnew->c);

        while (pnew->c<0 || pnew->c>100)
		{
           printf("输入错误,请重新输入:");
           getchar();
           scanf("%d", &pnew->c);
		}

		break;

	case 4:
	    printf("请输入线代成绩:\n");
		scanf("%d", &pnew->xiandai);

        while (pnew->xiandai<0 || pnew->xiandai>100)
		{
           printf("输入错误,请重新输入:");
           getchar();
           scanf("%d", &pnew->xiandai);
		}

		break;

    case 5:
	    printf("请输入物理成绩:\n");
		scanf("%d", &pnew->physics);

        while (pnew->xiandai<0 || pnew->xiandai>100)
		{
           printf("输入错误,请重新输入:");
           getchar();
           scanf("%d", &pnew->xiandai);
		}

		break;

	case 6:
		 t=6;
		 break;	 

	default:
		printf("输入错误,请重新输入: \n");
		break;
	}

    pnew->next=NULL;
	p->next=pnew;  

	}while(t!=6);

	system("cls");

	return (phead);
}

 //----------------------单科成绩排名--------------------------------
struct Student *range(struct Student *phead)
{ 	
    int n1;
    int m=1;

	if(phead == NULL)
	{
	    printf("此表为空...\n\n");
		return (phead);
	} 
  
  while(m)
  {  
	printf("1.按高数成绩排名   \n");
    printf("2.按英语成绩排名   \n");
    printf("3.按C语言成绩排名  \n");
    printf("4.按线代成绩排名   \n");
    printf("5.按物理成绩排名   \n");
    printf("6.退出             \n");
    printf("                   \n");
    printf(" 请选择:          \n");

	scanf("%d",&n1);
	getchar();

	switch(n1)
	{
	case 1: 
	    range1(phead);  
		break;
	case 2:
        range2(phead);
		break;
	case 3:
        range3(phead);
		break;
	case 4:
        range4(phead);
		break;
	case 5:
        range5(phead);
		break;
	case 6:
        m=0;
		break;
	default:
		printf("输入错误,请重新输入\n\n");
		break;
	}
  }

⌨️ 快捷键说明

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