资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

C语言项目——学生信息管理系统

Java 更新时间: 发布时间: 计算机考试归档 最新发布

C语言项目——学生信息管理系统

文章目录

  • 学生信息管理系统
  • 一、项目思路
    • 1、模块化思想
    • 2、流程图
  • 二、功能框架
    • 1、系统菜单
    • 2、其他功能
  • 三、分布实现
    • 0.学生属性/系统属性
      • (1)学生属性
      • (2)系统属性
    • 1.创建系统
    • 2.绘制菜单
    • 3.按键操作
    • 4.录入信息
    • 5.浏览信息
    • 6.查找信息
    • 7.修改信息
    • 8.删除信息
    • 9.排序显示
    • 10.平均分数
    • 11.最高低分数
    • 12.文件读写
    • 13.登入验证
  • 四、完整代码


学生信息管理系统

知识点如下:

  1. 数组遍历
  2. 结构体、结构体指针、结构体数组
  3. 函数调用
  4. 文件处理

功能如下:

  1. 登入验证
  2. 文件存储信息
  3. 录入/浏览学生信息
  4. 查找(按学号、姓名)/修改/删除学生信息
  5. 排序(按单科、三科成绩)/求平均分数/求最高低分学生信息

视频展示:

视频展示链接


一、项目思路

在做一个项目时,需要知道如何去做?怎样按步骤?第一步该做什么,第二步该做什么?

1、模块化思想

  • 学生系统:学生需要写哪些属性(学号、姓名、成绩等);学生的数量
  • 将学生系统的中的每个功能作为一个模块,通过一个函数来实现

2、流程图

二、功能框架

1、系统菜单

//2.绘制菜单
void menu() {
	printf("*---------------【管理系统】-------------*n");
	printf("tt0.退出功能n");
	printf("tt1.录入信息n");
	printf("tt2.浏览信息n");
	printf("tt3.查找信息n");
	printf("tt4.修改信息n");
	printf("tt5.删除信息n");
	printf("tt6.排序显示n");
	printf("tt7.平均分数n");
	printf("tt8.最高低分n");
	printf("*---------------------------------------*n");
	printf("请输入要实现的功能(0-8):n");
}

运行效果:

2、其他功能

利用模块化思想将每个模块用一个函数来实现

//1.创建系统
pSys createSystem() {

}
//2.绘制菜单
void menu() {

}
//4.录入信息
void insertData(pSys psystem) {
	
}
//5.浏览信息
void printData(pSys psystem) {
	
}
//6.查找信息
void searchMenu() {
	
}
void searchByStudentNumber(pSys psystem) {
	
}
void searchByName(pSys psystem) {
	
}
void searchData(pSys psystem) {

}
//7.修改信息
void modifyData(pSys psystem) {
	
}
//8.删除信息
void deleteData(pSys psystem) {
	
}
//9.排序显示
void sortMenu() {
	
}
void sortByEnglish(pSys psystem) {

}
void sortByTotal(pSys psystem) {

}
void sortData(pSys psystem) {
	
}
//10.平均分数
void calAverage(pSys psystem) {
	
}
//11.最高低分数
void highLow(pSys psystem) {
	
}
//12.文件读写
void readFile(pSys psystem, const char* fileName) {
	
}
//13.登入验证
void login() {
	
}
//3.按键操作
void keyDown(pSys psystem) {
	
}

int main() {

	while (1)
	{
	
	}
	return 0;
}

三、分布实现

0.学生属性/系统属性

(1)学生属性

因学生具有多种属性,则具有多种数据类型(字符型、整型、浮点型等);利用结构体存储学生信息;

//学生信息
typedef struct Student {
	char number[20];	//学号
	char name[20];		//姓名
	int english;		//英语成绩
	int math;			//数学成绩
	int chinese;		//语文成绩
	double score;		//总分
}Stu, * pStu;

(2)系统属性

系统属性包括学生信息、学生数量;

//系统信息
typedef struct System {
	Stu stuInfo[100];
	int curSize;		//当前学生数量
}Sys, * pSys;

1.创建系统

//1.创建系统
pSys createSystem() {
	pSys psystem = (pSys)malloc(sizeof(Sys));	//申请内存
	assert(psystem);	//断言处理:判断内存是否申请成功
	psystem->curSize = 0;
	return psystem;
}

2.绘制菜单

//2.绘制菜单
void menu() {
	printf("*---------------【管理系统】-------------*n");
	printf("tt0.退出功能n");
	printf("tt1.录入信息n");
	printf("tt2.浏览信息n");
	printf("tt3.查找信息n");
	printf("tt4.修改信息n");
	printf("tt5.删除信息n");
	printf("tt6.排序显示n");
	printf("tt7.平均分数n");
	printf("tt8.最高低分n");
	printf("*---------------------------------------*n");
	printf("请输入要实现的功能(0-8):n");
}

3.按键操作

通过按键输入指令,再利用switch判断指令并调用相关函数;

//3.按键操作
void keyDown(pSys psystem) {
	int userkey = 0;
	scanf_s("%d", &userkey);
	switch (userkey)
	{
	case 0:
		printf("----退出----n");
		exit(0);
		break;
	case 1:
		printf("----录入----n");
		insertData(psystem);
		writeFile(psystem, "studentInfo.txt");
		break;
	case 2:
		printf("----浏览----n");
		printData(psystem);
		break;
	case 3:
		printf("----查找----n");
		searchData(psystem);
		break;
	case 4:
		printf("----修改----n");
		modifyData(psystem);
		writeFile(psystem, "studentInfo.txt");
		break;
	case 5:
		printf("----删除----n");
		deleteData(psystem);
		writeFile(psystem, "studentInfo.txt");
		break;
	case 6:
		printf("----排序----n");
		sortData(psystem);
		break;
	case 7:
		printf("----平均分数----n");
		calAverage(psystem);
		break;
	case 8:
		printf("----最高低分----n");
		highLow(psystem);
		break;
	default:
		printf("----Error----n");
		break;
	}
}

4.录入信息

//4.录入信息
void insertData(pSys psystem) {
	int userkey = 0;
	while (1)
	{
		printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n");
		scanf_s("%s%s%d%d%d",
			psystem->stuInfo[psystem->curSize].number, 20,
			psystem->stuInfo[psystem->curSize].name, 20,
			&psystem->stuInfo[psystem->curSize].english,
			&psystem->stuInfo[psystem->curSize].math,
			&psystem->stuInfo[psystem->curSize].chinese);
		psystem->curSize++;
		printf("是否继续录入信息?(y/n):");
		while (getchar() != 'n');
		userkey = getchar();
		if (userkey == 'N' || userkey == 'n') {
			break;
		}
		while (getchar() != 'n');
		printf("录入信息成功n");
	}
}

5.浏览信息

通过数组遍历方式,打印学生信息;

//5.浏览信息
void printData(pSys psystem) {
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}

6.查找信息

绘制一个查找菜单,通过两种方式查找;一种是根据学号查找,另一种是根据姓名查找;

//6.查找信息
//查找菜单
void searchMenu() {
	printf("--------【查找菜单】--------n");
	printf("t1.按学号查找n");
	printf("t2.按姓名查找n");
	printf("---------------------------n");
	printf("请输入查找方式(1-2):");
}
//1.通过学号查找
void searchByStudentNumber(pSys psystem) {
	int flag = 0;
	char student_number[20] = { "" };
	printf("请输入查找的学号:n");
	scanf_s("%s", student_number, 20);
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		if (strcmp(student_number, psystem->stuInfo[i].number) == 0) {
			flag = 1;
			printf("%st%st%dt%dt%dn",
				psystem->stuInfo[i].number,
				psystem->stuInfo[i].name,
				psystem->stuInfo[i].english,
				psystem->stuInfo[i].math,
				psystem->stuInfo[i].chinese);
		}
	}
	if (flag == 0) {
		printf("查找失败n");
	}
	else
		printf("查找成功n");
}
//2.通过姓名查找
void searchByName(pSys psystem) {
	int flag = 0;
	char name[20] = { "" };
	printf("请输入查找的姓名:n");
	scanf_s("%s", name, 20);
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		if (strcmp(name, psystem->stuInfo[i].name) == 0) {
			flag = 1;
			printf("%st%st%dt%dt%dn",
				psystem->stuInfo[i].number,
				psystem->stuInfo[i].name,
				psystem->stuInfo[i].english,
				psystem->stuInfo[i].math,
				psystem->stuInfo[i].chinese);
		}
	}
	if (flag == 0) {
		printf("查找失败n");
	}
	else
		printf("查找成功n");
}
//键盘输入指令;选择
void searchData(pSys psystem) {
	int userkey = 0;
	while (1)
	{
		searchMenu();
		scanf_s("%d", &userkey);
		switch (userkey)
		{
		case 1:
			searchByStudentNumber(psystem);
			break;
		case 2:
			searchByName(psystem);
			break;
		default:
			printf("----Error----n");
			break;
		}
		printf("是否继续查找?(y/n):");
		while (getchar() != 'n');		//清除缓冲区
		userkey = getchar();
		if (userkey == 'N' || userkey == 'n') {
			break;
		}
		system("cls");
	}
}

7.修改信息

首先通过学号找到该同学的数组坐标,然后进行修改信息;

//7.修改信息
void modifyData(pSys psystem) {
	int pos = -1;		//第一个数据可能是数组下标0,所以要从-1开始
	int i = 0;
	char student_number[20] = { "" };
	printf("请输入修改的学号:");
	scanf_s("%s", student_number, 20);
	for (i = 0; i < psystem->curSize; i++) {
		if (strcmp(student_number, psystem->stuInfo[i].number) == 0) {
			pos = i;
			break;
		}
	}
	if (pos == -1) {
		printf("未找到修改的信息n");
	}
	else {
		printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n");
		scanf_s("%s%s%d%d%d",
			psystem->stuInfo[pos].number, 20,
			psystem->stuInfo[pos].name, 20,
			&psystem->stuInfo[pos].english,
			&psystem->stuInfo[pos].math,
			&psystem->stuInfo[pos].chinese);
		printf("修改成功n");
	}
}

8.删除信息

//8.删除信息
void deleteData(pSys psystem) {
	int pos = -1;
	int i = 0, j = 0;
	char student_number[20] = { "" };
	printf("请输入删除的学号:");
	scanf_s("%s", student_number, 20);
	for (i = 0; i < psystem->curSize; i++) {
		if (strcmp(student_number, psystem->stuInfo[i].number) == 0) {
			pos = i;
			break;
		}
	}
	if (pos == -1) {
		printf("未找到删除的信息n");
	}
	else {
		for (int j = i; j < psystem->curSize - 1; j++) {
			psystem->stuInfo[j] = psystem->stuInfo[j + 1];
		}
		psystem->curSize--;
		printf("删除成功n");
	}
}

9.排序显示

绘制一个排序菜单,通过两种方式排序;一种是根据单科成绩(本项目是英语成绩;可自行修改),另一种是三科总分;

//9.排序显示
void sortMenu() {
	printf("--------【排序菜单】------n");
	printf("t1.按英语成绩n");
	printf("t2.按三科总分n");
	printf("-------------------------n");
	printf("请输入(1-2):");
}
void sortByEnglish(pSys psystem) {
	for (int i = 0; i < psystem->curSize; i++) {
		for (int j = 0; j < psystem->curSize - 1 - i; j++) {
			if (psystem->stuInfo[j].english > psystem->stuInfo[j + 1].english) {
				Stu temp = psystem->stuInfo[j];
				psystem->stuInfo[j] = psystem->stuInfo[j + 1];
				psystem->stuInfo[j + 1] = temp;
			}
		}
	}
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = psystem->curSize - 1; i >= 0; i--) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}
void sortByTotal(pSys psystem) {
	double total = 0;
	for (int i = 0; i < psystem->curSize; i++) {
		total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese;
		psystem->stuInfo[i].score = total;
	}
	for (int i = 0; i < psystem->curSize; i++) {
		for (int j = 0; j < psystem->curSize - 1 - i; j++) {
			if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) {
				Stu temp = psystem->stuInfo[j];
				psystem->stuInfo[j] = psystem->stuInfo[j + 1];
				psystem->stuInfo[j + 1] = temp;
			}
		}
	}
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = psystem->curSize - 1; i >= 0; i--) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}
void sortData(pSys psystem) {
	int userkey = 0;
	while (1)
	{
		sortMenu();
		scanf_s("%d", &userkey);
		switch (userkey)
		{
		case 1:
			sortByEnglish(psystem);
			break;
		case 2:
			sortByTotal(psystem);
			break;
		default:
			printf("----Error---n");
			break;
		}
		printf("是否继续排序?(y/n):");
		while (getchar() != 'n');
		userkey = getchar();
		if (userkey == 'N' || userkey == 'n')
			break;
		system("cls");
	}
}

10.平均分数

本项目的平均分数是求每科的平均分数;可以自己写总分的平均分数;

//10.平均分数
void calAverage(pSys psystem) {
	int sum1 = 0, sum2 = 0, sum3 = 0;
	double average1 = 0, average2 = 0, average3 = 0;
	for (int i = 0; i < psystem->curSize; i++) {
		sum1 += psystem->stuInfo[i].english;
		sum2 += psystem->stuInfo[i].math;
		sum3 += psystem->stuInfo[i].chinese;
	}
	average1 = sum1 / psystem->curSize;
	average2 = sum2 / psystem->curSize;
	average3 = sum3 / psystem->curSize;

	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
	printf("n");
	printf("平均分数tt英语t数学t语文n");
	printf("平均分数t       %.2ft%.2ft%.2fn", average1, average2, average3);
}

11.最高低分数

先求出每个学生的三科总分,然后通过冒泡排序方式进行排序,最后得出最高分与最低分的数组坐标并打印出来;

//11.最高低分数
void highLow(pSys psystem) {
	double total = 0;
	for (int i = 0; i < psystem->curSize; i++) {
		total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese;
		psystem->stuInfo[i].score = total;
	}
	for (int i = 0; i < psystem->curSize; i++) {
		for (int j = 0; j < psystem->curSize - 1 - i; j++) {
			if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) {
				Stu temp = psystem->stuInfo[j];
				psystem->stuInfo[j] = psystem->stuInfo[j + 1];
				psystem->stuInfo[j + 1] = temp;
			}
		}
	}

	if (psystem->curSize >= 1) {
		printf("--------------最高分数--------------n");
		printf("学号tt姓名t英语t数学t语文n");
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[psystem->curSize - 1].number,
			psystem->stuInfo[psystem->curSize - 1].name,
			psystem->stuInfo[psystem->curSize - 1].english,
			psystem->stuInfo[psystem->curSize - 1].math,
			psystem->stuInfo[psystem->curSize - 1].chinese);
		printf("n");
		printf("--------------最低分数--------------n");
		printf("学号tt姓名t英语t数学t语文n");
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[0].number,
			psystem->stuInfo[0].name,
			psystem->stuInfo[0].english,
			psystem->stuInfo[0].math,
			psystem->stuInfo[0].chinese);
	}
}

12.文件读写

通过文件指针FILE* fp访问文件,如果没有学生信息文件,则创建文件;通过fopen、fclose、fscanf、fprintf函数操作文件进行打开关闭、读写;

//12.文件读写
//读学生信息
void readFile(pSys psystem, const char* fileName) {
	FILE* fp = fopen(fileName, "r");
	if (fp == NULL) {
		fp = fopen(fileName, "w+");
	}
	while (fscanf(fp, "%st%st%dt%dt%dn",
		psystem->stuInfo[psystem->curSize].number,
		psystem->stuInfo[psystem->curSize].name,
		&psystem->stuInfo[psystem->curSize].english,
		&psystem->stuInfo[psystem->curSize].math,
		&psystem->stuInfo[psystem->curSize].chinese) != EOF)
	{
		psystem->curSize++;
	}
	fclose(fp);
}
//写学生信息
void writeFile(pSys psystem, const char* fileName) {
	FILE* fp = fopen(fileName, "w+");
	for (int i = 0; i < psystem->curSize; i++) {
		fprintf(fp, "%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}

13.登入验证

登入验证通过用户名与密码一起登入验证,用户输入密码用*来保护密码;

//13.登入验证
void login() {
	char username[20] = { "" };
	char password[20] = { "" };
	printf("----登入验证----n");
	printf("用户名:");
	gets_s(username, 20);
	printf("密 码:");
	int key = 0;
	int i = 0;
	while ((key = _getch()) != 'r')
	{
		if (key == 'b') {
			printf("b b");
			i--;
			continue;
		}
		putchar('*');
		password[i++] = key;
	}
	password[i] = '';
	printf("n");
	if (!strcmp(username, "root") && !strcmp(password, "123456")) {
		printf("登入成功!n");
	}
	else {
		printf("登入失败!n");
		exit(0);
	}
}

效果如下:


四、完整代码

#include 
#include 
#include 
#include 

//学生信息
typedef struct Student {
	char number[20];	//学号
	char name[20];		//姓名
	int english;		//英语成绩
	int math;			//数学成绩
	int chinese;		//语文成绩
	double score;		//总分
}Stu, * pStu;

//系统信息
typedef struct System {
	Stu stuInfo[100];
	int curSize;		//当前学生数量
}Sys, * pSys;

//1.创建系统
pSys createSystem() {
	pSys psystem = (pSys)malloc(sizeof(Sys));	//申请内存
	assert(psystem);	//断言处理:判断内存是否申请成功
	psystem->curSize = 0;
	return psystem;
}
//2.绘制菜单
void menu() {
	printf("*---------------【管理系统】-------------*n");
	printf("tt0.退出功能n");
	printf("tt1.录入信息n");
	printf("tt2.浏览信息n");
	printf("tt3.查找信息n");
	printf("tt4.修改信息n");
	printf("tt5.删除信息n");
	printf("tt6.排序显示n");
	printf("tt7.平均分数n");
	printf("tt8.最高低分n");
	printf("*---------------------------------------*n");
	printf("请输入要实现的功能(0-8):n");
}
//4.录入信息
void insertData(pSys psystem) {
	int userkey = 0;
	while (1)
	{
		printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n");
		scanf_s("%s%s%d%d%d",
			psystem->stuInfo[psystem->curSize].number, 20,
			psystem->stuInfo[psystem->curSize].name, 20,
			&psystem->stuInfo[psystem->curSize].english,
			&psystem->stuInfo[psystem->curSize].math,
			&psystem->stuInfo[psystem->curSize].chinese);
		psystem->curSize++;
		printf("是否继续录入信息?(y/n):");
		while (getchar() != 'n');
		userkey = getchar();
		if (userkey == 'N' || userkey == 'n') {
			break;
		}
		while (getchar() != 'n');
		printf("录入信息成功n");
	}
}
//5.浏览信息
void printData(pSys psystem) {
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}
//6.查找信息
void searchMenu() {
	printf("--------【查找菜单】--------n");
	printf("t1.按学号查找n");
	printf("t2.按姓名查找n");
	printf("---------------------------n");
	printf("请输入查找方式(1-2):");
}
void searchByStudentNumber(pSys psystem) {
	int flag = 0;
	char student_number[20] = { "" };
	printf("请输入查找的学号:n");
	scanf_s("%s", student_number, 20);
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		if (strcmp(student_number, psystem->stuInfo[i].number) == 0) {
			flag = 1;
			printf("%st%st%dt%dt%dn",
				psystem->stuInfo[i].number,
				psystem->stuInfo[i].name,
				psystem->stuInfo[i].english,
				psystem->stuInfo[i].math,
				psystem->stuInfo[i].chinese);
		}
	}
	if (flag == 0) {
		printf("查找失败n");
	}
	else
		printf("查找成功n");
}
void searchByName(pSys psystem) {
	int flag = 0;
	char name[20] = { "" };
	printf("请输入查找的姓名:n");
	scanf_s("%s", name, 20);
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		if (strcmp(name, psystem->stuInfo[i].name) == 0) {
			flag = 1;
			printf("%st%st%dt%dt%dn",
				psystem->stuInfo[i].number,
				psystem->stuInfo[i].name,
				psystem->stuInfo[i].english,
				psystem->stuInfo[i].math,
				psystem->stuInfo[i].chinese);
		}
	}
	if (flag == 0) {
		printf("查找失败n");
	}
	else
		printf("查找成功n");
}
void searchData(pSys psystem) {
	int userkey = 0;
	while (1)
	{
		searchMenu();
		scanf_s("%d", &userkey);
		switch (userkey)
		{
		case 1:
			searchByStudentNumber(psystem);
			break;
		case 2:
			searchByName(psystem);
			break;
		default:
			printf("----Error----n");
			break;
		}
		printf("是否继续查找?(y/n):");
		while (getchar() != 'n');		//清除缓冲区
		userkey = getchar();
		if (userkey == 'N' || userkey == 'n') {
			break;
		}
		system("cls");
	}
}
//7.修改信息
void modifyData(pSys psystem) {
	int pos = -1;		//第一个数据可能是数组下标0,所以要从-1开始
	int i = 0;
	char student_number[20] = { "" };
	printf("请输入修改的学号:");
	scanf_s("%s", student_number, 20);
	for (i = 0; i < psystem->curSize; i++) {
		if (strcmp(student_number, psystem->stuInfo[i].number) == 0) {
			pos = i;
			break;
		}
	}
	if (pos == -1) {
		printf("未找到修改的信息n");
	}
	else {
		printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n");
		scanf_s("%s%s%d%d%d",
			psystem->stuInfo[pos].number, 20,
			psystem->stuInfo[pos].name, 20,
			&psystem->stuInfo[pos].english,
			&psystem->stuInfo[pos].math,
			&psystem->stuInfo[pos].chinese);
		printf("修改成功n");
	}
}
//8.删除信息
void deleteData(pSys psystem) {
	int pos = -1;
	int i = 0, j = 0;
	char student_number[20] = { "" };
	printf("请输入删除的学号:");
	scanf_s("%s", student_number, 20);
	for (i = 0; i < psystem->curSize; i++) {
		if (strcmp(student_number, psystem->stuInfo[i].number) == 0) {
			pos = i;
			break;
		}
	}
	if (pos == -1) {
		printf("未找到删除的信息n");
	}
	else {
		for (int j = i; j < psystem->curSize - 1; j++) {
			psystem->stuInfo[j] = psystem->stuInfo[j + 1];
		}
		psystem->curSize--;
		printf("删除成功n");
	}
}
//9.排序显示
void sortMenu() {
	printf("--------【排序菜单】------n");
	printf("t1.按英语成绩n");
	printf("t2.按三科总分n");
	printf("-------------------------n");
	printf("请输入(1-2):");
}
void sortByEnglish(pSys psystem) {
	for (int i = 0; i < psystem->curSize; i++) {
		for (int j = 0; j < psystem->curSize - 1 - i; j++) {
			if (psystem->stuInfo[j].english > psystem->stuInfo[j + 1].english) {
				Stu temp = psystem->stuInfo[j];
				psystem->stuInfo[j] = psystem->stuInfo[j + 1];
				psystem->stuInfo[j + 1] = temp;
			}
		}
	}
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = psystem->curSize - 1; i >= 0; i--) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}
void sortByTotal(pSys psystem) {
	double total = 0;
	for (int i = 0; i < psystem->curSize; i++) {
		total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese;
		psystem->stuInfo[i].score = total;
	}
	for (int i = 0; i < psystem->curSize; i++) {
		for (int j = 0; j < psystem->curSize - 1 - i; j++) {
			if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) {
				Stu temp = psystem->stuInfo[j];
				psystem->stuInfo[j] = psystem->stuInfo[j + 1];
				psystem->stuInfo[j + 1] = temp;
			}
		}
	}
	printf("学号tt姓名t英语t数学t语文n");
	for (int i = psystem->curSize - 1; i >= 0; i--) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}
void sortData(pSys psystem) {
	int userkey = 0;
	while (1)
	{
		sortMenu();
		scanf_s("%d", &userkey);
		switch (userkey)
		{
		case 1:
			sortByEnglish(psystem);
			break;
		case 2:
			sortByTotal(psystem);
			break;
		default:
			printf("----Error---n");
			break;
		}
		printf("是否继续排序?(y/n):");
		while (getchar() != 'n');
		userkey = getchar();
		if (userkey == 'N' || userkey == 'n')
			break;
		system("cls");
	}
}
//10.平均分数
void calAverage(pSys psystem) {
	int sum1 = 0, sum2 = 0, sum3 = 0;
	double average1 = 0, average2 = 0, average3 = 0;
	for (int i = 0; i < psystem->curSize; i++) {
		sum1 += psystem->stuInfo[i].english;
		sum2 += psystem->stuInfo[i].math;
		sum3 += psystem->stuInfo[i].chinese;
	}
	average1 = sum1 / psystem->curSize;
	average2 = sum2 / psystem->curSize;
	average3 = sum3 / psystem->curSize;

	printf("学号tt姓名t英语t数学t语文n");
	for (int i = 0; i < psystem->curSize; i++) {
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
	printf("n");
	printf("平均分数tt英语t数学t语文n");
	printf("平均分数t       %.2ft%.2ft%.2fn", average1, average2, average3);
}
//11.最高低分数
void highLow(pSys psystem) {
	double total = 0;
	for (int i = 0; i < psystem->curSize; i++) {
		total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese;
		psystem->stuInfo[i].score = total;
	}
	for (int i = 0; i < psystem->curSize; i++) {
		for (int j = 0; j < psystem->curSize - 1 - i; j++) {
			if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) {
				Stu temp = psystem->stuInfo[j];
				psystem->stuInfo[j] = psystem->stuInfo[j + 1];
				psystem->stuInfo[j + 1] = temp;
			}
		}
	}

	if (psystem->curSize >= 1) {
		printf("--------------最高分数--------------n");
		printf("学号tt姓名t英语t数学t语文n");
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[psystem->curSize - 1].number,
			psystem->stuInfo[psystem->curSize - 1].name,
			psystem->stuInfo[psystem->curSize - 1].english,
			psystem->stuInfo[psystem->curSize - 1].math,
			psystem->stuInfo[psystem->curSize - 1].chinese);
		printf("n");
		printf("--------------最低分数--------------n");
		printf("学号tt姓名t英语t数学t语文n");
		printf("%st%st%dt%dt%dn",
			psystem->stuInfo[0].number,
			psystem->stuInfo[0].name,
			psystem->stuInfo[0].english,
			psystem->stuInfo[0].math,
			psystem->stuInfo[0].chinese);
	}
}
//12.文件读写
void readFile(pSys psystem, const char* fileName) {
	FILE* fp = fopen(fileName, "r");
	if (fp == NULL) {
		fp = fopen(fileName, "w+");
	}
	while (fscanf(fp, "%st%st%dt%dt%dn",
		psystem->stuInfo[psystem->curSize].number,
		psystem->stuInfo[psystem->curSize].name,
		&psystem->stuInfo[psystem->curSize].english,
		&psystem->stuInfo[psystem->curSize].math,
		&psystem->stuInfo[psystem->curSize].chinese) != EOF)
	{
		psystem->curSize++;
	}
	fclose(fp);
}
void writeFile(pSys psystem, const char* fileName) {
	FILE* fp = fopen(fileName, "w+");
	for (int i = 0; i < psystem->curSize; i++) {
		fprintf(fp, "%st%st%dt%dt%dn",
			psystem->stuInfo[i].number,
			psystem->stuInfo[i].name,
			psystem->stuInfo[i].english,
			psystem->stuInfo[i].math,
			psystem->stuInfo[i].chinese);
	}
}
//13.登入验证
void login() {
	char username[20] = { "" };
	char password[20] = { "" };
	printf("----登入验证----n");
	printf("用户名:");
	gets_s(username, 20);
	printf("密 码:");
	int key = 0;
	int i = 0;
	while ((key = _getch()) != 'r')
	{
		if (key == 'b') {
			printf("b b");
			i--;
			continue;
		}
		putchar('*');
		password[i++] = key;
	}
	password[i] = '';
	printf("n");
	if (!strcmp(username, "root") && !strcmp(password, "123456")) {
		printf("登入成功!n");
	}
	else {
		printf("登入失败!n");
		exit(0);
	}
}
//3.按键操作
void keyDown(pSys psystem) {
	int userkey = 0;
	scanf_s("%d", &userkey);
	switch (userkey)
	{
	case 0:
		printf("----退出----n");
		exit(0);
		break;
	case 1:
		printf("----录入----n");
		insertData(psystem);
		writeFile(psystem, "studentInfo.txt");
		break;
	case 2:
		printf("----浏览----n");
		printData(psystem);
		break;
	case 3:
		printf("----查找----n");
		searchData(psystem);
		break;
	case 4:
		printf("----修改----n");
		modifyData(psystem);
		writeFile(psystem, "studentInfo.txt");
		break;
	case 5:
		printf("----删除----n");
		deleteData(psystem);
		writeFile(psystem, "studentInfo.txt");
		break;
	case 6:
		printf("----排序----n");
		sortData(psystem);
		break;
	case 7:
		printf("----平均分数----n");
		calAverage(psystem);
		break;
	case 8:
		printf("----最高低分----n");
		highLow(psystem);
		break;
	default:
		printf("----Error----n");
		break;
	}
}

int main() {
	login();
	system("cls");		//清屏
	pSys psystem = createSystem();	//创建系统
	readFile(psystem, "studentInfo.txt");
	while (1)
	{
		menu();
		keyDown(psystem);
		system("pause");	//按任意键继续
		system("cls");		//清屏
	}
	return 0;
}

感谢阅读,如有不足之处,欢迎来指正。谢谢!

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1093733.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【C语言项目——学生信息管理系统】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2