C++単語のソースコードを簡単に暗記

16216 ワード

本来は1月20日以降に提出されているのでグラフィックインターフェースにしようと思っていたのですが、先生が急に締め切りを1月初めに繰り上げて・・・仕事を急ぐためにConsoleと書くしかありませんでしたが、復習する科目はまだたくさんあります><
すべてのソースコードとレポートは一晩でできたので、生きてみましょう...ソースコードとレポートは2つの異なるブログに分けて送りましょう.そうしないと混乱します.
辞書ライブラリは事前に処理されたテキストファイル(元のテキストはネットからダウンロードされたもの)で、すべて「英語中国語の意味」のフォーマットで、9000本以上あるので、私は貼りません.
次はソースコードです.
Main.cpp
/*
*
*Author: lwfcgz
*Student ID: it is secret, haha~~
*Date: 2012-12-27
*Environment: Microsoft Visual Studio 2008
*
*/

#include<iostream>
#include<string>
#include<vector>
#include "DataBase.h"
#include "WordNode.h"
#include "MyFrame.h"

using namespace std;

//   
int main(){
	//        
	MyFrame frame;
	//                 
	frame.initialize();	
	return 0;
}

WordNode.h
#ifndef WORDNODE_H
#define WORDNODE_H

#include<iostream>
#include<string>
#include<vector>

using namespace std;

class WordNode{
public:
	//       
	WordNode();
	//                
	WordNode(string english, string chinese);	
	//      
	string getEnglish();
	//      
	string getChinese();
	//        
	void setEnglish(string english);
	//        
	void setChinese(string chinese);
private:
	//    
	string english;
	//       
	string chinese;
};

#endif

WordNode.cpp
#include<iostream>
#include<string>
#include<vector>
#include "WordNode.h"

using namespace std;

//       
WordNode::WordNode(){	
}

//                
WordNode::WordNode(string english, string chinese){
	this->english=english;
	this->chinese=chinese;
}

//      
string WordNode::getEnglish(){
	return this->english;
}

//      
string WordNode::getChinese(){
	return this->chinese;
}

//        
void WordNode::setEnglish(string english){
	this->english=english;
}

//        
void WordNode::setChinese(string chinese){
	this->chinese=chinese;
}

DataBase.h
#ifndef DATABASE_H
#define DATABASE_H

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include "WordNode.h"

using namespace std;

//          
class DataBase{
public:
	//      
	DataBase();
	//        
	int getDicSize();
	//        
	bool isEmpty();
	//     i   ,i       
	WordNode getWordNode(int i);
	//   i WordNode  ,         
	int setWordNode(int i,WordNode newWordNode);
	//       
	int addWordNode(WordNode wordNode);
	//   i WordNode  ,         
	int deleteWordNode(int i);
	//             ,        
	int binarySearch(string word);	
	//             
	void sortWords();	

private:
	//    ,       WordNode   
	vector<WordNode> words;
	WordNode wordNode;	
};

#endif

DataBase.cpp
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<fstream>
#include "DataBase.h"
#include "WordNode.h"
#include "myless.cpp"

using namespace std;

//      
DataBase::DataBase(){
	string english;
	string chinese;
	//      
	ifstream file("dic.txt");
	while(file>>english>>chinese){
		this->wordNode.setChinese(chinese);
		this->wordNode.setEnglish(english);
		//           
		(this->words).push_back(this->wordNode);
	}
	//    
	file.close();	
}

//        
int DataBase::getDicSize(){
	return this->words.size();
}

//        
bool DataBase::isEmpty(){
	if((this->getDicSize())<=0)
		return true;
	return false;
}

//     i   ,i       
WordNode DataBase::getWordNode(int i){
	if(i<0 || (i>= (this->getDicSize()))){
		cout<<"     !"<<endl;
		return *(new WordNode());
	}
	return this->words[i];
}

//   i WordNode  ,         
int DataBase::setWordNode(int i,WordNode newWordNode){
	if((i<0) || (i>=this->getDicSize())){
		//cout<<"     !"<<endl;
		return -1;
	}
	this->words[i]=newWordNode;
	this->sortWords();
	return 1;
}

//       
int DataBase::addWordNode(WordNode wordNode){
	this->words.push_back(wordNode);
	this->sortWords();
	return 0;
}

//   i WordNode  ,         
int DataBase::deleteWordNode(int i){
	if((i<0) || (i>=(int)(this->words.size()))){
		//cout<<"     !"<<endl;
		return -1;
	}
	this->words.erase((this->words.begin())+i);
	return 1;
}

//             ,       
int DataBase::binarySearch(string word){
	int left=0;
	int right=this->getDicSize()-1;
	//      
	while(left<=right){
		//    
		int middle=(left+right)/2;
		//    
		if(this->words[middle].getEnglish() == word)
			return middle;
		//       
		else if(this->words[middle].getEnglish() > word)
			right=middle-1;
		//       
		else left=middle+1;
	}
	return -1;
	//cout<<"    !"<<endl;
	//return *(new WordNode());
}


//             
void DataBase::sortWords(){
	sort(this->words.begin(), this->words.end(), myless());	
	return;
}

MyFrame.h
#ifndef MYFRAME_H
#define MYFRAME_H

#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
#include "DataBase.h"
#include "WordNode.h"

using namespace std;

//                   
class MyFrame{
public:
	//     
	MyFrame();
	//       
	void initialize();
	//     
	void addWord();
	//       
	void deleteWord();
	//       
	void modifyWord();
	//    
	void browseDic();
	//    
	void exitSystem();
	//    
	void exam();
	//     
	void exercise();
	//    ,      
	void printBlankLines(int n);
private:
	//        
	DataBase dataBase;
};

#endif

MyFrame.cpp
#include<iostream>
#include<string>
#include<vector>
#include<ctime>
#include<cstring>
#include<iomanip>
#include "MyFrame.h"

using namespace std;

//     
MyFrame::MyFrame(){
}

//       
void MyFrame::initialize(){
	int order;
	bool valid=true;
	system("title      by lwfcgz");

	//    
	while(1){
		system("cls");
		this->printBlankLines(5);
		cout<<"********************************     ************************************"<<endl;
		this->printBlankLines(5);
		cout<<"                                1.                                         "<<endl;
		cout<<"                                2.                                         "<<endl;
		cout<<"                                3.                                         "<<endl;
		cout<<"                                4.                                         "<<endl;
		cout<<"                                5.                                         "<<endl;
		cout<<"                                6.                                         "<<endl;
		cout<<"                                7.                                         "<<endl;
		this->printBlankLines(2);
		//          
		if(valid == true)
			cout<<"       :";
		else cout<<"    ,     :";

		cin>>order;
		//        
		 if((order>0) && (order<8))
			 valid=true;
		 //         
		 else{
			 valid=false;
			 system("cls");
			 continue;
		 }
		
		//            
		if(order == 1)
			this->addWord();		
		else if(order == 2)
			this->deleteWord();
		else if(order == 3)
			this->modifyWord();
		else if(order == 4)
			this->exercise();
		else if(order == 5)
			this->exam();
		else if(order == 6)
			this->browseDic();
		else if(order == 7)
			this->exitSystem();		
	}
}

//     
void MyFrame::addWord(){
	string english;
	string chinese;
	system("cls");
	this->printBlankLines(3);
	cout<<"          :";
	cin>>english;
	//           
	if(this->dataBase.binarySearch(english)>=0){
		cout<<"  "<<english<<"    !"<<endl;
		cout<<"    "<<endl;
		system("pause");
		return;
	}
	cout<<"          :";
	cin>>chinese;
	WordNode wordNode(english,chinese);
	this->dataBase.addWordNode(wordNode);
	cout<<"      !"<<endl;
	//         
	//this->dataBase.sortWords();
	system("pause");
	return;
}

//       
void MyFrame::deleteWord(){
	string english;
	string chinese;
	system("cls");
	this->printBlankLines(3);
	cout<<"         :";
	cin>>english;
	//           
	int number=this->dataBase.binarySearch(english);
	//     
	if(number<0){
		cout<<"  "<<english<<"   !"<<endl;
		cout<<"    !"<<endl;
		system("pause");
		return;
	}
	//        
	else{
		this->dataBase.deleteWordNode(number);
		cout<<"      !"<<endl;
		system("pause");
		return;
	}
	return;
}

//       
void MyFrame::modifyWord(){
	string english;
	string chinese;
	system("cls");
	this->printBlankLines(3);
	cout<<"         :";
	cin>>english;
	//         
	int number=this->dataBase.binarySearch(english);
	//        
	if(number<0){
		cout<<"  "<<english<<"   !"<<endl;
		cout<<"      !"<<endl;
		system("pause");
		return;
	}
	//    
	else{
		cout<<"       :";
		cin>>chinese;
		WordNode wordNode(english,chinese);
		//       
		this->dataBase.setWordNode(number,wordNode);
		cout<<"      !"<<endl;
		system("pause");
		return;
	}
	return;
}

//    
void MyFrame::browseDic(){
	int order;
	system("cls");
	this->printBlankLines(5);
	//      
	cout<<"********************************       *********************************"<<endl;
	this->printBlankLines(5);
	cout<<"                                1.                                         "<<endl;
	cout<<"                                2.                                         "<<endl;
	cout<<"                                3.    (      )                     "<<endl;
	this->printBlankLines(3);
	cout<<"       :";	
	cin>>order;
	//        
	if(!(order>=1 && order<=3)){
		cout<<"    !"<<endl;
		system("pause");
		return;
	}

	//           
	if(order == 1){
		system("cls");
		cout<<"         :";
		string english;
		int number;
		cin>>english;
		//       
		number=this->dataBase.binarySearch(english);
		if(number < 0){
			cout<<"     "<<english<<endl;
			system("pause");
			return;
		}
		//        
		else{
			cout<<endl;
			cout<<"  :"<<this->dataBase.getWordNode(number).getChinese()<<endl;
			system("pause");
			return;
		}
	}
	//      
	else if(order == 2){
		int begin;
		int length;
		cout<<"             :";
		cin>>begin;
		cout<<"           :";
		cin>>length;
		if((begin<0) || (length<=0) || (begin+length)>this->dataBase.getDicSize()){
			cout<<"    !        !"<<endl;
			system("pause");
			return;
		}
		system("cls");
		for(int i=0;i<length;i++){
			cout<<this->dataBase.getWordNode(begin+i).getEnglish()
				<<"   "<<this->dataBase.getWordNode(begin+i).getChinese()<<endl;
		}
		system("pause");
		return;
	}
	//      
	else if(order == 3){
		int length=this->dataBase.getDicSize();
		for(int i=0;i<length;i++){
			cout<<this->dataBase.getWordNode(i).getEnglish()
				<<"   "<<this->dataBase.getWordNode(i).getChinese()<<endl;
		}
		system("pause");
		return;
	}
	return;
}

//    
void MyFrame::exitSystem(){
	exit(0);
}

//    
void MyFrame::exam(){	
	system("cls");
	this->printBlankLines(3);
	cout<<"********************************    ************************************"<<endl;
	this->printBlankLines(3);
	cout<<"       20 ,      ,  5 。             ,             "
		<<endl;
	cout<<"                                Good Luck!                                  "<<endl;
	this->printBlankLines(10);
	system("pause");
	//system("cls");

	//          
	int number[20];
	//    
	int score;
	srand(unsigned(time(0)));
	//    20   
	for(int i=0;i<20;i++){
		int tmp=rand()%(this->dataBase.getDicSize());
		bool repeat=false;
		//             
		for(int j=0;j<i;j++){
			if(number[j] == tmp)
				repeat=true;
		}
		if(repeat == true)
			i--;
		else
			number[i]=tmp;
	}

	score=0;
	//    
	for(int i=0;i<20;i++){
		system("cls");
		this->printBlankLines(1);
		int meaning[4];
		//        
		for(int j=0;j<4;j++){
			int tmp=rand()%(this->dataBase.getDicSize());
			bool repeat=false;
			//          
			for(int k=0;k<j;k++){
				if(meaning[k] == tmp)
					repeat=true;
			}
			if((repeat == true) || (tmp == number[i]))
				j--;
			else 
				meaning[j]=tmp;
		}
		//      
		int ans=rand()%4;
		meaning[ans]=number[i];
		cout<<" "<<(i+1)<<" :"<<endl<<endl;
		cout<<"  "<<this->dataBase.getWordNode(number[i]).getEnglish()
			<<"            ?"<<endl;
		this->printBlankLines(2);
		for(int j=0;j<4;j++){
			cout<<(char)(j+'A')<<"  "<<this->dataBase.getWordNode(meaning[j]).getChinese()
				<<endl;
		}
		this->printBlankLines(8);
		cout<<"       :";
		while(1){
			string yourAns;
			cin>>yourAns;
			//       
			if( (yourAns.size()!=1) || 
				(yourAns!="A" && yourAns!="B" 
				&& yourAns!="C" && yourAns!="D")){
					cout<<"    ,     :";
					continue;
			}
			else{
				//    
				if(yourAns[0] == (ans+'A'))
					score+=5;
				break;
			}
		}//  while  
	}//   for  

	system("cls");
	this->printBlankLines(3);
	if(score < 60){				
		cout<<"    "<<score<<" ><,     !"<<endl;		
	}
	else if((score>=60) && (score<85)){
		cout<<"   "<<score<<" ,      ,     ,  !"<<endl;
	}
	else if((score>=85) && (score<100)){
		cout<<"   "<<score<<" ,     ,  !"<<endl;
	}
	else if(score==100){
		cout<<"     100!     !"<<endl;
	}
	cout<<endl<<"         :"<<endl;
	for(int i=0;i<20;i++){
		cout<<i+1<<": "<<this->dataBase.getWordNode(number[i]).getEnglish()
			<<"   "<<this->dataBase.getWordNode(number[i]).getChinese()<<endl;
	}
	system("pause");
	return;
}

//     
void MyFrame::exercise(){
	srand(unsigned(time(0)));
	while(1){
		char cmd[100];
		system("cls");
		this->printBlankLines(5);
		int number=rand()%(this->dataBase.getDicSize());
		cout<<"  :   "<<this->dataBase.getWordNode(number).getEnglish()<<endl;
		cout<<endl;
		cout<<"  :   "<<this->dataBase.getWordNode(number).getChinese()<<endl;
		this->printBlankLines(15);
		cout<<"  quit    ,            ";
		cin.getline(cmd,100);
		//        
		if(strcmp(cmd,"quit")==0){
			system("cls");
			return;
		}
		else
			continue;
	}
	return;
}

//    ,      
void MyFrame::printBlankLines(int n){
	//    
	for(int i=0;i<n;i++)
		cout<<endl;
	return;
}

myless.cpp
#include<iostream>
#include<string>
#include "WordNode.h"

using namespace std;

//      
class myless
{
public:
	//     ,      
    bool operator()(WordNode a, WordNode b) {
	  //       
	  return a.getEnglish() < b.getEnglish();
    }
};

読めないところはレポートを見て次のブログで...
バグがあれば、指摘を歓迎します.