【C语言篇】学生成绩管理系统

main.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "Student_Manage_Sys.h"

void main()
{
	struct student stu[50]; //用来保存学生记录,最多保存50条
	int select, quit = 0;
		while (1)
		{
			Menu();
			scanf("%d", &select);//将用户输入的选择保存到select
			switch (select)
			{
			case 1:
				add(stu);  //添加记录
				break;
			case 2:
				ShowALL(stu);  //显示记录
				break;
			case 3:
				modify(stu);  //修改记录
				break;
			case 4:
				del(stu);  //删除记录
				break;
			case 5:
				Search(stu);  //查找记录
				break;
			case 6:
				sort(stu);  //排序记录
				break;
			case 0:
				quit = 1;;  //退出系统
				break;
			default:
				printf("请输入0-6之间的数字\n");
				break;
			}
			if (quit == 1)
				break;
			printf("将任意键返回主菜单!\n");
			getchar();  //提取缓冲区的回车键
			getchar();  //起到暂停的作用
		}
	printf("程序结束!\n");
	system("pause");
}

Student_Manage_Sys.c

#define _CRT_SECURE_NO_WARNINGS
#include "Student_Manage_Sys.h"

/*显示开始菜单界面*/
void Menu()
{
	system("cls");//清空屏幕
	printf("\n");
	printf("\t\t -------------学生成绩管理系统--------------\n");
	printf("\t\t | \t\t 1. 添加记录 \t\t   | \n");
	printf("\t\t | \t\t 2. 显示记录 \t\t   | \n");
	printf("\t\t | \t\t 3. 修改记录 \t\t   | \n");
	printf("\t\t | \t\t 4. 删除记录 \t\t   | \n");
	printf("\t\t | \t\t 5. 查找记录 \t\t   | \n");
	printf("\t\t | \t\t 6. 排序记录 \t\t   | \n");
	printf("\t\t | \t\t 0. 退出系统 \t\t   | \n");
	printf("\t\t -------------------------------------------\n");
	printf("\t\t请选择(0-6):");
}


/*添加学生信息*/
void add(struct student stu[])
{
	int i, id = 0; //i作为循环变量,id用来保存新学号
	char quit; //保存"是否退出"的选择
	do
	{
		printf("学号:");
		scanf("%d", &id);
		for (i = 0; i < n; i++)
		{
			if (id == stu[i].id)  //假如新学号等于数组中某生的学号
			{
				printf("此学号存在!\n");
				return;
			}
		}

		stu[i].id = id;
		printf("姓名:");
		scanf("%s",&stu[i].name);
		printf("语文成绩:");
		scanf("%d", &stu[i].chinese);
		printf("数学成绩:");
		scanf("%d",&stu[i].math);
		stu[i].sum = stu[i].chinese + stu[i].math; //计算总成绩
		n++;//记录条数加一
		printf("是否继续添加?(Y/N)");
		scanf("\t%c",&quit);
	} while (quit != 'N');

}


/*显示某个学生信息*/
void show(struct student stu[],int i)
{
	printf("%-10d",stu[i].id);
	printf("%-10s", stu[i].name);
	printf("%-10d", stu[i].chinese);
	printf("%-10d", stu[i].math);
	printf("%-10d\n", stu[i].sum);

}

/*显示全部学生信息*/
void ShowALL(struct student stu[])
{
	int i;
	HH;
	for (i=0;i<n;i++)
	{
		show(stu, i);
	}
}

/*修改信息*/
void modify(struct student stu[])
{
	char name[8], ch;  //name用来保存姓名,ch用来保存"是否退出"的选择
	int i;  //用来当作循环变量
	printf("修改学生的记录。\n");
	printf("请输入学生的姓名:");
	scanf("%s", &name);
	for (i = 0; i < n; i++)
	{
		if (strcmp(name, stu[i].name) == 0)
		{
			getchar(); //提取并丢掉回车键
			printf("找到该生的记录,如下所示:\n");
			HH;  //显示记录的标题
			show(stu,i); //显示数组stu中的第i条记录
			printf("是否修改?(Y/N)");
			scanf("%c", &ch);
			if (ch == 'Y' || ch == 'y')
			{
				getchar(); //提取并丢掉回车键
				printf("姓名");
				scanf("%s", &stu[i].name);
				printf("语文成绩: ");
				scanf("%d",&stu[i].chinese);
				printf("数学成绩:");
				scanf("%d", &stu[i].math);
				stu[i].sum= stu[i].chinese + stu[i].math;
				printf("修改完毕。\n");
			}
			return;
		}
	}
	printf("没有找到该生的记录");
}


/*删除学生的记录*/
void del(struct student stu[])
{
	int id, i; //id用来记录学号,i用来当作循环变量
	char ch;
	printf("删除学生的记录。\n");
	printf("请输入学号:");
	scanf("%d",&id);
	for (i = 0; i < n; i++)
	{
		if (id == stu[i].id)
		{
			getchar();
			printf("找到改生的记录,如下所示:\n");
			HH;  //显示记录的主题
			show(stu,i); //显示数组stu中的第i条记录
			printf("是否删除?(Y/N)\n");
			scanf("%c",&ch);
			if (ch == 'Y' || ch == 'y')
			{
				for (; i < n; i++)
					stu[i] = stu[i + 1]; //被删除记录后面的记录均前移一位
				n--;   //记录总条数减1
				printf("删除成功!");
			}
			return;
		}
	}
	printf("没有找到改生的记录!\n");
}


/*搜索学生信息*/
void Search(struct student stu[])
{
	char name[8]; //用来存放学生姓名
	int i; //用来当作循环变量
	printf("查找学生的记录。\n");
	printf("请输入学生的姓名:");
	scanf("%s",&name);
	for (i = 0; i < n; i++)
	{
		if (strcmp(name,stu[i].name) == 0)
		{
			printf("找到改生的记录,如下所图:\n");
			HH;//显示记录的主题
			show(stu,i);//显示数组stu中的第i条记录
			return;
		}
	}
	printf("没有找到该生的记录。\n");
}

/*排序分类*/
void sort(struct student stu[])
{
	int i, j;
	struct student t;
	printf("按总成绩进行排序,");
	for (i = 0; i < n - 1; i++)
	{
		for (j = 0; j < n - 1; j++)
		{
			if (stu[i].sum < stu[j].sum)
			{
				t = stu[i];
				stu[i] = stu[j];
				stu[j] = t;
			}
		}
	}

	printf("排序结果如下:\n");
	ShowALL(stu); //显示排序后的所有记录
}

Student_Manage_Sys.h

#ifndef STUDENT_MANAGE_SYS_H
#define STUDENT_MANAGE_SYS_H

#include <stdio.h>
#include <stdlib.h>

#define	HH	printf("%-10s%-10s%-10s%-10s%-10s\n","语文","姓名","语文成绩","数学成绩","总分")

/*定义一个学生信息的结构体*/
struct student
{
	int id; /*学号*/
	char name[8];/*姓名*/
	int chinese;/*语文成绩*/
	int math; /*数学成绩*/
	int sum; /*总分*/
};	

static int n; //记录学生信息条数


void Menu();
void add(struct student stu[]);
void show(struct student stu[], int i);
void ShowALL(struct student stu[]);
void modify(struct student stu[]);
void del(struct student stu[]);
void Search(struct student stu[]);
void sort(struct student stu[]);

#endif

运行过程

添加记录

在这里插入图片描述

显示记录

在这里插入图片描述

修改记录

在这里插入图片描述

删除记录

在这里插入图片描述

查找记录

在这里插入图片描述

排序记录

在这里插入图片描述

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被偷空的前缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值