C++程序设计课件 第16课 复习课
- 格式:doc
- 大小:130.00 KB
- 文档页数:16
教案任务二 字典查询的实现 【任务描述】新建项目,并在窗体上创建字典查询界面和编程。
【任务实施】1、新建一个Windows 项目,在模板中选择“Windows 应用程序”,将项目名称设为“Consult_A_Dictionary ”,位置设为“E:\CspharpApp\Examples ”(或其它位置).2、字典查询界面的设置,如下图所示:3、编程➢ 创建和启动线程 thread = new Thread (this .ReadFile); thread.Start();➢ 读取文本文件中的内容private void ReadFile(){ StreamReader sr = new StreamReader (Application .StartupPath + @"\DICT.txt",Encoding .Default);string str;while (sr.Peek()!=-1) {str = sr.ReadLine();string strTemp = Regex .Replace(str, @"[\s{1,}]{1,}", " ").TrimStart(); string [] temp = strTemp.Split(new char [] {' '});string temps = string .Empty;for (int i = 1; i < temp.Length; i++)temps += temp[i];if (!dct.ContainsKey(temp[0]))dct.Add(temp[0], temps);}List <string > strLst = new List <string >(); this .Invoke((MethodInvoker )delegate{foreach (KeyValuePair <string , string > kvp in dct){ strLst.Add(kvp.Key);}textBox1.AutoCompleteCustomSource.AddRange(strLst.ToArray());});师生互动 学习环节包括“合作与探索”、“交流与分享”、“实践与体验”sr.Close();}运行结果如下图:➢查字典if (dct.ContainsKey(textBox1.Text))label3.Text = dct[textBox1.Text];elselabel3.Text = "字典中没有此单词!";运行结果如下图:至此字典的查询功能就实现了。
第16课总复习课====================================================================== 补充:QT-窗口调用对话框=============================================================================== 归纳:C++编程的套路============================================================================================================================================================== C++知识要点===============================================================================一、容器操作1、排序:vector复合元素,排序规则函数#include <iostream>#include <vector>#include <string>#include <ctime>#include <cstdlib>#include <algorithm>using namespace std;const int n=10000;struct A{int number;int score;};class Sort{private:vector<A>a;public:Sort(){srand(time(0));for(int i=0;i<n;++i)A temp;temp.number=rand();temp.score=rand();a.push_back(temp);}}static bool sort1(A a1,A a2){return a1.number>a2.number;}void browse(){for(int i=0;i<10;++i){cout<<a[i].number<<"-"<<a[i].score<<endl;}}void sort_v(){sort(a.begin(),a.end(),sort1);}};int main(){Sort s;s.sort_v();s.browse();return 0;}-------------------------------------------------------------------------------------------------------2、查找(英汉词典):vector,单元素,遍历#include <iostream>#include <vector>#include <string>#include <fstream>#include <ctime>using namespace std;class Dict{private:vector<string>a;Dict(){string temp;ifstream f("Ó¢ºº´Êµä.txt",ios::in);while(true){getline(f,temp);a.push_back(temp);if(f.eof())break;}}string word1(string s){int n=s.find(" ",0);string temp=s.substr(0,n);return temp;}void find_v(){string word;cout<<"input word:";cin>>word;int i;clock_t t1,t2;t1=clock();for(i=0;i,a.size();++i){if(word==word1(a[i])){cout<<a[i]<<endl;break;}}t2=clock();cout<<"time:"<<t2-t1<<endl;if(i==a.size())cout<<"no word!"<<endl;}};int main(){Dict d;d.find_v();return 0;}-------------------------------------------------------------------------------------------------------3、查找(英汉词典):vector,单元素,find函数,规则函数#include <iostream>#include <vector>#include <string>#include <fstream>#include <algorithm>#include <ctime>using namespace std;struct A{string s;bool operator==(string word){string temp;int n=s.find(" ",0);temp=s.substr(0,n);return (temp==word);}};class Dict{private:vector<A>a;vector<A>::iterator p;public:Dict(){string s;A temp;ifstream f("Ó¢ºº´Êµä.txt",ios::in);while(true){getline(f,s);temp.s=s;a.push_back(temp);if(f.eof())break;}}void find_v(){string word;cout<<"input word:";cin>>word;clock_t t1,t2;t1=clock();p=find(a.begin(),a.end(),word);t2=clock();cout<<"time:"<<t2-t1<<endl;if(p!=a.end()) cout<<p->s<<endl;}};int main(){Dict d;d.find_v();return 0;}-------------------------------------------------------------------------------------------------------4、查找(英汉词典):vector,复合元素,find函数,规则函数#include <iostream>#include <vector>#include <string>#include <fstream>#include <algorithm>#include <ctime>using namespace std;struct A{string word1;string word2;bool operator==(string word){return (word1==word);}};class Dict{private:vector<A>a;vector<A>::iterator p;public:Dict(){string s,s1,s2;A temp;ifstream f("Ó¢ºº´Êµä.txt",ios::in);while(true){getline(f,s);temp.word1=word1(s);temp.word2=word2(s);a.push_back(temp);if(f.eof())break;}}string word1(string s){int n=s.find(" ",0);string temp=s.substr(0,n);return temp;}string word2(string s){int n=s.find(" ",0);while(true){++n;if(s.substr(n,1)!=" ")break;}string temp=s.substr(n,s.size()-n);return temp;}void find_v(){string word;cout<<"input word:";cin>>word;clock_t t1,t2;t1=clock();p=find(a.begin(),a.end(),word);t2=clock();cout<<"time:"<<t2-t1<<endl;if(p!=a.end()) cout<<p->word1+" "+p->word2<<endl;}};int main(){Dict d;d.find_v();return 0;}-------------------------------------------------------------------------------------------------------5、查找(英汉词典):map,a.find函数#include <iostream>#include <map>#include <string>#include <fstream>#include <algorithm>#include <ctime>using namespace std;class Dict{private:map<string,string>a;map<string,string>::iterator p;public:Dict(){string s,s1,s2;ifstream f("Ó¢ºº´Êµä.txt",ios::in);while(true){getline(f,s);s1=word1(s);s2=word2(s);a.insert(pair<string,string>(s1,s2));if(f.eof())break;}}string word1(string s){int n=s.find(" ",0);string temp=s.substr(0,n);return temp;}string word2(string s){int n=s.find(" ",0);while(true){++n;if(s.substr(n,1)!=" ")break;}string temp=s.substr(n,s.size()-n);return temp;}void find_m(){string word;cout<<"input word:";cin>>word;clock_t t1,t2;t1=clock();p=a.find(word);t2=clock();cout<<"time:"<<t2-t1<<endl;if(p!=a.end()) cout<<p->first+" "+p->second<<endl;}};int main(){Dict d;d.find_m();return 0;}===============================================================================二、类的继承与派生1、单线条公有继承2、父类有重载的构造函数3、子类对象的使用=============================================================================== #include <iostream>using namespace std;class point{int x1,y1;public:point(){x1=0;y1=0;}point(int xx1,int yy1){x1=xx1;y1=yy1;}void display(){cout<<"x1="<<x1<<endl;cout<<"y1="<<y1<<endl;}};class line:public point{protected:int x2,y2;public:line(){x2=0;y2=0;}line(int xx1,int yy1,int xx2,int yy2):point(xx1,yy1) {x2=xx2;y2=yy2;}void display(){cout<<"x1="<<x1<<endl;cout<<"y1="<<y1<<endl;cout<<"x2="<<x2<<endl;cout<<"y2="<<y2<<endl;}};int main(){line L1(2,3,4,5);L1.display();}===============================================================================三、运算符重载1、输入/输出2、双目3、单目=============================================================================== //+ 两个线段的顶点坐标分别相加//> 返回较长的线段#include <iostream>using namespace std;class point{protected:int x1,y1;public:point(){x1=0;y1=0;}point(int xx1,int yy1){x1=xx1;y1=yy1;}void display(){cout<<"x1="<<x1<<endl;cout<<"y1="<<y1<<endl;}};class line:public point{protected:int x2,y2;public:line(){x2=0;y2=0;}line(int xx1,int yy1,int xx2,int yy2):point(xx1,yy1){x2=xx2;y2=yy2;}void display(){cout<<"x1="<<x1<<endl;cout<<"y1="<<y1<<endl;cout<<"x2="<<x2<<endl;cout<<"y2="<<y2<<endl;}friend ostream& operator<<(ostream& os,line a){a.display();return os;}line operator +(line L2)//×ø±êÏà¼Ó{line temp;temp.x1=x1+L2.x1;temp.y1=y1+L2.y1;temp.x2=x2+L2.x2;temp.y2=y2+L2.y2;return temp;}bool operator >(line L2)//Ï߶㤶È{bool temp;if(((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))>((L2.x2-L2.x1)*(L2.x2-L2.x1)+(L2.y2-L2.y1)*(L2.y2-L2.y1))) {temp=true;}else{temp=false;}return temp;}};int main()line L1(1,2,3,4);line L2(5,6,7,8);if(L1>L2){cout<<L1;}else{cout<<L2;}return 0;}=============================================================================== 四、类模板if(typeid(T)==tyoeid(int))=============================================================================== #include <iostream>#include <string>#include <sstream>using namespace std;template <class T>class Turn{private:string s;T temp;public:Turn(string ss){s=ss;}T turn(){stringstream ss;ss<<s;ss>>temp;return temp;}};int main()string s="3.5";Turn<double>t(s);cout<<t.turn()+10<<endl;return 0;}=============================================================================== 五、计时器与多线程===============================================================================1、键盘响应2、计时器=============================================================================== #include <windows.h>#include <iostream>#include <ctime>#include <cstdlib>#include <conio.h>using namespace std;class Timer{private:clock_t t1,t2;char c;public:Timer(){t1=clock();t2=clock();c=0;}void gotoxy(int x,int y){HANDLE h;COORD c;c.X=x;c.Y=y;h=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(h,c);}void draw(int x,int y){gotoxy(x,y);cout<<"¡ñ";}void erase(int x,int y){gotoxy(x,y);cout<<" ";}void key(clock_t& t,int tt){if(clock()-t>tt){if(GetAsyncKeyState(VK_ESCAPE)) exit(0);if(GetAsyncKeyState(VK_LEFT)) c=1;if(GetAsyncKeyState(VK_RIGHT)) c=2;t=clock();}}void move1(int& x,int& y,clock_t& t,int tt){if(clock()-t>tt){erase(x,y);switch(c){case 1:--x;break;case 2:++x;break;}if(x<0)x=78;if(x>78)x=0;draw(x,y);t=clock();}}void move(){int x=0,y=10;draw(x,y);while(true){key(t1,10);move1(x,y,t2,30);}}};int main(){Timer t;t.move();return 0;}=============================================================================== 六、文件:二进制文件=============================================================================== #include <iostream>#include <string>#include <fstream>using namespace std;class File{private:fstream f;string s;int len;public:File(){f.open("test.doc",ios::binary|ios::in|ios::out);}~File(){f.close();}void Reverse(){string temp=s;for(int i=0;i<s.size();++i){temp[i]=s[s.size()-i-1];}s=temp;}void Read(){f.seekg(0,ios::end);len=f.tellg();s.resize(len);f.seekg(0,ios::beg);f.read((char*)s.c_str(),len);}void Write(){f.seekp(0,ios::beg);f.write((char*)s.c_str(),s.size());}};int main(){File f;f.Read();f.Reverse();f.Write();return 0;}=============================================================================== 七、练习题===============================================================================1、程序填空(文本文件)2、程序改错字符串与字符数组、类的定义与使用、二进制文件3、给出程序运行结果数组、容器、引用、虚函数。