队名:起床一起肝活队
组长博客:博客链接
作业博客:班级博客本次作业的链接
白晨曦 任务分配,过滤算法
乐忠豪 完成抽奖功能
蔡子阳 完成文案生成与qqbot
黄培鑫 完成抽奖结果图片生成
李麒 完成界面制作与功能对接
王焕仁 协助完成过滤算法
陈德斌 协助完成界面的制作,博客书写
林志华 过滤算法设计
何裕捷 抽奖结果的图片显示
二、github 的提交日志截图 三、程序运行截图 1.程序界面 2.抽奖系统 输入文本: 输出结果: 3.高级过滤功能 4.发送通知 四、程序运行环境 环境 名称
操作系统 windows10
编译器 visual studio
五、GUI界面 六、基础功能实现 抽奖系统 基本思路:
对每条记录进行词条化处理,赋予每个参与抽奖的人一定范围的中奖码(如:10-20是张三中奖),通过控制范围改变一些参与者的中奖概率,再通过产生随机数的方式获得中奖号码,输出相应参与者的信息
代码实现: // Dll1.cpp: 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" #include <stdexcept> #include<iostream> #include<stdlib.h> #include<ctime> #include<fstream> #include <cstdlib> #include<string> #include <sstream> #include<vector> #include "DLL1.h" using namespace std; class people1 { public: string name; string QQ; int cs; int zongzishu; int zhongjiangdown; int zhongjiangup; }; people1 p[2000]; void choujiang(string filename,int pnum) { char word[1000]; string a; ifstream in(filename); int num = 0; int k = 0; while (in.getline(word, 1000)) { a = word; string b = ""; vector<string> res; //暂存从word中读取的字符串 string result; //将字符串读到input中 stringstream input(a); //依次输出到result中,并存入res中 while (input >> result) res.push_back(result); //输出res p[k].name = res[0]; p[k].QQ = res[1]; if (k <= 30 && k != 0) { p[k].zhongjiangdown = p[k - 1].zhongjiangup + 1; p[k].zhongjiangup = p[k].zhongjiangdown + 9; } else if (k == 0) { p[k].zhongjiangdown = 0; p[k].zhongjiangup = p[k].zhongjiangdown + 9; } else { p[k].zhongjiangdown = p[k - 1].zhongjiangup + 1; p[k].zhongjiangup = p[k].zhongjiangdown + 1; } k++; } int jieguo = 0; int ss = 0; srand(time(0)); ofstream fout("final.txt"); for (int s = 0; s < pnum; ) { if (k <= 30) jieguo = rand() % (k * 10 - 1); else jieguo = rand() % (k + 269); for (int i = 0; i < k; i++) { if (jieguo <= p[i].zhongjiangup && jieguo >= p[i].zhongjiangdown) { fout << "恭喜 " << p[i].name << " (" << p[i].QQ << ") " << "中奖!" << endl; p[i].zhongjiangup = 65535; p[i].zhongjiangdown = 65535; s++; } } } fout.close(); } 过滤系统 代码实现: #include "pch.h" bool QWE_fenxi::cmp(qwe a,qwe b){ return a.zs>b.zs; } string QWE_fenxi::UTF8ToGB(const char* str) { string result; WCHAR *strSrc; LPSTR szRes; int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); strSrc = new WCHAR[i + 1]; MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i); i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL); szRes = new CHAR[i + 1]; WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL); result = szRes; delete[]strSrc; delete[]szRes; return result; } bool QWE_fenxi::qgetline(char s[]){ if( fgets(s,1024,fp) ){ return true; } return false; } void QWE_fenxi::getfayan(int i){ string,qq=""; int zs=0,len=strlen(qLine[1]); for(int j=len-1;j>=0&&qLine[1][j]!=\'#\';j--){ zs++; } for(i=i+1;qLine[0][i]!=\'(\'&&qLine[0][i]!=\'<\';i++){ name+=qLine[0][i]; } for(i=i+1;qLine[0][i]!=\')\'&&qLine[0][i]!=\'>\';i++){ qq+=qLine[0][i]; } if (name == "系统消息")return; qq_name[qq]=name; qq_cs[qq]++; qq_zs[qq]+=zs; } bool QWE_fenxi::chanyucoujiang( char s[],string gjc){ int i=0,j,len=strlen(s); string tmp; while(i<len){ if(s[i]==\'#\'){ tmp=""; for( j=i+1;s[j]!=\'#\';j++){ tmp+=s[j]; } if(tmp==gjc){ return true; }i=j+1; }else i++; } return false; } bool QWE_fenxi::between_time(char s[]) { int len = strlen(s); if (len < 19)return false; for (int i = 0; i < 19;i++) { if ( s[i]!=\' \'&& s[i] != \'-\'&&s[i] != \':\' && !(s[i] >= \'0\'&&s[i] <= \'9\'))return false; } for (int i = 0;i < 19;i++) { if (s[i] < time1[i])return false; else if (s[i] > time1[i])break; } for (int i = 0;i < 19;i++) { if (s[i] > time2[i])return false; else if (s[i] < time2[i])break; } return true; } bool QWE_fenxi::getperson(string gjc){ gjc=UTF8ToGB(gjc.c_str()); string str; if(!qgetline(qLine[0]) )return false; if (!between_time(qLine[0])) { return true; } if(!qgetline(qLine[1]) )return false; str=UTF8ToGB(qLine[1]); int j; for( j=0;j<str.size();j++){ qLine[1][j]=str[j]; } qLine[1][j]=\'\0\'; //de(qLine[1]); if(!qgetline(qLine[2]) )return false; if( !chanyucoujiang(qLine[1],gjc) ){ return true; } int i,t=0; for(i=0;;i++){ if(qLine[0][i]==\' \'){ t++; if(t==2)break; } } getfayan(i); return true; } void QWE_fenxi::getresult(string mgjc,string time11,string time22){ de("begin"); time1 = time11; time2 = time22; FILE *ffp; fopen_s(&fp,"record.txt","rt"); fopen_s(&ffp,"gjc.txt","rt"); string gjc; char ss[1024]; fgets(ss,1024,ffp); gjc=ss; gjc = mgjc; gjc=UTF8ToGB(gjc.c_str()); while(getperson(gjc) ){ } //de("-----------------------"); int cnt=0; int zs,cs; for( it1=qq_name.begin();it1!=qq_name.end();it1++){ a[cnt].name=it1->second; a[cnt].qq=it1->first; a[cnt].zs=qq_zs[ a[cnt].qq ]; a[cnt].cs=qq_cs[a[cnt].qq]; cnt++; } sort(a,a+cnt, & cmp ); freopen("result.txt","w",stdout); for(int j=0;j<cnt;j++){ cout<<a[j].name<<" "<<a[j].qq<<" "<<a[j].cs<<" "<<a[j].zs<<endl; } } 七、附加功能实现