学生管理系统map实现篇

<pre name="code" class="cpp">#ifndef student_h
#define student_h
#include<string>
#include<iostream>
#include<set>
using namespace std;
class student{
private:
	string name;
	string sex;
	set<string> courseset;
public:
	friend ostream& operator<<(ostream& cout,student &s);             
	student& operator=(const student& s);
	student(){};
	student(string n,string s):name(n),sex(s){};
	void Addcourse();
	void Getcourse();
};
#endif

#include"student.h"
ostream& operator<<(ostream& cout,student &s){
	cout<<s.name<<"\t"<<s.sex<<endl;
	return cout;
}
student& student::operator=(const student& s){
	this->name=s.name;
	this->sex=s.sex;
	return *this;
}
void student::Addcourse(){
	char v;
	do{
	cout<<"输入所选课程名称"<<endl;
	string name;//double grade;
	//Course cr(name,grade);
	cin>>name;//>>grade;
	courseset.insert(name);
	cout<<"是否继续选课?(y|Y)";
	cin>>v;
	}while(v=='y'||v=='Y');
}
void student::Getcourse(){
	set<string>::iterator p;
	p=courseset.begin();
	while(p!=courseset.end()){
		cout<<*p<<"\t";
		p++;
	}
	cout<<endl;
}

#include"student.h"
#include<iostream>
#include<map>
#include<string>
#include<fstream>
using namespace std;
map<string,student> stumap;
map<string,student>::iterator p;
//set<Course> stuset;
void main(){
	void Add_student();
	void Delete_student();
	void display();
	void Find_student();
	void Change_student();
	void Write_to_File();
	int n;
	while(true){
	cout<<"--------------------------学生管理系统--------------------------"<<endl
		<<"                --------------(1)-------录入学生"<<endl
		<<"                --------------(2)-------打印输出"<<endl
		<<"                --------------(3)-------修改信息"<<endl
		<<"                --------------(4)-------删除信息"<<endl
		<<"                --------------(5)-------查找学生"<<endl
		<<"                --------------(6)-------写入文件"<<endl
		<<"                --------------(7)-------退出系统"<<endl
		<<"输入您要进行的操作"<<endl;
	cin>>n;
	switch(n){
		case 1:Add_student();break;
		case 2:display();break;
		case 3:Change_student();break;
		case 4:Delete_student();break;
		case 5:Find_student();break;
		case 6:Write_to_File();break;
		case 7:exit(0);
	}					
}
}
void Add_student(){
	string n,s;
	 string id;
	 char choose;
	for(int i=1;;i++){
		cout<<"input id,name,sex:";
		cin>>id>>n>>s;
		if(id=="0")
			break;		
		student stud(n,s);
		stud.Addcourse();
		stumap.insert(make_pair(id,stud));
		cout<<endl;
		if(i%3==0){
			cout<<"是否继续录入学生信息?(y|Y)";
			cin>>choose;
			if(choose=='y'||choose=='Y')
			{system("cls");continue;}
			else
				break;
		}
	}
}

void Delete_student(){
	cout<<"请输入需要删除的学生学号"<<endl;
	string del_id;
	char choose;
	cin>>del_id;
	cout <<del_id<<"号学生的基本信息为:" <<endl<< stumap.find(del_id)->second << endl;
	cout<<"确定删除?(y||Y)"<<endl;
	cin>>choose;
	if(choose=='y'||choose=='Y')
			stumap.erase(stumap.find(del_id));        
}
void display(){
	cout<<"下面是"<<stumap.size()<<"个学生的信息"<<endl;
	for(p=stumap.begin();p!=stumap.end();p++){
		cout<<p->first<<"号学生信息:"<<endl<<"姓名 性别:"<<p->second;
		cout<<"所选课程:"<<endl;
		p->second.Getcourse();
		cout<<endl;
	}
}
void Find_student(){
	cout<<"输入需要查找学生的学号:"<<endl;
	string id;
	bool find=false;
	cin>>id;
	for(p=stumap.begin();p!=stumap.end();p++)
		if(p->first==id){
			cout<<"该学生信息为:"<<p->second;
			cout<<"所选课程:"<<endl;
			p->second.Getcourse();
			cout<<endl;
			find=true;}
		if(!find)
			cout<<"没有该学生信息!"<<endl;
}
void Change_student(){
	string id,name,sex;
	cout<<"请输入需要修改信息学生的学号";
	cin>>id;
	p=stumap.find(id);
	if(p==stumap.end()){
		cout<<"抱歉,没有该学生!"<<endl;
		return;
	}
	cout<<"请输入学生信息:";
	cin>>name>>sex;
	student stu(name,sex);
	stu.Addcourse();
	stumap[id]=stu;
}
void Write_to_File(){
	map<string,student> vm;
	student stu;
	string num;
	ofstream out("22.txt",ios::binary);  
	if (!out.is_open())  {   
	cout << "File is open fail!" << endl;
	return;
    }   
	p = stumap.begin();   
	while (p != stumap.end())  {   
	out.write((char*)&p->first,sizeof(string));   
	out.write((char*)&p->second,sizeof(student));   
	p++;  
	}   
	out.close(); 
	ifstream in("22.txt",ios::binary);  
	if (!in.is_open())  {   
	cout << "File is open fail!" << endl;
	return;
    }   
	while (!in.eof())  {   
	in.read((char*)&num,sizeof(string));   
	in.read((char*)&stu,sizeof(student));   
	vm.insert(make_pair(num,stu));  
	}   
	in.close();
	for(p=vm.begin();p!=vm.end();p++){
		cout<<p->first<<"号学生信息:"<<endl<<"姓名 性别:"<<p->second;
		cout<<"所选课程:"<<endl;
		p->second.Getcourse();
		cout<<endl;
	}
}


 

还有文件的输入输出未实现...............................................................未完待续.... 2016/04/21 19:12

完成文件的输入输出,并在学生类里添加set<string>型课程信息,但还不知道如何实现set<Course>(Course类中有课程名,分数信息),并实现按course分数进行排序,选择等操作                               ................................................................未完待续.....2016/04/22  18:05

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值