C语言 学生管理系统

C语言也是过了一遍了,再写一遍学生管理系统。

功能

1、输入学生信息                                       5、通过姓名删除学生信息

2、查看录入学生信息                                6、添加学生信息

3、按学号查找学生                                    7、按学号修改学生信息

4、按平均成绩排序                                    8、选择菜单

#include<stdio.h>	
#include<stdlib.h>	
#include<string.h>		
#define N 50		//最大学生人数

int n = 0,m=0,k=1;      // n代表当前记录的学生人数

struct student  
{
	char num[16];         //学号 
	char name[18];        //姓名 
	char cla[10];         //班级 
	char en;              //英语 
	char math;            //数学 
}stu[N]; 

//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//

void input() //1.输入学生信息 
{
	int i=0;
	char ch='y'; 
	system("cls"); //清屏函数 系统中调用
	while(ch=='y'||ch=='Y') //当不输入y或Y时跳出循环
	{
		printf(" ----学生信息输入---- \n");
		printf("学号: ");
		scanf("%s",stu[i].num);
		printf("姓名: ");
		scanf("%s",stu[i].name);
		printf("班级: ");
		scanf("%s",stu[i].cla);
		printf("英语: ");
		scanf("%d",&stu[i].en);
		printf("数学: ");
		scanf("%d",&stu[i].math);
		printf("是否继续添加?(y/n)");
		getchar();
		scanf("%c",&ch);
		i++;
		n++;
	}
	system("pause"); //等待命令
}


//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//


void display() //2.显示全部数据信息
{
	int i;
	system("cls"); 
	printf("共有%d位学生的信息:\n", n);
	if (n != 0)
	{
		printf("学生学号\t学生姓名 \t班级 \t英语 \t数学\n");
		printf("--------------------------------------------------------------------\n");
		for (i = 0; i<n; i++)
		{
			printf("%s \t  %s \t %s \t %d \t %d\n",stu[i].num, stu[i].name, stu[i].cla, stu[i].en, stu[i].math);
		}
	}

}

//----------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------//

void seek() //3.按学号查找学生信息
{
	int i, item, flag=0;
	char s1[10];
	printf("请输入要查询的学生的学号:\n");
	scanf("%s", s1);	
	for (i = 0; i<n; i++)
	if (strcmp(s1,stu[i].num) == 0)
	{
		flag = 1;
		printf("  学号   姓名   班级     英语    数学 \n");
		printf("--------------------------------------------------------------------\n");
		printf(" %s        %s    %s     %3d   %3d\n", stu[i].num,stu[i].name,stu[i].cla,stu[i].en,stu[i].math);
	}
	if (flag == 0)
	printf("无该学生信息\n"); 
}


//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//


void rank()  //4.按平均分排序
{
	struct student temp;   //用于交换时存放数组信息用于后面的交换
	float aver; //平均分 
	int s[100];
	int i=0;
	int j,k,t;
	int m;
	system("cls");      //清屏函数 
	for(i=0;i<=n;i++)   //把学生的平均成绩放入数组s中 
	{
		aver=0;
		aver=(stu[i].en+stu[i].math)/2;
		s[i]=aver;
	}
	for(i=0;i<=n;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		if(s[j]>s[k])
		k=j;
		t=s[k];s[k]=s[i];s[i]=t; //按照平均分大小进行排序
		temp=stu[k];stu[k]=stu[i];stu[i]=temp; //使其数组按相应顺序随平均分大小一起排序
	}
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
	printf(" 学号      姓名    英语   数学  平均分 \n");
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
	for(i=0;i<n;i++)
	printf("  %s     %s 	 %d 	%d 	%d \n",stu[i].num,stu[i].name,stu[i].en,stu[i].math,s[i]);
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
	system("pause"); 
}


//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//


void delate()//5.按姓名删除学生信息函数
{
	int i, j, flag = 0;
	char s1[15];
	printf("请输入要删除的学生的姓名:\n");
	scanf("%s", s1);
	for (i = 0; i<n; i++)
	if (strcmp(stu[i].name, s1) == 0)
	{
		flag = 1;
		for(j=i;j<n-1;j++)    //要删除的学生后面学生都往前面移一位 
		{
			stu[j]=stu[j+1];
		}
	} 	
	if (flag==0)  //查找失败
	{
		printf("无该学生信息\n");
	}
	if (flag==1)
	{
		printf("删除成功!!!");
		n--;	//学生人数减1
	}
	system("pause");
}

//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//


void add()//6.添加学生信息函数
{
	int i,j=n,flag;
	printf("请输入待增加的学生数:\n");
	scanf("%d", &m);
	if (m > 0)
	{
		do
		{
			flag = 1;
			while (flag)
			{
				flag = 0;
				printf("请输入第%d位学生的学号:\n", j + 1);
				scanf("%s", stu[j].num);
				for (i = 0; i < j; i++)
				{
					if (strcmp(stu[i].num, stu[j].num) == 0)
					{
						printf("该学号已存在,请重新输入\n");
						flag = 1;
						break;
					}
				}
			}
			printf("请输入第%d 个学生的姓名:\n", j+1);
			scanf("%s", stu[j].name);
			printf("请输入第%d 个学生的班级:\n", j+1);
			scanf("%s", &stu[j].cla);
			printf("请输入第%d 个学生的英语:\n", j+1);
			scanf("%d", &stu[j].en);
			printf("请输入第%d 个学生的数学\n",j+1);
			scanf("%d", &stu[j].math);
			if (flag==0)
			{
				j++;
			}
		} while (j<n+m);
	}
	n += m;
	printf("学生信息添加完成\n");
	system("pause");
}

//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//


void modify() //7.修改学生信息
{
	int i, item,score,num = 0,flag=0;
	char s1[15], s2[15]; 
	printf("请输入要修改的学生的学号:\n");
	scanf("%s", s1);
	for (i = 0; i < n; i++)
	{
		if (strcmp(stu[i].num, s1) == 0)
		{
			flag=1;
			num = i;
			printf("------------------\n");
			printf("1.修改学号\n");
			printf("2.修改姓名\n");
			printf("3.修改班级\n");
			printf("4.修改英语\n");
			printf("5.修改数学\n");
			printf("6.退出本菜单\n");
			printf("------------------\n");
			while (1)
			{
				printf("请选择子菜单编号:");
				scanf("%d", &item);
				switch (item)
				{
				case 1:
					printf("请输入新的学号:\n");
					scanf("%s", stu[num].num);
					break;
				case 2:
					printf("请输入新的姓名:\n");
					scanf("%s", stu[num].name);
					break;
				case 3:
					printf("请输入新的班级:\n");
					scanf("%s", stu[num].cla);
					break;
				case 4:
					printf("请输入新的英语:\n");
					scanf("%d", &score);
					stu[num].en = score;
					break;
				case 5:
					printf("请输入新的数学:\n");
					scanf("%d", &score);
					stu[num].math = score;
					break;
				case 6:	return;
				default:printf("请在1-6之间选择\n");
				}
			}
			printf("修改完毕\n");
		}
	}	
	if(flag==0) 
	{
		printf("无该学生信息");
	}
}

//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//

void menu()//选择菜单 
{
	int num;
	printf(" \n\n                    \n\n");
	printf("  ******************************************************\n\n");
	printf("  *                学生信息管理系统                    *\n\n");
	printf("  ******************************************************\n\n");
	printf("  *******************系统功能菜单*********************** \n");
	printf("     ----------------------   ----------------------   \n");
	printf("     *********************************************     \n");
	printf("     *     系统功能      * *  1.输入学生信息    *      \n");
	printf("     *********************************************     \n");
	printf("     * 2.查看已录入成绩  * *  3.查找学生信息    *      \n");
	printf("     *********************************************     \n");
	printf("     * 4.按平均成绩排序  * *  5.删除学生信息    *      \n");
	printf("     *********************************************     \n");
	printf("     * 6.添加学生成绩    * *  7.修改学生成绩    *      \n");
	printf("     ********************** **********************     \n");
	printf("     * 0.退出管理系统    * *                    *      \n");
	printf("     ********************** **********************     \n");
	printf("     ----------------------   ----------------------   \n");
	printf("请选择菜单编号:");
	scanf("%d", &num);
	switch (num)
	{
		case 0:k = 0;  printf("马上退出系统");break;
		case 1:input(); break;
		case 2:display(); break;
		case 3:seek(); break;
		case 4:rank(); break;
		case 5:delate(); break;
		case 6:add(); break;
		case 7:modify();break;
		default:printf("请在0-8之间选择\n");
	}
}

//主函数
int main()
{
	while (k)   //在菜单中选择0 ,退出系统 
	{
		menu();  
	}
	system("pause");
	return 0;
}

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜菜~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值