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

📄 manage.cpp

📁 学生成绩管理系统 华南理工大学 05AU3
💻 CPP
字号:
#include <iostream>
#include "manage_1.h"
#include <fstream>
#include <ctime>
#include <dos.h>
#include <iomanip>
using namespace std;

student students[student_total_number];
student *students_point=students;	//student结构数组指针
extern int record_mark;
extern string subject_name[subject_number];
float a=0;
int main()
{
	void load(student *x);		
	void main_menu();
	load(students_point);		//载入数据
	subject_name_boot();
	main_menu();
	return 0;
}

void main_menu()		//主菜单
{
	void main_code();	
	
	system("cls");		//清除屏幕
	cout<<"\n欢迎使用学生成绩管理系统\n"
		<<"                设计者:GUY\n"
		<<"***************************\n"
		<<"1.输入\n"
		<<"2.修改\n"
		<<"3.查询\n"
		<<"4.统计\n"
		<<"5.输出\n"
		<<"0.退出\n"
		<<"***************************\n";
	main_code();
}

void main_code()	//主菜单选择处理模块
{
	void exit_program();
	void input(student *x);
	void change(student *x);
	void search_menu();
	void input_error();
	void output(student *);
	void tongji_menu();
	char c;	
	cout<<"请输入操作代码,并按回车键:";
	cin>>c;

	switch(c)	//对输入的操作码进行处理
	{
		case'0':exit_program();break;	
		case'1':input(&students[record_mark++]);break;
		case'2':change(students_point);break;
		case'3':search_menu();break;
		case'4':tongji_menu();break;
		case'5':output(students_point);break;
		default:	//输入错误,即输入其它的操作码
			{
				input_error();
				main_code();
			};break;
	}
}

void input(student *x)		//输入模块
{
	system("cls");	//数据输入
	cout<<"\n请输入学生的学号:";
	cin>>(*x).number;
	cout<<"\n请输入学生的姓名:";
	cin>>(*x).name;
	cout<<"\n请输入学生的班级别:";
	cin>>(*x).grade;
	int i;
	for(i=0;i<subject_number;i++)
	{
		cout<<"\n请输入"<<subject_name[i]<<"的成绩";
		cin>>(*x).score[i];
	}
	cout<<"\n是否要继续输入?(Y/N)";
	char c;
	cin>>c;
	switch(c)
	{
		case'Y':input(&students[record_mark++]);break;
		case'y':input(&students[record_mark++]);break;
		default:main_menu();break;	//返回主目录
	}
}

void change(student *x)		//修改模块
{
	system("cls");
	cout<<"请输入需要修改的学生的学号:";
	string change_number;
	cin>>change_number;
	bool flag=false;	//搜索标志,如果搜到就为true,否则为false

	for(int i=0;i<record_mark;i++) 
	if(x[i].number==change_number)
	{
		input(&x[i]);		//将符合条件的同学送入输入模块进行信息修改
		flag=true;	 
	}
	if(!flag) cout<<endl<<change_number<<"该同学("<<change_number<<")不存在,请检查你的输入数据。\n";	//如果没有搜到对应的同学
	cout<<"是否要继续修改?(Y/N)";
	char c;
	cin>>c;
	switch(c)
	{
		case'Y':change(x);break;
		case'y':change(x);break;
		default:main_menu();break;
	}
}

void search_menu()		//查询模块
{
	void search_menu_code();
	system("cls");
	cout<<"\n查询"
		<<"\n**************************\n"
		<<"请问你是按以下哪种方式查询?\n"
		<<"1.按学号\n"
		<<"2.按姓名\n"
		<<"0.退出\n"
		<<"**************************\n";
	search_menu_code();
}

void search_menu_code()		//查询菜单选择模块
{	
	void number_search(student *);
	void name_search(student *);
	void input_error();
	char c;
	cout<<"请输入操作代码,并按回车键:";
	cin>>c;

	switch(c)
	{
	case'0':main_menu();break;	
	case'1':number_search(students_point);break;
	case'2':name_search(students_point);break;
	default:
		{
			input_error();
			search_menu_code();
		};break;
	}
}

void number_search(student *x)		//按学号查询
{
	system("cls");
	cout<<"请输入学生学号:";
	string search_number;
	cin>>search_number;
	bool flag=false;
	for(int i=0;i<record_mark;i++)
		if(x[i].number==search_number)
		{
			cout<<"学号:"<<x[i].number<<endl
				<<"姓名:"<<x[i].name<<endl
				<<"班级:"<<x[i].grade<<endl;
			for(int j=0;j<subject_number;j++) cout<<subject_name[j]<<"成绩:"<<x[i].score[j]<<endl;	//输出该同学数据
			flag=true;			
		}
	if(!flag) cout<<"该同学("<<search_number<<")不存在,请检查输入数据.\n";
	cout<<"是否要继续查询?(Y/N)";
	char c;
	cin>>c;
	switch(c)
	{
		case'Y':number_search(x);break;
		case'y':number_search(x);break;
		default:search_menu();break;
	}

}

void name_search(student *x)		//按姓名查询
{
	system("cls");
	cout<<"请输入学生姓名:";
	string search_name;
	cin>>search_name;
	bool flag=false;
	for(int i=0;i<record_mark;i++)
		if(x[i].name==search_name)
		{
			cout<<"学号:"<<x[i].number<<endl
				<<"姓名:"<<x[i].name<<endl
				<<"班级:"<<x[i].grade<<endl;
			for(int j=0;j<subject_number;j++) cout<<subject_name[j]<<"成绩:"<<x[i].score[j]<<endl;
			flag=true;			
		}
	if(!flag) cout<<"该同学("<<search_name<<")不存在,请检查输入数据.\n";
	cout<<"是否要继续查询?(Y/N)";
	char c;
	cin>>c;
	switch(c)
	{
		case'Y':name_search(x);break;
		case'y':name_search(x);break;
		default:search_menu();break;
	}
}

void output(student *x)		//输出模块
{
	system("cls");
	cout<<setiosflags(ios::left)<<setw(20)<<"学号"<<setw(20)<<"姓名"<<setw(15)<<"班级";
	for(int j=0;j<subject_number;j++) cout<<subject_name[j]<<setw(6)<<' ';
	cout<<"\n**********************************************************************\n";
	for(int i=0;i<record_mark;i++)
	{
		cout<<setw(20)<<x[i].number<<setw(20)<<x[i].name<<setw(15)<<x[i].grade;
		for(int j=0;j<subject_number;j++) cout<<setw(10)<<x[i].score[j];
		cout<<endl;
	}
	cout<<"按回车键返回主菜单.";
	fflush(stdin);	//清除输入流,目的是为了不让后面的getchar()函数接收到字符
	getchar();		//等待输入,目的是为了程序在这里停止以便看到输出结果
	main_menu();
}

void tongji_menu()		//统计菜单
{
	void tongji_menu_code();
	system("cls");
	cout<<"统计\n"
		<<"**********************\n"
		<<"请问你想查询:\n"
		<<"1.某人平均分\n"
		<<"2.某科平均分\n"
		<<"3.总体平均分\n"
		<<"0.退出\n"
		<<"**********************\n";
	tongji_menu_code();
}

void tongji_menu_code()		//统计菜单选择模块
{
	void one_everage();
	void one_everage_menu();
	void total_everage(student *);
	void subject_everage_menu();
	void input_error();
	char c;
	cout<<"请输入操作代码,并按回车键:";
	cin>>c;

	switch(c)
	{
	case'0':main_menu();break;	
	case'1':one_everage_menu();break;
	case'2':subject_everage_menu();
	case'3':total_everage(students_point);break;
	default:
		{
			input_error();
			tongji_menu_code();
		};break;
	}
}

void one_everage_menu()		//统计某一位同学
{
	cout<<"请输入要统计的学生学号:";
	string number;
	bool flag=false;
	cin>>number;
	for(int i=0;i<record_mark;i++)
		if(students[i].number==number)
		{
			a=0;
			flag=true;
			for(int j=0;j<subject_number;j++)
			{
				a=a+students[i].score[j];
			}
			a=a/subject_number;
			cout<<students[i].name<<"同学的平均分是:"<<a<<endl;
		}
		if(!flag) cout<<"该同学("<<number<<")不存在,请检查输入数据!\n";
	cout<<"\n是否要继续统计?(Y/N)";
	char c;
	cin>>c;
	switch(c)
	{
		case'Y':one_everage_menu();break;
		case'y':one_everage_menu();break;
		default:tongji_menu();break;
	}
}

void subject_everage_menu()		//统计某一科的菜单
{
	void subject_everage_menu_code(student *x);
	system("cls");
	cout<<"统计\n"
		<<"**********************\n"
		<<"请问你要统计哪一门成绩:\n";
	for(int i=0;i<subject_number;i++)
		cout<<i+1<<'.'<<subject_name[i]<<'\n';
	cout<<"0.退出\n"
		<<"**********************\n";
	subject_everage_menu_code(students_point);
}

void subject_everage_menu_code(student *x)		//统计某一科的菜单选择模块
{
	void input_error();
	cout<<"请输入操作代码,并按回车键:";
	int k;
	cin>>k;
	if(k==0) tongji_menu();
	else if((k<1)||(k>subject_number))
			{
				input_error();
				subject_everage_menu_code(students_point);
			}
			else
			{
				a=0;
				for(int i=0;i<record_mark;i++) a=a+x[i].score[k-1];
				a=a/record_mark;
				cout<<subject_name[k-1]<<"该科的平均分是:"<<a;
			}
	cout<<"\n是否要继续统计?(Y/N)";
	char c;
	cin>>c;
	switch(c)
	{
		case'Y':subject_everage_menu();break;
		case'y':subject_everage_menu();break;
		default:tongji_menu();break;
	}

}

void total_everage(student *x)	//求总体的平均分
{
	a=0;
	for(int i=0;i<record_mark;i++)
		for(int j=0;j<subject_number;j++)
			a=a+x[i].score[j];
	a=a/(record_mark*subject_number);
	cout<<"总体的平均分是:"<<a;
	cout<<"\n按回车键返回上一层菜单.";
	fflush(stdin);
	getchar();
	tongji_menu();
}


void input_error()		//输入错误提示
{
	cout<<"输入代码有误,请重新输入!\n";
}

void exit_program()		//退出程序
{
	void save(student *);
	void delay_time(int);
	save(students_point);
	cout<<"\n感谢你使用本程序,如果你在使用中发现什么问题欢迎反馈到本人邮箱:"
		<<"yxguy@163.com。\n";
	cout<<"\n正在关闭......";
	delay_time(5000);	//5秒倒计时
	exit(0);
}

void save(student *x)		//保存数据,将remark存到remark.dat,学生数据存到save.dat
{
	ofstream outfile1("record.dat",ios::out);
	outfile1<<record_mark;
	outfile1.close();
	ofstream outfile2("save.dat",ios::out);
	for(int i=0;i<record_mark;i++)
	{
		outfile2<<x[i].number<<' '<<x[i].name<<' '<<x[i].grade<<' '<<x[i].score[0]<<' '
			<<x[i].score[1]<<' ';
	}
	outfile2.close();	
}
void load(student *x)		//从remark.dat、save.dat载入数据
{
	void delay_time(int);
	void save(student *);
	ifstream infile1("record.dat",ios::in);
	if(!infile1) 
	{
		cout<<"文件\"record.dat\"已丢失,不能初始化数据,还有问题请联系管理员!\n";
		delay_time(2000);
		save(students_point);
	}
	infile1>>record_mark;
	infile1.close();
	ifstream infile2("save.dat",ios::in);
	if(!infile2) 
	{
		cout<<"文件\"save.dat\"已丢失,不能恢复数据,还有问题请联系管理员!\n";
		save(students_point);
		delay_time(2000);
	}
	for(int i=0;i<record_mark;i++) infile2>>x[i].number>>x[i].name>>x[i].grade>>x[i].score[0]
			>>x[i].score[1];
	infile2.close();
}

void delay_time(int t)
{
	clock_t star;	
	star=clock();
	int temp;
	while (temp<t) temp=clock()-star;
}

⌨️ 快捷键说明

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