学生信息管理系统#C语言大作业

该博客详细介绍了如何使用C语言实现一个学生信息管理系统,包括新建项目、定义学生数据结构、文件输入输出、模块化编程、查找、插入、删除学生信息、排序功能以及用户界面设计。通过冒泡排序、选择排序和插入排序三种方法实现学号的排序,并提供了交互式的菜单供用户操作。
摘要由CSDN通过智能技术生成

功能概括:

1.新建项目

2.定义学生数据类型

3、输入输出学生数据(文件)

4,模块化编程(定义函数)

5.查找学生信息数据(基于学号/姓名/成绩)

6.插入/删除学生信息数据(基于位置)

7、删除特定学生信息数据(基于属性)

8,有序插入学生信息

9.三种排序方法

10.用户界面(菜单)

步骤:

1.建立基本学生信息结构体struct

2.建立菜单

3.建立每个功能的函数体

4.利用switch case 语句在主函数实现功能选择

完整代码如下:

#include<stdio.h>
#include<string.h>
/*1.新建项目
2.定义学生数据类型
3、输入输出学生数据(文件)4,模块化编程(定义函数)
5.查找学生数据(基于学号/姓名/成绩)
6.插入/删除数据(基于位置)
7、删除特定数据(基于属性)8,有序插入
9.三种排序方法10.用户界面(菜单)
*/
struct Student
{
	int id;
	char name[10];
	float score;
};
void Output(Student ss[],int n);
int	Open(char fname[],Student ss[]);

int SearchbyId(Student ss[],int n,int id);
void SearchbyName(Student ss[],int n,char name[]);

int RemoveAt(Student ss[],int n,int k);//删除下标为k的学生数据
int InsertAt(Student ss[],int n,int l,struct Student s);//将学生s插入到下标为l的位置 


int RemovebyId(Student ss[], int n, int id);//删除学号为id的学生
int RemovebyName(Student ss[], int n, char name1[]);	//删除学生名为name的学生

void SelectSortbyScore(Student ss[], int n); // 选择排序
void BubbleSortbyId(Student ss[], int n);    // 冒泡排序
void InsertSortbyName(Student ss[], int n);  // 插入排序
int InsertbyId(Student ss[], int n, Student s);//有序表的插入(函数的嵌套)

int Menu();
int Menu()
{
	int choice;
	printf("1.....打开文件,读入学生成绩\n");
	printf("2.....显示所有学生成绩\n");
	printf("3.....按学号查找学生成绩\n");
	printf("4.....删除下标为k的学生数据\n");
	printf("5.....将学生s插入到下标为l的位置\n");
	printf("6.....按学号删除学生成绩\n");
	printf("7.....按学号倒序冒泡排序\n");
	printf("8.....按学号正序选择法排序\n");
	printf("9.....按学号插入学生信息\n"); 
	printf("10.....按姓名查找学生成绩\n");
	printf("0.....退出\n");
	scanf("%d", &choice);
	return choice;
}
int main()
{
	int n,k,choice,id,j1,l,id1,p,q;
    struct	Student ss[10];
	char name[10],name1[10];
	while(1)
	{
		choice=Menu();
		switch(choice)
		{
			case 0:
				return 0;
			case 1:
				n=Open("data.txt",ss);		//读取数据 
				break;
			case 2:
				Output(ss,n);
				break;				//输出所有数据 
			case 3:
				printf("请输入要查找的学号:"); 
				scanf("%d",&id);
				SearchbyId(ss,n,id);		//按学号查找学生 
				break;
			case 4:
				printf("请输入要删除的学生数据的下标:");
				scanf("%d",&k);
				n=RemoveAt(ss,n,k);
				printf("删除后:\n");
				Output(ss,n);				// 删除下标为k的学生数据
				break;
			case 5:
				struct Student s;
				printf("请输入待添加的学生信息:\n");
				scanf("%d%s%f",&s.id,&s.name,&s.score);
				printf("请输入想要插入的下标位置:");
				scanf("%d",&l);
				n=InsertAt(ss,n,l,s);			
				printf("添加后:\n");
				Output(ss,n);				//将学生s插入到下标为l的位置 有序表的插入(函数的嵌套)
				break;
			case 6:
				printf("请输入要删除的学号:");
				scanf("%d",&id1);
				n=RemovebyId(ss,n,id1); 
				Output(ss,n);
				break;
			case 7:
				BubbleSortbyId(ss,n);	
				printf("倒序后:\n");
				Output(ss,n);				//选择法排序 
				break;
			case 8:
				SelectSortbyScore(ss,n);
				printf("排序后:\n");
				Output(ss,n);
				break;
			case 9:
				struct Student s1;
				printf("请输入待添加的学生信息:\n");
				scanf("%d%s%f",&s1.id,&s1.name,&s1.score);
				n=InsertbyId(ss,n,s1);			
				printf("添加后:\n");
				Output(ss,n);
				break;	
			case 10:
				printf("请输入姓名:");
				scanf("%s",name);
				SearchbyName(ss,n,name);
				break;
			case 11:
				printf("请输入要删除的学生数据的姓名:");
				scanf("%s",name1); 
				n=RemovebyName(ss,n,name1);
				printf("删除后:\n");
				Output(ss,n);				// 删除下标为k的学生数据
				break; 
		}
	}
	return 0;
}
int Open(char fname[],Student ss[])
{
	int i,n;
	FILE *fp;
	fp=fopen("d:\\data.txt","r");
	fscanf(fp,"%d",&n);
	for(i=0;i<n;i++)
	{
		fscanf(fp,"%d %s %f",&ss[i].id,&ss[i].name,&ss[i].score);
	}
	fclose(fp);
	return n;
}
void Output(Student ss[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%d %s %f\n",ss[i].id,ss[i].name,ss[i].score);
	}
}
int RemoveAt(Student ss[],int n,int k)//删除下标为k的学生数据
{
	int i,j;
	for(i=0;i<n;i++)
	{
		if(i==k)
		{
			for(j=i;j<n;j++)
			{
				ss[j]=ss[j+1];
			}
			break;
		}	
	}
	return n-1;
}
int SearchbyId(Student ss[],int n,int id)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(ss[i].id==id)
		{
			printf("学号:%d 姓名:%s 分数:%f\n",ss[i].id,ss[i].name,ss[i].score);
		}
	}
}
int InsertAt(Student ss[],int n,int l,struct Student s)
{
	int i;
	for(i=n-1;i>=0;i--)
	{
		ss[i+1]=ss[i];
		if(i==l)
		{
			ss[i]=s;
			break;
		}
	}
	return n+1;
}
int RemovebyId(Student ss[], int n, int id)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		if(ss[i].id==id)
		{
			for(j=i;j<n;j++)
			{
				ss[j]=ss[j+1];	
			}	
			break;
		}	
	} 
	return n-1;
}
void SelectSortbyScore(Student ss[], int n)
{
	int i,j;
	struct Student h;
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(ss[i].id>ss[j].id)
			{
				h=ss[i];
				ss[i]=ss[j];
				ss[j]=h;
			}
		}
	} 
}
void BubbleSortbyId(Student ss[], int n)
{
	int i,j;
	struct Student h;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i;j++)
		{
			if(ss[j].id<ss[j+1].id)
			{
				h=ss[j];
				ss[j]=ss[j+1];
				ss[j+1]=h;
			}
		}
	}
}
int InsertbyId(Student ss[], int n, Student s)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		if(ss[i].id>s.id)
		{
			for(j=n-1;j>=i;j--)
			{
				ss[j+1]=ss[j];	
			}
			break;
		}
	}
	ss[i]=s;
	return n+1;
}
void SearchbyName(Student ss[],int n,char name[])
{
	int i;
	for(i=0;i<n;i++)
	{
		if(strcmp(ss[i].name,name)==0)
		{
			printf("学号:%d 姓名:%s 分数:%f\n",ss[i].id,ss[i].name,ss[i].score);
		}
	}
}
int RemovebyName(Student ss[], int n,char name1[])
{
	int i,j;
	for(i=0;i<n;i++)
	{
		if(strcmp(ss[i].name,name1)==0)
		{
			for(j=i;j<n;j++)
			{
				ss[j]=ss[j+1];	
			}	
			break;
		}
	}
	return n-1;
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值