C语言综合训练——学生信息管理系统(动态内存、文件操作)

学生信息管理系统 

功能显示:

(1)添加信息:可添加学号、姓名、性别、语文、数学、英语、总分、平均成绩等。

(2)显示信息:显示所有添加的信息。

(3)查找信息:学号查找、姓名查找。

(4)修改信息:学号修改、姓名修改。

(5)删除信息:学号删除、姓名删除。

(6)排序信息:1.升序排序。2.降序排序。两者都可排序总分、语文、数学、英语、名字。

(7)保存信息:将添加的信息保存到文件中。

(8)退出系统:退出操作。

 展示部分功能如下图:

 源码如下:

menu.h 

#pragma once
#include<stdio.h>

void Main_Menu();//菜单显示
void Check_Menu();//查询菜单
void Modify_Menu();//修改菜单
void Delete_Menu();//删除菜单
void Sort_Menu();//排序菜单
void Sort_Way_Menu();//排序选择

 menu.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"menu.h"

void Main_Menu()//菜单显示
{
	printf("-------------------------------------\n");
	printf("--------------菜单显示---------------\n");
	printf("------|1.添加信息  2.显示信息|-------\n");
	printf("------|3.查找信息  4.修改信息|-------\n");
	printf("------|5.删除信息  6.排序信息|-------\n");
	printf("------|7.保存信息  0.退出    |-------\n");
	printf("-------------------------------------\n");
	printf("请输入你的选择:> ");
}
void Check_Menu()//查询菜单
{
	printf("-------------------------------------\n");
	printf("--------------查找菜单---------------\n");
	printf("------|1.学号查找  2.姓名查找|-------\n");
	printf("-------------------------------------\n");
	printf("请输入你的选择:> ");
}
void Modify_Menu()//修改菜单
{
	printf("-------------------------------------\n");
	printf("--------------修改菜单---------------\n");
	printf("------|1.学号修改  2.姓名修改|-------\n");
	printf("-------------------------------------\n");
	printf("请输入你的选择:> ");
}
void Delete_Menu()//删除菜单
{
	printf("-------------------------------------\n");
	printf("--------------修改菜单---------------\n");
	printf("------|1.学号删除  2.姓名删除|-------\n");
	printf("-------------------------------------\n");
	printf("请输入你的选择:> ");
}

void Sort_Way_Menu()//排序选择
{
	printf("-------------------------------------\n");
	printf("--------------排序选择---------------\n");
	printf("----------|1.升序  2.降序|-----------\n");
	printf("-------------------------------------\n");
	printf("请输入你的选择:> ");
}

void Sort_Menu()//排序菜单
{
	printf("-------------------------------------\n");
	printf("--------------排序菜单---------------\n");
	printf("----------|1.总分  2.语文|-----------\n");
	printf("----------|3.数学  4.英语|-----------\n");
	printf("----------|5.名字字母排序|-----------\n");
	printf("-------------------------------------\n");
	printf("请输入你的选择:> ");
}

sort.h 

#pragma once
#include"student.h"

void Bubble_Sort_Ascending_Data(void* base, int num, int width, int (*cmpar)(const void* e1, const void* e2));//升序排序函数
void Bubble_Sort_Descending_Data(void* base, int num, int width, int (*cmpar)(const void* e1, const void* e2));//降序排序函数
void Sort_Ascending_Sum_Score(STUDENT* Pstruct);//按总成绩进行升序排序
void Sort_Descending_Sum_Score(STUDENT* Pstruct);//按总成绩进行降序排序
void Sort_Ascending_Name(STUDENT* Pstruct);//按名字进行升序排序
void Sort_Descending_Name(STUDENT* Pstruct);//按名字进行降序排序
void Sort_Ascending_Chinese_Score(STUDENT* Pstruct);//按语文成绩进行升序排序
void Sort_Descending_Chinese_Score(STUDENT* Pstruct);//按语文成绩进行降序序排序
void Sort_Ascending_Math_Score(STUDENT* Pstruct);//按数学成绩进行升序排序
void Sort_Descending_Math_Score(STUDENT* Pstruct);//按数学成绩进行降序排序
void Sort_Ascending_English_Score(STUDENT* Pstruct);//按英语成绩进行排序
void Sort_Descending_English_Score(STUDENT* Pstruct);//按英语成绩进行排序

 sort.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"sort.h"

int Compare_Sum_Score(const void* e1, const void* e2)//比较总成绩
{
	return ((*(DATA*)e1).sum) - ((*(DATA*)e2).sum);
}

int Compare_Chinese_Score(const void* e1, const void* e2)//比较语文成绩
{
	return ((*(DATA*)e1).Chinese) - ((*(DATA*)e2).Chinese);
}

int Compare_Math_Score(const void* e1, const void* e2)//比较数学成绩
{
	return ((*(DATA*)e1).Math) - ((*(DATA*)e2).Math);
}

int Compare_English_Score(const void* e1, const void* e2)//比较英语成绩
{
	return ((*(DATA*)e1).English) - ((*(DATA*)e2).English);
}

int Compare_Name(const void* e1, const void* e2)//比较两个字符串
{
	return strcmp((*(DATA*)e1).name, (*(DATA*)e2).name);
}

void Swp(char* e1, char* e2, int width)//交换数据,一个字节一个字节的交换
{
	int i = 0;
	for (i = 0; i < width; i++)
	{
		char temp = *e1;
		*e1 = *e2;
		*e2 = temp;
		e1++;
		e2++;
	}
}

void Bubble_Sort_Ascending_Data(void* base, int num, int width, int (*cmpar)(const void* e1, const void* e2))//升序排序函数
{
	int i = 0;
	int j = 0;
	for (i = 0; i < num-1; i++)//趟数
	{
		for (j = 0; j < num - i - 1;j++)//一趟比较的次数
		{
			if ((*cmpar)((char*)base + width * j, (char*)base + width * (j + 1))>0)//判断
			{
				Swp((char*)base + width * j, (char*)base + width * (j + 1), width);
			}
		}
	}
}
void Bubble_Sort_Descending_Data(void* base, int num, int width, int (*cmpar)(const void* e1, const void* e2))//降序排序函数
{
	int i = 0;
	int j = 0;
	for (i = 0; i < num - 1; i++)//趟数
	{
		for (j = 0; j < num - i - 1;j++)//一趟比较的次数
		{
			if ((*cmpar)((char*)base + width * j, (char*)base + width * (j + 1)) < 0)
			{
				Swp((char*)base + width * j, (char*)base + width * (j + 1), width);
			}
		}
	}
}

void Sort_Ascending_Sum_Score(STUDENT* Pstruct)//按总成绩进行升序排序
{
	Bubble_Sort_Ascending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Sum_Score);
	Show_Data(Pstruct);
}
void Sort_Descending_Sum_Score(STUDENT* Pstruct)//按总成绩进行降序排序
{
	Bubble_Sort_Descending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Sum_Score);
	Show_Data(Pstruct);
}
void Sort_Ascending_Chinese_Score(STUDENT* Pstruct)//按语文成绩进行升序排序
{
	Bubble_Sort_Ascending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Chinese_Score);
	Show_Data(Pstruct);
}
void Sort_Descending_Chinese_Score(STUDENT* Pstruct)//按语文成绩进行降序序排序
{
	Bubble_Sort_Descending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Chinese_Score);
	Show_Data(Pstruct);
}
void Sort_Ascending_Math_Score(STUDENT* Pstruct)//按数学成绩进行升序排序
{
	Bubble_Sort_Ascending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Math_Score);
	Show_Data(Pstruct);
}
void Sort_Descending_Math_Score(STUDENT* Pstruct)//按数学成绩进行降序排序
{
	Bubble_Sort_Descending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Math_Score);
	Show_Data(Pstruct);
}
void Sort_Ascending_English_Score(STUDENT* Pstruct)//按英语成绩进行排序
{
	Bubble_Sort_Ascending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_English_Score);
	Show_Data(Pstruct);
}
void Sort_Descending_English_Score(STUDENT* Pstruct)//按英语成绩进行排序
{
	Bubble_Sort_Descending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_English_Score);
	Show_Data(Pstruct);
}
void Sort_Ascending_Name(STUDENT* Pstruct)//按名字进行升序排序
{
	Bubble_Sort_Ascending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Name);
	Show_Data(Pstruct);
}
void Sort_Descending_Name(STUDENT* Pstruct)//按名字进行降序排序
{
	Bubble_Sort_Descending_Data(Pstruct->data, Pstruct->size, sizeof(DATA), Compare_Name);
	Show_Data(Pstruct);
}

 student.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


#define CapacityInit 3
#define MAX_num 20
#define MAX_name 20
#define MAX_sex 10

enum option	//枚举
{
	EXIT,
	ADD,
	SHOW,
	SEARCH,
	MODIFY,
	DELETE,
	SORT,
	SAVE
};

typedef struct DATA
{
	char num[MAX_num];//学号
	char name[MAX_name];//姓名
	char sex[MAX_sex];//性别
	int Chinese;//语文
	int Math;//数学
	int English;//英语
	int sum;//总分
	int Average;//平均成绩
}DATA;

typedef struct STUDENT
{
	DATA* data;
	int capacity;//当前最大容量
	int size;//当前元素个数

}STUDENT;

void Init_Student(STUDENT* Pstruct);//初始化系统
void Input_Data(STUDENT* Pstruct);//输入信息
void Show_Data(STUDENT* Pstruct);//显示信息
void Check_Data(STUDENT* Pstruct);//查找信息
void Modify_Data(STUDENT* Pstruct);//修改信息
void Delete_Data(STUDENT* Pstruct);//删除信息
void Sort_All_Data(STUDENT* Pstruct);//排序
void Destroy_Student(STUDENT* Pstruct);//销毁开辟的内存,防止内存泄露
void Save_Student(STUDENT* Pstruct);//保存文件
void Load_Student(STUDENT* Pstruct);//加载文件中的信息到系统中
void Check_Capacity(STUDENT* Pstruct);//检查系统容量
void Check_Num_Data(STUDENT* Pstruct);//按学号查找信息
void Check_Name_Data(STUDENT* Pstruct);//按名字查找信息
void Modify_Num_Data(STUDENT* Pstruct);//按学号修改
void Modify_Name_Data(STUDENT* Pstruct);//按名字修改
void Delete_Num_Data(STUDENT* Pstruct);//按学号删除
void Delete_Name_Data(STUDENT* Pstruct);//按名字删除
void Sort_Ascending_Data(STUDENT* Pstruct);//升序排序
void Sort_Descending_Data(STUDENT* Pstruct);//降序排序

 student.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"student.h"
#include"sort.h"
#include"menu.h"

void Init_Student(STUDENT* Pstruct)//初始化系统
{
	Pstruct->data = (DATA*)calloc(CapacityInit, sizeof(DATA));
	if (Pstruct == NULL)//检查是否开辟成功
	{
		//开辟失败直接结束程序
		return;
	}
	Pstruct->size = 0;
	Pstruct->capacity = CapacityInit;
	//把文件中已经存放的文件中的信息加载到系统中
	Load_Student(Pstruct);
}
void Check_Capacity(STUDENT* Pstruct)//检查系统容量
{
	if (Pstruct->size == Pstruct->capacity)
	{
		DATA* ptr = (DATA*)realloc(Pstruct->data, (Pstruct->capacity + 2) * sizeof(DATA));
		if (ptr != NULL)
		{
			Pstruct->data = ptr;
			Pstruct->capacity += 2;
			printf("增容成功\n");
		}
		else
		{
			printf("增容失败\n");
			return;
		}
	}
}
void Input_Data(STUDENT* Pstruct)//输入信息
{
	int i = 0;
	//检查当前系统容量
	Check_Capacity(Pstruct);
	//添加数据
	printf("请输入你的学号:> ");
	scanf("%s", Pstruct->data[Pstruct->size].num);
	for (i = 0; i < Pstruct->size; i++)
	{
		if (strcmp(Pstruct->data[Pstruct->size].num, Pstruct->data[i].num) == 0)
		{
			printf("该学号已存在\n");
			return;
		}
	}
	printf("请输入你的姓名:> ");
	scanf("%s", Pstruct->data[Pstruct->size].name);
	printf("请输入你的性别:> ");
	scanf("%s", Pstruct->data[Pstruct->size].sex);
	printf("请输入你的语文成绩:> ");
	scanf("%d", &(Pstruct->data[Pstruct->size].Chinese));
	printf("请输入你的数学成绩:> ");
	scanf("%d", &(Pstruct->data[Pstruct->size].Math));
	printf("请输入你的英语成绩:> ");
	scanf("%d", &(Pstruct->data[Pstruct->size].English));
	Pstruct->data[Pstruct->size].sum = Pstruct->data[Pstruct->size].Chinese + Pstruct->data[Pstruct->size].Math + Pstruct->data[Pstruct->size].English;
	Pstruct->data[Pstruct->size].Average = (Pstruct->data[Pstruct->size].Chinese + Pstruct->data[Pstruct->size].Math + Pstruct->data[Pstruct->size].English) / 3;
	Pstruct->size++;
	printf("添加成功\n");
}
void Show_Data(STUDENT* Pstruct)//显示信息
{
	if (Pstruct->size == 0)
	{
		printf("系统为空\n");
		return;
	}
	int i = 0;
	printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n", "学号", "姓名", "性别", "语文", "数学", "英语", "总分","平均成绩");
	for (i = 0; i < Pstruct->size; i++)
	{
		printf("%-10s\t%-10s\t%-10s\t%-10d\t%-10d\t%-10d\t%-10d\t%-10d\n",
			Pstruct->data[i].num, 
			Pstruct->data[i].name, 
			Pstruct->data[i].sex, 
			Pstruct->data[i].Chinese,
			Pstruct->data[i].Math,
			Pstruct->data[i].English,
			Pstruct->data[i].sum,
			Pstruct->data[i].Average);
	}
}
void Check_Num_Data(STUDENT* Pstruct)//按学号查找信息
{
	int i = 0;
	char num[MAX_num] = { 0 };
	printf("请输入学号:> ");
	scanf("%s", num);
	for (i = 0; i < Pstruct->size; i++)
	{
		if (strcmp(num, Pstruct->data[i].num) == 0)
		{
			printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n", "学号", "姓名", "性别", "语文", "数学", "英语", "总分", "平均成绩");
			printf("%-10s\t%-10s\t%-10s\t%-10d\t%-10d\t%-10d\t%-10d\t%-10d\n",
				Pstruct->data[i].num,
				Pstruct->data[i].name,
				Pstruct->data[i].sex,
				Pstruct->data[i].Chinese,
				Pstruct->data[i].Math,
				Pstruct->data[i].English,
				Pstruct->data[i].sum,
				Pstruct->data[i].Average);
			break;
		}
	}
	if (i == Pstruct->size)
	{
		printf("系统无此学号\n");
	}
}
void Check_Name_Data(STUDENT* Pstruct)//按名字查找信息
{
	int i = 0;
	char name[MAX_name] = { 0 };
	printf("请输入姓名:> ");
	scanf("%s", name);
	for (i = 0; i < Pstruct->size; i++)
	{
		if (strcmp(name, Pstruct->data[i].name) == 0)
		{
			printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n", "学号", "姓名", "性别", "语文", "数学", "英语", "总分", "平均成绩");
			printf("%-10s\t%-10s\t%-10s\t%-10d\t%-10d\t%-10d\t%-10d\t%-10d\n",
				Pstruct->data[i].num,
				Pstruct->data[i].name,
				Pstruct->data[i].sex,
				Pstruct->data[i].Chinese,
				Pstruct->data[i].Math,
				Pstruct->data[i].English,
				Pstruct->data[i].sum,
				Pstruct->data[i].Average);
			break;
		}
	}
	if (i == Pstruct->size)
	{
		printf("系统无此姓名\n");
	}
}
void Check_Data(STUDENT* Pstruct)//查找信息
{
	if (Pstruct->size == 0)
	{
		printf("系统为空\n");
		return;
	}
	int choice = 0;
	Check_Menu();
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
		Check_Num_Data(Pstruct);
		break;
	case 2:
		Check_Name_Data(Pstruct);
		break;
	}
}
void Modify_Num_Data(STUDENT* Pstruct)//按学号修改
{
	int i = 0;
	char num[MAX_num] = { 0 };
	printf("请输入学号:> ");
	scanf("%s", num);
	for (i = 0; i < Pstruct->size; i++)
	{
		if (strcmp(num, Pstruct->data[i].num) == 0)
		{
			printf("请输入你的学号:> ");
			scanf("%s", Pstruct->data[i].num);
			printf("请输入你的姓名:> ");
			scanf("%s", Pstruct->data[i].name);
			printf("请输入你的性别:> ");
			scanf("%s", Pstruct->data[i].sex);
			printf("请输入你的语文成绩:> ");
			scanf("%d", &(Pstruct->data[i].Chinese));
			printf("请输入你的数学成绩:> ");
			scanf("%d", &(Pstruct->data[i].Math));
			printf("请输入你的英语成绩:> ");
			scanf("%d", &(Pstruct->data[i].English));
			Pstruct->data[i].sum = Pstruct->data[i].Chinese + Pstruct->data[i].Math + Pstruct->data[i].English;
			Pstruct->data[i].Average = (Pstruct->data[i].Chinese + Pstruct->data[i].Math + Pstruct->data[i].English) / 3;
			printf("修改成功\n");
			break;
		}
	}
	if (i == Pstruct->size)
	{
		printf("系统无此学号\n");
	}
}
void Modify_Name_Data(STUDENT* Pstruct)//按名字修改
{
	int i = 0;
	char name[MAX_name] = { 0 };
	printf("请输入姓名:> ");
	scanf("%s", name);
	for (i = 0; i < Pstruct->size; i++)
	{
		if (strcmp(name, Pstruct->data[i].name) == 0)
		{
			printf("请输入你的学号:> ");
			scanf("%s", Pstruct->data[i].num);
			printf("请输入你的姓名:> ");
			scanf("%s", Pstruct->data[i].name);
			printf("请输入你的性别:> ");
			scanf("%s", Pstruct->data[i].sex);
			printf("请输入你的语文成绩:> ");
			scanf("%d", &(Pstruct->data[i].Chinese));
			printf("请输入你的数学成绩:> ");
			scanf("%d", &(Pstruct->data[i].Math));
			printf("请输入你的英语成绩:> ");
			scanf("%d", &(Pstruct->data[i].English));
			Pstruct->data[i].sum = Pstruct->data[i].Chinese + Pstruct->data[i].Math + Pstruct->data[i].English;
			Pstruct->data[i].Average = (Pstruct->data[i].Chinese + Pstruct->data[i].Math + Pstruct->data[i].English) / 3;
			printf("修改成功\n");
			break;
		}
	}
	if (i == Pstruct->size)
	{
		printf("系统无此姓名\n");
	}
}
void Modify_Data(STUDENT* Pstruct)//修改信息
{
	if (Pstruct->size == 0)
	{
		printf("系统为空\n");
		return;
	}
	int choice = 0;
	Modify_Menu();//修改菜单
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
		Modify_Num_Data(Pstruct);
		break;
	case 2:
		Modify_Name_Data(Pstruct);
		break;
	}

}
void Delete_Num_Data(STUDENT* Pstruct)//按学号删除
{
	int i = 0;
	int j = 0;
	char num[MAX_num] = { 0 };
	printf("请输入学号:> ");
	scanf("%s", num);
	for(i=0;i<Pstruct->size;i++)
	{
		if (strcmp(num, Pstruct->data[i].num) == 0)
		{
			for (j = i; j < Pstruct->size; j++)
			{
				Pstruct->data[j] = Pstruct->data[j + 1];
			}
			Pstruct->size--;
			printf("删除成功\n");
			break;
		}
	}
	if (i == Pstruct->size+1)
	{
		printf("系统无此学号\n");
	}
}
void Delete_Name_Data(STUDENT* Pstruct)//按名字删除
{
	int i = 0;
	int j = 0;
	char name[MAX_name] = { 0 };
	printf("请输入姓名:> ");
	scanf("%s", name);
	for (i = 0; i < Pstruct->size; i++)
	{
		if (strcmp(name, Pstruct->data[i].name) == 0)
		{
			for (j = i; j < Pstruct->size; j++)
			{
				Pstruct->data[j] = Pstruct->data[j + 1];
			}
			Pstruct->size--;
			printf("删除成功\n");
			break;
		}
	}
	if (i == Pstruct->size + 1)
	{
		printf("系统无此姓名\n");
	}
}
void Delete_Data(STUDENT* Pstruct)//删除信息
{
	if (Pstruct->size == 0)
	{
		printf("系统为空\n");
		return;
	}
	int choice = 0;
	Delete_Menu();
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
		Delete_Num_Data(Pstruct);
		break;
	case 2:
		Delete_Name_Data(Pstruct);
		break;
	}
}
void Sort_All_Data(STUDENT* Pstruct)//排序
{
	if (Pstruct->size == 0)
	{
		printf("系统为空\n");
		return;
	}
	int choice = 0;
	Sort_Way_Menu();
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
		Sort_Ascending_Data(Pstruct);
		break;
	case 2:
		Sort_Descending_Data(Pstruct);
		break;
	}
}
void Sort_Ascending_Data(STUDENT* Pstruct)
{
	int choice = 0;
	Sort_Menu();
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
		Sort_Ascending_Sum_Score(Pstruct);
		break;
	case 2:
		Sort_Ascending_Chinese_Score(Pstruct);
		break;
	case 3:
		Sort_Ascending_Math_Score(Pstruct);
		break;
	case 4:
		Sort_Ascending_English_Score(Pstruct);
		break;
	case 5:
		Sort_Ascending_Name(Pstruct);
		break;
	default:
		printf("输入错误\n");
		break;
	}
}
void Sort_Descending_Data(STUDENT* Pstruct)
{
	int choice = 0;
	Sort_Menu();
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
		Sort_Descending_Sum_Score(Pstruct);
		break;
	case 2:
		Sort_Descending_Chinese_Score(Pstruct);
		break;
	case 3:
		Sort_Descending_Math_Score(Pstruct);
		break;
	case 4:
		Sort_Descending_English_Score(Pstruct);
		break;
	case 5:
		Sort_Descending_Name(Pstruct);
		break;
	default:
		printf("输入错误\n");
		break;
	}
}
void Destroy_Student(STUDENT* Pstruct)//销毁开辟的内存,防止内存泄露
{
	free(Pstruct->data);
	Pstruct->data = NULL;
}
void Save_Student(STUDENT* Pstruct)//保存文件
{
	FILE* pfwrite = fopen("student.txt", "wb");
	if (pfwrite == NULL)//检查打开文件是否失败
	{
		printf("SaveContact%s\n", strerror(errno));
		return;
	}
	//打开成功,写通讯录中的数据到文件中
	int i = 0;
	for (i = 0; i < Pstruct->size; i++)
	{
		fwrite(&(Pstruct->data[i]), sizeof(DATA), 1, pfwrite);
	}
	printf("保存成功\n");
	fclose(pfwrite);
	pfwrite = NULL;
}
void Load_Student(STUDENT* Pstruct)//加载文件中的信息到系统中
{
	DATA temp = { 0 };
	FILE* pfRead = fopen("student.txt", "rb");
	if (pfRead == NULL)
	{
		printf("LoadContact%s\n", strerror(errno));
		return;
	}
	//读取文件,放到通讯录中
	while (fread(&temp, sizeof(DATA), 1, pfRead))
	{
		Check_Capacity(Pstruct);
		Pstruct->data[Pstruct->size] = temp;
		Pstruct->size++;
	}
	fclose(pfRead);
	pfRead = NULL;
}

 main.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"student.h"
#include"menu.h"

int main()
{
	int choice = 0;
	STUDENT student;
	Init_Student(&student);
	do
	{
		Main_Menu();
		scanf("%d", &choice);
		switch (choice)
		{
		case ADD:
			Input_Data(&student);
			break;
		case SHOW:
			Show_Data(&student);
			break;
		case SEARCH:
			Check_Data(&student);
			break;
		case MODIFY:
			Modify_Data(&student);
			break;
		case DELETE:
			Delete_Data(&student);
			break;
		case SORT:
			Sort_All_Data(&student);
			break;
		case SAVE:
			Save_Student(&student);
			break;
		case EXIT:
			Save_Student(&student);
			//释放动态开辟的内存
			Destroy_Student(&student);
			printf("退出系统\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (choice);
	return 0;
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值