纯C语言学生管理系统(学生期末作业)

**

纯C语言学生管理系统(学生期末作业)

**

分为7大功能:增、删、查、改、预览、存储、导出

代码都加有注释,利于不懂的,理解

添加功能

//添加学生
void input ()
{
	int i;
	int j,ge;
	DaoChu();
	printf("你要存储几个学生的信息:");
	scanf("%d",&ge);
	for(i=count;i<count+ge;i++)//遍历里面的数据,
	{
	printf("请输入学号:");
	scanf("%d",&data[i].id );
 	for (j=0; j<i; j++)//// 跟数据源的数据比较,是否有一样的学号
	{
		if( data[i].id==data[j].id )/// 比较
		{
			printf("学号重复!请你重新输入:\n");
		}
	}
	printf("请输入姓名:");
	scanf("%s",&data[i].name);//输入的数据直接保存到地址
	printf("输入手机号:");
	scanf("%s",&data[i].phone);
	printf("以下输入成绩\n");
	printf("语文:");
	scanf("%d",&data[i].score[0]);

	printf("数学:");
	scanf("%d",&data[i].score[1]);
	printf("英语:");
	scanf("%d",&data[i].score[2]);
	Sleep(1000);
	printf("添加成功\n");
	Sleep(800);
	system("CLS");
}
	count =count+ge;
	CunChu();//输入完数据 存储到本地
}

删除功能如下:

void move ()
{

	int i,f;
	int j,n;
	char move[10];
	struct data *p=NULL;//定义
	int k=0;
	DaoChu();
	system("CLS");
	printf("删除全部输入all、单个one:\n");
	scanf("%s",move);
	if(strcmp(move,"all")==0)
	{
		for (f=0;f<count;f++)
		{
			count=0;
			CunChu();
		}
		printf("删除成功\n");
			
	}
	else if(strcmp(move,"one")==0)
	{
	printf("请输入你要删除学生的学号:");
	scanf("%d",&i);
	for(n=0;n<count;n++)
	{
		if(i==data[n].id)
		{
 			k=1;j=n;break;//如果找到该学号就把k设为真 ,n的值赋给j
		}
	}

	if(k)
	{
		if(count==1)
		{
			p=&data[0];//如果删除最后一个学生信息几把p指向它的首地址 然后释放掉
			free(p);//释放内存free这是释放内存的函数
			count=0;//然后个数设为0
		}
		else
		{
			for(i=j;i<=count;i++)
			{ 
				data[i]=data[i+1];//如果还有多个学生的话,就用后面一个学生往上移一位,覆盖那个学生
			}
			count=count-1;//个数减一
		}
		printf("删除成功\n\n");
		CunChu();//然后保存数据

	 }
	
	else
		printf("输入数据错误!\n");	
	}

}

查找功能

/// 查找学生,按学号查找
void find()
{

	int xuehao;
	int i,k=0;
	DaoChu();
	if (count==0)
	{
		printf("没有任何数据\n");
		return;
	}
	printf("请输入你要查找学生的学号:");
	scanf("%d",&xuehao);
	printf("学号\t姓名\t  手机号  \t英语\t数学\t语文\t总分\n");
	printf("---------------------------------------------------------\n");

	for(i=0;i<count;i++)
	{
		if(xuehao==data[i].id)//如果找到这个学生的学号就打印他的所有信息
		{		
			k=1;
			printf("%d\t%s\t%s\t%d\t%d\t%d\t",data[i].id,data[i].name,data[i].phone,data[i].score[0],data[i].score[1],data[i].score[2]);
			data[i].score[3]=data[i].score[0]+data[i].score[1]+data[i].score[2];
			printf("%d\n",data[i].score[3]);

		}

	}
	if (k==0)
	{

		printf("没有该学生,是否输入有错\n");
	}
	printf("---------------------------------------------------------\n");

}

修改功能

//修改函数
/*  工作原理
这个函数是先把数据导出,然后再判断输入的学号是否一样,找到一样的就修改
然后再储存进去!
*/
void revise()
{
	int m=0;
	int xuehao,xx,j,i;
	FILE *fp;
	int f=0;
	DaoChu();//调用导出数据函数 
	printf("请输入你要修改的学号:");
	scanf("%d",&xuehao);
	for(xx=0;xx<count;xx++)
	{
		if(xuehao==data[xx].id)
		{
			printf("找到该学生!可以修改\n");
			f=1;
			printf("请输入学号:");
			scanf("%d",&data[xx].id);		
				for (i=0; i<xx; i++)//// 跟数据源的数据比较,是否有一样的学号
				{
					if( data[xx].id==data[i].id )/// 比较
					{
						printf("学号重复!请你重新输入:\n");
						continue;
					}
				}
			printf("请输入姓名:");
			scanf("%s",&data[xx].name);
			printf("输入手机号:");
			scanf("%s",&data[xx].phone);
			printf("以下输入成绩\n");
			printf("语文:");
			scanf("%d",&data[xx].score[0]);
			printf("数学:");
			scanf("%d",&data[xx].score[1]);
			printf("英语:");
			scanf("%d",&data[xx].score[2]);
			printf("修改成功\n");	
			CunChu();
			break;
   	}	
	}
	if(!f)
	printf("没有找到!\n");
}
//学生列表信息
void list_all()
{

	int j;
	DaoChu();
	system("CLS");
	printf("    学号      姓名     手机号     英语  数学  语文    总分  \n");
	printf("------------------------------------------------------------\n");
	for(j=0;j<count;j++)
	{
		//STUDENT *s =&data[j];
		printf( " %-10d  %-6s  %-11s   %3d   %3d   %3d  ",data[j].id,data[j].name,data[j].phone,data[j].score[0],data[j].score[1],data[j].score[2]);
		data[j].score[3] =data[j].score[0]+data[j].score[1]+data[j].score[2];
		printf("   %3d  \n",data[j].score[3]);			
	}
	printf("------------------------------------------------------------\n");
	printf("总数:%d\n",count);
}

浏览功能

void list_all()
{
	int j;
	DaoChu();
	system("CLS");
	printf("    学号      姓名     手机号     英语  数学  语文    总分  \n");
	printf("------------------------------------------------------------\n");
	for(j=0;j<count;j++)
	{
		//STUDENT *s =&data[j];
		printf( " %-10d  %-6s  %-11s   %3d   %3d   %3d  ",data[j].id,data[j].name,data[j].phone,data[j].score[0],data[j].score[1],data[j].score[2]);
		data[j].score[3] =data[j].score[0]+data[j].score[1]+data[j].score[2];
		printf("   %3d  \n",data[j].score[3]);			
	}
	printf("------------------------------------------------------------\n");
	printf("总数:%d\n",count);
}

导入本地

//存到文件
void CunChu()
{
	int i;
	FILE *rs;//定义一个文件指针rs
	if((rs=fopen("student.txt","w"))==NULL)//如果指定文件不存在则无法打开,就新建
	{
		printf("not open");
		exit(0);//退出
	}
	for(i=0;i<count;i++)
	{
		fwrite(&data[i], sizeof(data[i]), 1, rs);
	}
	if(ferror(rs))//如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错
	{
		fclose(rs);//如果出错就关闭文件流
		perror("写文件失败!\n");
		return;
	}
	printf("存储文件成功!\n");
	fclose(rs); //关闭文件流
	Sleep(1000);
	system("CLS");

}

导出文件

void DaoChu()
{
	struct data t;//定义一个结构体类型 t
	int i=0;
	FILE* fp = fopen("student.txt", "r");//fp指针指向所打开的文件
	count=0;
	if(fp==NULL)//如果打开的文件不存在就执行以下
	{
		perror("读取文件打开失败!\n");
		return;
	}
	memset(data,0x0,sizeof(data));//它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)

	while(1)//能打开文件就执行以下读取数据
	{
		fread(&t,sizeof(t),1,fp);//如果有文件的话,就依此读取文件&t表示首地址 t表示数据块长度
		if(ferror(fp))//如果出错就读取失败ferror
		{
			fclose(fp);
			perror("读文件过程失败!\n");
			return;
		}
		if(feof(fp))//这判断如果到达文件尾部就应该停止
		{
			break;
		}
		data[i]=t;//把t的数据赋给i
		i++;//然后i以下加上
	}

	fclose(fp);//读取完后关闭文件流,否则会造成句柄泄露
	count=i;//然后把i的个数赋给全局变量
	printf("导出文件成功!\n");

}

菜单

//菜单功能
void mune()
{
	char cmdline[128];
	while(1)
	{

		printf("\n\n\t\t\t欢迎来到我的学生管理系统!\n");	   
		printf("\t\t\t\t添加:add \n\t\t\t\t查找:find \n\t\t\t\t删除:move \n\t\t\t\t浏览:list\n\t\t\t\t修改:revise\n\t\t\t\t存储:input \n\t\t\t\t导出:output  \n\t\t\t\t退出:exit \n");
		printf ("请输入你的指令:");
		scanf("%s",cmdline);
		//菜单处理
		if (strcmp(cmdline,"revise")==0)
		{
			revise();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"exit")==0)
		{
			printf("退出系统\n");
			break;
		}
		//菜单处理
		if (strcmp(cmdline,"add")==0)
		{
			input();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"find")==0)
		{
			find();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"move")==0)
		{
			move();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"list")==0)
		{
			list_all();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"input")==0)
		{
			CunChu();
			continue;
		}

		if (strcmp(cmdline,"output")==0)
		{
			DaoChu();
			continue;
		}

		printf("输入指令有误,请重新输入!\n");
	}
}

int main ()
{
mune();//直接调用菜单函数
return 0;
}

项目源码如下:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"


#define N 1000
/*学生信息管理系统

/*定义一个学生信息类的结构体
*/
 typedef struct data
{
	unsigned int id;
	char name[16];
	char phone[16];
	int  score[4];// 这表示成绩 语数英 和总分

}STUDENT;
STUDENT data [N];//数据源;录入的信息先存到这里
int count =0;//记录个数;
void CunChu();//声明 后面调用
void DaoChu();
//添加学生
void input ()
{
	int i;
	int j,ge;
	DaoChu();
	printf("你要存储几个学生的信息:");
	scanf("%d",&ge);
	for(i=count;i<count+ge;i++)//遍历里面的数据,
	{
	printf("请输入学号:");
	scanf("%d",&data[i].id );
 	for (j=0; j<i; j++)//// 跟数据源的数据比较,是否有一样的学号
	{
		if( data[i].id==data[j].id )/// 比较
		{
			printf("学号重复!请你重新输入:\n");
			continue;
		}
	}

	printf("请输入姓名:");
	scanf("%s",&data[i].name);//输入的数据直接保存到地址
	printf("输入手机号:");
	scanf("%s",&data[i].phone);
	printf("以下输入成绩\n");
	printf("语文:");
	scanf("%d",&data[i].score[0]);

	printf("数学:");
	scanf("%d",&data[i].score[1]);
	printf("英语:");
	scanf("%d",&data[i].score[2]);
	Sleep(1000);
	printf("添加成功\n");
	Sleep(800);
	system("CLS");
}
	count =count+ge;
	CunChu();//输入完数据 存储到本地

}

/// 查找学生,按学号查找
void find()
{

	int xuehao;
	int i,k=0;
	DaoChu();
	if (count==0)
	{
		printf("没有任何数据\n");
		return;
	}
	printf("请输入你要查找学生的学号:");
	scanf("%d",&xuehao);
	printf("学号\t姓名\t  手机号  \t英语\t数学\t语文\t总分\n");
	printf("---------------------------------------------------------\n");

	for(i=0;i<count;i++)
	{
		if(xuehao==data[i].id)//如果找到这个学生的学号就打印他的所有信息
		{		
			k=1;
			printf("%d\t%s\t%s\t%d\t%d\t%d\t",data[i].id,data[i].name,data[i].phone,data[i].score[0],data[i].score[1],data[i].score[2]);
			data[i].score[3]=data[i].score[0]+data[i].score[1]+data[i].score[2];
			printf("%d\n",data[i].score[3]);

		}

	}
	if (k==0)
	{

		printf("没有该学生,是否输入有错\n");
	}
	printf("---------------------------------------------------------\n");

}

//删除一个学生的信息
void move ()
{

	int i,f;
	int j,n;
	char move[10];
	struct data *p=NULL;//定义
	int k=0;
	DaoChu();
	system("CLS");
	printf("删除全部输入all、单个one:\n");
	scanf("%s",move);
	if(strcmp(move,"all")==0)
	{
		for (f=0;f<count;f++)
		{
			count=0;
			CunChu();
		}
		printf("删除成功\n");
			
	}
	else if(strcmp(move,"one")==0)
	{
	printf("请输入你要删除学生的学号:");
	scanf("%d",&i);
	for(n=0;n<count;n++)
	{
		if(i==data[n].id)
		{
 			k=1;j=n;break;//如果找到该学号就把k设为真 ,n的值赋给j
		}
	}

	if(k)
	{
		if(count==1)
		{
			p=&data[0];//如果删除最后一个学生信息几把p指向它的首地址 然后释放掉
			free(p);//释放内存free这是释放内存的函数
			count=0;//然后个数设为0
		}
		else
		{
			for(i=j;i<=count;i++)
			{ 
				data[i]=data[i+1];//如果还有多个学生的话,就用后面一个学生往上移一位,覆盖那个学生
			}
			count=count-1;//个数减一
		}
		printf("删除成功\n\n");
		CunChu();//然后保存数据

	 }
	
	else
		printf("输入数据错误!\n");	
	}

}
//存到文件
void CunChu()
{
	int i;
	FILE *rs;//定义一个文件指针rs
	if((rs=fopen("student.txt","w"))==NULL)//如果指定文件不存在则无法打开,就新建
	{
		printf("not open");
		exit(0);//退出
	}
	for(i=0;i<count;i++)
	{
		fwrite(&data[i], sizeof(data[i]), 1, rs);
	}
	if(ferror(rs))//如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错
	{
		fclose(rs);//如果出错就关闭文件流
		perror("写文件失败!\n");
		return;
	}
	printf("存储文件成功!\n");
	fclose(rs); //关闭文件流
	Sleep(1000);
	system("CLS");

}
//导出文件

void DaoChu()
{
	struct data t;//定义一个结构体类型 t
	int i=0;
	FILE* fp = fopen("student.txt", "r");//fp指针指向所打开的文件
	count=0;
	if(fp==NULL)//如果打开的文件不存在就执行以下
	{
		perror("读取文件打开失败!\n");
		return;
	}
	memset(data,0x0,sizeof(data));//它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)

	while(1)//能打开文件就执行以下读取数据
	{
		fread(&t,sizeof(t),1,fp);//如果有文件的话,就依此读取文件&t表示首地址 t表示数据块长度
		if(ferror(fp))//如果出错就读取失败ferror
		{
			fclose(fp);
			perror("读文件过程失败!\n");
			return;
		}
		if(feof(fp))//这判断如果到达文件尾部就应该停止
		{
			break;
		}
		data[i]=t;//把t的数据赋给i
		i++;//然后i以下加上
	}

	fclose(fp);//读取完后关闭文件流,否则会造成句柄泄露
	count=i;//然后把i的个数赋给全局变量
	printf("导出文件成功!\n");

}
//修改函数
/*  工作原理
这个函数是先把数据导出,然后再判断输入的学号是否一样,找到一样的就修改
然后再储存进去!
*/
void revise()
{
	int m=0;
	int xuehao,xx,j,i;
	FILE *fp;
	int f=0;
	DaoChu();//调用导出数据函数 
	printf("请输入你要修改的学号:");
	scanf("%d",&xuehao);
	for(xx=0;xx<count;xx++)
	{
		if(xuehao==data[xx].id)
		{
			printf("找到该学生!可以修改\n");
			f=1;
			printf("请输入学号:");
			scanf("%d",&data[xx].id);		
				for (i=0; i<xx; i++)//// 跟数据源的数据比较,是否有一样的学号
				{
					if( data[xx].id==data[i].id )/// 比较
					{
						printf("学号重复!请你重新输入:\n");
						continue;
					}
				}
			printf("请输入姓名:");
			scanf("%s",&data[xx].name);
			printf("输入手机号:");
			scanf("%s",&data[xx].phone);
			printf("以下输入成绩\n");
			printf("语文:");
			scanf("%d",&data[xx].score[0]);
			printf("数学:");
			scanf("%d",&data[xx].score[1]);
			printf("英语:");
			scanf("%d",&data[xx].score[2]);
			printf("修改成功\n");	
			CunChu();
			break;
   	}	
	}
	if(!f)
	printf("没有找到!\n");
}
//学生列表信息
void list_all()
{

	int j;
	DaoChu();
	system("CLS");
	printf("    学号      姓名     手机号     英语  数学  语文    总分  \n");
	printf("------------------------------------------------------------\n");
	for(j=0;j<count;j++)
	{
		//STUDENT *s =&data[j];
		printf( " %-10d  %-6s  %-11s   %3d   %3d   %3d  ",data[j].id,data[j].name,data[j].phone,data[j].score[0],data[j].score[1],data[j].score[2]);
		data[j].score[3] =data[j].score[0]+data[j].score[1]+data[j].score[2];
		printf("   %3d  \n",data[j].score[3]);			
	}
	printf("------------------------------------------------------------\n");
	printf("总数:%d\n",count);
}
//菜单功能
void mune()
{
	char cmdline[128];
	while(1)
	{

		printf("\n\n\t\t\t欢迎来到我的学生管理系统!\n");	   
		printf("\t\t\t\t添加:add \n\t\t\t\t查找:find \n\t\t\t\t删除:move \n\t\t\t\t浏览:list\n\t\t\t\t修改:revise\n\t\t\t\t存储:input \n\t\t\t\t导出:output  \n\t\t\t\t退出:exit \n");
		printf ("请输入你的指令:");
		scanf("%s",cmdline);
		//菜单处理
		if (strcmp(cmdline,"revise")==0)
		{
			revise();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"exit")==0)
		{
			printf("退出系统\n");
			break;
		}
		//菜单处理
		if (strcmp(cmdline,"add")==0)
		{
			input();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"find")==0)
		{
			find();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"move")==0)
		{
			move();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"list")==0)
		{
			list_all();
			continue;
		}
		//菜单处理
		if (strcmp(cmdline,"input")==0)
		{
			CunChu();
			continue;
		}

		if (strcmp(cmdline,"output")==0)
		{
			DaoChu();
			continue;
		}

		printf("输入指令有误,请重新输入!\n");
	}
}

int main ()
{
	mune();	
	return 0;
}


作者水平有限:码bug挺多的~欢迎大家参照修改!
c语言作业,伸手党福利

如下侵权请联系作者!

猜你喜欢

转载自blog.csdn.net/wumingxiaozuzha/article/details/85812115