简易版学生系统

任务描述:
写⼀个命令⾏交互式C语⾔程序。该程序需要实现下述菜单功能: 1. 数据存储。
你需要将⼀系列的学⽣期末考试信息进⾏存储(学⽣⼈数不会超过100)。每个学⽣的信息包括:姓名
(由 first name 和last name 两部分组成,例如Xiaoer He,first_name = “Xiaoer” last_name = “He”)
;学号(12 位数字组成,开头4位为2021 、2020 、2019); C语⾔成绩(⼀个⼤于等于零的整数);
重修信息(学号 2021………为否,其余为是); GPA等级(A+, A, B+, B, C+, C, D, F );班级排名(成绩相同需并列)。 其中,姓名,学号,成绩为输入数据,其余数据需要你计算。
同时,你需要添加⼀些维护数据库的功能
Add(name, id, score): 新增⼀个学⽣的信息;
Adds(n, name[], id[], score[]): 批量新增n个学⽣的信息;
Delete(id): 根据学号删除某个学⽣的信息;
Search(id) :根据学号查找某个学⽣的信息。
2. 数据处理。
Sort_by_id(): ⽣成根据学号顺序排列学⽣信息的表格
Sort_by_score(): ⽣成根据分数由⾼到低顺序排列学⽣信息的表格
Max():返回最⾼分学⽣信息
Min(): 返回最低分学⽣信息
Ave(): 返回所有学⽣期末成绩平均分
prime(id): 返回某个学⽣的成绩是否为素数
coprime(id, id) :返回某两个学⽣的成绩是否互质/互素

#define _CRT_SECURE_NO_WARNINGS 1
#define MAX 100
#define MAX_NAME 50
#define MAX_NUM 50


#include<stdio.h>
#include<string.h>
enum Option
{
	EXIT,//0
	ADD,//1
	ADDS,//2
	DEL,//3
	SEARCH,//4
	SORTID,//5
	SORTSORCE,//6
	BEST,//7
	WORST,//8
	PRIME,//9
	COPRIME,//10
	MODIFY,//11
	AVE,//12
	SHOW,//13
};

struct PeoInfo
{
	char name[MAX_NAME];
	int grade;
	char num[MAX_NUM];
	char GPA[50];
	char rebuild[20];
	int rinking;
};

//表格类型
struct Form
{
	struct PeoInfo data[MAX];//存放一个信息
	int size;//记录当前已经有的元素个数
};



//声明函数
//初始化表格函数
void InitForm(struct Form* ps);

//排名函数
void Rinking(struct Form* ps);


//增加一个信息到表格
void AddForm(struct  Form* ps);

// 增加多个信息到表格
void AddsForm(struct Form* ps);

//打印表格中的信息
void ShowForm(const struct  Form* ps);

//删除指定的学生成绩
void DelForm(struct  Form* ps);

//查找指定人的信息
void SearchForm(const struct  Form* ps);

//修改指定学生信息
void ModifyForm(struct Form* ps);

//按成绩排序内容
void SortscoreForm(struct  Form* ps);

//按学号排序内容
void SortidForm(struct  Form* ps);

//返回最高分同学信息
void BestForm(struct Form* ps);

//返回最低分同学信息
void WorstForm(struct Form* ps);

//返回所有同学的平均成绩
void AveForm(struct Form* ps);

//判断指定同学的成绩是否为素数
void PrimeForm(struct Form* ps);

// 判断指定俩位同学的成绩是否互素
void CoprimeForm(struct Form* ps);

void menu()
{
	printf("Okay, data upload finished. What do you what to do next? You can enter a number to tell me.\n");
	printf("1.添加一位同学信息\n");
	printf("2.添加多位同学信息\n");
	printf("3.删除一位同学信息\n");
	printf("4.查找同学信息\n");
	printf("5.按学号排序内容\n");
	printf("6.按成绩排序内容\n");
	printf("7.最高分\n");
	printf("8.最低分\n");
	printf("9.判断指定同学的成绩是否为素数\n");
	printf("10.判断指定俩位同学的成绩是否互素\n");
	printf("11.修改同学信息\n");
	printf("12.平均数\n");
	printf("13.打印表格\n");
	printf("0.退出\n");
}
int main()
{
	printf("Hello, pls input a series of student information!\n");
	int input = 0;
	//创建通讯录
	struct  Form form;//form就是表格,里面包含:MAX个元素和size  
	//初始化通讯录
	InitForm(&form);
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddForm(&form);
			
			Rinking(&form);
			break;
		case ADDS:
			AddsForm(&form);
			Rinking(&form);
			break;
		case DEL:
			DelForm(&form);
			Rinking(&form);
			break;
		case SEARCH:
			SearchForm(&form);
			break;
		case SORTSORCE:
			SortscoreForm(&form);
			break;
		case SORTID:
			SortidForm(&form);
			break;
		case BEST:
			BestForm(&form);
			break;
		case WORST:
			WorstForm(&form);
			break;
		case AVE:
			AveForm(&form);
			break;
		case PRIME:
			PrimeForm(&form);
			break;
		case COPRIME:
			CoprimeForm(&form);
			break;
		case MODIFY:
			ModifyForm(&form);
			Rinking(&form);
			break;
		case SHOW:
			ShowForm(&form);
			break;
		case EXIT:
			printf("退出查询\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while (input);
	return 0;
}

//辅助函数
static int FindByName(const struct Form* ps, char name[MAX_NAME])
{
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(ps->data[i].name, name))
		{
			return i;
		}
	}
	return -1;//找不到的情况
}

//取较小值
int MIN(int x, int y)
{
	if (x > y)
	{
		return y;
	}
	else
	{
		return x;
	}
}
void InitForm(struct Form* ps)
{
	memset(ps->data, 0, sizeof(ps->data));
	ps->size = 0;//设置表格最初只有0个元素
}

void Rinking(struct Form* ps)
{
	int arr[200]={0};
	int i = 0;
	for ( i = 0; i<=ps->size; i++)
	{
		arr[i] = ps->data[i].grade;
	}
	for (int j = 0; j <i; j++)
	{
		for (int k = 0; k + 1 < i; k++)
		{
			if (arr[k]< arr[k+1])
			{
				int tmp;
				tmp = arr[k];
				arr[k] = arr[k + 1];
				arr[k + 1] = tmp;
			}
		}
	}
	for (int j = 0; j < i; j++)
	{
		for (int k = 0; k <= i; k++)
		{
			if (ps->data[j].grade == arr[k])
			{
				ps->data[j].rinking = k+1;
				break;
			}
		}
	}
}


void AddForm(struct Form* ps)
{
	if (ps->size == MAX)
	{
		printf("表格已满,无法增加\n");
	}
	else
	{
		printf("请输入名字:>");
		scanf("%*[\n]%[^\n]", ps->data[ps->size].name);
		printf("请输入成绩:>");
		scanf("%d", &(ps->data[ps->size].grade));
		printf("请输入学号:>");
		scanf("%s", ps->data[ps->size].num);
		if (ps->data[ps->size].grade >= 93)
		{
			//ps->data[ps->size].GPA[0] = "A+";
			strcpy(ps->data[ps->size].GPA, "A+");
		}
		else if (ps->data[ps->size].grade < 93 && ps->data[ps->size].grade >= 85)
		{
			//ps->data[ps->size].GPA[0] = "A";
			strcpy(ps->data[ps->size].GPA, "A");
		}
		else if (ps->data[ps->size].grade < 85 && ps->data[ps->size].grade >= 80)
		{
			//ps->data[ps->size].GPA[0] = "B+";
			strcpy(ps->data[ps->size].GPA, "B+");
		}
		else if (ps->data[ps->size].grade < 80 && ps->data[ps->size].grade >= 75)
		{
			//ps->data[ps->size].GPA[0] = "B";
			strcpy(ps->data[ps->size].GPA, "B");
		}
		else if (ps->data[ps->size].grade < 75 && ps->data[ps->size].grade >= 70)
		{
			//ps->data[ps->size].GPA[0] = "B";
			strcpy(ps->data[ps->size].GPA, "C+");
		}
		else if (ps->data[ps->size].grade < 70 && ps->data[ps->size].grade >= 65)
		{
			//ps->data[ps->size].GPA[0] = "C";
			strcpy(ps->data[ps->size].GPA, "C");
		}
		else if (ps->data[ps->size].grade < 65 && ps->data[ps->size].grade >= 60)
		{
			//ps->data[ps->size].GPA[0] = "C";
			strcpy(ps->data[ps->size].GPA, "D");
		}
		else if (ps->data[ps->size].grade < 60)
		{
			//ps->data[ps->size].GPA[0] = "D";
			strcpy(ps->data[ps->size].GPA, "F");
		}
		if (ps->data[ps->size].num[0] == '2' && ps->data[ps->size].num[1] == '0' && ps->data[ps->size].num[2] == '2' && ps->data[ps->size].num[3] == '1')
		{
			//ps->data[ps->size].rebuild[0] = "NO";
			strcpy(ps->data[ps->size].rebuild, "NO");
		}
		else
		{
			//ps->data[ps->size].rebuild[0] = "YES";
			strcpy(ps->data[ps->size].rebuild, "YES");
		}
		ps->size++;
		printf("添加成功\n");
	}
}

void AddsForm(struct Form* ps)
{
	int n;
	printf("请输入要存储的学生信息个数:>");
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		if (ps->size == MAX)
		{
			printf("表格已满,无法增加\n");
		}
		else
		{
			printf("请输入第%d个同学的信息", i+1);
			printf("请输入名字:>");
			scanf("%*[\n]%[^\n]", ps->data[ps->size].name);
			printf("请输入成绩:>");
			scanf("%d", &(ps->data[ps->size].grade));
			printf("请输入学号:>");
			scanf("%s", ps->data[ps->size].num);
			if (ps->data[ps->size].grade >= 93)
			{
				//ps->data[ps->size].GPA[0] = "A+";
				strcpy(ps->data[ps->size].GPA, "A+");
			}
			else if (ps->data[ps->size].grade < 93 && ps->data[ps->size].grade >= 85)
			{
				//ps->data[ps->size].GPA[0] = "A";
				strcpy(ps->data[ps->size].GPA, "A");
			}
			else if (ps->data[ps->size].grade < 85 && ps->data[ps->size].grade >= 80)
			{
				//ps->data[ps->size].GPA[0] = "B+";
				strcpy(ps->data[ps->size].GPA, "B+");
			}
			else if (ps->data[ps->size].grade < 80 && ps->data[ps->size].grade >= 75)
			{
				//ps->data[ps->size].GPA[0] = "B";
				strcpy(ps->data[ps->size].GPA, "B");
			}
			else if (ps->data[ps->size].grade < 75 && ps->data[ps->size].grade >= 70)
			{
				//ps->data[ps->size].GPA[0] = "B";
				strcpy(ps->data[ps->size].GPA, "C+");
			}
			else if (ps->data[ps->size].grade < 70 && ps->data[ps->size].grade >= 65)
			{
				//ps->data[ps->size].GPA[0] = "C";
				strcpy(ps->data[ps->size].GPA, "C");
			}
			else if (ps->data[ps->size].grade < 65 && ps->data[ps->size].grade >= 60)
			{
				//ps->data[ps->size].GPA[0] = "C";
				strcpy(ps->data[ps->size].GPA, "D");
			}
			else if (ps->data[ps->size].grade < 60)
			{
				//ps->data[ps->size].GPA[0] = "D";
				strcpy(ps->data[ps->size].GPA, "F");
			}
			if (ps->data[ps->size].num[0] == '2' && ps->data[ps->size].num[1] == '0' && ps->data[ps->size].num[2] == '2' && ps->data[ps->size].num[3] == '1')
			{
				//ps->data[ps->size].rebuild[0] = "NO";
				strcpy(ps->data[ps->size].rebuild, "NO");
			}
			else
			{
				//ps->data[ps->size].rebuild[0] = "YES";
				strcpy(ps->data[ps->size].rebuild, "YES");
			}
			ps->size++;
		}
	}
	printf("添加成功\n");
}

void ShowForm(const struct Form* ps)
{
	if (ps->size == 0)
	{
		printf("表格为空\n");
	}
	else
	{
		int i = 0;
		//标题
		printf("%-20s\t%-3s\t%-20s\t%-15s\t%-15s\t%-5s\n", "名字", "成绩", "学号","重修信息","GPA","排名");
		//数据
		for (i = 0; i < ps->size; i++)
		{
			printf("%-20s\t%-3d\t%-20s\t%-15s\t%-15s\t%-5d\n",
				ps->data[i].name,
				ps->data[i].grade,
				ps->data[i].num,
				ps->data[i].rebuild,
				ps->data[i].GPA,
				ps->data[i].rinking);
		}
	}
}


void DelForm(struct Form* ps)
{
	char name[MAX_NAME];
	printf("请输入要删除人的名字:>");
	scanf("%*[\n]%[^\n]", name);
	//1.查找要删除的人在什么位置
	//找到了返回名字所在元素的下标
	//找不到返回-1
	int pos = FindByName(ps, name);
	//2.删除
	if (pos == -1)
	{
		printf("要删除的人不存在\n");
	}
	else
	{
		//删除数据
		int j = 0;
		for (j = pos; j < ps->size - 1; j++)
		{
			ps->data[j] = ps->data[j + 1];
		}
		ps->size--;
		printf("删除成功\n");
	}
}

void SearchForm(const struct Form* ps)
{
	char num[MAX_NUM];
	printf("请输入要查找的学号:>");
	scanf("%s", num);
	int pos = FindByName(ps, num);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
	}
	else
	{
		printf("%-20s\t%-3s\t%-12s\n", "名字", "成绩", "学号");
		printf("%-20s\t%-3d\t%-12s\n",
			ps->data[pos].name,
			ps->data[pos].grade,
			ps->data[pos].num);
	}
}

void ModifyForm(struct Form* ps)
{
	char num[MAX_NUM];
	printf("请输入要修改人的学号:>");
	scanf("%s", num);
	int pos = FindByName(ps, num);
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
	}
	else
	{
		printf("请输入名字:>");
		scanf("%s", ps->data[pos].name);
		printf("请输入成绩:>");
		scanf("%d", &(ps->data[pos].grade));
		printf("请输入学号:>");
		scanf("%s", ps->data[pos].num);
		printf("修改完成\n");
	}
}

void SortscoreForm(struct Form* ps)
{
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		for (int j = 0; j + 1 < ps->size; j++)
		{
			if (ps->data[j].grade < ps->data[j + 1].grade)
			{
				struct PeoInfo tmp;
				tmp = ps->data[j];
				ps->data[j] = ps->data[j + 1];
				ps->data[j + 1] = tmp;
			}
		}
	}
	printf("排序成功\n");
}

void SortidForm(struct  Form* ps)
{
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		for (int j = 0; j + 1 < ps->size; j++)
		{
			for (int k = 0; k < 12; k++)
			{
				if (ps->data[j].num[k] > ps->data[j + 1].num[k])
				{
					struct PeoInfo tmp;
					tmp = ps->data[j];
					ps->data[j] = ps->data[j + 1];
					ps->data[j + 1] = tmp;
					break;
				}
			}
		}
	}
	printf("排序成功\n");
}



void BestForm(struct Form* ps)
{
	int max = 0;
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->data[i].grade > max)
		{
			max = ps->data[i].grade;
		}
	}
	printf("%-20s\t%-3s\t%-20s\t%-15s\t%-15s\t%-5s\n", "名字", "成绩", "学号", "重修信息", "GPA", "排名");
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->data[i].grade == max)
		{
			printf("%-20s\t%-3d\t%-20s\t%-15s\t%-15s\t%-5d\n",
				ps->data[i].name,
				ps->data[i].grade,
				ps->data[i].num,
				ps->data[i].rebuild,
				ps->data[i].GPA,
				ps->data[i].rinking);
		}
	}
}


void WorstForm(struct Form* ps)
{
	int min = 100;
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->data[i].grade < min)
		{
			min = ps->data[i].grade;
		}
	}
	printf("%-20s\t%-3s\t%-5s\n", "名字", "成绩", "学号");
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->data[i].grade == min)
		{
			printf("%-20s\t%-3d\t%-12s\n",
				ps->data[i].name,
				ps->data[i].grade,
				ps->data[i].num);
		}
	}
}



void PrimeForm(struct Form* ps)
{
	char num[MAX_NUM];
	printf("请输入要查找人的学号:>");
	scanf("%s", num);
	int pos = FindByName(ps, num);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
	}
	else
	{
		int flag = 0;
		for (int i = 2; i < ps->data[pos].grade; i++)
		{
			if (ps->data[pos].grade % i == 0)
			{
				flag = 1;
				break;
			}
		}
		if (flag == 1)
		{
			printf("该同学的成绩不是素数\n");
		}
		else
		{
			printf("该同学的成绩是素数\n");
		}
	}
}

void CoprimeForm(struct Form* ps)
{
	char num1[MAX_NUM];
	char num2[MAX_NUM];
	printf("请输入要查找的第一位同学的学号:>");
	scanf("%s", num1);
	int pos1 = FindByName(ps, num1);
	printf("请输入要查找的另一位同学的学号:>");
	scanf("%s", num2);
	int pos2 = FindByName(ps, num2);
	if (pos1 == -1)
	{
		printf("要查找的人不存在\n");
	}
	 else if (pos2 == -1)
	{
		printf("要查找的人不存在\n");
	}
	else
	{
		int flag = 0;
		for (int i = 2; i < MIN(ps->data[pos1].grade,ps->data[pos2].grade); i++)
		{
			if (ps->data[pos1].grade % i == 0&& ps->data[pos2].grade % i == 0)
			{
				flag = 1;
				break;
			}
		}
		if (flag == 1)
		{
			printf("该俩位同学的成绩不互素\n");
		}
		else
		{
			printf("该俩位同学的成绩互素\\n");
		}
	}
}

void AveForm(struct Form* ps)
{
	int sum = 0;
	for (int i = 0; i < ps->size; i++)
	{
		sum += ps->data[i].grade;
	}
	printf("平均数为%d\n", sum / ps->size);
}
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值