欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-05 23:12:50
...
#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.界面风格
基于c语言设计学生管理系统
2.读取之前存储在txt里的学生信息并显示(可以添加完保存后再读取)
基于c语言设计学生管理系统
3.插入信息
基于c语言设计学生管理系统
4.按学号或者姓名查找:基于c语言设计学生管理系统
5.按成绩降序排列
基于c语言设计学生管理系统
6.按程序升序排列
基于c语言设计学生管理系统

相关标签: c