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

📄 成绩.cpp

📁 本程序是成绩管理程序
💻 CPP
字号:
/*成绩管理*/
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

/*用结构体存储学生信息*/
struct student		
{
	int	  stunum;
	char  name[MAX];
	float score;
	student *next;
};

typedef student*  PSTU;

/*创建成绩表*/
PSTU CREATELIST ();
/*将成绩表按学号从小到大排列*/
PSTU RANK (PSTU T);
/*交换结点的内容*/
void CHANGE (PSTU a,PSTU b);
/*搜索成绩表*/
PSTU SEARCH   (PSTU T);
/*按成绩查询成绩表*/
void SEARCH1  (PSTU T);

/*比较字符串*/
int COMSTRING  (char *a , char *b);
/*复制字符串*/
void COPY (char *a , char *b);


/*修改成绩表*/
void CORRECT ( PSTU T ) ;
/*补充成绩表*/
PSTU ADDITION (PSTU T);
/*删除结点*/
PSTU DELETE	(PSTU T);

/*输出成绩表*/
void OUTPUT ( PSTU T );
/*释放无用的链表*/

 



void main()
{
	int i = 0;
	char answer,ch;
	PSTU stu ,stu1;
	
	stu = CREATELIST ();	/*创建成绩表*/
	stu = RANK (stu);		/*排列成绩表*/
	
	printf("成绩表(按学号排序输出) :\n\n");
	OUTPUT (stu) ;			/*输出成绩表*/
		
	printf ("\n是否对现有成绩表进行修改(修改.删除或添加成绩).(y/n):");
	cin>>ch;
	while (ch == 'y'||ch == 'Y')
	{
		printf("\n更正成绩表中的某些错误:1\n");
		printf("删除成绩表中的某些成绩:2\n");
		printf("将某些成绩添加到成绩表:3\n");
		
		cin>>i;
		if ( i==1)
		{
			do
			{	
				CORRECT (stu);
				stu = RANK (stu);
				printf("是否继续修改(y/n):");
				cin>>answer;
			}while (answer == 'y'||answer == 'Y');

		}

		if ( i==2)
		{
			do 
			{
				stu = DELETE (stu);
				stu = RANK (stu);
				printf("是否继续删除(y/n):");
				cin>>answer;
			}while (answer == 'y'||answer == 'Y');
		}

	
		if( i == 3)
		{
			do
			{	
				stu = ADDITION (stu);
				stu = RANK (stu);
				printf("是否继续补充(y/n):");
				cin>>answer;
			}while (answer == 'y'||answer == 'Y');
	
		}
		
		printf("\n修改后的成绩表:\n");
		OUTPUT (stu) ;
		printf("是否继续对现有的成绩表进行修改修改(y/n):");
		cin>>ch;
	}
	
	printf("\n是对成绩表进行查询(y/n):");
	cin>>answer;
	
	while (answer == 'y'||answer == 'Y')
	{	
		printf("\n对某个人成绩进行查询:1\t对某个成绩段的成绩进行查询:2\n");
	
		cin>>i;
		
		if(i == 1)
		{
			do
			{
				stu1 = SEARCH   (stu);
		
				printf ("学生学号\t\t\t学生姓名\t\t\t学生成绩\n" );
				printf ("%d\t\t\t\t%s\t\t\t\t%.1f\n",stu1->stunum, stu1->name , stu1->score);
				printf("是否继续对某个人成绩进行查询(y/n):\n");
				cin>>ch;
			}while (ch == 'y'||ch == 'Y');
		}
		if(i == 2)
		{
			do
			{
				
				SEARCH1  ( stu  );
				printf("是否继续对某个成绩段进行查询(y/n):\n");
				cin>>ch;
			}while (ch == 'y'||ch == 'Y');
		}
		printf("\n是否继续对成绩表进行查询(y/n):\n");
		cin >>answer;

	}
}
/*创建成绩表*/
PSTU CREATELIST ()
{

	int n , i;
	PSTU S,T,D;

	printf ("请输入学生人数:");
	cin>>n;
		
	printf ("请输入学生信息.\n\n");

	for (i = n ; i > 0;i = i - 1)
	{	
	    D = new student;	/* 申请新结点*/
		
		printf("学生学号:");/*输入学生信息*/
		cin>>D->stunum;
		printf("学生姓名:");
		scanf ("%s",D->name);
		printf("学生成绩:");
	    cin>>D->score ;
		D->next = NULL;
		
		if ( i == n)
		{
			S = D ;			/* 用S指向D*/
			T = S;			/*用T保留第一个结点*/	
		}
		if ( i < n )
		{
			S ->next = D;	/*将S->next 指向新结点,并且S前进*/
		    S = S->next;
		}
		printf("\n");
		
	 }
	return T  ;
}
/*将成绩表按学号从小到大排列*/
PSTU RANK (PSTU T)
{
	PSTU M ,D;
	int n = 0,i = 0 ,j = 0;

	
	M = T;
    D = T;
	
	while(D!=NULL)  /*计算链表的长度*/
	{
		n = n+1;
		D = D->next;
	}

	for (i= 1 ;i <= (n -1) ;i++ )
	{
		
		while (M ->next!= NULL)     /*当结点中学生学号比下一个学生学号小,交换两结点的信息*/
		{
			if (M->stunum >(M->next->stunum))
			CHANGE ( M , M->next);	/*调用交换信息的函数*/
			M = M->next ;
		}
		M  = T;
	}

	return T;

}
/*交换结点的内容*/
void CHANGE (PSTU a,PSTU b)
{
	PSTU D;

	D = new student;		/*申请新结点用来作中转*/
	
	D->stunum = a->stunum;	/*保存a结点的信息*/
	D->score = a->score;
	COPY(D->name , a->name);


	a->stunum = b->stunum;  /*将b结点的信息写入a中*/
	a->score = b->score;
	COPY(a->name , b->name);

		
	b->stunum =D->stunum; /*将保存的a结点中的信息写入b中*/
	b->score =D->score;
	COPY(b->name , D->name);


	delete D;				/*删除无用的结点*/
}
/*复制字符串*/
void COPY (char *a , char *b)
{
	int i = 0;
	
	while(b[i] != '\0' && i< MAX)	/*复制字符串*/
	{
		a[i] = b[i];
		i = i + 1;
	}
	a[i] = '\0';					/*复制完字符串以'\0'标志结束*/
}


/*输出成绩表*/

void OUTPUT ( PSTU T )
{
	PSTU p;
	p = T;
	
	printf ("学生学号\t\t\t学生姓名\t\t\t学生成绩\n" );
	do
	{	
		printf ("%d\t\t\t\t%s\t\t\t\t%.1f\n",p->stunum, p->name , p->score);
		p = p->next;
	}
	while (p != NULL);
}

/*搜索成绩表*/
PSTU SEARCH   (PSTU T)
{
	int i = 0 ,stun;
	char name[MAX];
	PSTU M ;


	printf ("按学号搜索此人信息:1\t按姓名搜索此人信息:2\n");
	cin>>i;
	
	if (i == 1)
	{
	N:  M = T;				/*输入错误时,使M重新指向成绩表的头结点*/
		printf ("输入要查找的学生学号:");
		cin>>stun;
	    while ( (M != NULL)&& (M->stunum != stun))
		{
			M = M->next;
		}
		
		if (M == NULL)		/*输入错误时,提示并要求重新输入*/
		{
			printf("输入错误,请确认输入.\n") ;
			goto  N;
		}
	}
	
	if (i == 2)
	{
		
	L:	M = T;
		printf ("输入要查找的学生姓名:");
		scanf ("%s",name);
		
		while ( (M != NULL) && COMSTRING(M->name, name) != 1 )
		{
			M = M->next;
		}
		if (M == NULL)
		{
			printf("输入错误,请确认输入.\n") ;
			goto  L;
		}
	}
		
		
		return M; 

}

/*比较字符串*/
int COMSTRING  (char *a, char *b)
{
	int i = 0;
	while ((a[i] == b[i])&&a[i] != '\0'&&b[i]!='\0')
	{
		i++;
	}
	if (a[i] == b[i]) 
		return 1;						/*字符串相等返回1*/
	else	
		return 0;						/*字符串不等返回0*/
		
}
/*按成绩查询成绩表*/
void SEARCH1  (PSTU T)
{
	PSTU M ;
	int i = 0;
	float a,b;
	
	M = T;
	printf("输入要查询的成绩段范围(如60 99,中间有空格):\n");
	
	cin>>a>>b;

	while( M!=NULL )
	{
		if ((M->score >= a)&&(M->score<=b)) /*查找结点要求满足的条件*/
		{
			if( i == 0)
			{
				printf ("学生学号\t\t\t学生姓名\t\t\t学生成绩\n" );
			}
			printf("%d\t\t\t\t%s\t\t\t\t%f\n",M->stunum, M->name , M->score);
			i++;
		}
		M = M->next;
	}
	if( i == 0)
		printf("没有任何学生的成绩在此成绩段里.\n");
}

/*修改成绩表*/
void CORRECT ( PSTU T ) 
{
	PSTU M;
	int i = 0;

	printf("\n(如果输入了两个相同的学号,修改时请按学生姓名查询进行修改.)\n\n");

	M = SEARCH ( T );
	printf("修改学号:1\t修改姓名:2\t修改成绩:3\n");
	cin>>i; 
   
	if( i == 1)
	{
		printf("将其学号该为:");
		cin>>M->stunum;
	}
	if( i == 2)
	{
		printf("将其姓名该为:");
		scanf ("%s",M->name);	
	}
	if (i == 3)
	{
		printf("将其成绩该为:");
		cin>>M->score;
	}	
}


/*补充成绩表*/
PSTU ADDITION (PSTU T)
{
	PSTU D ;
 
	D = new student;

	printf("学生学号:");
	cin>>D->stunum;
	printf("学生姓名:");
	scanf ("%s",D->name);
	printf("学生成绩:");	   
	cin>>D->score ;
	
	D->next = T;
	return D;
}
/*删除结点*/
PSTU DELETE (PSTU T)
{
	PSTU M ,D;
	
	printf("输入要删除成绩的学生学号或学生姓名\n");
	D = SEARCH  ( T);

	M = D ;
	M = M->next;
	
	if (D = T)	/*如果删除的是头结点,则返回新的头结点*/
	{
		delete D;
		return M;
	}
	else
	{
		delete D;
		return T;
	}
}

⌨️ 快捷键说明

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