基于C语言的学生信息管理系统

#include <stdio.h>
#define N 40

//学生信息的结构体
typedef struct __Student{
    int id;//学号
    char name[32]; //姓名
    int score;  //成绩
}stu_t;

//班级的结构体
typedef struct __Class{
    stu_t person[N];//管理学生信息的结构体数组
    int count; //记录班级已有的人数
}class_t;

//函数的声明
void print_menu();
int insert_student(class_t *my_class);
int delete_student(class_t *my_class);
int modify_student(class_t *my_class);
int search_student(class_t *my_class);
int sort_student(class_t *my_class);
void printf_all(class_t *my_class);
int main(int argc, const char *argv[])
{
	printf("欢迎使用学生信息管理系统\n");
	class_t my_class;
	my_class.count = 0;

	int choose = 0;
	
	while(1){
		print_menu();
		scanf("%d", &choose);
	
		switch(choose){
			case 1:
				insert_student(&my_class);
				break;
			case 2:
				delete_student(&my_class);
				break;
			case 3:
				modify_student(&my_class);
				break;
			case 4:
				search_student(&my_class);
				break;
			case 5:
				sort_student(&my_class);
				break;
			case 6:
				printf_all(&my_class);
				break;
		}
		if(choose>6){
			break;
		}
	}
	printf("欢迎下次使用..\n");

	return 0;
}

//打印菜单的函数
void print_menu(){
	printf("\n\n");
	printf("---------------------------------------------------------\n");
	printf("| 1.添加  2.删除  3.修改  4.查找  5.排序  6.打印  7.退出|\n");
	printf("---------------------------------------------------------\n");
	printf("请输入你的选择:");
}

//添加学员信息的函数
int insert_student(class_t *my_class){
	if(N == my_class->count){
		printf("班级人数已满,添加失败\n");
		return -1;
	}

	int ID=0;
	while (1)
	{
		if(N == my_class->count){
			printf("班级人数已满,添加失败\n");
			return -1;
		}
	NEXT:
    	printf("请输入新学员的学号(学号小于1退出输入):");	
    	scanf("%d",&ID);
		if(ID<1){
			printf("学生信息输入结束!\n");
			return 0;
		}
		//检验新学员学号是否曾输入,是则警告且拒绝输入,否则输入成功
		for (int i=0; i<my_class->count; i++)
		{
			if(my_class->person[i].id == ID){
				printf("学号%d已被使用,请重新输入!\n",ID);
				goto NEXT;		
			}
		}
		my_class->person[my_class->count].id = ID;

    	printf("请输入新学员的姓名:");	
    	scanf("%s",my_class->person[my_class->count].name);
    	printf("请输入新学员的成绩:");	
    	scanf("%d",&my_class->person[my_class->count].score);
		printf("学员信息添加成功\n\n");		
		
		my_class->count++;
		printf_all(my_class);
	}

	return 0;
}

//删除学员信息的函数
int delete_student(class_t *my_class){
	if (0 == my_class->count)	
	{
		printf("班级人数已为0,删除失败\n");
		return -1;
	}
	printf("请输入需要删除的学员的学号:");
	int ID=0;
	int i=0;
	int flag=0; //标识是否找到需要删除的学员。
	scanf("%d",&ID);
	for (i=0; i<my_class->count; i++)
	{	
		if(0 != flag){
			my_class->person[i-flag] = my_class->person[i];
		}
		if(my_class->person[i].id == ID)
			flag++;
	}
	if(0 == flag){		
		printf("不存在学号为%d的学员,删除失败!\n",ID);
		return -1;
	}
	my_class->count--;
	printf("已删除学号为%d的学员信息\n",ID);
	printf_all(my_class);
	return 0;
}

//修改学员信息的函数:
int modify_student(class_t *my_class){
	int ID=0;
	int i=0;
	int flag = 0;
	if(0 == my_class->count){
		printf("学员信息为空,无法修改!\n");
		return -1;
	}
	printf("请输入需要修改的学员的学号:");
	scanf("%d",&ID);
	for (i=0; i<my_class->count; i++)
	{
		if(ID == my_class->person[i].id){
			flag=1;
			break;			
		}
	}	
	if(0 == flag){
		printf("未找到学号为%d的学员信息,修改失败!\n",ID);
		printf_all(my_class);
		return -1;
	}
	stu_t temp;
	printf("请输入需要修改成的信息(id name score):");
	scanf("%d%s%d",&(temp.id),temp.name,&(temp.score));
	my_class->person[i]=temp;
	printf("学员信息修改成功!\n");
	printf_all(my_class);
	return 0;
}

//查找学生信息
int search_student(class_t *my_class){
	int i=0;
	int flag=0;
	int ID;
	if(0 == my_class->count){
		printf("学员信息为空!\n");
		return -1;
	}
	printf("请输入需要查找的学员学号:");
	scanf("%d",&ID);
	for (i=0; i<my_class->count; i++)
	{
		flag=1;
		if(ID == my_class->person[i].id){
			printf("找到学员信息如下:\n姓名:%s\n成绩:%d\n",\
					my_class->person[i].name,my_class->person[i].score);
			break;
		}
	}
	if(0 == flag){
		printf("未找到学号为%d的学员信息!\n",ID);
		return -1;
	}
	return 0;
}

//学生成绩排序
int sort_student(class_t *my_class){
	int i=0;
	if(0 == my_class->count){
		printf("学员信息为空\n");
		return -1;
	}
	stu_t temp;
	for (int i=0; i<my_class->count-1; i++)
	{
		for (int j=0; j<my_class->count-i-1; j++)
		{
			if(my_class->person[j].score<my_class->person[j+1].score){
				temp = my_class->person[j];
				my_class->person[j] = my_class->person[j+1];
				my_class->person[j+1] = temp;
			}
		}
	}

	printf("排序完成!\n");
	printf_all(my_class);
	return 0;
}

//学生信息输出
void printf_all(class_t *my_class){
	printf("-------------------------\n");
	printf("| 学号 |  姓名  |  成绩 |\n");
	printf("-------------------------\n");
	for (int i=0; i<my_class->count; i++)
		printf("|%4d  |  %-6s|   %-3d |\n",my_class->person[i].id,\
				my_class->person[i].name,my_class->person[i].score);
	printf("-------------------------\n");
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值