目录

一:功能概述:

二:实现:

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语言的结束,恰恰相反,这正是学习的开始,相信自己在未来可以用自己的知识去编写,完善,创新一个新的软件!做出一个让自己满意,让使用者舒适的真正的好程序!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐