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

📄 cstudent.cpp

📁 软件课程设计(1) 是一些非常经典的程序
💻 CPP
字号:
#include "CStudent.h"
#include <fstream.h>
#include <string.h>
#include <windows.h>   //头文件的包含会发生重叠
	
void CStudent::inRecord(int i)
{
   cout<<"输入一个学生的信息:\n";  
   cout<<"编号,姓名,性别,年龄,数学成绩,计算机成绩,英语成绩\n";
   cin>>num>>name>>sex>>age>>mathScore>>computerScore>>EnglishScore;
   ofstream outfile("stu.dat",ios::binary| ios::ate);  //| ios::ate一定要加在后面哦!
   if(!outfile)
	{
		cerr<<"open error!"<<endl;
		abort();
	}
   int sz=sizeof(CStudent);
   outfile.seekp(i*sz);
   outfile.write((const char*)this, sz);
   outfile.close();
}

bool CStudent::searchByNum(int id,int n)
{
	if(id>n) return false;
    ifstream infile("stu.dat",ios::in|ios::binary);
	   if(!infile)
	   {
		cerr<<"open error!"<<endl;
		abort();
	   }
	int sz=sizeof(CStudent);
	infile.seekg(sz*(id-1));  //定位文件指针在第id-1个学生处
    if (id - 1 > long(infile.tellg() / sizeof(*this)))  //如果当前的文件指针还不满足
		return false;             
	infile.read((char*)this, sizeof(*this));   //将磁盘上sizeof(*this)个字节写到this指针
	                                           //指向的当前对象中
	infile.close();
    	return true;
}


bool CStudent::searchByName(char *nam,int n)
{
    ifstream infile("stu.dat",ios::in|ios::binary);
	if(!infile)
	{
		cerr<<"open error!"<<endl;
		abort();
	}
    while(infile.tellg() !=signed(n * sizeof(CStudent))) //从前往后扫描
	{
		infile.read((char*)this, sizeof(CStudent)); //写到当前对象
		if(strcmp(name, nam) == 0)
			return true;
	}
    infile.close();
	return false;	
}


void CStudent::someScore()
{
    float sum=mathScore+computerScore+EnglishScore;
    float ava=sum/3;
	cout<<"总成绩为:  "<<sum<<"    平均成绩为:"<<ava<<endl<<endl;;
}


void CStudent::AboutTotalScore(int n)
{
   ifstream infile("stu.dat",ios::in|ios::binary);
	if(!infile)
	{
		cerr<<"open error!"<<endl;
		abort();
	}
	while(infile.tellg()!=signed(n * sizeof(CStudent)))
	{
		infile.read((char*)this, sizeof(*this));
		if(this->sex == 'm' && this->mathScore+this->computerScore+this->EnglishScore > 270)
			cout << *this;
	}
  infile.close();
}



ostream& operator << (ostream&output,CStudent&s)
{//原本用"  "的,用setw()才好!
   output<<s.num<<"  "<<s.name<<"  "<<s.sex<<"  "<<s.age<<"  "
	     <<s.mathScore<<"  "<<s.computerScore<<"  "<<s.EnglishScore<<endl;
   return output;
}


int main()
{
	CStudent student;
	int N;int id1;char namee[20];
	cout<<"输入学生个数:";
	cin>>N;
	for(int i=0;i<N;i++)
		student.inRecord(i);
	cout<<"请输入要查找的学生的编号:";
	cin>>id1;
    if(student.searchByNum(id1,N))
		cout<<"这个学生的信息为"<<student<<endl;
	else cout<<"不存在这个学生!!!\n";
	cout<<"请输入要查找的学生的姓名:";
	cin>>namee;
    if(student.searchByName(namee,N))
		cout<<"这个学生的信息为"<<student<<endl;
	else cout<<"不存在这个学生!!!\n";
	cout<<"输入一个学生的编号,计算他的成绩:";
		cin>>id1;
	if(student.searchByNum(id1,N))student.someScore();
	else cout<<"不存在这个学生!!!\n";
	cout<<"总成绩大于270分的男同学的信息\n";
	student.AboutTotalScore(N);
	cout<<endl;
    return 0;
}

⌨️ 快捷键说明

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