C语言:学生成绩管理系统

 

目录

一:功能概述:

二:实现:

1.主源文件

 1.打印菜单!

2.构建管理系统的框架:

二:辅源文件 

 1.使用结构体,方便后面的编写

 2.输入学生信息

3.输出学生基本信息

 3.按姓名查询

 3.删除学生信息

4.修改学生信息

5.添加学生

6.按成绩打印学生排名

三:心得体会


一:功能概述:

 实现:

1.学生学习成绩录入    

2.学生学习成绩输出  

3.删除某学生信息

4.按姓名查询某学生信息并输出

5.修改某学生信息

6.添加某学生信息

7.按总成绩排名   等等功能!

二:实现:

 为了方便修改,同时增加代码的可读性,实现每一个功能的时候都应该用一个具体的函数。

同时,创建两个源文件,一个实现教务系统的逻辑为主源文件,一个完善实现逻辑时的所需要的函数块,为辅源文件。

1.主源文件

 1.打印菜单!

9.void menu()  
10.{  
11.    printf("               欢迎使用Miao编写的教务管理系统                \n");  
12.    Sleep(50);  
13.    printf("请按任意将进入学生管理系统:\n");  
14.    getchar();  
15.    printf("=============================================================\n"); Sleep(50);  
16.    printf("=============================================================\n"); Sleep(50);  
17.    printf("||             1.学生学习成绩录入                          ||\n"); Sleep(50);  
18.    printf("||             2.学生学习成绩输出                          ||\n"); Sleep(50);  
19.    printf("||             3.删除某学生信息                            ||\n"); Sleep(50);  
20.    printf("||             4.按姓名查询某学生信息并输出                ||\n"); Sleep(50);  
21.    printf("||             5.修改某学生信息                            ||\n"); Sleep(50);  
22.    printf("||             6.添加某学生信息                            ||\n"); Sleep(50);  
23.    printf("||             7.按总成绩排名                              ||\n"); Sleep(50);  
24.    printf("=============================================================\n"); Sleep(50);  
25.    printf("=============================================================\n"); Sleep(50);  
26.}   

打印时运用了getchar和sleep函数,增加了代码的可读性的同时也使其更加贴近于生活,使其变得有趣!

2.构建管理系统的框架:

int main()
{
	system("color e3\n");
	int num, Item;
	struct Student*  Arr = NULL;
	struct Student* p = NULL;
	while (1)
	{
		menu();
		printf("\n请选择操作命令;\n");
		scanf("%d", &Item);

		switch (Item)
		{
		case 1://输入学生信息
		{
			system("cls");
			num = Num();
			p = Input( Arr, num);
			
		}
		break;

		case 2://输出学生信息
		{
			Play_One_Play();
			system("cls");
			Output(p, num);
		}
		break;

		case 3://删除学生信息
		{
			system("cls");
			Delete(p, num);
		}
		break;

		case 4://查找学生信息
		{
			system("cls");
			Search(p, num);
		}
		break;

		case 5://修改学生信息
		{
			system("cls");
			Change(p, num);
		}
		break;

		case 6://添加学生信息
		{
			system("cls");
			Add(p, num);
		}
		break;

		case 7://将学生的总成绩按从大到小排序
		{
			Play_One_Play();
			system("cls");
			ScoreTotal(p, num);
		}
		break;
		}
	}
	return 0;
}

使用switch函数实现!其中使用了system 中colour函数,使最后运行的界面变为黄色!如:

//设置默认的控制台前景和背景颜色。
//
//5 :紫色背景色
//A :淡绿色的字体颜色
//
//每个数字可以为以下任何值 :
//0 = 黑色   8 = 灰色
//1 = 蓝色   9 = 蓝色
//2 = 绿色   A = 淡绿色
//3 = 浅蓝色 B = 淡浅绿色
//4 = 红色   C = 淡红色
//5 = 紫色   D = 淡紫色
//6 = 黄色   E = 淡黄色
//7 = 白色   F = 亮白色

同时使用了system清屏的功能,使得运行起来更加美观,流畅!

二:辅源文件 

 1.使用结构体,方便后面的编写

int num;
struct Student
{
	char Name[25];//姓名
	int Age;//年龄
	int Num;//学号
	float Score[2];//高数 英语成绩
	float Total;//总成绩
};
int Num()
{
	printf("请输入学生人数:\n");
	scanf("%d", &num);
	return num;
}

 2.输入学生信息

struct Student* Input(struct Student*  Arr, int len)//输入学生的基本信息
{
	 Arr = (struct Student*)malloc(len * sizeof(struct Student));
	int i;
	for (i = 0; i < len; i++)
	{
		printf("请输入第%d个学生的姓名:\n", i + 1);
		scanf("%s",  Arr[i].Name);

		printf("请输入第%d个学生的年龄:\n", i + 1);
		scanf("%d", & Arr[i].Age);

		printf("请输入第%d个学生的学号:\n", i + 1);
		scanf("%d", & Arr[i].Num);
		printf("请输入第%d个学生的英语成绩:\n", i + 1);
		scanf("%f", & Arr[i].Score[0]);

		printf("请输入第%d个学生的高数成绩:\n", i + 1);
		scanf("%f", & Arr[i].Score[1]);
		 //printf("请输入第%d个学生:\n姓名\t年龄\t学号\t高数\t英语\n",i);

		 //scanf("%s\t%d\t%d\t%f\t%f");
		//计算总分
		 Arr[i].Total =  Arr[i].Score[0] +  Arr[i].Score[1];

	}
	return  Arr;
}

使用动态内存分布,使用一个申请内存一个内存,减少了浪费。 

3.输出学生基本信息

void Output(struct Student*  Arr, int len)
{
	printf("姓名\t年龄\t学号\t高数\t英语\t总分\n");
	for (int i = 0; i < len; i++)
	{
		printf("%s\t%d\t%d\t%g\t%g\t%g\n",  Arr[i].Name,  Arr[i].Age,  Arr[i].Num,  Arr[i].Score[0], 
			 Arr[i].Score[1],  Arr[i].Total);
	}
}

 3.按姓名查询

void Search(struct Student*  Arr, int len)
{
	int i;
	char Name[10];

	printf("请输入你需要查找的学生的姓名\n");
	scanf("%s", Name);

	for (i = 0; i < len; i++)//查找学生编号
	{
		if (0 == strcmp( Arr[i].Name, Name))
		{
			num = i;
		}
	}

	Output(& Arr[num], i);//输出

}

 3.删除学生信息

void Delete(struct Student*  Arr, int len)
{
	int i, num;
	char Name[10];
	printf("请输入你要删除数据的姓名:\n");
	scanf("%s", Name);
	for (i = 0; i < len; i++)
	{
		if (0 == strcmp( Arr[i].Name, Name))
		{
			num = i;
		}
	}
	for (i = num; i < len; i++)//删除学生
	{
		 Arr[i - 1] =  Arr[i];
	}
	Output( Arr, len - 1);//输出
}

4.修改学生信息

void Change(struct Student*  Arr, int len)
{
	char Name[10];
	printf("请输入你需要修改的学生的姓名:\n");
	scanf("%s", Name);
	int i, num;
	for (i = 0; i < len; i++)
	{
		if (0 == strcmp( Arr[i].Name, Name))
		{
			num = i;
		}
	}
	printf("请输入学生的姓名:\n");
	scanf("%s",  Arr[num].Name);
	printf("请输入学生的年龄:\n");
	scanf("%d", & Arr[num].Age);
	printf("请输入学生的学号:\n");
	scanf("%d", & Arr[num].Num);
	printf("请输入学生的高数成绩:\n");
	scanf("%f", & Arr[num].Score[0]);
	printf("请输入学生的英语成绩:\n");
	scanf("%f", & Arr[num].Score[1]);
	Arr[num].Total =  Arr[num].Score[0] +  Arr[num].Score[1];
	Output( Arr, len);
}

使用strcmp函数来比较字符串是否相同,来实现其功能。

5.添加学生

void Add(struct Student*  Arr, int len)
{
	int num, i;
	printf("请输入添加的学生的人数:\n");
	scanf("%d", &num);
	struct Student* p = NULL;
	p = (struct Student*)malloc(sizeof(struct Student) * num);
	for (i = 0; i < num; i++)
	{
		printf("请输入第%d个学生的姓名:\n", i + 1);
		scanf("%s", p[i].Name);
		printf("请输入第%d个学生的年龄:\n", i + 1);
		scanf("%d", &p[i].Age);
		printf("请输入第%d个学生的学号:\n", i + 1);
		scanf("%d", &p[i].Num);
		printf("请输入第%d个学生的高数成绩:\n", i + 1);
		scanf("%f", &p[i].Score[0]);
		printf("请输入第%d个学生的英语成绩:\n", i + 1);
		scanf("%f", &p[i].Score[1]);
		p[i].Total = p[i].Score[0] + p[i].Score[1];

	}
	Output( Arr, len);
	Output(p, num);
}

 同理,使用的动态内存的申请!

6.按成绩打印学生排名

void ScoreTotal(struct Student*  Arr, int len)
{
	struct Student temp;
	int max;
	for (int i = 0; i < len - 1; i++)
	{
		max = i;
		for (int j = i + 1; j < len; j++)
		{
			if ( Arr[j].Total >  Arr[max].Total)
			{
				max = j;
			}
		}
		if (max != i)
		{
			temp =  Arr[max];
			 Arr[max] =  Arr[i];
			 Arr[i] = temp;
		}
	}
	Output( Arr, len);
}

使用冒泡排序,来实现排名!

三:心得体会

在编写代码时,很明显的感觉到自己结构体和指针这两个方面学习的不是特别好,自己无法正确的使用,因此在使用时有很大的麻烦!还有就是自己在此之前好久都没有认真动脑筋写过一道题,认真学习一个学习一个算法,因此自己在编写的时候很明显的感觉到了一种生疏感,以后自己一定要经常编写,来完善自己的能力!!!

这个代码依旧有许许多多的不足之处:输入的学号过长时,就无法与上面学号二字对其,在添加学生在输出后,所添加的学生上依旧有一行“学生 学号 等等”,也没有抽出比指定分数高的同学。有待完善的地方还有许许多多,自己在以后要用自己的知识将这个系统慢慢完善!

自己在写这个代码时同样也收货了许多的东西,例如为了使定义的函数的可读性更高,要随时打开英语翻译,将该函数的名字用其英文来定义。在写每一个函数是尽量做到注释,让自己在写完后更好的检查代码,同时也让读者更好的看懂代码。自己也可以在写代码时加入一些人性化的东西!增加代码的趣味性的同时也是自己在写代码时有一个更好的心情与激情!

写完这个管理系统,我想这并不意味这学习c语言的结束,恰恰相反,这正是学习的开始,相信自己在未来可以用自己的知识去编写,完善,创新一个新的软件!做出一个让自己满意,让使用者舒适的真正的好程序!

  • 45
    点赞
  • 391
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
学生成绩管理系统是一个可以用来记录和管理学生考试成绩的系统。可以包括输入学生成绩、查询学生成绩、修改学生成绩和统计学生成绩等功能。要实现学生成绩管理系统的合并,可以使用C语言来编写整合代码。 首先,我们可以创建一个学生结构体,包括学生的姓名、学号、成绩等信息。然后,可以创建一个数组来存储学生的信息,并使用循环来输入和修改学生成绩。同时,我们可以编写函数来实现查询学生成绩和统计学生成绩的功能,可以通过遍历数组来实现这些功能。 另外,可以使用文件输入输出来保存学生成绩信息,这样可以将学生成绩信息保存在文件中,以便下次打开系统时直接读取信息,而不需要重新输入。在合并学生成绩管理系统时,需要考虑到不同模块之间的调用和交互,确保整合后的系统可以顺利运行。 此外,为了使得系统更加人性化,我们可以通过界面设计来增强用户体验。在C语言中,我们可以使用图形界面库来设计简单的图形界面,提供更友好的操作界面。 综上所述,通过使用C语言,我们可以将学生成绩管理系统进行合并。可以通过创建学生结构体、使用数组存储学生信息、编写函数实现功能、文件输入输出保存信息、设计图形界面等方法,将不同的功能模块合并成一个完整的学生成绩管理系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值