C++単語のソースコードを簡単に暗記
16216 ワード
本来は1月20日以降に提出されているのでグラフィックインターフェースにしようと思っていたのですが、先生が急に締め切りを1月初めに繰り上げて・・・仕事を急ぐためにConsoleと書くしかありませんでしたが、復習する科目はまだたくさんあります><
すべてのソースコードとレポートは一晩でできたので、生きてみましょう...ソースコードとレポートは2つの異なるブログに分けて送りましょう.そうしないと混乱します.
辞書ライブラリは事前に処理されたテキストファイル(元のテキストはネットからダウンロードされたもの)で、すべて「英語中国語の意味」のフォーマットで、9000本以上あるので、私は貼りません.
次はソースコードです.
Main.cpp
WordNode.h
WordNode.cpp
DataBase.h
DataBase.cpp
MyFrame.h
MyFrame.cpp
myless.cpp
読めないところはレポートを見て次のブログで...
バグがあれば、指摘を歓迎します.
すべてのソースコードとレポートは一晩でできたので、生きてみましょう...ソースコードとレポートは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();
}
};
読めないところはレポートを見て次のブログで...
バグがあれば、指摘を歓迎します.