基于C++語(yǔ)言實(shí)現(xiàn)機(jī)動(dòng)車違章處罰管理系統(tǒng)
關(guān)鍵代碼如下所示:
#include <iostream> #include <iomanip> #include <fstream> #include <string> #include <list> using namespace std; class Violation{ public: Violation(){points=fine=0; number=carNumber=tel=location=isSpot =police=camera=type=isTreated=treatmentDate=notes="";} Violation(string snumber,string sdate="",string scarNumber="",string stel="", string slocation="",int ipoints=-1,string sisSpot="", string spolice="",string scamera="",string itype="",int ifine=0, string sisTreated="",string streatmentDate="",string snotes="") :number(snumber),date(sdate),carNumber(scarNumber),tel(stel), location(slocation),points(ipoints),isSpot(sisSpot),police(spolice), camera(scamera),type(itype),fine(ifine),isTreated(sisTreated), treatmentDate(streatmentDate),notes(snotes){} bool operator==(const Violation& vltn); //查找用 friend bool compNumber(Violation& vltn1,Violation& vltn2); //編號(hào)比較規(guī)則 friend bool compDate(Violation& vltn1,Violation& vltn2); //日期比較規(guī)則 friend bool compCarNumber(Violation& vltn1,Violation& vltn2); //車牌號(hào)比較規(guī)則 friend bool compLocation(Violation& vltn1,Violation& vltn); //地點(diǎn)比較規(guī)則 friend bool compPoints(Violation& vltn1,Violation& vltn); //扣分比較規(guī)則 friend istream& operator>>(istream& input,Violation& vltn); friend ostream& operator<<(ostream& output,Violation& vltn); friend class List; friend int saveFile(); private: string number; //編號(hào) string date; //日期 string carNumber; //車牌號(hào) string tel; //聯(lián)系電話- string location; //地點(diǎn) int points; //扣分 string isSpot; //現(xiàn)場(chǎng) string police; //現(xiàn)場(chǎng)執(zhí)勤交警 string camera; //非現(xiàn)場(chǎng)攝像頭編號(hào) string type; //違章類別 int fine; //罰款 string isTreated; //是否處理 string treatmentDate; //處理日期 string notes; //備注 }; bool Violation::operator==(const Violation& vltn){ if(location==""||vltn.location=="") if(tel==""||vltn.tel=="") if(carNumber==""||vltn.carNumber=="") if(date==""||vltn.date=="") return number==vltn.number; else return date==vltn.date; else return carNumber==vltn.carNumber; else return tel==vltn.tel; else return location==vltn.location; } bool compNumber(Violation& vltn1,Violation& vltn2){ return vltn1.number>vltn2.number; } bool compDate(Violation& vltn1,Violation& vltn2){ return vltn1.date>vltn2.date; } bool compCarNumber(Violation& vltn1,Violation& vltn2){ return vltn1.carNumber<vltn2.carNumber; } bool compLocation(Violation& vltn1,Violation& vltn2){ return vltn1.location>vltn2.location; } bool compPoints(Violation& vltn1,Violation& vltn2){ return vltn1.points>vltn2.points; } istream& operator>>(istream& input,Violation& vltn){ input>>vltn.number>>vltn.date>>vltn.carNumber>>vltn.tel>>vltn.location >>vltn.points>>vltn.isSpot>>vltn.police>>vltn.camera>>vltn.type >>vltn.fine>>vltn.isTreated>>vltn.treatmentDate>>vltn.notes; return input; } ostream& operator<<(ostream& output,Violation& vltn){ output<<setw(6)<<vltn.number <<setw(9)<<vltn.date <<setw(9)<<vltn.carNumber <<setw(12)<<vltn.tel <<setw(11)<<vltn.location <<setw(5)<<vltn.points <<setw(9)<<vltn.isSpot <<setw(13)<<vltn.police <<setw(17)<<vltn.camera <<setw(11)<<vltn.type <<setw(5)<<vltn.fine <<setw(9)<<vltn.isTreated <<setw(9)<<vltn.treatmentDate <<setw(33)<<vltn.notes<<endl; return output; } class List{ public: friend class User; int loadFile(); //讀取文件 int saveFile(); //保存到文件 int insert(); //添加記錄 int change(); //修改記錄 int del(); //刪除記錄 int browse(); //瀏覽記錄 int searchMenu(); //查詢信息 int searchCarNumber(); //按車牌號(hào) int searchDate(); //按日期查找 int searchTel(); //按電話查找 int searchLocation(); //按地點(diǎn)查詢 int countMenu(); //統(tǒng)計(jì)信息 int countDate(); //按日期統(tǒng)計(jì)違章 int countCarNumber(); //按車牌統(tǒng)計(jì)違章 int countLocation(); //按地點(diǎn)統(tǒng)計(jì)違章 int countPoints(); //按扣分統(tǒng)計(jì)違章 static List* getList(); private: list <Violation> vltnlist; static List* m_list; List(){}; List(const List&){} List& operator=(const List&){} }; const char* filepath="violation.dat"; //指定數(shù)據(jù)文件路徑 bool checkNumber(string s,int size){ if(s.size()!=size) return false; for(int i=0;i<size;i++) if(s[i]<'0'||s[i]>'9') return false; return true; } List* List::m_list=NULL; List* List::getList(){ if(NULL==m_list) m_list=new List; return m_list; } int List::loadFile(){ ifstream infile(filepath,ios::in); if(infile) for(;!infile.eof();){ Violation vltn;infile>>vltn; vltnlist.push_back(vltn); } infile.close(); return 0; } int List::saveFile(){ ofstream outfile(filepath,ios::out); list<Violation>::iterator it; for(it=vltnlist.begin();it!=vltnlist.end();it++) outfile<<endl<<it->number<<' '<<it->date<<' '<<it->carNumber<<' ' <<it->tel<<' '<<it->location<<' '<<it->points<<' '<<it->isSpot<<' ' <<it->police<<' '<<it->camera<<' '<<it->type<<' '<<it->fine<<' ' <<it->isTreated<<' '<<it->treatmentDate<<' '<<it->notes; outfile.close(); return 0; } int List::insert(){ list<Violation>::iterator it; string number,date,carNumber,tel,location,isSpot,police,camera,type, isTreated,treatmentDate,notes; int points,fine; cout<<"請(qǐng)輸入違章編號(hào)【放棄添加 0】【5位數(shù)字,如16384】:"; for(;;){ cin>>number;cin.sync(); if(number=="0") return 0; if(!checkNumber(number,5)) { cout<<"請(qǐng)輸入有效編號(hào):"; continue; } Violation l(number); it=find(vltnlist.begin(),vltnlist.end(),l); if(it!=vltnlist.end()) cout<<"編號(hào)已存在,請(qǐng)重新輸入:"; else break; } cout<<"請(qǐng)輸入違章日期【8位數(shù)字,如20160630】:"; while(1){ cin>>date;cin.sync(); if(!checkNumber(date,8)){ cout<<"請(qǐng)輸入有效日期:"; continue; } else break; } cout<<"請(qǐng)輸入違章車輛車牌號(hào):";cin>>carNumber;cin.sync(); cout<<"請(qǐng)輸入登記聯(lián)系電話【11位數(shù)字,如13751516464】:"; while(1){ cin>>tel;cin.sync(); if(!checkNumber(tel,11)){ cout<<"請(qǐng)輸入有效電話:"; continue; } else break; } cout<<"請(qǐng)輸入違章地點(diǎn):";cin>>location;cin.sync(); cout<<"請(qǐng)輸入處罰扣分【0~12分】:"; while(1){ if(cin>>points){ cin.sync(); if(points<0||points>12){ cout<<"請(qǐng)輸入有效扣分:"; continue; } else break; } else{ cin.clear();cin.sync(); cout<<"請(qǐng)輸入有效扣分:"; continue; } } cout<<"請(qǐng)輸入是否現(xiàn)場(chǎng)【是 1】:";cin>>isSpot;cin.sync(); if(isSpot=="1"){ cout<<"請(qǐng)輸入現(xiàn)場(chǎng)執(zhí)勤交警:";cin>>police;cin.sync(); isSpot="是";camera="現(xiàn)場(chǎng)"; } else{ cout<<"請(qǐng)輸入非現(xiàn)場(chǎng)攝像頭編號(hào)【6位數(shù)字,如646464】:"; while(1){ cin>>camera;cin.sync(); if(!checkNumber(camera,6)){ cout<<"請(qǐng)輸入有效編號(hào):"; continue; } else break; } isSpot="否";police="非現(xiàn)場(chǎng)"; } cout<<"*******************************************************"<<endl; cout<<"* ┌------------違章類別-------------請(qǐng)輸入---------┐*"<<endl; cout<<"* | | *"<<endl; cout<<"* | ◆ 超速 1 | *"<<endl; cout<<"* | ◆ 酒駕 2 | *"<<endl; cout<<"* | ◆ 闖紅燈 3 | *"<<endl; cout<<"* | ◆ 違規(guī)變道 4 | *"<<endl; cout<<"* | ◆ 未系安全帶 5 | *"<<endl; cout<<"* | ◆ 超載 6 | *"<<endl; cout<<"* | | *"<<endl; cout<<"* └------------------------------------------------┘*"<<endl; cout<<"*******************************************************"<<endl; cout<<"請(qǐng)選擇違章類別:"; int Mark=1; while(Mark){ char n;cin>>n;cin.sync(); switch(n){ case '1': type="超速";Mark=0;break; case '2': type="酒駕";Mark=0;break; case '3': type="闖紅燈";Mark=0;break; case '4': type="違規(guī)變道";Mark=0;break; case '5': type="未系安全帶";Mark=0;break; case '6': type="超載";Mark=0;break; default : cout<<"輸入有誤,請(qǐng)重新輸入:"; } } cout<<"請(qǐng)輸入罰款金額【0~5000元】:"; while(1){ if(cin>>fine){ cin.sync(); if(fine<0||fine>50000){ cout<<"請(qǐng)輸入有效金額:"; continue; } else break; } else{ cin.clear();cin.sync(); cout<<"請(qǐng)輸入有效金額:"; continue; } } cout<<"請(qǐng)輸入是否處理【是 1】:";cin>>isTreated;cin.sync(); if(isTreated=="1"){ cout<<"請(qǐng)輸入處理日期【8位數(shù)字,如20160630】:";//cin>>treatmentDate;cin.sync(); while(1){ cin>>treatmentDate;cin.sync(); if(!checkNumber(treatmentDate,8)){ cout<<"請(qǐng)輸入有效日期:"; continue; } else break; } isTreated="是"; } else{ isTreated="否";treatmentDate="未處理"; } cout<<"請(qǐng)輸入備注【無(wú) 0】:";cin>>notes;cin.sync(); if(notes=="0") notes="無(wú)"; Violation vltn(number,date,carNumber,tel,location,points,isSpot,police,camera, type,fine,isTreated,treatmentDate,notes); vltnlist.push_back(vltn); saveFile(); cout<<"車輛違章信息添加成功!";getchar(); return 0; } int List::change(){ list<Violation>::iterator it; if(!vltnlist.size()){ cout<<"還沒(méi)有記錄,不能修改!"<<endl;getchar(); return 0; } string number,date,carNumber,tel,location,isSpot,police,camera,type, isTreated,treatmentDate,notes; int points,fine; browse(); cout<<"請(qǐng)輸入想要修改的記錄編號(hào)【放棄0】:"; cin>>number;cin.sync(); if(number=="0") return 0; Violation vltn(number); it=find(vltnlist.begin(),vltnlist.end(),vltn); if(it==vltnlist.end()){ cout<<"此編號(hào)不存在!";getchar(); return 0; } while(1){ system("cls"); cout<<" 當(dāng)前信息 請(qǐng)輸入"<<endl; cout<<" 違章編號(hào):"<<setw(17)<<(*it).number<<" 1"<<endl <<" 違章日期:"<<setw(17)<<(*it).date<<" 2"<<endl <<" 車輛車牌號(hào):"<<setw(17)<<(*it).carNumber<<" 3"<<endl <<" 登記聯(lián)系電話:"<<setw(17)<<(*it).tel<<" 4"<<endl <<" 違章地點(diǎn):"<<setw(17)<<(*it).location<<" 5"<<endl <<" 處罰扣分:"<<setw(17)<<(*it).points<<" 6"<<endl <<" 是否現(xiàn)場(chǎng):"<<setw(17)<<(*it).isSpot<<endl <<" 現(xiàn)場(chǎng)執(zhí)勤交警:"<<setw(17)<<(*it).police<<" 7"<<endl <<" 非現(xiàn)場(chǎng)攝像頭編號(hào):"<<setw(17)<<(*it).camera<<" 8"<<endl <<" 違章類別:"<<setw(17)<<(*it).type<<" 9"<<endl <<" 罰款金額:"<<setw(17)<<(*it).fine<<" a"<<endl <<" 是否處理:"<<setw(17)<<(*it).isTreated<<" b"<<endl <<" 處理日期:"<<setw(17)<<(*it).treatmentDate<<" c"<<endl <<" 備注:"<<endl<<setw(34)<<(*it).notes<<" d"<<endl; cout<<"請(qǐng)選擇要修改的條目【放棄修改 0】:"; int Mark=1; while(Mark){ char n;cin>>n;cin.sync(); switch(n){ case '0': return 0; case '1': cout<<"請(qǐng)輸入違章編號(hào)【5位數(shù)字,如16384】:";//cin>>(*it).number;cin.sync(); for(;;){ cin>>number;cin.sync(); if(!checkNumber(number,5)) { cout<<"請(qǐng)輸入有效編號(hào):"; continue; } Violation l(number); list<Violation>::iterator nit; nit=find(vltnlist.begin(),vltnlist.end(),l); if(nit!=vltnlist.end()) cout<<"編號(hào)已存在,請(qǐng)重新輸入:"; else { (*it).number=number;break; } } Mark=0;break; case '2': cout<<"請(qǐng)輸入違章日期【8位數(shù)字,如20160630】:";//cin>>(*it).date;cin.sync(); while(1){ cin>>date;cin.sync(); if(!checkNumber(date,8)){ cout<<"請(qǐng)輸入有效日期:"; continue; } else { (*it).date=date;break; } } Mark=0;break; case '3': cout<<"請(qǐng)輸入車輛車牌號(hào):";cin>>(*it).carNumber;cin.sync(); Mark=0;break; case '4': cout<<"請(qǐng)輸入登記聯(lián)系電話:";//cin>>(*it).tel;cin.sync(); while(1){ cin>>tel;cin.sync(); if(!checkNumber(tel,11)){ cout<<"請(qǐng)輸入有效電話【11位數(shù)字,如13751516464】:"; continue; } else { (*it).tel=tel;break; } } Mark=0;break; case '5': cout<<"請(qǐng)輸入違章地點(diǎn):";cin>>(*it).location;cin.sync(); Mark=0;break; case '6': cout<<"請(qǐng)輸入處罰扣分【0~12分】:";//cin>>(*it).points;cin.sync(); while(1){ if(cin>>points){ cin.sync(); if(points<0||points>12){ cout<<"請(qǐng)輸入有效扣分:"; continue; } else{ (*it).points=points;break; } } else{ cin.clear();cin.sync(); cout<<"請(qǐng)輸入有效扣分:"; continue; } } Mark=0;break; case '7': cout<<"請(qǐng)輸入現(xiàn)場(chǎng)執(zhí)勤交警:";cin>>(*it).police;cin.sync(); (*it).isSpot="是";(*it).camera="現(xiàn)場(chǎng)"; Mark=0;break; case '8': cout<<"請(qǐng)輸入非現(xiàn)場(chǎng)攝像頭編號(hào)【6位數(shù)字,如646464】:";//cin>>(*it).camera;cin.sync(); while(1){ cin>>camera;cin.sync(); if(!checkNumber(camera,6)){ cout<<"請(qǐng)輸入有效編號(hào):"; continue; } else{ (*it).camera=camera;break; } } (*it).isSpot="否";(*it).police="非現(xiàn)場(chǎng)"; Mark=0;break; case '9': { cout<<"*******************************************************"<<endl; cout<<"* ┌------------違章類別-------------請(qǐng)輸入---------┐*"<<endl; cout<<"* | | *"<<endl; cout<<"* | ◆ 超速 1 | *"<<endl; cout<<"* | ◆ 酒駕 2 | *"<<endl; cout<<"* | ◆ 闖紅燈 3 | *"<<endl; cout<<"* | ◆ 違規(guī)變道 4 | *"<<endl; cout<<"* | ◆ 未系安全帶 5 | *"<<endl; cout<<"* | ◆ 超載 6 | *"<<endl; cout<<"* | | *"<<endl; cout<<"* └------------------------------------------------┘*"<<endl; cout<<"*******************************************************"<<endl; cout<<"請(qǐng)選擇違章類別:"; int Mark1=1; while(Mark1){ char n1;cin>>n1;cin.sync(); switch(n1){ case '1': (*it).type="超速";Mark1=0;break; case '2': (*it).type="酒駕";Mark1=0;break; case '3': (*it).type="闖紅燈";Mark1=0;break; case '4': (*it).type="違規(guī)變道";Mark1=0;break; case '5': (*it).type="未系安全帶";Mark1=0;break; case '6': (*it).type="超載";Mark1=0;break; default : cout<<"輸入有誤,請(qǐng)重新輸入:"; } } Mark=0;break; } case 'a': cout<<"請(qǐng)輸入罰款金額【0~5000元】:";//cin>>(*it).fine;cin.sync(); while(1){ if(cin>>fine){ cin.sync(); if(fine<0||fine>50000){ cout<<"請(qǐng)輸入有效金額:"; continue; } else{ (*it).fine=fine;break; } } else{ cin.clear();cin.sync(); cout<<"請(qǐng)輸入有效金額:"; continue; } } Mark=0;break; case 'b': cout<<"請(qǐng)輸入是否處理【是 1】:";cin>>(*it).isTreated;cin.sync(); if((*it).isTreated=="1"){ cout<<"輸入處理日期:";//cin>>(*it).treatmentDate;cin.sync(); while(1){ cin>>treatmentDate;cin.sync(); if(!checkNumber(treatmentDate,8)){ cout<<"請(qǐng)輸入有效日期:"; continue; } else { (*it).treatmentDate=treatmentDate;break; } } (*it).isTreated="是"; } else{ (*it).isTreated="否";(*it).treatmentDate="未處理"; } Mark=0;break; case 'c': cout<<"請(qǐng)輸入處理日期【8位數(shù)字,如20160630】:";//cin>>(*it).treatmentDate;cin.sync(); while(1){ cin>>treatmentDate;cin.sync(); if(!checkNumber(treatmentDate,8)){ cout<<"請(qǐng)輸入有效日期:"; continue; } else{ (*it).treatmentDate=treatmentDate;break; } } Mark=0;break; case 'd': cout<<"請(qǐng)輸入備注:";cin>>(*it).notes;cin.sync(); Mark=0;break; default : cout<<"輸入有誤,請(qǐng)重新輸入:"; } } saveFile(); cout<<"修改成功!"<<endl <<"繼續(xù)修改請(qǐng)輸入任意鍵,修改完畢請(qǐng)輸入0:"; char ch;cin>>ch;cin.sync(); if(ch=='0') return 0; } } int List::del(){ list<Violation>::iterator it; if(!vltnlist.size()){ cout<<"還沒(méi)有記錄,不能刪除!"<<endl;getchar(); return 0; } string number; browse(); cout<<"請(qǐng)輸入想要?jiǎng)h除的編號(hào)【放棄0】:"; cin>>number;cin.sync(); if(number=="0") return 0; Violation vltn(number); it=find(vltnlist.begin(),vltnlist.end(),vltn); if(it==vltnlist.end()){ cout<<"此編號(hào)不存在!";getchar(); return 0; } vltnlist.erase(it); if(!vltnlist.size()) remove(filepath); else saveFile(); cout<<"刪除記錄成功!";getchar(); return 0; } int List::browse(){ list<Violation>::iterator it; if(!vltnlist.size()){ cout<<"還沒(méi)有記錄!"<<endl;getchar(); return 0; } vltnlist.sort(compNumber); //按編號(hào)降序排列 cout<<"當(dāng)前共有 "<<vltnlist.size()<<"條記錄,已按編號(hào)降序排列:"<<endl <<" 編號(hào) 日期 車牌號(hào) 聯(lián)系電話 地點(diǎn) 扣分 是否現(xiàn)場(chǎng) 現(xiàn)場(chǎng)執(zhí)勤交警 非現(xiàn)場(chǎng)攝像頭編號(hào) 違章類別 罰款 是否處理 處理日期 備注"<<endl; for(it=vltnlist.begin();it!=vltnlist.end();it++) cout<<*it; getchar(); return 0; } int List::searchMenu(){ if(!vltnlist.size()){ cout<<"還沒(méi)有記錄,不能查詢!"<<endl;getchar(); return 0; } while(1) { system("cls"); cout<<"*******************************************************"<<endl; cout<<"* ★機(jī)動(dòng)車違章處罰管理系統(tǒng) ★ *"<<endl; cout<<"* *"<<endl; cout<<"*******************************************************"<<endl; cout<<"* ┌-------------------查詢菜單---------------------┐*"<<endl; cout<<"* | | *"<<endl; cout<<"* | 查詢方式 請(qǐng)輸入 | *"<<endl; cout<<"* | ◆ 按日期查詢 1 | *"<<endl; cout<<"* | ◆ 按車牌號(hào)查詢 2 | *"<<endl; cout<<"* | ◆ 按電話查詢 3 | *"<<endl; cout<<"* | ◆ 按地點(diǎn)查詢 4 | *"<<endl; cout<<"* | | *"<<endl; cout<<"* └------------------------------------------------┘*"<<endl; cout<<"*******************************************************"<<endl; cout<<"* ● 返回主菜單 0 *"<<endl; cout<<"*******************************************************"<<endl; cout<<"請(qǐng)選擇查詢方式:"; int Mark=1; while(Mark){ char n;cin>>n;cin.sync(); switch(n) { case '1': searchDate();Mark=0;break; case '2': searchCarNumber();Mark=0;break; case '3': searchTel();Mark=0;break; case '4': searchLocation();Mark=0;break; case '0': return 0; default : cout<<"輸入有誤,請(qǐng)重新輸入:"; } } } vltnlist.sort(compNumber); return 0; getchar();return 0; } int List::searchDate(){ list<Violation>::iterator it; string date; cout<<"請(qǐng)輸入日期:";cin>>date;cin.sync(); Violation vltn("",date); it=find(vltnlist.begin(),vltnlist.end(),vltn); if(it!=vltnlist.end()){ cout<<"已找到日期為 "<<date<<" 的違章記錄:"<<endl <<" 編號(hào) 日期 車牌號(hào) 聯(lián)系電話 地點(diǎn) 扣分 是否現(xiàn)場(chǎng) 現(xiàn)場(chǎng)執(zhí)勤交警 非現(xiàn)場(chǎng)攝像頭編號(hào) 違章類別 罰款 是否處理 處理日期 備注"<<endl <<*it; for(it++;it!=vltnlist.end();it++) if(*it==vltn) cout<<*it; } else cout<<"沒(méi)有該日期的違章記錄!"; getchar();return 0; } int List::searchCarNumber(){ list<Violation>::iterator it; string carNumber; cout<<"請(qǐng)輸入車牌號(hào):";cin>>carNumber;cin.sync(); Violation vltn("","",carNumber); it=find(vltnlist.begin(),vltnlist.end(),vltn); if(it!=vltnlist.end()){ cout<<"已找到車牌號(hào)為 "<<carNumber<<" 的違章記錄:"<<endl <<" 編號(hào) 日期 車牌號(hào) 聯(lián)系電話 地點(diǎn) 扣分 是否現(xiàn)場(chǎng) 現(xiàn)場(chǎng)執(zhí)勤交警 非現(xiàn)場(chǎng)攝像頭編號(hào) 違章類別 罰款 是否處理 處理日期 備注"<<endl <<*it; for(it++;it!=vltnlist.end();it++) if(*it==vltn) cout<<*it; } else cout<<"沒(méi)有該車牌號(hào)的違章記錄!"; getchar();return 0; } int List::searchTel(){ list<Violation>::iterator it; string tel; cout<<"請(qǐng)輸入聯(lián)系電話:";cin>>tel;cin.sync(); Violation vltn("","","",tel); it=find(vltnlist.begin(),vltnlist.end(),vltn); if(it!=vltnlist.end()){ cout<<"已找到聯(lián)系電話為 "<<tel<<" 的違章記錄:"<<endl <<" 編號(hào) 日期 車牌號(hào) 聯(lián)系電話 地點(diǎn) 扣分 是否現(xiàn)場(chǎng) 現(xiàn)場(chǎng)執(zhí)勤交警 非現(xiàn)場(chǎng)攝像頭編號(hào) 違章類別 罰款 是否處理 處理日期 備注"<<endl <<*it; for(it++;it!=vltnlist.end();it++) if(*it==vltn) cout<<*it; } else cout<<"沒(méi)有該聯(lián)系電話的違章記錄!"; getchar();return 0; } int List::searchLocation(){ list<Violation>::iterator it; string location; cout<<"請(qǐng)輸入地點(diǎn):";cin>>location;cin.sync(); Violation vltn("","","","",location); it=find(vltnlist.begin(),vltnlist.end(),vltn); if(it!=vltnlist.end()){ cout<<"已找到地點(diǎn)為 "<<location<<" 的違章記錄:"<<endl <<" 編號(hào) 日期 車牌號(hào) 聯(lián)系電話 地點(diǎn) 扣分 是否現(xiàn)場(chǎng) 現(xiàn)場(chǎng)執(zhí)勤交警 非現(xiàn)場(chǎng)攝像頭編號(hào) 違章類別 罰款 是否處理 處理日期 備注"<<endl <<*it; for(it++;it!=vltnlist.end();it++) if(*it==vltn) cout<<*it; } else cout<<"沒(méi)有該地點(diǎn)的違章記錄!"; getchar();return 0; } int List::countMenu(){ list<Violation>::iterator it; if(!vltnlist.size()){ cout<<"還沒(méi)有記錄,不能統(tǒng)計(jì)!"<<endl;getchar(); return 0; } while(1) { system("cls"); cout<<"*******************************************************"<<endl; cout<<"* *"<<endl; cout<<"* ★機(jī)動(dòng)車違章處罰管理系統(tǒng) ★ *"<<endl; cout<<"* *"<<endl; cout<<"*******************************************************"<<endl; cout<<"* ┌--------------------統(tǒng)計(jì)菜單--------------------┐*"<<endl; cout<<"* | | *"<<endl; cout<<"* | 統(tǒng)計(jì)方式 請(qǐng)輸入 | *"<<endl; cout<<"* | ◆ 按日期統(tǒng)計(jì)違章數(shù)量 1 | *"<<endl; cout<<"* | ◆ 按車牌號(hào)統(tǒng)計(jì)違章次數(shù) 2 | *"<<endl; cout<<"* | ◆ 按地點(diǎn)統(tǒng)計(jì)違章數(shù)量 3 | *"<<endl; cout<<"* | ◆ 顯示處罰>=12分的記錄 4 | *"<<endl; cout<<"* | | *"<<endl; cout<<"* └------------------------------------------------┘*"<<endl; cout<<"*******************************************************"<<endl; cout<<"* ● 返回主菜單 0 *"<<endl; cout<<"*******************************************************"<<endl; cout<<"請(qǐng)選擇統(tǒng)計(jì)方式:"; int Mark=1; while(Mark){ char n;cin>>n;cin.sync(); switch(n) { case '1': countDate();Mark=0;break; case '2': countCarNumber();Mark=0;break; case '3': countLocation();Mark=0;break; case '4': countPoints();Mark=0;break; case '0': return 0; default : cout<<"輸入有誤,請(qǐng)重新輸入:"; } } } return 0; getchar();return 0; } int List::countDate(){ list<Violation>::iterator it; vltnlist.sort(compDate); int sumVltn=0;string y,m1,m2,date1,date2; cout<<"輸入日期范圍:"<<endl ; cout<<"輸入年份:";cin>>y;cin.sync(); cout<<"輸入起始月份:";cin>>m1;cin.sync(); cout<<"輸入結(jié)束月份:";cin>>m2;cin.sync(); date1=y+m1;date2=y+m2; for(it=vltnlist.begin();it!=vltnlist.end();it++){ if((*it).date>=date1&&(*it).date<=date2) sumVltn++; } cout<<"該段時(shí)間內(nèi)違章數(shù)量為:"<<sumVltn;//getchar(); //vltnlist.push_back(Violation("cutme")); //it=vltnlist.begin(); /* cout<<"已按月份統(tǒng)計(jì)違章數(shù)量:"<<endl <<" 違章日期 違章數(shù)量"<<endl; int sumVltn=0;string mouth=((*it).date).substr(4,2),date=(*it).date.substr(0,4); for(it=vltnlist.begin();it!=vltnlist.end();it++) if((*it).date!=""){ if(mouth!=((*it).date).substr(4,2)){ cout<<(*it).date.substr(0,4)<<"年"<<mouth<<"月"<<setw(9)<<sumVltn<<endl; sumVltn=1;mouth=(*it).date.substr(4,2);date=(*it).date.substr(0,4); } else { sumVltn++; } } else{ cout<<date<<"年"<<mouth<<"月"<<setw(9)<<sumVltn<<endl; }*/ //vltnlist.pop_back(); getchar();return 0; } int List::countCarNumber(){ list<Violation>::iterator it; vltnlist.sort(compCarNumber); vltnlist.push_back(Violation("cutme")); it=vltnlist.begin(); cout<<"已按車牌號(hào)統(tǒng)計(jì)違章次數(shù):"<<endl <<" 車牌號(hào) 違章次數(shù)"<<endl; string carNumber=(*it).carNumber;int sumVltn=0; for(it=vltnlist.begin();it!=vltnlist.end();it++) if(carNumber!=(*it).carNumber){ cout<<setw(9)<<carNumber<<setw(9)<<sumVltn<<endl; carNumber=(*it).carNumber;sumVltn=1; } else sumVltn++; vltnlist.pop_back(); getchar();return 0; } int List::countLocation(){ list<Violation>::iterator it; vltnlist.sort(compLocation); vltnlist.push_back(Violation("cutme")); it=vltnlist.begin(); string location=(*it).location;int sumVltn=0; cout<<"已按地點(diǎn)統(tǒng)計(jì)違章數(shù)量:"<<endl <<" 地點(diǎn) 違章數(shù)量"<<endl; for(it=vltnlist.begin();it!=vltnlist.end();it++) if(location !=(*it).location){ cout<<setw(11)<<location<<setw(9)<<sumVltn<<endl; location=(*it).location;sumVltn=1; } else sumVltn++; vltnlist.pop_back(); getchar();return 0; } int List::countPoints(){ list<Violation>::iterator it; vltnlist.sort(compCarNumber); vltnlist.push_back(Violation("cutme")); it=vltnlist.begin(); string carNumber=(*it).carNumber,tel=(*it).tel; int sumPoints=0; cout<<"已顯示處罰>=12分的違章記錄:"<<endl <<" 車牌號(hào) 聯(lián)系電話"<<endl; for(it=vltnlist.begin();it!=vltnlist.end();it++) if(carNumber!=(*it).carNumber){ if(sumPoints>11) cout<<setw(9)<<carNumber<<setw(12)<<tel<<endl; carNumber=(*it).carNumber;sumPoints=(*it).points;tel=(*it).tel; } else sumPoints+=(*it).points; vltnlist.pop_back(); getchar();return 0; } int menu(); int main(){ List* myList=List::getList(); myList->loadFile(); menu(); myList->saveFile(); return 0; } int menu(){ while(1) { system("cls"); cout<<"*******************************************************"<<endl; cout<<"* *"<<endl; cout<<"* ★機(jī)動(dòng)車違章處罰管理系統(tǒng) ★ *"<<endl; cout<<"* *"<<endl; cout<<"*******************************************************"<<endl; cout<<"* ┌---------------------主菜單---------------------┐*"<<endl; cout<<"* | | *"<<endl; cout<<"* | 功能 請(qǐng)輸入 | *"<<endl; cout<<"* | ◆ 添加違章記錄 1 | *"<<endl; cout<<"* | ◆ 修改違章記錄 2 | *"<<endl; cout<<"* | ◆ 刪除違章記錄 3 | *"<<endl; cout<<"* | ◆ 瀏覽違章記錄 4 | *"<<endl; cout<<"* | ◆ 查詢違章記錄 5 | *"<<endl; cout<<"* | ◆ 統(tǒng)計(jì)違章記錄 6 | *"<<endl; cout<<"* | | *"<<endl; cout<<"* └------------------------------------------------┘*"<<endl; cout<<"*******************************************************"<<endl; cout<<"* ● 退出管理系統(tǒng) 0 *"<<endl; cout<<"*******************************************************"<<endl; cout<<"請(qǐng)選擇功能:"; int Mark=1; while(Mark){ char n;cin>>n;cin.sync(); List* myList=List::getList(); switch(n) { case '1': myList->insert();Mark=0;break; case '2': myList->change();Mark=0;break; case '3': myList->del();Mark=0;break; case '4': myList->browse();Mark=0;break; case '5': myList->searchMenu();Mark=0;break; case '6': myList->countMenu();Mark=0;break; case '0': exit(0); default : cout<<"輸入有誤,請(qǐng)重新輸入:"; } } } return 0; }
以上代碼是基于C++語(yǔ)言實(shí)現(xiàn)機(jī)動(dòng)車違章處罰管理系統(tǒng)的關(guān)鍵代碼,代碼附有注釋,有不明白的地方歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的,大家可以更加需求適當(dāng)?shù)奶砑有薷膭h除。
相關(guān)文章
C++通過(guò)boost.date_time進(jìn)行時(shí)間運(yùn)算
這篇文章介紹了C++通過(guò)boost.date_time進(jìn)行時(shí)間運(yùn)算的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C++實(shí)現(xiàn)含附件的郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)含附件的郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05C++動(dòng)態(tài)規(guī)劃之最長(zhǎng)公子序列實(shí)例
這篇文章主要介紹了C++動(dòng)態(tài)規(guī)劃之最長(zhǎng)公子序列,實(shí)例分析了C++求最長(zhǎng)公子序列的相關(guān)技巧,是C++字符串操作的一個(gè)典型應(yīng)用,需要的朋友可以參考下2015-04-04使用C++實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池
這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下2024-03-03教你用c++從頭開(kāi)始實(shí)現(xiàn)決策樹(shù)
從頭實(shí)現(xiàn)一個(gè)分類決策樹(shù)分類器似乎是一個(gè)適當(dāng)?shù)奶魬?zhàn)。這已經(jīng)被證明是一個(gè)測(cè)試但有益的學(xué)習(xí)旅程,我想分享一些我在這個(gè)過(guò)程中的主要經(jīng)驗(yàn),對(duì)c++實(shí)現(xiàn)決策樹(shù)相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)實(shí)現(xiàn)猜數(shù)字小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C++ 將一個(gè)文件讀入數(shù)組再讀出數(shù)組的方法
今天小編就為大家分享一篇C++ 將一個(gè)文件讀入數(shù)組再讀出數(shù)組的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07C語(yǔ)言動(dòng)態(tài)內(nèi)存管理深入探討
動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語(yǔ)言中動(dòng)態(tài)內(nèi)存的管理2022-06-06