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

学生信息管理系统 c

C/C++/C# 更新时间: 发布时间: 计算机考试归档 最新发布

学生信息管理系统 c

学生信息管理系统分成四个模块: 管理员, 教师, 学生, 退出系统

每个模块都需要实现不同的功能.

列如教师模块实现了: 输入学生信息, 显示学生信息, 删除学生信息, 修改学生信息, 插入学生信息

学生模块实现了:单科成绩查询, 总成绩查询

//main.cpp 模块

#include
#include"taaer.h"
#include
#include
#include

using namespace std;

#define MAX_COUNT 1000

#define RECORDER_PER_PAGE 10

struct student {
	int num; //学号
	char name[16];
	char professional[16]; //专业
	int cLang; //C 语言
	int algo; //计算材料学
	int database; //原子物理
	int electricity; // 电动力学
};

struct student stu[MAX_COUNT];
int currentCount = 0;


void init() {  //初始化
	char cmd[128];
	//errno_t  err;

	//mode con lines=%d cols=%d ,这段代码控制控制台的大小
	sprintf_s(cmd, "mode con lines=%d cols=%d",  WIN_HEIGHT, WIN_WIDTH);
	system(cmd); //cmd 输入到 控制台中
	system("color 1f");

	memset(stu, 0, sizeof(stu));   //清空数组

	//FILE* fp = NULL;
	//err =  fopen_s(&fp, "acc.txt", "rb");
	FILE* fp = fopen("acc.txt", "rb");
	if (fp  == NULL) {
		//printf("文件不存在!n");
		currentCount = 0;
		return;
	}
	int i = 0;
	while (!feof(fp)) {  //检测流上的文件结束符 ,文件未结束就继续执行
		int ret = fread(&stu[i],sizeof(struct student), 1, fp);  //从文件中读取数据

		if (ret == 1) {   //读取成功
			i++;
		}
	}
	currentCount = i;
}

void waitConfirm() {
	rewind(stdin); // rewind,清空缓存区
	getch(); //即从控制台读取一个字符,但不显示在屏幕上
}

void menu() {  //菜单界面
	system("cls");   //清空控制台

	printTableHead(MENU_WIDTH);
	printTableMidInfo(MENU_WIDTH, "学生信息管理系统");
	printTableMidInfo(MENU_WIDTH, "");

	const char* subMenus[] = {
	"1.管理员   ",
	"2.教师     ",
	"3.学生     ",
	"0.退出系统 "
	};
	int count = sizeof(subMenus) / sizeof(subMenus[0]);

	for (int i = 0; i < count; i++) {
		printTableMidInfo(MENU_WIDTH, subMenus[i]);
	}

	printTableMidInfo(MENU_WIDTH, "");
	printTableTail(MENU_WIDTH);
	printMidInfo("请选择(0-3): ");

}


struct student inputInfo() {
	struct student s;

	rewind(stdin); //清空输入缓存区
	printf("学号:");
	scanf_s("%d", &s.num);
	rewind(stdin);
	printf("姓名:");
	scanf_s("%s", s.name, 16);
	rewind(stdin);
	printf("专业:");
	scanf_s("%s", s.professional,16);
	rewind(stdin);
	printf("C语言:");
	scanf_s("%d", &s.cLang);
	rewind(stdin);
	printf("计算材料学:");
	scanf_s("%d", &s.algo);
	rewind(stdin);
	printf("原子物理:");
	scanf_s("%d", &s.database);
	rewind(stdin);
	printf("电动力学:");
	scanf_s("%d", &s.electricity);
	rewind(stdin);
	//s.sum = s.cLang + s.algo + s.database + s.electricity;

	return s;
}

int searchStu(int snum) {  //判断学号是否存在
	for (int i = 0; i < currentCount; i++) {
		if (stu[i].num == snum) {
			return i;
		}
	}
	return -1;
}

bool save() {  //信息输入文件
	FILE* fp = fopen("acc.txt", "wb");
	if (fp == NULL) {
		fclose(fp);   //关闭流
		return false;
	}
	for (int i = 0; i < currentCount; i++) {
		if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1) {
			fclose(fp);
			return false;
		}
	}
	fclose(fp);
	return true;
}


void input() {  //输入功能
	char str[16];
	struct student s;

	while (1) {
		system("cls");
		printf("输入学生信息(y/n):");
		rewind(stdin); //清空输入缓存区
		scanf_s("%s", str,16);
		if (strcmp(str, "Y") != 0 && strcmp(str, "y") != 0) {  //输入Yy 进行输入
			break;
		}
		s = inputInfo();
		if (searchStu(s.num) >= 0) {   //判断学号是否存在
			printf("学号[%d] 已经存在!n", s.num);
			waitConfirm();
			continue;
		}
		stu[currentCount++] = s;
		if (!save()) {
			printf("保存失败!n");
		}
		else {
			printf("保存成功!n");
		}
		waitConfirm();
	}
	printf("n 结束输入!n");
}



void Tinterface() {   //教师操作界面
	system("cls");   //清空控制台

	printTableHead(MENU_WIDTH);
	printTableMidInfo(MENU_WIDTH, "教师操作界面");
	printTableMidInfo(MENU_WIDTH, "");

	const char* Tinterfaces[] = {
	"1.输入学生信息",
	"2.显示学生信息",
	"3.删除学生信息",
	"4.修改学生信息",
	"5.插入学生信息",
	"0.退出        "
	};
	int count = sizeof(Tinterfaces) / sizeof(Tinterfaces[0]);

	for (int i = 0; i < count; i++) {
		printTableMidInfo(MENU_WIDTH, Tinterfaces[i]);
	}

	printTableMidInfo(MENU_WIDTH, "");	
	printTableTail(MENU_WIDTH);
	printMidInfo("请选择(0-5): ");

}

void Ainterface() {   //管理员操作界面
	system("cls");   //清空控制台

	printTableHead(MENU_WIDTH);
	printTableMidInfo(MENU_WIDTH, "管理员操作界面");
	printTableMidInfo(MENU_WIDTH, "");

	const char* Ainterfaces[] = {
	"1.教师身份",
	"2.学生身份",
	"0.退出    "
	};
	int count = sizeof(Ainterfaces) / sizeof(Ainterfaces[0]);

	for (int i = 0; i < count; i++) {
		printTableMidInfo(MENU_WIDTH, Ainterfaces[i]);
	}

	printTableMidInfo(MENU_WIDTH, "");
	printTableTail(MENU_WIDTH);
	printMidInfo("请选择(0-2): ");


}

void Sinterface() {   //学生操作界面
	system("cls");   //清空控制台

	printTableHead(MENU_WIDTH);
	printTableMidInfo(MENU_WIDTH, "学生操作界面");
	printTableMidInfo(MENU_WIDTH, "");

	const char* subMenus[] = {
		"1.单科成绩查询",
	    "2.总成绩查询  ",
		"0.退出        "
	};
	int count = sizeof(subMenus) / sizeof(subMenus[0]);

	for (int i = 0; i < count; i++) {
		printTableMidInfo(MENU_WIDTH, subMenus[i]);
	}

	printTableMidInfo(MENU_WIDTH, "");
	printTableTail(MENU_WIDTH);
	printMidInfo("请选择(0-3): ");


}

void insert() {   //插入学生信息
	int snum;
	system("cls");
	printf("请输入要插入的位置(学号):");
	scanf("%d", &snum);
	int destIndex = searchStu(snum);
	if (destIndex < 0) {
		printf("没有这名学生,插入位置错误!n");
		return;
	}
	struct student t = inputInfo();
	int i = searchStu(t.num);
	if (i >= 0) {
		printf("学号[%d]已经存在! n", t.num);
		return;
	}
	for (int j = currentCount - 1; j > destIndex; j--) {
		stu[j + 1] = stu[j];
	}
	stu[destIndex + 1] = t;
	currentCount++;
	if (save()) {
		printf("插入成功!n");
	}
	else {
		printf("保存文件失败!n");
	}
}

void modify()  {  //修改学生信息
	int snum;
	system("cls");

	printf("请输入要修改的学生的学号: ");
	scanf_s("%d", &snum);
	rewind(stdin);

	int i = searchStu(snum);   //判断是否有这个学号
	if (i < 0) {
		printf("没有找到这名学生!n");
		return;
	}
	printf("找到了这名学生, 可以修改他的信息!n");
	printf("姓名:");
	scanf("%s", stu[i].name);
	rewind(stdin);
	printf("专业:");
	scanf_s("%d", &stu[i].professional);
	rewind(stdin);
	printf("C 语言:");
	scanf_s("%d", &stu[i].cLang);
	rewind(stdin);
	printf("计算材料学:");
	scanf_s("%d", &stu[i].algo);
	rewind(stdin);
	printf("原子物理:");
	scanf_s("%d", &stu[i].database);
	rewind(stdin);
	printf("电动力学:");
	scanf_s("%d", &stu[i].professional);
	rewind(stdin);

	//stu[i].sum = stu[i].cLang + stu[i].algo + stu[i].database +  stu[i].professional;
	if (save()) {
		printf("修改成功!n");
	}
	else {
		printf("保存文件失败!n");
	}
}



void del() {    //删除学生功能
	FILE* fp;
	int snum = 0;
	char str[16] = "";
	system("cls");
	printf("请输入学号:");
	scanf("%d", &snum);
	int i = searchStu(snum);
	if (i < 0) {
		printf("没有找到这名学生!n");
		return;
	}
	printf("找到这条记录,是否删除?(y/n)");
	scanf("%s", str);
	if (strcmp(str, "Y") == 0 || strcmp(str, "y") == 0) {
		for (int j = i; j < currentCount; j++) {
			stu[j] = stu[j + 1];
		}
		currentCount--;
		if (save()) {
			printf("删除成功!n");
		}
		else {
			printf("保存文件失败!n");
		}
	}
	else {
		printf("取消删除!n");
	}
}



// 表头信息
char head[][COL_LEN_MAX] = { "学号", "姓名","专业","C语言","计算材料","原子物理","电动力学","总分"};

char heas[][COL_LEN_MAX] = { "学号","姓名","专业","c语言","计算材料","原子物理","电动力学"};
void showPage(int startIndex, int endIndex) {
	if (endIndex >= currentCount) {
		endIndex = currentCount - 1;
	}
	if (endIndex - startIndex + 1 > RECORDER_PER_PAGE) {
		endIndex = startIndex + RECORDER_PER_PAGE - 1;
	}
	char row[7][COL_LEN_MAX];
	system("cls");
	printTableHead(TABLE_WIDTH, 7);
	printTableRow(TABLE_WIDTH, heas, sizeof(heas) / sizeof(heas[0]));  //打印到这出了问题
	printTableMidLine(TABLE_WIDTH, 7);
	for (int i = startIndex; i <= endIndex; i++) {
		sprintf(row[0], "%d", stu[i].num);
		sprintf(row[1], "%s", stu[i].name);
		sprintf(row[2], "%s", stu[i].professional);
		sprintf(row[3], "%d", stu[i].cLang);
		sprintf(row[4], "%d", stu[i].algo);
		sprintf(row[5], "%d", stu[i].database);
		sprintf(row[6], "%d", stu[i].electricity);
		printTableRow(TABLE_WIDTH, row, 7);
		if (i < endIndex) {
			printTableMidLine(TABLE_WIDTH, 7);
		}
		else {
			printTableTail(TABLE_WIDTH, 7);
		}
	}
}


void show() {   //显示学生信息
	system("cls");

	if (currentCount == 0) {  //判断有没有学生信息
		printf("还没有学生信息!n");
		return;
	}

	int pageCount = (currentCount + RECORDER_PER_PAGE - 1) / RECORDER_PER_PAGE;  //学生信息的页数
	char buff[64];

	for (int i = 0; i < pageCount; i++) {
		showPage(i * RECORDER_PER_PAGE, (i + 1) * RECORDER_PER_PAGE - 1);
		sprintf(buff, "共%d 页 第[%d]页", pageCount, i + 1);
		printMidInfo(buff);  //打印共%d 页 第[%d]页
		if (i < pageCount - 1) {
			waitConfirm();
		}
	}
}


void OnlyDranch() {  //单科成绩查询
	system("cls");
	int num;

	if (currentCount == 0) {
		printf("还没有学生记录!n");
		return;
	}

	printf("请输入要查询的学生的学号: ");
	scanf_s("%d", &num);

	int i = searchStu(num);
	if (i < 0) {
		printf("没有找到这名学生!n");
		return;
	}

	char ro[7][COL_LEN_MAX];

	printTableHead(TABLE_WIDTH, 7);
	printTableRow(TABLE_WIDTH, heas, sizeof(heas) / sizeof(heas[0]));  
	printTableMidLine(TABLE_WIDTH, 7);

	
	sprintf(ro[0], "%d", stu[i].num);
	sprintf(ro[1], "%s", stu[i].name);
	sprintf(ro[2], "%s", stu[i].professional);
	sprintf(ro[3], "%d", stu[i].cLang);
	sprintf(ro[4], "%d", stu[i].algo);
	sprintf(ro[5], "%d", stu[i].database);
	sprintf(ro[6], "%d", stu[i].electricity);
	printTableRow(TABLE_WIDTH, ro, 7);
	
	//printTableMidLine(TABLE_WIDTH, 7);
	
	printTableTail(TABLE_WIDTH, 7);

	

}



void Teachers() {  //教师功能
	Tinterface();   //教师操作界面

	int n1;
	scanf_s("%d", &n1);
	rewind(stdin);

	while (1) {
		switch (n1){
		case 1:  //输入学生信息
			input();
			break;
		case 2:  //显示学生信息
			show(); 
			break;
		case 3: //删除学生信息
			del();
			break;
		case 4:  //修改学生信息
			modify();
			break;
		case 5:  //插入学生信息
			insert();
			break;
		default:
			return;
		}
		break;
	}

}

void administrator() {  //管理员功能
	Ainterface();   //管理员操作界面

	int n2;
	scanf_s("%d", &n2);

	while (1) {
		switch (n2) {
		case 1:  //教师身份
			printf("允许使用教师身份n");
			printf("返回主菜单......");
		case 2:  //学生身份
			printf("允许使用学生身份n");
			printf("返回主菜单.....");
		default:
			return;
		}
	}
}

void students() {  //学生功能
	Sinterface();   //学生操作界面

	int n3;
	scanf_s("%d", &n3);

	while (1) {
		switch (n3) {
		case 1:  //单科成绩查询
			OnlyDranch();
			break;
		case 2: //总成绩查询
			show();
			//TheTotal();
			break;
		default:
			return;
		}
		break;
	}

}


int main(void) {

	init();   //初始化  

	menu();  //菜单界面
	
	int n;
	scanf_s("%d", &n);
	rewind(stdin);

	while (1) {
		switch (n) {
		case 1:  //管理员
			administrator();
			break;
		case 2:  //教师
			//sum:
			Teachers();
			break;
		case 3:  //学生
			//menu:
			students();
			break;
		default:return 1;  //退出系统
		}

		waitConfirm();
		menu();

		rewind(stdin); // 清空输入缓冲区
		scanf_s("%d", &n);

	}

	return 0;
}
//haaer.h   模块

#pragma once

// 窗口宽度
#define WIN_WIDTH 80
// 窗口高度
#define WIN_HEIGHT 25

#define TABLE_WIDTH 78

#define MENU_WIDTH  50
#define COL_LEN_MAX 64

void printTableHead(int tableWidth);
void printTableTail(int tableWidth);
void printTableRow(int tableWidth, char cols[][COL_LEN_MAX], int n);
void printTableHead(int tableWidth, int cols);
void printTableTail(int tableWidth, int cols);
void printTableMidLine(int tableWidth, int cols);
void printTableMidInfo(int tableWidth, const char* str);
void printMidInfo(const char* str);

//taaer.cpp

#include 
#include 
#include "taaer.h"

void printTableHead(int tableWidth) {
	int margin = (WIN_WIDTH - tableWidth) / 2;
	for (int i = 0; i < margin; i++) printf(" ");
	printf("┌");
	for (int i = 0; i < tableWidth - 2; i++)printf("─");
	printf("┐n");
}



void printTableTail(int tableWidth) {
	int margin = (WIN_WIDTH - tableWidth) / 2;
	for (int i = 0; i < margin; i++) printf(" ");
	printf("└");
	for (int i = 0; i < tableWidth - 2; i++)printf("─");
	printf("┘n");
}


void printTableRow(int tableWidth, char cols[][COL_LEN_MAX], int n) {
	int margin = (WIN_WIDTH - tableWidth) / 2;
	for (int i = 0; i < margin; i++) printf(" ");

	int colWidth = (tableWidth - (n + 1)) / n;

	for (int i = 0; i < n; i++) {
		printf("│");

		int leftSpan = (colWidth - strlen(cols[i])) / 2;
		int rightSpan = colWidth - leftSpan - strlen(cols[i]);

		for (int j = 0; j < leftSpan; j++) printf(" ");
		printf("%s", cols[i]);
		for (int j = 0; j < rightSpan; j++) printf(" ");
	}

	printf("│n");
}


void printTableHead(int tableWidth, int cols) {
	int margin = (WIN_WIDTH - tableWidth) / 2;
	int spanLen = (tableWidth - (cols + 1)) / cols;
	for (int i = 0; i < margin; i++) printf(" ");

	printf("┌");
	for (int i = 0; i < cols; i++) {
		for (int j = 0; j < spanLen; j++) {
			printf("─");
		}

		if (i < cols - 1) {
			printf("┬");
		}
		else {
			printf("┐");
		}
	}
	printf("n");
}

void printTableTail(int tableWidth, int cols) {
	int margin = (WIN_WIDTH - tableWidth) / 2;
	int spanLen = (tableWidth - (cols + 1)) / cols;
	for (int i = 0; i < margin; i++) printf(" ");

	//└─┴─┘
	printf("└");
	for (int i = 0; i < cols; i++) {
		for (int j = 0; j < spanLen; j++) {
			printf("─");
		}

		if (i < cols - 1) {
			printf("┴");
		}
		else {
			printf("┘");
		}
	}
	printf("n");
}

void printTableMidLine(int tableWidth, int cols) {
	int margin = (WIN_WIDTH - tableWidth) / 2;
	int spanLen = (tableWidth - (cols + 1)) / cols;
	for (int i = 0; i < margin; i++) printf(" ");

	printf("├");
	for (int i = 0; i < cols; i++) {
		for (int j = 0; j < spanLen; j++) {
			printf("─");
		}

		if (i < cols - 1) {
			printf("┼");
		}
		else {
			printf("┤");
		}
	}
	printf("n");
}


void printTableMidInfo(int tableWidth, const char* str) {
	int margin = (WIN_WIDTH - tableWidth) / 2;
	for (int i = 0; i < margin; i++) printf(" ");
	printf("│");

	int len1 = (tableWidth - 2 - strlen(str)) / 2;
	for (int i = 0; i < len1; i++) printf(" ");

	printf("%s", str);

	int len2 = tableWidth - 2 - len1 - strlen(str);
	for (int i = 0; i < len2; i++) printf(" ");

	printf("│n");
}

void printMidInfo(const char* str) {
	int margin = (WIN_WIDTH - strlen(str)) / 2;
	for (int i = 0; i < margin; i++) printf(" ");
	printf("%s", str);
}

注意  需要把项目属性 中   的 SDL检查   更改成  否

不然会报错

如果有不明白的地方,去 哔哩哔哩->奇牛学院    

老师讲课十分容易听懂 , 常以 生活中的有趣事 讲解 难懂的技术

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

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

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

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

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