吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 889|回复: 2
收起左侧

[学习记录] 【考研记录】记录一下学习考研的专业课C++【Day3】

[复制链接]
asaSKTY 发表于 2022-7-20 08:13
[C++] 纯文本查看 复制代码
// 查找学生
Student Student::findBySno(int sno)throw(RuntimeException){

	static Student sts[5];  //findBySno是一个静态函数, 为什么这个sts变量不加static  出现以下错误。另外当整个程序结束也就是main 执行完return 0; 也会出现下面的错误。求大佬看看
/*Microsoft Visual Studio
ce.exe中的0x79e1ad7a(msvcp100d.d0处有未经处理的异常:0x0000005:
读取位置0×015b8644时发生访问冲突  */
	readFromFile("E:/Users/Administrator/Documents/Visual Studio 2010/Projects/ce/ce/STU1.DAT",sts);
	for(int i=0;i<5;i++){

		if(sts[i].getSno() == sno)
			return sts[i];



	}

完整代码
[mw_shl_code=cpp,true]
#include <iostream>
#include <string>
#include <fstream>
using namespace std;class RuntimeException{

public:
	int code;
	string msg;

	RuntimeException(){

	}
	RuntimeException(int code,string msg){
		this->code = code;
		this->msg=msg;
	}



	RuntimeException& error() {
		this->code = -9999;
		this->msg="未知异常!";
		return *this;
	}
	RuntimeException& ok(){

		this->code = 200;
		this->msg="成功!";
		return *this;
	}
	int getCode(){
		return this->code;
	}
	string getMsg(){
		return this->msg;
	}
};
class Student{

private:
	// 学号
	int sno;
	// 姓名
	string name;
	// 3门课的成绩
	float scores[3];
	// 平均成绩
	float avgScore;
public:
	// 总学生数
	static int count;
	// 无参构造
	Student(){
		count++;
	}

	// 计算平均成绩
	void calculateAvgScore()
	{
		float sum =0.;
		for(int i=0;i<3;i++){
			sum+=scores[i];
		}
		this->avgScore =  sum / 3;

	}
	// 排序
	static void sort(Student sts[]);
	// 查找学生
	static Student findBySno(int sno);
	// 获取学号
	int getSno(){
		return this->sno;
	}
	// 获取姓名
	string getName(){
		return this->name;
	}
	// 获取成绩
	float* getScores(){
		return this->scores;
	}
	// 获取平均成绩
	float getAvgScore(){
		return this->avgScore;
	}
	// set学号
	void setSno(int sno){
		this->sno = sno;
	}
	// set姓名
	void setName(string name){
		this->name = name;
	}
	// set成绩
	void setScores(float scores[]){

		for(int i=0;i<3;i++){
			this->scores[i] = scores[i];
		}

	}    

	friend Student& operator<<(ostream &os,Student &stu){
		os<<stu.sno<<"  "<<stu.name<<"  ";

		for(int i =0;i<3;i++){
			os<<stu.scores[i]<<"  ";
		}
		os<<stu.avgScore<<endl;

		return stu;
	}


};
// 定义
int Student::count = 0;
void readFromFile(string fileName,Student *sts){

	fstream fs;
	fs.open(fileName,ios::in|ios::out|ios::binary);
	for(int i = 0;i<Student::count;i++){
		fs.read((char*)&sts[i],sizeof sts[i]);
		sts[i].calculateAvgScore();
	}
	fs.close();
}
void writeToFile(string fileName,Student sts[]){

	fstream fs;
	fs.open(fileName,ios::in|ios::out|ios::binary|ios::trunc);
	for(int i = 0;i<Student::count;i++){
		fs.write((char*)&sts[i],sizeof sts[i]);
	}
	fs.close();

}
// 排序
void Student::sort(Student sts[]){
	int flag;
	for(int i = 0;i<Student::count-1;i++){
		flag = 1;
		for(int j= 0;j<Student::count-1-i;j++){
			Student tmp;
			if(sts[j].avgScore<sts[j+1].avgScore){
				tmp  = sts[j];
				sts[j] = sts[j+1];
				sts[j+1] =tmp;
				flag=0;

			}
			Student::count--;
			if(flag)
				return;

		}

	}

}
// 查找学生
Student Student::findBySno(int sno)throw(RuntimeException){

	static Student sts[5];

	readFromFile("E:/Users/Administrator/Documents/Visual Studio 2010/Projects/ce/ce/STU1.DAT",sts);
	for(int i=0;i<5;i++){

		if(sts[i].getSno() == sno)
			return sts[i];



	}

	throw RuntimeException(1000,"没找到该学号的学生!");




}
/*
2.编写程序完成如下功能:
(1)输入5个学生的信息:学号(6位整数)、姓名(6个字符)、3门课的成绩(3位整数1位小数)。
计算每个学生的平均成绩(3位整数2位小数),将所有数据写入文件STU1.DAT;
(2)从STU1.DAT文件中读入学生数据,按平均成绩从高到低排序后写入文件STU2.DAT;
(3)按照输入学生的学号,在STU2.DAT文件中查找该学生,找到以后输出该学生的所有数据,如果文件中没有输入的学号,给出相应的提示信息.

*/

int main(){
	int n = 5;
	Student s[5];

	//(1)
#if 0 
	for(int i = 0;i<n;i++){
		int sno;
		string name;
		float sc[3];
		cin>>sno>>name>>sc[0]>>sc[1]>>sc[2];
		s[i].setSno(sno);
		s[i].setName(name);
		s[i].setScores(sc);
		Student(*(s+i)).calculateAvgScore();

	}
 writeToFile("E:/Users/Administrator/Documents/Visual Studio 2010/Projects/ce/ce/STU1.DAT",s);
#endif
	
	//(2)
#if 0
	readFromFile("E:/Users/Administrator/Documents/Visual Studio 2010/Projects/ce/ce/STU1.DAT",s);
	Student::sort(s);
	writeToFile("E:/Users/Administrator/Documents/Visual Studio 2010/Projects/ce/ce/STU2.DAT",s);
#endif
	//(3)
	/*

	2001 小米 90 100 120
	2002 小黑 190 100 120
	2003 米 90 110 120
	2004 X米 90 100 120
	2005 X小米 90 100 120
	*/
	try{
		Student res  = 	Student::findBySno(2001);
		cout<<res;
	}catch(RuntimeException& ex){
		cout<<"错误原因->"<<ex.getMsg();
	}
	return 0;
}


        throw RuntimeException(1000,"没找到该学号的学生!");




}[/mw_shl_code]

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

慕忆晨 发表于 2022-7-20 08:24
帮顶帮顶
 楼主| asaSKTY 发表于 2022-7-20 14:56
// 查找学生
Student Student::findBySno(int sno)throw(RuntimeException){

    static Student sts[5];  //findBySno是一个静态函数, 为什么这个sts变量不加static  出现以下错误。另外当整个程序结束也就是main 执行完return 0; 也会出现下面的错误。求大佬看看
/*Microsoft Visual Studio
ce.exe中的0x79e1ad7a(msvcp100d.d0处有未经处理的异常:0x0000005:
读取位置0×015b8644时发生访问冲突  */
    readFromFile("E:/Users/Administrator/Documents/Visual Studio 2010/Projects/ce/ce/STU1.DAT",sts);
    for(int i=0;i<5;i++){

        if(sts[i].getSno() == sno)
            return sts[i];



    }
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表