IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++课程设计:学生成绩管理系统 -> 正文阅读

[C++知识库]c++课程设计:学生成绩管理系统

运用c++设计一个控制台窗口,可以进行学生成绩的储存与初步分析

首先在相应目录下建好文件夹:存储文件/学生信息

然后下面是源码

先是一些辅助的函数:

键盘事件.h

#pragma once
#include<iostream>
#include<conio.h>
using namespace std;
#pragma warning(disable:4996)//unsafe问题解决

//键盘事件.h

//按下esc返回1
int all_bk() {
	int ch;
	while (1) {
		if (_kbhit()) {//如果有按键按下,则_kbhit()函数返回真
			ch = _getch();//使用_getch()获取按下的键值
			return ch;
		}
	}
}

bool esc_kb() {
	//按下esc返回1,其他按键0
	int ch;
	while (1) {
		if (_kbhit()) {//如果有按键按下,则_kbhit()函数返回真
			ch = _getch();//使用_getch()获取按下的键值
			//cout << ch;
			if (ch == 27) { return 1; }//当按下ESC时退出循环,ESC键的键值是27.
			else {
				return 0;
			}
		}
	}
}

类的定义:

//班级与学生类的初定义、“班级与学生.h”

#pragma once
#include<iomanip>
#include<string.h>
#include<Windows.h>
#include<vector>
#include<iostream>
#include<fstream>
#include <stdio.h>
#pragma warning(disable:4996)//unsafe问题解决
using namespace std;

/*——————————————————————————————————————————————————————————————*/


//基础功能函数
char* num2str(int a) {
	char p[20];
	sprintf(p, "%d", a);
	return p;
}
double	str2num(char* str) {
	double a;
	sscanf(str, "% lf", &a);
	return a;
}


/*
int	str2num(char* str) {
	int a;
	sscanf(str, "% d", &a);
	return a;
}
*/


//搜寻函数
bool search_file(char* name) {
	char head_txt[100] = "存储文件//学生信息//";
	strcat(head_txt, name);
	strcat(head_txt, ".txt");
	fstream infile;
	infile.open(head_txt, ios::in);
	if (infile) {
		//cout << "文件存在";
		return 1;
	}
	else {
		//cout << "文件不存在";
		return 0;
	}
}


/*——————————————————————————————————————————————————————————————*/


//类的前定义
class student
{//使用ID来索引学生
public:
	student(int);
	//创建
	void	create() { first_set(); save_info(); }
	//读取
	bool	load_stu();
	//
	void	change() { first_set(); save_info(); }
	void	show();//输出对象内容
	char*	getid() { return ID; }
	char*	getname() { return name; }

	int		sum() { return physics + english + math; }
	double	average() { return (physics + english + math) / 3.0; }

	int tell_subject(int x);

private:
	//构建学生项目
	void first_set();

	//读取与存储学生文件
	bool save_info();

	//info
	char	ID[20];
	char	name[20];
	char	class_[20];
	int		physics;
	int		math;
	int		english;
};
class class_stu {
	//按照班级学号来存储
public:
	class_stu();//创建并读取信息,要进行判断班级是否存在
	//存在则调用old
	~class_stu() {
		cout << "班级项目已退出。" << endl;
	}
	/*______________________________________________*/
	void delete_member(int num);//删除成员
	void add_member();//添加成员
	void change_member();//修改成员
	/*______________________________________________*/
	void show_member();//显示成员
	void show_one_member(int id);//显示一个成员
	int search(char*);//找寻成员位置
	/*______________________________________________*/
	void refresh();//刷新班级信息文档

	/*______________________________________________*/
	//外部友元
	void math_ave();
	void chinese_ave();
	void english_ave();
	void sort_total();
	void sort_math();
	void sort_chinese();
	void sort_english();
private:
	void create();
	void quit();

	typedef vector<student>::size_type stu_type;
	int class_num;
	vector<student> class_all;

	bool read_class_info();//读取班级文档信息
	bool save_class_info(int);

};


/*——————————————————————————————————————————————————————————————*/

然后是它的实现:

//"实现.h"

#pragma once
#include"学生和班级.h"
#include"界面.h"
/*——————————————————————————————————————————————————————————————*/


//student 类实现
//文件存储功能
bool student::save_info() {
	char head_txt[100] = "存储文件//学生信息//";
	strcat(head_txt, ID);
	strcat(head_txt, ".txt");
	fstream outfile;
	outfile.open(head_txt, ios::out);
	if (!outfile) {
		cout << "文件存储失败" << endl;
		outfile.close();
		return 0;
	}
	else
	{
		outfile << ID << '\n' << name << '\n'<<class_<<'\n';
		outfile << physics << '\t' << math << '\t' << english << '\t';
		cout << "save!" << endl;
		outfile.close();
	}
	return 1;
}
bool student::load_stu() {
	char head_txt[100] = "存储文件//学生信息//";
	strcat(head_txt, ID);
	strcat(head_txt, ".txt");
	fstream infile;
	infile.open(head_txt, ios::in);
	if (!infile) {
		cout << "文件read失败" << endl;
		infile.close();
		return 0;
	}
	else {
		infile >> ID;
		infile >> name;
		infile >> class_;
		infile >> physics;
		infile >> math;
		infile >> english;
		cout << "load!" << endl;
		infile.close();
		return 1;
	}
}


//类基本功能实现
void student::first_set()
{
	cout << "\t学生学号:";
	cout << ID << endl;
	cout << "\t学生姓名:";
	cin >> name;
	cout << "\t学生班级:";
	cin >> class_;
	cout << "\t物理成绩:";
	cin >> physics;
	cout << "\t英语成绩:";
	cin >> english;
	cout << "\t数学成绩:";
	cin >> math;
	return;
}
void student::show()
{
	cout << "该学生的学号:" << ID << endl;
	cout << "该学生的姓名:" << name << endl;
	cout << "该学生的班级:" << class_ << endl;
	cout << "该学生的物理成绩:" << physics << endl;
	cout << "该学生的数学成绩:" << math << endl;
	cout << "该学生的英语成绩:" << english << endl;
}
student::student(int id) {
	strcpy(ID, num2str(id));
	if (search_file(ID)) {
		load_stu();
	}
	else {
		create();
	}
}

int student::tell_subject(int x) {
	switch (x) {
	case 1:return math; break;
	case 2:return physics; break;
	case 3:return english; break;
	}
}
/*——————————————————————————————————————————————————————————————*/


//class_stu类的实现
int	class_stu::search(char* id) {
	int i;
	for (i = 0; i < class_all.size(); i++) {
		if (!strcmp(id, class_all[i].getid())) {
			return i;
		}
	}
	cout << "查无此人" << endl;
	return -1;
}
void class_stu::show_member() {
	system("cls");
	for (int i = 0; i < class_all.size(); i++) {
		class_all[i].show();
		cout << "________________________________________________________\n";
	}
	cout << "按下任意键返回" << endl;
	system("pause");
}
void class_stu::show_one_member(int num) {
	class_all[num].show();
}


void class_stu::refresh() {
	fstream ref;
	ref.open("存储文件//班级信息.txt", ios::out);
	for (int i = 0; i < class_all.size(); i++) {
		ref << class_all[i].getid()<<'\n';
	}
}


void class_stu::create() {
	int i;
	for (i = 0; 1; i++) {
		system("cls");
		add_member();
		cout << "按下esc退出,按下其他键继续。" << endl;
		if (esc_kb()) { break; }
	}
	class_num = i;
}


bool class_stu::save_class_info(int ID) {
	fstream out;
	out.open("存储文件//班级信息.txt", ios::app);
	out << ID << '\n';
	out.close();
	return 1;
}
bool class_stu::read_class_info() {
	fstream infile;
	infile.open("存储文件//班级信息.txt", ios::in);
	if (!infile) {
		cout << "flase";
		return 0;
	}
	int temp;
	int i = 0;
	while (infile >> temp) {
		class_all.push_back(student(temp));
		i++;
	}
	class_num = i;
	infile.close();
	return 1;
}


void class_stu::change_member() {
	cout << "输入ID:";
	char p[20];
	cin >> p;
	int id = search(p);
	class_all[id].change();
	return;
}
void class_stu::add_member() {
	cout << "输入学生ID:" << endl;
	int ID;
	cin >> ID;
	if (search_file(num2str(ID))) {
		cout << "学生ID已经存在" << endl;
	}
	else {
		class_all.push_back(student(ID));
		fstream out;
		save_class_info(ID);
	}

}
void class_stu::delete_member(int num) {
	char head[50] = "存储文件//学生信息//";
	strcat(head, class_all[num].getid());
	strcat(head, ".txt");
	remove(head);
	class_all.erase(class_all.begin() + num);
	refresh();
}


//构造函数
class_stu::class_stu() {
	if (read_class_info()) {
		cout << "successfully read! " << endl;
	}
	else {
		cout << "尚未创建班级,是否创建班级?(Y/N):" << endl;
		char y = cin.get();
		if (y == 'Y') {
			create();
		}
		else {
			//quit();
			system("pause");
			cout << "exit project." << endl;
			exit(1);
			return;
		}
	}
}


/*——————————————————————————————————————————————————————————————*/

//学生成绩统计分析模块函数:

//求全班数学平均成绩
void class_stu::math_ave() {
	double s = 0;
	cout << "全班同学的数学平均成绩为:";
	for (int i = 0; i < class_all.size(); i++)
		s += class_all[i].tell_subject(1);
	cout << s / class_all.size() << '\n';
}

//求全班语文平均成绩
void class_stu::chinese_ave() {
	double s = 0;
	cout << "全班同学的物理平均成绩为:";
	for (int i = 0; i < class_all.size(); i++)
		s += class_all[i].tell_subject(2);
	cout << s / class_all.size() << '\n';
}

//求全班英语平均成绩
void class_stu::english_ave() {
	double s = 0;
	cout << "全班同学的英语平均成绩为:";
	for (int i = 0; i < class_all.size(); i++)
		s += class_all[i].tell_subject(3);
	cout << s / class_all.size() << '\n';
}


//对全班总成绩进行排序
void class_stu::sort_total() {
	char* str[30];
	char* id[30];
	int score[30];
	for (int i = 0; i < class_all.size(); i++) {
		str[i] = class_all[i].getname();
		score[i] = class_all[i].sum();
		id[i] = class_all[i].getid();
	}
	for (int i = 0; i < class_all.size() - 1; i++) {
		for (int j = i + 1; j < class_all.size(); j++)
			if (score[i] <= score[j]) {
				int t = score[i];
				score[i] = score[j];
				score[j] = t;
				char* p = str[i];
				str[i] = str[j];
				str[j] = p;
				char* p1 = id[i];
				id[i] = id[j];
				id[j] = p1;
			}
	}
	cout << "全班学生总成绩从高到低排序为:" << '\n';
	;	for (int i = 0; i < class_all.size(); i++) {
		cout << id[i] << " " << str[i] << ":" << score[i] << '\n';
	}
}

//对数学成绩进行排序
void class_stu::sort_math() {
	char* str[30];
	char* id[30];
	int score[30];
	for (int i = 0; i < class_all.size(); i++) {
		str[i] = class_all[i].getname();
		score[i] = class_all[i].tell_subject(1);
		id[i] = class_all[i].getid();
	}
	for (int i = 0; i < class_all.size() - 1; i++) {
		for (int j = i + 1; j < class_all.size(); j++)
			if (score[i] <= score[j]) {
				int t = score[i];
				score[i] = score[j];
				score[j] = t;
				char* p = str[i];
				str[i] = str[j];
				str[j] = p;
				char* p1 = id[i];
				id[i] = id[j];
				id[j] = p1;
			}
	}
	cout << "全班学生数学成绩从高到低排序为:" << '\n';
	;	for (int i = 0; i < class_all.size(); i++) {
		cout << id[i] << " " << str[i] << ":" << score[i] << '\n';
	}
}


//对语文成绩排序
void class_stu::sort_chinese() {
	char* str[30];
	char* id[30];
	int score[30];
	for (int i = 0; i < class_all.size(); i++) {
		str[i] = class_all[i].getname();
		score[i] = class_all[i].tell_subject(2);
		id[i] = class_all[i].getid();
	}
	for (int i = 0; i < class_all.size() - 1; i++) {
		for (int j = i + 1; j < class_all.size(); j++)
			if (score[i] <= score[j]) {
				int t = score[i];
				score[i] = score[j];
				score[j] = t;
				char* p = str[i];
				str[i] = str[j];
				str[j] = p;
				char* p1 = id[i];
				id[i] = id[j];
				id[j] = p1;
			}
	}
	cout << "全班学生物理成绩从高到低排序为:" << '\n';
	;	for (int i = 0; i < class_all.size(); i++) {
		cout << id[i] << " " << str[i] << ":" << score[i] << '\n';
	}
}


//对英语成绩进行排序
void class_stu::sort_english() {
	char* str[30];
	char* id[30];
	int score[30];
	for (int i = 0; i < class_all.size(); i++) {
		str[i] = class_all[i].getname();
		score[i] = class_all[i].tell_subject(3);
		id[i] = class_all[i].getid();
	}
	for (int i = 0; i < class_all.size() - 1; i++) {
		for (int j = i + 1; j < class_all.size(); j++)
			if (score[i] <= score[j]) {
				int t = score[i];
				score[i] = score[j];
				score[j] = t;
				char* p = str[i];
				str[i] = str[j];
				str[j] = p;
				char* p1 = id[i];
				id[i] = id[j];
				id[j] = p1;
			}
	}
	cout << "全班学生英语成绩从高到低排序为:" << '\n';
	;	for (int i = 0; i < class_all.size(); i++) {
		cout << id[i] << " " << str[i] << ":" << score[i] << '\n';
	}
}



/*
bool class_stu::class_num_get() {
	fstream infile;
	infile.open("存储文件//班级信息", ios::in);
	if (!infile) {
		cout << "flase";
		return 0;
	}
	char temp[100];
	int i = 0;
	while (infile >> temp)i++;
	class_num = i;
	//strcat(names, num2str(class_num));
	return 1;
}
*/

显示界面:

界面.h

#pragma once
#include"键盘事件.h"
using namespace std;
//这个函数设计UI界面


int UIface_01() {
	int select;
		//刷新页面
		system("cls");
		cout << "*****************学生成绩管理信息系统*****************" << endl;
		cout << "1-- - 学生成绩基本管理      2-- - 学生成绩统计分析" << endl;
		cout << "3-- - 退出系统" << endl;
		cout << "*****************************************************" << endl;
		system("pause");
		cout << "请按下按键" << endl;
		select=all_bk();
		return select;
}


int UIface_02() {
	int select;
		//刷新页面
		system("cls");
		cout << "*****************************************************" << endl;
		cout << "A-- - 插入学生记录      B-- - 修改学生记录" << endl;
		cout << "C-- - 删除退学学生记录  D-- - 查找学生记录" << endl;
		cout << "E-- - 浏览全班学生成绩  F-- - 返回上一级菜单" << endl;
		cout << "G-- - 退出系统" << endl;
		cout << "*****************************************************" << endl;
		system("pause");
		cout << "请按下按键" << endl;
		select = all_bk();
		return select;
}


int UIface_03() {
	int select;
		//刷新页面
		system("cls");
		cout << "*****************************************************" << endl;
		cout << "A-- - 统计全班学生平均成绩     B-- - 排序输出全班总分" << endl;
		cout << "C-- - 单科成绩排序输出 		D-- - 返回上一级菜单" << endl;
		cout << "F-- - 退出系统" << endl;
		cout << "*****************************************************" << endl;
		system("pause");
		cout << "请按下按键" << endl;
		select = all_bk();
	return select;
}

然后定义一下响应事件:

//事件定义.h

#pragma once
#include"实现.h"

//前定义操作
//关于界面操作
void inter_action_02(int&, class_stu& cla);
void inter_action_03(int&, class_stu& cla);
void inter_action_01(int&, class_stu& cla);

void inter_action_01(int& se, class_stu& cla) {
	int le;
	se = UIface_01();
	switch (se)
	{
	case 49:
		se = UIface_02();
		le = 1;
		break;
	case 50:
		se = UIface_03();
		le = 2;
		break;
	case 51:
		cout << "程序终止" << endl;
		return;
	default:
		cout << "请输入正确按键" << endl;
		return;
	}
	system("cls");
	switch (le)
	{
	case 1:
		inter_action_02(se, cla);
		break;
	case 2:
		inter_action_03(se, cla);
		break;
	default:
		break;
	}
	return;
}


void inter_action_02(int& se, class_stu& cla) {
	switch (se) {
	case 97:
		cla.add_member();
		int id;
		break;
	case 98:
		cla.change_member();
		break;
	case 99:
		cout << "输入ID:";
		char p2[30];
		cin >> p2;
		id = cla.search(p2);
		if (id == -1)cout << "fail" << endl;
		else cla.delete_member(id);
		break;
	case 100:
		cout << "输入ID:";
		char p3[30];
		cin >> p3;
		id = cla.search(p3);
		if (id == -1)cout << "fail" << endl;
		else cla.show_one_member(id);
		break;
	case 101:
		cla.show_member();
		break;
	case 102:
		system("cls");
		cout << "连续按下任意按键返回" << endl;
		break;
	case 103:
		system("cls");
		cout << "连续按下esc退出" << endl;
		break;
	default:
		cout << "按错了" << endl;
		break;
	}
}


void inter_action_03(int& se, class_stu& cla) {
	switch (se) {
	case 97:
		cla.math_ave();
		cout << "——————————————————————————————————————————————" << endl;
		cla.chinese_ave();
		cout << "——————————————————————————————————————————————" << endl;
		cla.english_ave();
		cout << "——————————————————————————————————————————————" << endl;
		break;
	case 98:
		cla.sort_total();
		break;
	case 99:
		int a;
		cout << "请输入排序的对象:数学按1,物理按2,英语按3";
		a = all_bk();
		switch (a) {
		case 49:
			cla.sort_math();
			break;
		case 50:
			cla.sort_chinese();
			break;
		case 51:
			cla.sort_english();
			break;
		default:
			cout << "按错了!";
			break;
		}
		break;
	case 100:
		system("cls");
		break;
	case 101:
		break;
	default:
		cout << "按错了" << endl;
		break;
	}
}

接下来就是主函数了:

#include"事件定义.h"
int main() {
	class_stu cla;
	int se=-1;
	while(1){
		inter_action_01(se,cla);
		cout << "按下esc退出" << endl;
		if (esc_kb())break;
	}
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:21:50  更:2021-07-10 14:24:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 15:37:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码