基于c语言设计学生管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//创建学生结构
struct stu_type
{
	char num[15];//学生学号
	char name[10];//学生姓名
	char gender[10];//学生性别
	int dormitory_num;//学生宿舍号
	char phone_num[20];//学生电话号码
	int c;//学生成绩
}; 
struct stu_type stu[100];
int stu_num=0;//初始化学生个数为0
void add(); //添加信息
int display(char str[]);//显示信息
void id_find();//学号id查找
void name_find();//name查找
void sort_jx();//按成绩降序排序
void sort_sx();//按成绩升序排序
void save_txt();//保存txt信息
void load_txt();//查询txt信息
void main()
{
	while(1)
	{
		int choice;//可以选择的int类型的号码
		printf("\n	欢迎使用学生信息管理系统\n");
		printf("--------------------------------------------\n");
		printf("1.添加学生信息	2.显示学生信息\n");
		printf("3.(学号)查找学生信息	4.(姓名)查找学生信息\n");
		printf("5.按成绩排序降序        6.按成绩排序升序\n");
		printf("7.保存至文本文件        8.从文本文件读入\n");
		printf("9.退出程序\n");
		printf("--------------------------------------------\n");
		printf("请选择功能模块,输入数字1-9");
		while(1)
		{
			scanf("%d",&choice);
			if(choice>=1 && choice<=9)
				break;
			else
				printf("输入数字不正确,请重输入1-9:");
		}
		switch(choice)
		{
			case 1:	add();	break;//添加信息
			case 2:	display("");	break;//显示,默认是输入字符串长度为0
			case 3: id_find();	break;//按学生学号查找
			case 4:	name_find();	break;//按学生姓名查找
			case 5:	sort_jx();	break;//按成绩降序
			case 6:	sort_sx();	break;//按成绩升序
			case 7:	save_txt();	break;//保存为txt
			case 8:	load_txt();	break;//从本地txt读取
			case 9: exit(0);//退出程序
		}
	}
}
//添加信息
void add()
{
	int i=stu_num;
	printf("说明:依次输入学生信息,当输入的学号为0时表示输入结束\n");
	while(1)
	{
		printf("请输入第%d个学生的信息\n",i+1);
		printf("请输入学号:");
		scanf("%s",stu[i].num);
		if(strcmp(stu[i].num,"0") == 0) break;
		printf("请输入姓名:");
		scanf("%s",stu[i].name);
		printf("请输入性别:");
		scanf("%s",&stu[i].gender);
		printf("请输入数宿舍号:");
		scanf("%d",&stu[i].dormitory_num);
		printf("请输入电话号:");
		scanf("%s",&stu[i].phone_num);
		printf("请输入成绩:");
		scanf("%d",&stu[i].c);
		i++;
	 } 
	 stu_num = i;
	 printf("总共已输入%d个学生的信息\n",stu_num);
}
//显示信息如果输入字符串长度为0则执行遍历功能,如果长度不为0则启动查找功能(按学号或姓名查找)
int display(char str[])
{
	int i, k=-1;//设置初值
	//显示信息如果输入字符串长度为0则执行遍历功能
	if(strlen(str) == 0)
	{
		if(stu_num>0)
		{
			printf("学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
			for(i=0; i<stu_num; i++)
				printf("%s\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
				stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
		 } 
		 else
		 	printf("学生信息为空!");
	 }
	//如果长度不为0则启动查找功能
	else
	 {
	 	for(i=0; i<stu_num; i++)
	 	{
	 		//按学号查找
	 		if(strcmp(str,stu[i].num) == 0)
	 		{
	 			printf("学生学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
	 			printf("%s\t\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
				stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
				k = i;
			 }
			//按姓名查找
			else if(strcmp(str,stu[i].name) == 0)
	 		{
	 			printf("学生学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
	 			printf("%s\t\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
				stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
				k = i;
			}
		}
			 if(k==-1)
			 	printf("没有找到符合条件的学生\n"); 
	}
	return k;
}
//按学生学号查找
void id_find()
{
	char str[15];
	printf("请输入要查找的学生学号:");
	scanf("%s",str);
	display(str);
}
//按学生姓名查找
void name_find()
{
	char str[20];
	printf("请输入要查找的学生姓名:");
	scanf("%s",str);
	display(str);
}
//读取本地txt
void load_txt()
{
	FILE * fp;
	char fname[20];
	int i=0, flag;
	printf("请输入文件名(如:list.txt):");
	scanf("%s",fname);
	if((fp=fopen(fname,"r"))==NULL)
	{
		printf("不能打开文件,文件读取失败!\n");
		return;
	}
	while(1)
	{
		flag=fscanf(fp, "%s %s %s %d %s %d \n",stu[i].num,
		stu[i].name, stu[i].gender, &stu[i].dormitory_num, stu[i].phone_num, &stu[i].c);
		if(flag == EOF)
			break;
		i++; 
	}
	stu_num = i;
	printf("从文件中成功读取%d条记录!\n",i);
	fclose(fp); 
}
//保存的本地txt
void save_txt()
{
	FILE * fp;
	char fname[20];
	int i;
	printf("请输入文件名(如:stu.txt):");
	scanf("%s",fname);
	if((fp=fopen(fname,"w"))==NULL)
	{
		printf("不能打开文件,文件保存失败!\n");
		return;
	}
	for(i=0; i<stu_num; i++)
		fprintf(fp, "%s %s %s %d %s %d \n",stu[i].num,
		stu[i].name, stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
	printf("文件保存成功!\n");
	fclose(fp); 
}
//降序排序(应用经典冒泡排序)
void sort_jx()
{
	int i,j;
	struct stu_type temp;
	for(i=0; i<stu_num-1; i++)
	{
		for(j=0; j<stu_num-i-1; j++)
		{
			if(stu[j].c<stu[j+1].c)
			{
				temp = stu[j];
				stu[j] = stu[j+1];
				stu[j+1] = temp;
			}
		}
	}
	printf("排序结果如下:\n");
	printf("名次\t学生学号 姓名\t\t性别\t宿舍号 \t电话号\t\t成绩\n");
	for(i=0; i<stu_num; i++)
	{
		printf( "%d\t %s\t %s \t %s \t %d \t %s \t %d\n",i+1,stu[i].num,
		stu[i].name, stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c); 
	}
}
//升序排序(应用经典冒泡排序)
void sort_sx()
{
	int a,b;
	struct stu_type temp_2;
	for(a=0; a<stu_num-1; a++)
	{
		for(b=0; b<stu_num-a-1; b++)
		{
			if(stu[b].c>stu[b+1].c)
			{
				temp_2 = stu[b];
				stu[b] = stu[b+1];
				stu[b+1] = temp_2;
			}
		}
	}
	printf("排序结果如下:\n");
	printf("名次\t学生学号 姓名\t\t性别\t宿舍号 \t电话号\t\t成绩\n");
	for(a=0; a<stu_num; a++)
	{
		printf( "%d\t %s\t %s \t %s \t %d \t %s \t %d\n",a+1,stu[a].num,
		stu[a].name, stu[a].gender, stu[a].dormitory_num, stu[a].phone_num, stu[a].c); 
	}
}

效果:

1.界面风格
在这里插入图片描述
2.读取之前存储在txt里的学生信息并显示(可以添加完保存后再读取)
在这里插入图片描述
3.插入信息
在这里插入图片描述
4.按学号或者姓名查找:在这里插入图片描述
5.按成绩降序排列
在这里插入图片描述
6.按程序升序排列
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/visual_eagle/article/details/105693285