C language practical algorithm series of student management system_operation on the entire structure_bubble sort_extract sorting rules

Code

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Save();

struct SUser
{
    
    
	int nNumb;
	char sName[20];
	float fMath;
}g_user[100];

void Print()
{
    
    
	puts("\n学号\t姓名\t数学");
	int i = 0;
	while (g_user[i].nNumb)
	{
    
    
		if(g_user[i].nNumb>0)
			printf("%d\t%s\t%0.1f\n", g_user[i].nNumb, g_user[i].sName, g_user[i].fMath);
		++i;
	}
	printf("\n\t总共有%d条学生信息\n\n", i);
}

int Check(int nNumb)
{
    
    
	int i = 0;
	while (g_user[i].nNumb)
	{
    
    
		if (nNumb == g_user[i].nNumb)
			return 1;
		++i;
	}
	return 0;
}

void Add()
{
    
    
	int nNumb;
	printf("请输入学号:");
	scanf_s("%d", &nNumb);
	while (Check(nNumb))
	{
    
    
		printf("该学号已存在,请重新输入(0取消输入):");
		scanf_s("%d", &nNumb);
		if (nNumb == 0)
			return;
	}

	int i = 0;
	while (g_user[i].nNumb>0)
		++i;
	//scanf("%d%s%f",&g_user[i].nNumb,)
	g_user[i].nNumb = nNumb;
	printf("请输入姓名:");
	scanf_s("%s", g_user[i].sName,sizeof(g_user[i].sName));
	printf("请输入成绩:");
	scanf_s("%f", &g_user[i].fMath);
	Save();
	Print();
}

void Delete()
{
    
    
	printf("请输入要删除的学号:");
	int nNumb;
	scanf_s("%d", &nNumb);
	int i = 0;
	//int flag = 0;
	while (g_user[i].nNumb)
	{
    
    
		if (g_user[i].nNumb == nNumb)
		{
    
    
			//flag = 1;
			g_user[i].nNumb = -1;
			break;
		}
		++i;
	}
	//if (flag == 0)
	if (g_user[i].nNumb!=-1)
	//if (g_user[i].nNumb==0)
		puts("你输入的学号不存在!");
	else
	{
    
    
		Save();
		Print();
	}
}

void Modify()
{
    
    
	printf("请输入要修改的学号:");
	int nNumb;
	scanf_s("%d", &nNumb);
	int i = 0;
	while (g_user[i].nNumb)
	{
    
    
		if (g_user[i].nNumb == nNumb)
		{
    
    
			printf("%d\t%s\t%0.1f\n", g_user[i].nNumb, g_user[i].sName, g_user[i].fMath);
			printf("请输入新的姓名:");
			scanf_s("%s", g_user[i].sName, sizeof(g_user[i].sName));
			printf("请输入新的成绩:");
			scanf_s("%f", &g_user[i].fMath);
			return;
		}
		++i;
	}
	Save();
	Print();
}

void Load()
{
    
    
	FILE* pf = fopen("data.lv", "r");
	if (!pf)
		return;
	int i = 0;

	while (fread(&g_user[i], 1, sizeof(SUser), pf) == sizeof(SUser))
		++i;
	fclose(pf);
}

void Save()
{
    
    
	FILE* pf = fopen("data.lv", "w");
	if (!pf)
	{
    
    
		puts("保存数据时失败!");
		return;
	}
	int i = 0;
	while (g_user[i].nNumb)
	{
    
    
		if (-1 != g_user[i].nNumb)
			fwrite(&g_user[i], 1, sizeof(SUser), pf);
		++i;
	}
	fclose(pf);
}

int Judge(int nIndex,int j)
{
    
    
	if (nIndex == 1)
		return g_user[j].nNumb > g_user[j + 1].nNumb;
	if (nIndex == 2)
		return strcmp(g_user[j].sName, g_user[j + 1].sName) > 0;
	if (nIndex == 3)
		return g_user[j].fMath < g_user[j + 1].fMath;
	return 0;
}

//int Judge(int nIndex,SUser* p) // p是指向第j个结构体的地址

void Sort(int nIndex)
{
    
    
	int i = 0, n = 0;
	while (g_user[i++].nNumb)
		++n;
	i = 0;
	int flag = 0;
	while (i < n - 1)
	{
    
    
		int j = 0;
		while (j < n - 1 - i)
		{
    
    
			if(Judge(nIndex,j))
			{
    
    
				SUser t = g_user[j];
				g_user[j] = g_user[j + 1];
				g_user[j + 1] = t;
			}
			++j;
		}
		++i;
	}
}

int DispMenu()
{
    
    
	puts("1.按学号排序");
	puts("2.按姓名排序");
	puts("3.按成绩排序");
	puts("0.返回主菜单");
	printf("请选择:");
	int i = 0;
	scanf_s("%d", &i);
	switch (i)
	{
    
    
	case 1:
	case 2:
	case 3:
		Sort(i);
		Print();
		break;
	}
	return i;
}

int Menu()
{
    
    
	int i = 0;
	puts("1.浏览所有信息");
	puts("2.添加信息");
	puts("3.删除信息");
	puts("4.修改信息");
	puts("5.查找信息");
	puts("0.退出");
	printf("请选择:");
	scanf_s("%d", &i);
	switch (i)
	{
    
    
	case 0:
		break;
	case 1:
		while (DispMenu())
			;
		Print();
		break;
	case 2:
		Add();
		break;
	case 3:
		Delete();
		break;
	case 4:
		Modify();
		break;
	}
	return i;
}

int main()
{
    
    
	system("color 3f");
	Load();
	while (Menu())
		;
	return 0;
}

operation result

Insert picture description here

Guess you like

Origin blog.csdn.net/wlwdecs_dn/article/details/111184620