数据结构--学生成绩管理系统(顺序表)

一、 实验目的:

1.通过此次课程设计学生成绩管理系统的题目,掌握链表等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解;
2. 将所学数据结构方面的知识与具体的语言来进行实现,感受数据结构的强大作用,加深理解。

二、实验内容:

编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。建立一个学生的信息登记表,每个学生的信息包括:学号,姓名和课程的成绩。
程序运行时显示一个简单的菜单,例如:
(1)添加记录
(2)显示记录
(3)修改记录
(4)删除记录
(0)退出系统
其中:
(1)添加记录是对学生的信息进行输入,要求输入学号、姓名、学科成绩,其中学号设定为唯一标识码,即学号不能重复;
(2)显示记录除了显示添加记录的信息外,还需要显示对每个学生的课程统计总分;
(3)修改记录按照唯一标识码进行学生数据的修改;
(4)删除记录按照唯一标识码进行学生数据的删除;

三、程序如下

#include
#include
using namespace std;
struct student
{
	int num;
	char name[10];
	float ch;
	float ma;
};
static int length=0;//申请一个静态变量,表示顺序表的长度
int Create(student *stu)//添加记录
{
	int i=length;
	printf("\n请输入学号:");
	scanf("%d",&stu[i].num);
	for(int j =0 ;j<length;j++)//判断该学号是否已经存在
	{
		if(stu[i].num==stu[j].num)
		{
			printf("该学号已存在!\n");
			return 0;
		}
	}
	printf("请输入姓名:");
	scanf("%s",&stu[i].name);
	printf("请输入语文成绩:");
	scanf("%f",&stu[i].ch);
	printf("请输入数学成绩:");
	scanf("%f",&stu[i].ma);
	length ++;
}
void Display(student *stu)//显示记录
{
	int x;int n=0;
	printf("请输入学号:");
	scanf("%d",&x);
	for(int i=0;i<length;i++)
	{
		if(x==stu[i].num)
		{
			n=1;
			printf("\n学号		姓名		语文成绩		数学成绩\n");
			printf("%d",stu[i].num);
			printf("\t\t%s",stu[i].name);
			printf("\t\t%.2f",stu[i].ch);
			printf("\t\t\t%.2f",stu[i].ma);
			printf("\n");
			break;
		}
	}
	if(n!=1)
			printf("无该生信息!\n");
}
void Gange(student *stu)//修改记录
{
	int num;int n=0;
	printf("请输入需要修改信息的学号:");
	scanf("%d",&num);
	for(int i=0;i<length;i++)
	{
		if(num==stu[i].num)
		{
			n=1;
			printf("请输入新姓名:");
			scanf("%s",&stu[i].name );
			printf("请输入新语文成绩:");
			scanf("%f",&stu[i].ch );
			printf("请输入新数学成绩:");
			scanf("%f",&stu[i].ma );
			printf("修改成功!\n");
			break;
		}
	}
	if(n!=1)
		printf("无该生信息!\n");
}
void Delete(student *stu)//删除记录
{
	int num;int i;int n=0;
	printf("请输入要删除信息的学号:");
	scanf("%d",&num);
	for(i=0;i<length;i++)
	{
		if(num==stu[i].num)
		{
			n=1;
			break;
		}
	}
	int c=length-i;//需要覆盖的次数
	if(n==1)//进行循环覆盖,若不满足判断,则不进入此循环
		{	for(int j=0;j<c;j++)
			{
				stu[i].num=stu[i+1].num;
				strcpy(stu[i].name,stu[i+1].name); 
				stu[i].ch=stu[i+1].ch;
				stu[i].ma=stu[i+1].ma;
				i++;
			}
	printf("已删除该生信息!\n");
		}
	if(n!=1)
		printf("无该生信息!\n");
	length--;
}
void Menu()//菜单图形
{
	printf("\n\t\t------------------------------------");
	printf("\n\t\t|          学生成绩管理系统        |");
	printf("\n\t\t|          (1)添加记录           |");
	printf("\n\t\t|          (2)显示记录           |");
	printf("\n\t\t|          (3)修改记录           |");
	printf("\n\t\t|          (4)删除记录           |");
	printf("\n\t\t|          (5)退出系统           |");
	printf("\n\t\t------------------------------------");
}
void Option(student *stu)//用户选择系统
{
	while(1)
	{	
		system("cls");
		Menu();
		printf("\n\t\t请输入选项(1-5):");
		int x;
		char opt;
		scanf("%d",&x);
		switch(x)
		{
		case 1:
			{ 
				Create(stu);
				break;
			}
		case 2:
			{
				Display(stu);
				break;
			}
		case 3:
			{
				Gange(stu);
				break;
			}
		case 4:
			{
				Delete(stu);
				break;
			}
		default:
			{
				printf("请输入正确数字!\n");
				break;
			}
		}
		printf("是否继续操作(y/n): ");
		cin>>opt;
		if(opt=='y')
		{
			continue;
		}
		break;
	}

}
int main()
{
	struct student stu[50];
	//Init(stu);
	Option(stu);
	return 0;
}

这只是一个简单的示例,还有很多地方可以完善,如在输入数字时如何判断用户不会输入其他字符(设置int型变量在接收中文字符,字母等就会报错),还有设置一些控制(成绩不能超过100等…),这些就由各位自己完善。
数据结构--学生成绩管理系统(顺序表)_第1张图片

你可能感兴趣的:(数据结构)