首页 > 其他分享 >学生管理系统(简易版)

学生管理系统(简易版)

时间:2024-08-31 14:21:10浏览次数:12  
标签:fp NULL 管理系统 学生 stu 简易版 printf filename DATA

1.导言

学习动态内存管理、与缓冲相关的知识,以及文件管理之后,我便制作了这个简易版的学生管理系统。其中缓冲部分你可能觉得多余(我也这么认为),但为了巩固缓冲的知识我还是加了上去。因此带来的阅读不便,还请见谅!最后希望各位客官指正错误,提出建议。

 2.正文

1.菜单打印

void menu(void)                              //打印菜单
{
	printf("\t\t\t录入学生信息(w)\n");
	printf("\t\t\t删除学生信息(d)\n");
	printf("\t\t\t打印学生信息(p)\n");
}

2.定义宏

#define DATA_TYPE "%d %s %d"                     //定义格式化输入
#define DATA_TYPE_P "\t\t\t%-24d%-24s%-28d\n"      //定义格式化输出
#define DATA_P stu->id, stu->name, stu->age         //定义打印数据
#define DATA &stu->id, stu->name, &stu->age         //定义获取数据
#define DATA_C &stu[count].id, stu[count].name, &stu[count].age  //定义获取数据,组成数组
#define DATA_P_C stu[i].id, stu[i].name, stu[i].age             //定义打印数据,数组输出

 3.定义学生信息的结构体

typedef struct student_library                    // 定义学生信息的结构体
{
	int id;
	char name[50];
	int age;
}STULIB;

4.声明自定义函数 (函数功能详见下文)

void my_fwrite(const char* filename);
void my_printf(const char* filename);
void my_delete(const char* filename, int stu_id);

5.定义缓冲区

char buffer[BUFSIZ];                             //设置缓冲区大小
setvbuf(stdout, buffer, _IOFBF, BUFSIZ);   //设置缓冲区,大小512个字节

6.定义文件地址

const char* filename = "C:\\Users\\fusheng\\Desktop\\stu_sys.txt"; //获取文件地址

7.录入学生信息

void my_fwrite(const char* filename)
{
	FILE* fp = NULL;               
    fp = fopen(filename, "a");
	if (fp == NULL)               //如果打开文件失败,退出程序
	{
		perror("\t\t\terror: ");
		return;
	}
	STULIB* stu = NULL;
	stu = (STULIB*)calloc(1, sizeof(STULIB));  //如果内存开辟失败退出程序
	if (stu == NULL)
	{
		perror("\t\t\terror: ");
		fclose(fp);
		return;
	}
	printf("\t\t\t请输入学生id");          //打印提示信息
	printf("\t\t\t请输入学生姓名");
	printf("\t\t\t请输入学生年龄\n\t\t\t");
	fflush(stdout);                     //刷新缓冲区
    
	scanf(DATA_TYPE, DATA);             //获取信息填入结构体指针变量stu所指向的空间中
	
	fprintf(fp, DATA_TYPE_P, DATA_P);   //录入学生信息到stu_sys文件中
	printf("\t\t\t学生信息已录入!\n");
	fflush(stdout);
	fclose(fp);
	free(stu);                          //释放空间
	Sleep(2000);            
}

 8.删除学生信息

void my_delete(const char* filename, int stu_id)
{
	FILE* fp = NULL;
	fp = fopen(filename, "r");
	if (fp == NULL)
	{
		perror("\t\t\terror: ");
		return;
	}
	STULIB* stu = NULL;
	stu = (STULIB*)calloc(100, sizeof(STULIB));
	if (stu == NULL)
	{
		perror("\t\t\terror: ");
		fclose(fp);
		return;
	}
	int count = 0;
	while (fscanf(fp, DATA_TYPE, DATA_C) != EOF ) //统计系统中存储的学生人数
	{
		++count;
	}
	fclose(fp);
	fp = fopen(filename, "w");
	if (fp == NULL)
	{
		perror("\t\t\terror: ");
		return;
	}
	int i = 0;
	int j = 0;
	for (i = 0; i < count; ++i)
	{
		if (stu_id != stu[i].id)               //将不需要删除信息的其他学生信息重新填入
		{
			fprintf(fp, DATA_TYPE_P, DATA_P_C);
			++j;
		}
	}
	if (j == count)
	{
		printf("\t\t\t学生信息不存在!\n");
	}
	else
	{
		printf("\t\t\t学生信息已删除!\n");
	}
	fflush(stdout);
	fclose(fp);
	free(stu);
	Sleep(2000);
}

 9.显示学生信息

void my_printf(const char* filename)
{
	FILE* fp = NULL;
	fp = fopen(filename, "r");
	if (fp == NULL)
	{
		perror("\t\t\terror: ");
		return;
	}
	STULIB* stu = NULL;
	stu = (STULIB*)calloc(1, sizeof(STULIB));
	if (stu == NULL)
	{
		perror("\t\t\terror: ");
		fclose(fp);
		return;
	}
	printf("\t\t\t学生ID\t\t\t学生姓名\t\t学生年龄\n");
	while (fscanf(fp, DATA_TYPE, DATA) != EOF)
	{
		printf(DATA_TYPE_P, DATA_P);
	}
	printf("\t\t\t是否退出浏览(Y/N)\n");
	fflush(stdout);
	while (1)
	{
		if (getchar() == 'Y')
		{
			fclose(fp);
			return;
		}
	}
}

10.主函数

int main(void)
{
	setvbuf(stdout, buffer, _IOFBF, BUFSIZ);   //设置缓冲区,大小512个字节
	const char* filename = "C:\\Users\\fusheng\\Desktop\\stu_sys.txt"; //获取文件地址
	//menu();
	//printf("\t\t\t请输入: \n\t\t\t");
	int temp;
	while (1)
	{
		//system("cls");
		
		menu();
		printf("\t\t\t请输入: \n\t\t\t");
		fflush(stdout);                          //刷新缓冲区
		
again:   switch (getchar())                       //获取要实现的功能
		{
		case 'w':
			system("cls");
			my_fwrite(filename);                          //录入学生信息
			system("cls");
			break;
		case 'd':
			system("cls");
			int stu_id;
			printf("\t\t\t请输入要删除学生的学号\n\t\t\t");
			fflush(stdout);
			scanf("%d", &stu_id);
			my_delete(filename, stu_id);	                               //删除学生信息
			system("cls");
			break;
		case 'p':
			system("cls");
			my_printf(filename);                         //查看学生信息
			system("cls");
			break;
		case 10 :                                      //使用goto语句不断利用getchar清空缓冲区
			goto again;
			break;
		default:
			break;
		}
	}
	
	return 0;
}

标签:fp,NULL,管理系统,学生,stu,简易版,printf,filename,DATA
From: https://blog.csdn.net/m0_73650028/article/details/141751144

相关文章

  • 基于Python的人脸识别考勤管理系统-计算机毕业设计源码+LW文档
    摘要随着信息技术的迅猛发展,面部识别技术已逐渐成为身份验证领域的研究热点。基于Python的人脸识别考勤管理系统,作为一种新兴的身份验证方式,具有重要的研究意义和应用价值。该系统通过捕捉和分析人脸特征,实现快速、准确的身份验证,解决了传统考勤方式中可能存在的冒用、伪造等问题......
  • 基于Springboot的城市垃圾分类管理系统
    博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • 基于ssm+vue+uniapp的学生毕业管理小程序
    开发语言:Java框架:ssm+uniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示管理员登录管理员功能界面学生管理开题答辩管理学生过程文档管理系统管理小程序登录小程序首......
  • 基于人工智能的大学生出入校园穿搭推荐系统的设计与实现-计算机毕业设计源码+LW文档
    摘要本文针对大学生出入校园时穿搭风格多样、个性化需求高且难以获取有效穿搭建议的现象,提出了一种基于人工智能的大学生出入校园穿搭推荐系统。该系统利用深度学习技术,结合时尚潮流趋势和大学生群体特征,构建了一个智能化的穿搭推荐。通过采集和分析大量时尚穿搭数据,系统能够准确......
  • 【精品毕设推荐】基于SSM+jsp的图书管理系统设计与实现
    点击下载原文及代码,可辅助在本地配置运行摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本图书管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软......
  • (2024最新毕设合集)基于SpringBoot的校园设备维修管理系统-16364|可做计算机毕业设计JAV
    基于Springboot的校园设备维修管理系统的设计与实现摘 要基于Springboot的校园设备维修管理系统的设计与实现是一个结合了网络技术和信息管理的项目。该系统能满足校园报修管理的实际需求,通过网络进行信息管理,使得设备维修更加及时有效。本设计主要实现集人性化、高效率、......
  • 国外留学生留服认证却没有毕业怎么补救?
    国外留学生留服认证却没有毕业怎么补救?要知道留服学历认证在任何时候都是留学生在国内就业,学历深造、享受国家优惠政策时必须要提供的证明资料。但是如果留学生在国外留学未无成学业,回国是不能认证的。因为留服认证的过程中留服工作人员需要持,申请人提供的授权声明去申请需要认证的......
  • java+vue计算机毕设学生信息管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今信息化快速发展的时代,学校的管理效率与服务质量对学生及教职工的学习与生活产生着深远影响。传统的学生信息管理方式依赖纸质文档和人工操作,不......
  • 基于ssm+vue基于Android的大学校园车辆管理系统前【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大和师生人数的持续增长,大学校园内的车辆管理成为了一个日益严峻的问题。传统的人工管理方式不仅效率低下,而且难以应对日益复杂......
  • 基于ssm+vue基于“互联网+”的智慧药房管理系统【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着“互联网+”时代的到来,各行各业正经历着前所未有的数字化转型。医疗健康领域,作为民生之本,其信息化、智能化建设显得尤为重要。传统药房管理模式......