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

📄 2.c

📁 学生管理系统。具有添加学生学号、姓名、课程成绩的功能
💻 C
字号:

#include <stdio.h>
#include <ctype.h>	//包含该头文件,程序中要用到toupper()函数
#include <stdlib.h>	//包含该头文件,程序中要用到strcmp()函数
struct student
{
	int num;		//学号	
	char name[20];	//姓名
	int score_1;	//成绩1
	int score_2;	//成绩2
	int score_3;	//成绩3
	float avg;		//平均成绩
};

//以下5行为函数声明,自定义了5个函数
void input(struct student stu[50]);
void display(struct student stu[50]);
void sort(struct student stu[50]);
void insert_record(struct student stu[50]);
void delete_record(struct student stu[50]);

int total=0;						//总人数,初始化为0
void main()
{
	struct student stu[50];
	
	input(stu);						//调用input函数输入学员信息
	
	printf("排序前的学员信息如下:\n");
	display(stu);					//调用display函数输出学员信息
	
	sort(stu);						//调用sort函数对学员的平均成绩进行排序
	
	printf("排序后的学员信息如下:\n");
	display(stu);					//调用display函数输出排序后的学员信息

	insert_record(stu);				//调用insert函数插入学员信息
		
	delete_record(stu);				//调用delete_record函数删除学员的信息
}

void input(struct student stu[50])	//定义input函数,该函数功能是输入学员信息
{
	int i;							//循环变量,用于控制输入的次数
	int sum;						//存放总成绩
	char select;	
	printf("---------------------------------请输入学员信息---------------------------------\n");
	
	i=0;
	do
	{	
		printf("\n学号:");
		scanf("%d",&stu[i].num);	//输入学号
		
		printf("\n姓名:");
		scanf("%s",&stu[i].name);	//输入姓名
		
		printf("\n三门成绩:\n");
		
		printf("成绩1:");
		scanf("%d",&stu[i].score_1);//输入成绩1
		sum=0;						//初始化为0
		sum=sum+stu[i].score_1;		//累加成绩1
		
		printf("成绩2:");
		scanf("%d",&stu[i].score_2);//输入成绩2
		sum=sum+stu[i].score_2;		//累加成绩2
		
		printf("成绩3:");
		scanf("%d",&stu[i].score_3);//输入成绩3
		sum=sum+stu[i].score_3;		//累加成绩3

		stu[i].avg=sum/3.0;			//求平均成绩

		printf("是否继续输入下一位学员信息?(Y/N)");
		fflush(stdin);
		select=toupper(getchar());
		i++;						//录入的人数加1
		printf("\n");
	}
	while(select!='N' && i<50);
	total=i;						//将已录入的人数保存在total中
}

void display(struct student stu[50])//定义display函数,该函数功能是输出学员信息
{
	int i;
	
	printf("学号\t\t姓名\t\t平均成绩\n");
	//用for循环输出结构体数组stu中的元素值
	for(i=0;i<total;i++)
	{
		printf(" %d\t\t%s\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].avg);
	}
	printf("\n");
}

void sort(struct student stu[50])	//定义sort函数,该函数的功能是对平均成绩排序(由高到低)
{
	int i;
	int j;
	struct student Temp;
	
	//用冒泡排序法对平均成绩进行排序
	for(i=0;i<total-1;i++)			//控制比较趟数,total为已录入的总人数
	{
		for(j=0;j<total-i-1;j++)	//控制每趟比较的次数
		{
			if(stu[j].avg<stu[j+1].avg)	//因为是由高到低的排序,所以是成绩低的应和成绩高的交换
			{
				Temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=Temp;
			}
		}
	}
}

void insert_record(struct student stu[50]) //定义insert函数,该函数的功能是插入学员信息
{
	int sum;
	char select;

	printf("是否要插入新学员?(Y/N)");
	fflush(stdin);
	select=toupper(getchar());

	if(select=='N')			//输入为'N'时,不插入学员记录,则直接输出结构体数组中的学员信息
	{
		printf("\n学员的信息如下\n");
		display(stu);
		return;
	}
	
	//do-while的循环体执行是在输入'Y'的情况下,表示要插入学员记录
	do
	{		
		if(total==50)		//限制录入的人数不能超过50
		{
			printf("\n对不起!已录满50人,不能再输入学员信息:\n");
			return;
		}
		else
		{
			printf("\n学号:");
			scanf("%d",&stu[total].num);
			
			printf("\n姓名:");
			scanf("%s",&stu[total].name);
			
			printf("\n三门成绩:\n");
			
			printf("成绩1:");
			scanf("%d",&stu[total].score_1);
			sum=0;
			sum=sum+stu[total].score_1;
			
			printf("成绩2:");
			scanf("%d",&stu[total].score_2);
			sum=sum+stu[total].score_2;
			
			printf("成绩3:");
			scanf("%d",&stu[total].score_3);
			sum=sum+stu[total].score_3;
			
			stu[total].avg=sum/3.0;			//计算平均成绩
			total++;						//插入了一条学员信息,学员人数加1
			
			printf("还要继续插入新学员吗?(Y/N)");
			fflush(stdin);
			select=toupper(getchar());
		}
	}
	while(select!='N');
	
	sort(stu);								//调用sort函数对插入新学员后的数据库进行从新排序
	printf("\n插入新学员后的学员信息如下:\n");
	display(stu);							//调用display函数输出插入新学员后的学员信息
}

void delete_record(struct student stu[50])	 //定义delete_record函数,该函数的功能是删除学员信息
{
	int i;
	int j;
	int number;
	int record=total;						//把总人数存放在record中,主要是为了控制格式输出。
	char select;
	
	printf("是否要删除某位学员?(Y/N)");
	fflush(stdin);
	select=toupper(getchar());

	if(select=='N')				//输入为'N'时,不删除学员记录,则直接输出结构体数组中的学员信息
	{
		printf("\n学员的信息如下:\n");
		display(stu);	
		return;
	}
	
	//do-while的循环体执行是在输入'Y'的情况下,表示要删除学员记录
	do
	{
		
		printf("\n请输入要删除的学员的学号:\n");
		scanf("%d",&number);				//输入要删除学员的学号
		
		for(i=0;i<total;i++)				//查找该学员的学号,查找次数为最多为total次
		{
			if(number==stu[i].num)			//查找到了学号为number学员的信息
			{
				//通过for循环进行删除运算	
				for(j=i;j<total;j++)
				{
					stu[j]=stu[j+1];
				}
				total--;					//删除一位学员后总人数减1	
			}
		}
		
		printf("\n还要删除某位学员吗?(Y/N)");
		fflush(stdin);
		select=toupper(getchar());
	}
	while(select=='Y');
	
	if(total<record)						//表示程序中删除了学员
	{
		printf("\n删除部分学员后学员的信息如下:\n");
		display(stu);						//调用display函数输出删除后所有学员的信息
	}
	else									//没有查找到欲删除学号的学员信息
	{
		printf("\n对不起!没有查找到你要删除的学员\n\n学员的信息如下:\n");
		display(stu);	
	}
}

⌨️ 快捷键说明

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