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

📄 新建 文本文档.txt

📁 一份功能详细的图书馆管理系统的软件(包含各种头文件和CPP文件,以及相关的文档).
💻 TXT
字号:
#include<iostream>
#include<cstdlib>
#include<vector>
#include<string>
#include<iterator>
#include<fstream>
#include<cstdlib>

#define NUM_SUBJECT 5

using namespace std;


struct Record {	
		string number;	// 学号(中间不能有空格)	
		string name;	// 姓名(中间可以有空格)	
		string gender;	// 性别(中间无空格)	
		float score[NUM_SUBJECT];	// 分别为该学生5门课的成绩	
		float sum;		// 总分	
		float average;		// 平均分	
		int index;			// 名次	
		bool toBeDeleted;		// 做是否删除的标记	
		Record() {toBeDeleted = false;}
		};

class RecordVec : public vector<Record*>
{	
public:	
	void clear();	
	iterator erase(iterator where)
	{ 
	delete *where;
	vector<Record*>::erase(where);
	return where;	
	}
	~RecordVec();
};

void RecordVec::clear()
{
	iterator p=begin(),s=end();

	for(; p!=s; p++)
		delete *p;

	vector<Record*>::clear();
}

RecordVec::~RecordVec()
{	
	clear();
}


class StuInfoVec
{
protected:
	RecordVec recVec;

public:
	typedef vector<Record*>::iterator Iterator;


	virtual void addRecord(Record* rec);	//添加新的学生的记录


	virtual int removePerform();	//删除有"待删除"标志的记录

	virtual Iterator findRecord(const string& patten, int type, Iterator form)	//寻找一个学生记录
	{
		Iterator p;
		int i=0;

		switch(type)
		{
		case 0:	for(p=form;p!=recVec.end();p++)
				{
					if(patten==(*p)->number) return p;
				}
				break;
		case 1:	for(p=form;p!=recVec.end();p++)
				{
					if(patten==(*p)->name) return p;
				}
				break;
		case 2:	i=atoi(patten.c_str());
				for(p=form;p!=recVec.end();p++)
				{
					if(i==(*p)->index) return p;
				}
		default:break;
		}
		return 0;
	}

	//virtual void saveRecords(ostream& os);	//将学生信息保存到输出流中

	//virtual int loadRecords(istream& in);//从输入流中读入数据,并追加到当前学生信息记录的末尾

	virtual ~StuInfoVec(){	recVec.clear(); }


	const int size() const {return recVec.size();}//获得记录的学生数量

	const bool empty() const {return recVec.empty();}//是否无学生信息

	virtual void clear(){recVec.clear();}//清空学生信息

	Iterator first(){return recVec.begin();}//获得第一条记录

	Iterator pastEnd(){return recVec.end();}//获得超过最后一条记录之后的一个迭代器

};



void StuInfoVec::addRecord(Record* rec)	//添加新的学生的记录
{
    rec->sum=0;
    
    for(int i=0;i<NUM_SUBJECT;i++)
        rec->sum+=rec->score[i];
        
    rec->average=rec->sum/NUM_SUBJECT;
    
	recVec.push_back(rec); 
}

int StuInfoVec::removePerform()	//删除有"待删除"标志的记录
{
	Iterator p,r,itEnd;

	int total=0,i=0;

	itEnd=recVec.end();

	for(p=recVec.begin(); p!=itEnd; p++)
	{
		if((*p)->toBeDeleted==true) {
										recVec.erase(p);
										total++;
										for(r=p;r!=itEnd;r++)
										(*r)->index--;
									}
	}
	return total;
}

class StuInfoManager: public StuInfoVec
{  
protected:
	bool isModified;	//学生信息是否已被修改还未保存
	int toRemvNodes;	//做了删除标记的记录数

public:
//	static char* subject[NUM_SUBJECT];

public:
	StuInfoManager(){	
						toRemvNodes=0;	
						isModified=false; 
					}

//	virtual ~StuInfoManager();
	
	//开始成绩
//	virtual void start();
	
	//菜单处理函数管理程序的用户界面操作
//	virtual void handleMenu();	
	//显示记录
//	virtual void displayRecords();	
	//查询记录
	virtual void queryRecord()	
	{        
        Iterator tmp=recVec.begin(),qrr;
		string stmp;
		cout<<"choose the query condition: "<<endl;
		cout<<"1. [n]umber"<<endl<<"2. n[a]me"<<endl<<"3. [i]ndex"<<endl;
		switch(menuSelect())
		{
        case 'n':	cout<<"Enter the number:";
					cin>>stmp;
					
                    while(tmp!=recVec.end())
					{
						if((qrr=findRecord(stmp, 0, tmp))!=0) 
                        {
                                                //处理查询 
                            break;
                        }
					}
					break; 
					
   		case 'a':	cout<<"Enter the name:";
					cin>>stmp;

					while(tmp!=recVec.end())
					{
						if((qrr=findRecord(stmp, 1, tmp))!=0) 
                        {
                                                //处理查询 
                            break;
                        }
					}
					break;
   		case 'i':	cout<<"Enter the number";
					cin>>stmp;

					while(tmp!=recVec.end())
					{
						if((qrr=findRecord(stmp, 2, tmp))!=0) 
                        {
                                                //处理查询 
                            break;
                        }
					}
					break;
        default:    cout<<"不是有效的选项"<<endl;
        }
	}
	//添加记录
//	virtual void addRecord(AddNewdlg& dlg)


	//删除记录
	virtual void removeRecord()
	{
		removePerform();
		toRemvNodes=0;
		isModified=true;
	}
	//标记删除记录
	virtual void removeNote( Record& rc)
	{	
		rc.toBeDeleted=true;
		toRemvNodes++;
	}
	//修改记录
//	virtual void modifyRecord(Record *tmp,Record*tmp2)
//	{
//	}
	//记录排序
//	virtual void sortRecords();	
	//保存记录
	virtual void saveRecords(string filename)
	{
	    
	    if(isModified!=0) { 
                                MessageBox(NULL,"Record unchanged,needn't save","Warning",MB_OK);
                                return;  
                           }
                           
        ofstream out;                   
		out.open(filename.c_str(),ios::out);
		if(!out) {
				      MessageBox(NULL,"can't open file","Warning",MB_OK);
				      return;
			}
     	Iterator tmp,end;
        tmp=recVec.begin();
        end=recVec.end();  	 
             	
		while(tmp!=end)
		{
            out<<(*tmp)->number<<' '<<(*tmp)->name<<' '<<(*tmp)->gender<<' '<<(*tmp)->score[0]<<' '<<(*tmp)->score[1]<<' '<<(*tmp)->score[2]<<' '<<(*tmp)->score[3]<<' '<<(*tmp)->score[4];
            out<<'\n';
            tmp++;
        }
        MessageBox(NULL,"save success","Warning",MB_OK);
        isModified=false;
		out.close();
	}
	
//	读取记录
	virtual void loadRecords(string filename)
	{
	  	ifstream in;
	    
		in.open(filename.c_str());
  
		if(!in) {
		              MessageBox(NULL,"can't open file","Warning",MB_OK);
       				  return;
			     }  

        Record *tmp;
        char s;
        
		while(!in.eof())
		{
            tmp=new Record;
            in>>tmp->number>>tmp->name>>tmp->gender>>tmp->score[0]>>tmp->score[1]>>tmp->score[2]>>tmp->score[3]>>tmp->score[4];
            addRecord(tmp);
            cout<<tmp->name;
            in>>s;
        }
        isModified=true;
		in.close();
	}	
	//结束程序
//	virtual void quit();
	
	//清空当前记录信息
	virtual void clear()
   {
      StuInfoVec::clear();
   }	
	//菜单选择函数
	
	char menuSelect()
	{
		char select=-1;
		while(select<'A'||(select>'Z'&&select<'a')||select>'z')
		{
			cout<<"Please Select: ";
			cin>>select;
		}

		if(select>'A'&&select<'Z') select+=32;

		return select;
	}
	//显示表头
//	void dispTable();	
	//显示一条记录的信息
//	void dispRecord();	
	//找出给定总分在所有记录中的名次
	int getIndex(float sum)
	{
	    Iterator p,s;
	    s=recVec.end();

		for(p=recVec.begin();p!=s;p++)
		{
		    if(sum==(*p)->sum) return (*p)->index;
		}
		return 0;
	 }
};

int main()
{

       StuInfoManager v;
       Record a;
       a.name="yangzhao";
       a.number="13051266";
       a.gender="male";
       
       a.score[0]=a.score[2]=a.score[1]=a.score[3]=a.score[4]=60;
       
       v.addRecord(&a);
       v.addRecord(&a);
       v.addRecord(&a);
       
       v.saveRecords("a.txt");

       v.clear();       
       cout<<v.size()<<endl;
       
       v.loadRecords("a.txt");
       
       system("pause");
       cout<<endl<<v.size();
       
       system("pause");
       
       return 0;
}

⌨️ 快捷键说明

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