C語言實現學生成績系統

題目:
一個能實現錄入學生成績(學號輸入-1時結束錄入),輸出學生成績,通過學號查詢學生信息,通過學號修改學生信息,通過學號刪除學生信息,學生的總成績排序。

#include <stdio.h>
#include <string.h>
typedef struct StuScore{
	int stuID;
	char stuName[10];
	int yuwen;
	int shuxue;
	int yingyu;
} STUSCORE;

typedef struct StuScoreNode{
	STUSCORE stu;
	struct StuScoreNode *NEXT;
	
}  SSN,*SSNLINK;

//創建學生信息的結構體
STUSCORE createStuScore()
{
	STUSCORE stu;
	printf("請輸入學生的學號:\n");
	scanf("%d",&stu.stuID);
	if(stu.stuID==-1)
		return stu;
	printf("請輸入學生的姓名:\n");
	scanf("%9s",stu.stuName);
	printf("請輸入學生的語文成績:\n");
	scanf("%d",&stu.yuwen);
	printf("請輸入學生的數學成績:\n");
	scanf("%d",&stu.shuxue);
	printf("請輸入學生的英語成績:\n");
	scanf("%d",&stu.yingyu);

	return stu;

}

//創建一個學生信息節點
SSNLINK addStuScoreNode()
{
	SSNLINK assn;
	assn=(SSNLINK)malloc(sizeof(SSN));
	assn->stu=createStuScore();
	assn->NEXT=NULL;
	return assn;
}

//將一個節點添加到列表中去,返回列表的頭指針
SSNLINK addToList(SSNLINK list,SSNLINK stunode)
{
	stunode->NEXT=list;
	list=stunode;
	return list;
}

//顯示信息
void showOneInfo2(STUSCORE ss)
{
		printf("%8d%8s%8d%8d%8d\n",ss.stuID,ss.stuName,ss.yuwen,ss.shuxue,ss.yingyu);
}

//顯示所有學生信息
void showAllInfo(SSNLINK list)
{
	SSNLINK  p;
	p=list;
	printf("%8s%8s%8s%8s%8s\n","學號","姓名","語文","數學","英語");

	while(p!=NULL)
	{
		showOneInfo2((*p).stu);
		p=p->NEXT;
	}
	
}

//查詢成績函數
void chaxuncheng(SSNLINK head)
{
	int i;
	SSNLINK cha;
	cha=head;
	printf("請輸入要查詢成績學生的學號\n");
	scanf("%d",&i);getchar();
	while(cha!=NULL)
	{
		if(i==cha->stu.stuID)
		{
			printf("%8s%8s%8s%8s%8s\n","學號","姓名","語文","數學","英語");
			showOneInfo2(cha->stu);
		}
		cha=cha->NEXT;
	}
}

//修改程序函數
void xiugai(SSNLINK head)
{
	int i;
	SSNLINK gai=head;
	printf("請輸入要修改成績學生的學號\n");
	scanf("%d",&i);
	while(gai!=NULL)
	{
		if(i==gai->stu.stuID)
		{
			gai->stu=createStuScore();
			break;
		}
		gai=gai->NEXT;
	}
	printf("修改成功");getchar();getchar();
}

//刪除成績函數
SSNLINK shanchu(SSNLINK head)
{
	int i;
	SSNLINK gai=head->NEXT,man=head;
	printf("請輸入要刪除成績學生的學號\n");
	scanf("%d",&i);
	if(i==man->stu.stuID)
	{
		head=head->NEXT;
		return head;
	}
	else{
		while(gai!=NULL)
		{
			if(i==gai->stu.stuID)
			{
				man->NEXT=gai->NEXT;
				break;
			}
			else
				gai=gai->NEXT;
		}
	}
	printf("刪除成功");getchar();getchar();
}

//排序
void paixiu(SSNLINK head)
{
	SSNLINK da,xiao;
	STUSCORE zanshi;
	int a,b;
	da=head;
	while(da!=NULL)
	{
		xiao=da;
		a=xiao->stu.shuxue+xiao->stu.yingyu+xiao->stu.yuwen;		
		while(xiao!=NULL)
		{
			b=xiao->stu.shuxue+xiao->stu.yingyu+xiao->stu.yuwen;
			if(b>a)
			{
				zanshi=xiao->stu;
				xiao->stu=da->stu;
				da->stu=zanshi;
				a=b;
			}
			xiao=xiao->NEXT;
		}
		da=da->NEXT;
	}
	printf("成功排序");getchar();getchar();
}

int main()
{
	SSNLINK list=NULL,node;//list是列表的頭指針,node爲單節點的指針
	int choice;//choice是要選擇的服務數字
	while(1)//讓程序一直循環
	{
		system("cls");
		printf("*********學生成績管理系統********\n");
		printf("1.輸入學生成績信息\n");
		printf("2.顯示所有學生的成績信息\n");
		printf("3.查詢成績\n");
		printf("4.修改程序\n");
		printf("5.刪除程序\n");
		printf("6.成績排序\n");
		printf("*********************************\n");
		printf("請輸入您的選擇:\n");
		scanf("%d",&choice);

		switch(choice)
		{
		case 1://添加學生信息
			while(1)
			{
				node=addStuScoreNode();
				if(node->stu.stuID==-1)
					break;
				list=addToList(list,node);
			}

			break;
		
		case 2:showAllInfo(list);getchar();getchar();break;

		case 3:chaxuncheng(list);getchar();break;

		case 4:xiugai(list);break;

		case 5:list=shanchu(list);break;

		case 6:paixiu(list);break;

		case -1:exit(0);

		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章