学生管理系统

system.h

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>	
#include<conio.h>		//控制台输入输出   getch
#include<iomanip>		//格式化输入、输出    stew
#include<stdio.h>		
#include<string.h>		
#include<stdlib.h>		
#include<fstream>     //重载运算符
using namespace std;

class student			//学生类的定义
{
private:                 //私有成员
	char name[20];
	char sex[6];
	int number;
	int score[7];
	int total;
	int average;
	int last;
public:                  //公有成员
	student();
	void add();
	void output();
	void search();
	void modify();
	void deleted();
	void save();
	void load();
	student & operator=(student & T);							//重载"="运算符
	friend istream & operator >> (istream & scin, student &s1);	//重载">>"运算符
	friend ostream & operator << (ostream & sout, student &s2);	//重载"<<"运算符
};

system.cpp

#include "system.h"

student stu[250];
int n = 0;

void student::add()		//类外定义录入学生信息函数
{
	system("cls");   //调用系统命令cls,清除屏幕
	char flag = 'Y';		//设置输入判断字符
	while (toupper(flag) == 'Y')//toupper的功能是将小写英文字母转换为对应的大写字母,否则返回原来的值
	{
		cout << endl << "====>> 请输入学生成绩 <<====" << endl;
		cin >> stu[n];	//重载后的输入运算,按照定义可以输入对象的各个成员,同时保留输入的原有功能
		n++;
		cout << "请问要继续录入吗?(是请输入y,否请输入n)";
		cin >> flag;
		if (toupper(flag) != 'Y')
		{
			if (toupper(flag) == 'N')
			{
				break;
			}
			else
			{
				cout << "输入错误,请重新输入:";
				cin >> flag;
			}
		}
	}
}

void student::output()//类外定义输出学生信息函数
{
	if (n != 0)
	{
		cout << "---------------------------------------------------------------------------------\n";
		cout << "学号      姓名   性别   语文   英语   数学   物理   化学   生物   平时成绩  总评 \n";
		cout << "---------------------------------------------------------------------------------\n";
		for (int t = 0; t<n; t++)
		{
			cout << stu[t];//重载后的输出运算,按照定义可以输出对象的各个成员,同时保留输出的原有功能
		}
	}
	_getch();
}

void student::search()//类外定义查找学生数据函数
{
	system("cls");
	bool i = 0;
	char n1[20];
	student temp;
	cout << "\n====>> 查找学生成绩 <<====\n";
	cout << "请输入您要查找的学生姓名:";
	cin >> n1;
	for (int j = 0; j<n; j++)
	{
		if (strcmp(stu[j].name, n1) == 0)//字符串比较函数
		{
			temp = stu[j];
			i = 1;
		}
	}
	if (i == 0)
		cout << "=====>提示:对不起,无法找到该学生的信息!" << endl;
	else
	{
		cout << "--------------------------------------------------------------------------\n";
		cout << "学号      姓名   性别  语文  英语  数学  物理  化学  生物  平时成绩 总评  \n";
		cout << "--------------------------------------------------------------------------\n";
		cout << temp.number << setw(7) << temp.name << setw(7) << temp.sex << setw(7) << temp.score[0]
			<< setw(7) << temp.score[1] << setw(7) << temp.score[2] << setw(7) << temp.score[3] << setw(7) << temp.score[4]
			<< setw(7) << temp.score[5] << setw(7) << temp.score[6] << setw(7) << temp.last << endl;
	}
	_getch();
}

void student::modify()//类外定义修改学生信息函数
{
	system("cls");
	bool j = 0;
	int t;
	char n2[50];
	cout << "\n====>> 修改学生成绩 <<====\n";
	cout << "请输入您要修改的学生姓名:";
	cin >> n2;
	for (int j = 0; j<n; j++)
	{
		if (strcmp(stu[j].name, n2) == 0)//字符串比较函数,对比输入的字符串是否和已有的数据相同
		{
			t = j;
			j = 1;
		}
	}
	if (j == 0)
		cout << "=====>提示:对不起,无该学生的成绩……" << endl;
	else
	{
		cout << "----------该学生的信息----------" << endl;
		cout << "--------------------------------------------------------------------------\n";
		cout << "学号      姓名   性别  语文  英语  数学  物理  化学  生物  平时成绩 总评  \n";
		cout << "--------------------------------------------------------------------------\n";
		cout << stu[t].number << setw(7) << stu[t].name << setw(7) << stu[t].sex << setw(7) << stu[t].score[0]
			<< setw(7) << stu[t].score[1] << setw(7) << stu[t].score[2] << setw(7) << stu[t].score[3] << setw(7) << stu[t].score[4]
			<< setw(7) << stu[t].score[5] << setw(7) << stu[t].score[6] << setw(7) << stu[t].last << endl;
		cout << "请输入修改后的学生学号:";//重新输入所需要修改的数据
		cin >> stu[t].number;
		cout << "请输入修改后的学生姓名:";
		cin >> stu[t].name;
		cout << "请输入修改后的学生性别:";
		cin >> stu[t].sex;
		cout << "请输入修改后的语文成绩:";
		cin >> stu[t].score[0];
		cout << "请输入修改后的英语成绩:";
		cin >> stu[t].score[1];
		cout << "请输入修改后的数学成绩:";
		cin >> stu[t].score[2];
		cout << "请输入修改后的物理成绩:";
		cin >> stu[t].score[3];
		cout << "请输入修改后的化学成绩:";
		cin >> stu[t].score[4];
		cout << "请输入修改后的生物成绩:";
		cin >> stu[t].score[5];
		cout << "请输入修改后的平时成绩:";
		cin >> stu[t].score[6];
		stu[t].total = stu[t].score[0] + stu[t].score[1] + stu[t].score[2] + stu[t].score[3] + stu[t].score[4] + stu[t].score[5];
		stu[t].average = stu[t].total / 6;
		stu[t].last = (int)(stu[t].score[6] * 0.3 + stu[t].average*0.7);
		cout << "修改成功!" << endl;
	}
	_getch();
}

void student::deleted()//类外定义删除学生信息函数
{
	system("cls");
	char n3[20];
	bool k = 0;
	char c;
	do{
		cout << "\n====>> 删除学生成绩 <<====\n";
		cout << "请输入您要删除的学生姓名:";//根据姓名删除学生,当然也可以设置为根据学号删除学生
		cin >> n3;
		for (int i = 0; i<n; i++)
		{
			if (strcmp(n3, stu[i].name) == 0)//查找对应的学生
			{
				cout << "----------该学生的信息----------" << endl;
				cout << "--------------------------------------------------------------------------\n";
				cout << "学号      姓名   性别  语文  英语  数学  物理  化学  生物  平时成绩 总评\n";
				cout << "--------------------------------------------------------------------------\n";
				cout << stu[i].number << setw(7) << stu[i].name << setw(7) << stu[i].sex << setw(7) << stu[i].score[0]
					<< setw(7) << stu[i].score[1] << setw(7) << stu[i].score[2] << setw(7) << stu[i].score[3] << setw(7) << stu[i].score[4]
					<< setw(7) << stu[i].score[5] << setw(7) << stu[i].score[6] << setw(7) << stu[i].last << endl;
				k = 1;
				n--;
				do{
					stu[i] = stu[i + 1];//直接覆盖数据
					i++;
				} while (i <= n);
			}
		}
		if (k == 0)
			cout << "====>提示:对不起,无法找到该学生……";
		cout << "删除成功!" << endl;
		cout << "请问要继续删除吗?(是请输入y,否请输入n)" << endl;
		cin >> c;
		if (toupper(c) != 'Y'&&toupper(c) != 'N')
		{
			cout << "输入错误!您只能输入y或n" << endl;
			cin >> c;
		}
	} while (toupper(c) == 'Y');
	_getch();
}

void student::save()//类外定义保存函数
{
	char filename1[20];
	cout << "\n====>>请输入文件名:";
	cin >> filename1;			//输入自定义文件名
	ofstream fout(filename1, ios::app);//fout是向文件里写入数据
	if (!fout)cout << "====>>文件不能打开!<<====\n" << endl;
	else
	{
		for (int i = 0; i<n; i++)
			fout << ' ' << stu[i].number << ' ' << stu[i].name << ' ' << stu[i].sex << ' '
			<< stu[i].score[0] << ' ' << stu[i].score[1] << ' ' << stu[i].score[2] << ' ' << stu[i].score[3] << ' ' << stu[i].score[4] << ' '
			<< stu[i].score[5] << ' ' << stu[i].score[6] << ' ' << stu[i].total << ' ' << stu[i].average << ' ' << stu[i].last;
		cout << "保存成功!" << endl;
	}
	fout.close();
	_getch();
}

void student::load()//类外定义读取函数
{
	char filename2[20];
	cout << "请输入您要读取的文件名:";
	cin >> filename2;
	ifstream fin(filename2, ios::in);//fin是从文件里读数据
	if (!fin)cout << "文件不能打开!" << endl;
	else
	{
		for (int i = 0; i<n; i++)
		{
			if (fin.eof())break;
			fin >> stu[i].number >> stu[i].name >> stu[i].sex
				>> stu[i].score[0] >> stu[i].score[1] >> stu[i].score[2] >> stu[i].score[3] >> stu[i].score[4]
				>> stu[i].score[5] >> stu[i].score[6] >> stu[i].total >> stu[i].average >> stu[i].last;
		}
		cout << "文件已读取成功!" << endl;
	}
	fin.close();
	_getch();
}

student & student::operator=(student & T)//重载=运算定义
{
	strcpy(name, T.name);
	strcpy(sex, T.sex);
	number = T.number;
	for (int i = 0; i<7; i++)
		score[i] = T.score[i];
	total = T.total;
	average = T.average;
	last = T.last;
	return (*this);
}
ostream & operator << (ostream & scout, student &s2)//重载流插入运算符<<运算定义      //数据读入到对象中    //成员具有可交换性时,重载为友元函数
{
	cout << setw(5) << s2.number << setw(7) << s2.name << setw(7) << s2.sex << setw(7) << s2.score[0]
		<< setw(7) << s2.score[1] << setw(7) << s2.score[2] << setw(7) << s2.score[3] << setw(7) << s2.score[4]
		<< setw(7) << s2.score[5] << setw(7) << s2.score[6] << setw(7) << s2.last << '\n';
	return scout;
}
istream & operator >> (istream & scin, student &s1)//重载流提取运算符>>运算定义       //从对象中将数据读出
{
	cout << '\n';
	cout << "学号:";
	scin >> s1.number;
	cout << "姓名:";
	scin >> s1.name;
	cout << "性别:";
	scin >> s1.sex;
	cout << "语文:";
	scin >> s1.score[0];
	cout << "英语:";
	scin >> s1.score[1];
	cout << "数学:";
	scin >> s1.score[2];
	cout << "物理:";
	scin >> s1.score[3];
	cout << "化学:";
	scin >> s1.score[4];
	cout << "生物:";
	scin >> s1.score[5];
	cout << "平时成绩:";
	scin >> s1.score[6];
	s1.total = s1.score[0] + s1.score[1] + s1.score[2] + s1.score[3] + s1.score[4] + s1.score[5];
	s1.average = s1.total / 6;
	s1.last = (int)(s1.score[6] * 0.3 + s1.average*0.7);
	return scin;
}

student::student()//
{
	strcpy(name, " ");
	strcpy(sex, " ");
	number = 0;
	for (int i = 0; i<7; i++)score[i] = 0;
	total = 0;
	average = 0;
	last = 0;
}

void menu()//系统菜单
{

	cout << "*********************欢 迎 登 录 学 生 成 绩 管 理 系 统********************" << endl;
	cout << "****************★  ☆          1.录入学生成绩        ☆  ★****************" << endl;
	cout << "****************★  ☆          2.浏览学生成绩        ☆  ★****************" << endl;
	cout << "****************★  ☆          3.查询学生成绩        ☆  ★****************" << endl;
	cout << "****************★  ☆          4.修改学生成绩        ☆  ★****************" << endl;
	cout << "****************★  ☆          5.删除学生成绩        ☆  ★****************" << endl;
	cout << "****************★  ☆          6.数据存入文件        ☆  ★****************" << endl;
	cout << "****************★  ☆          7.文件读出数据        ☆  ★****************" << endl;
	cout << "****************★  ☆          0.安全退出系统        ☆  ★****************" << endl;
	cout << "\n\n\t请输入一位数字(0-7)选择您所需的功能,并按回车键确认:";
}

test.cpp

#include "system.h"


int main()
{
	int choose;
	student s;
	do{
		menu();
		cin >> choose;
		switch (choose)
		{
		case 1:
			s.add(); 
			break;
		case 2:
			s.output(); 
			break;
		case 3:
			s.search(); 
			break;
		case 4:
			s.modify(); 
			break;
		case 5:
			s.deleted(); 
			break;
		case 6:
			s.save(); 
			break;
		case 7:
			s.load(); 
			break;
		default: 
			break;
		}
	} while (choose != 0);
}

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值