⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 students.cpp

📁 简易学生管理系统c语言版
💻 CPP
字号:
/*******************************************************************************/
/*                用C语言实现的一个简单的学生信息系统源文件                    */
/*                     代码维护:戚晋   2002级媒体二班                         */
/*******************************************************************************/


/*******************************************************************************/
/*具体实现:                                                                   */
/*  将用户输入的信息(包括姓名、性别和生日)存入stu_imfo结构数组中             */
/*  stu_imfo结构数组最多可以存100条信息                                        */
/*  用函数menu实现菜单选择                                                     */
/*  用函数init_list实现初始化stu_imfo结构数组                                  */
/*  用函数save实现初始化将stu_imfo结构数组中的数据写入到stu_imfo文件中         */
/*  用函数load实现初始化将stu_imfo文件中的数据读出到stu_imfo结构数组中并显示   */
/*  程序缺陷:当程序关闭,用户再一次启动程序写入数据时会把文件中原来的数据覆盖 */
/*            解决办法是当用户写文件时提示用户是要覆盖源文件还是在源文件的基础 */
/*            上追加数据。目前这个问题本程序没有进行解决。                     */
/*******************************************************************************/


#include<stdio.h>
#include<stdlib.h>

/********************************************************************************/
#define MAX 100

struct stu_imfo{
	char name[14];  /*学生姓名*/
	char sex[8];    /*学生性别*/
	char bir[12];   /*学生生日*/
}student[MAX];

void init_list(void);
void enter(void);
void display(void);
void load(void);
void save(void);
int menu(void);
int isfree(void);

/**********************************************************************************/

int main(void)
{
	char choice;
	
	init_list(); /*初始化内存中的学生信息结构数组*/

	for(;;)
	{
		
		choice = menu();
		switch(choice)
		{
		case 1: enter();
			break;
		case 2: display();
			break;
		case 3: save();
			break;
		case 4: load();
			break;
		case 5: exit(0);
		}
	}
	return 0;
}

/********************************************************************************/

/*初始化内存中的学生信息结构数组子函数*/
void init_list(void)
{
	int t;
	for(t=0;t<MAX;++t)
		student[t].name[0] = '\0';
}

/*********************************************************************************/


/*在主窗口运行的时候,生成主菜单子函数 :) */
int menu(void)
{
	char s[80];
	int c;

	printf("********************************************\n");
	printf("***   Copyright from 2002媒体二班 戚晋   ***\n");
	printf("********************************************\n");
	printf("********************************************\n");
	printf("******         学生信息系统           ******\n");
	printf("******1. 向系统内存写入一个学生的信息 ******\n");
	printf("******2. 显示系统内存中的学生信息资料 ******\n");
	printf("******3. 把所有数据保存到数据库       ******\n");
	printf("******4. 打开数据库                   ******\n");
	printf("******5. 退出本程序                   ******\n");
	printf("********************************************\n");
	do
	{
		printf("\n 请您选择根据菜单选择: ");
		gets(s);
		c = atoi(s);
	}while(c<0 || c>6);
	return c;
}

/*********************************************************************************/

/*输入学生具体信息子函数*/
void enter(void)
{
	int free;

	free = isfree();

	if(free == -1)
	{
		printf("\n 对不起,开辟的内存区域已经满了!");
		return;
	}
										/*接收用户输入信息,并存到内存中*/
	printf("请输入姓名: ");
	gets(student[free].name);

	printf("请输入性别: ");
	gets(student[free].sex);

	printf("请输入生日: ");
	gets(student[free].bir);
}

/**********************************************************************************/

/*在内存中寻找还没有被使用的学生信息结构空间子函数*/
int isfree(void)
{
	int t;

	for(t=0;student[t].name[0] && t<MAX;++t);

	if(t==MAX)
		return -1; /*没有找到空闲的内存空间时返回-1*/
	return t;
}

/***********************************************************************************/

/*在屏幕上显示内存中的学生信息列表子函数*/
void display(void)
{
	int t;

	printf("<==请注意您在退出之前必须把资料保存到数据库,否则所有数据将丢失!==>\n");
	printf("<==系统内存中的学生息资料如下==>\n");
	for(t=0;t<MAX;++t)
	{
		if(student[t].name[0])
		{
			
			printf("<==姓名是:%s ==>\n",student[t].name);
			printf("<==性别是:%s ==>\n",student[t].sex);
			printf("<==生日是:%s ==>\n\n",student[t].bir);
		}
	}
	printf("\n\n");
}

/******************************************************************************************/

/*保存学生信息列表子函数*/
/*请注意!因为保存不是以追加的方式保存的,则当用户保存数据的时候会把文件中原来的数据覆盖!*/
void save(void)
{
	FILE *fp;
	int i;
	if((fp=fopen("stu_imfo","wb")) == NULL)
	{
		printf("对不起,程序在打开文件时出错!!! \n");
	return;
	}

	for(i=0;i<MAX;i++)  /*使用for循环将数据写入文件,写入方式是wb*/
		if(*student[i].name)
			if(fwrite(&student[i],sizeof(struct stu_imfo),1,fp)!=1)
				printf("对不起,系统在写入文件时出错! \n");
	printf("恭喜!您的数据已经保存到数据库中了 :)\n");
	printf("请您继续您的工作,好好享受乐趣哦 :P\n");
	printf("\n");
	fclose(fp);
}

/*****************************************************************************************/


/*打开文件子函数*/
void load(void)
{
	FILE *fp;
	int i;

	if((fp=fopen("stu_imfo","rb"))==NULL)
	{
		printf("对不起,不能打开目标文件! \n");
		return;
	}

	init_list();
	for(i=0;i<MAX;i++)
		if(fread(&student[i],sizeof(struct stu_imfo),1,fp)!=1)   /*不仅仅是判断条件,而且将文件中的数据读出并存在内存里*/
		{
			if(feof(fp)) break;
			printf("读文件失败! \n");
		}
	
	fclose(fp);
	printf("太棒啦!您已经打开了名为“stu_imfo”的数据库了 :)\n");
	printf("以下是数据库中的所有学生列表\n");
	for(i=0;i<MAX;++i)   /*for循环将从内存中读出的数据并显示*/
	{
		if(student[i].name[0])
		{
			
			printf("<==姓名是:%s ==>\n",student[i].name);
			printf("<==性别是:%s ==>\n",student[i].sex);
			printf("<==生日是:%s ==>\n\n",student[i].bir);
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -