c++學(xué)生考勤信息管理系統(tǒng)_第1頁(yè)
c++學(xué)生考勤信息管理系統(tǒng)_第2頁(yè)
c++學(xué)生考勤信息管理系統(tǒng)_第3頁(yè)
c++學(xué)生考勤信息管理系統(tǒng)_第4頁(yè)
c++學(xué)生考勤信息管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、/* 題目:學(xué)生考勤管理系統(tǒng) 考勤信息記錄了學(xué)生的缺課情況, 它包括: 缺課日期、 第幾節(jié)課 (連續(xù)多節(jié)課用 begin-end 的 形式表示 )、課程名稱(課程名稱中不會(huì)出現(xiàn)空格) 、學(xué)生姓名、缺課類型(遲到、早退、請(qǐng) 假及曠課)。試設(shè)計(jì)一考勤管理系統(tǒng),使之能提供以下功能:1 錄入學(xué)生的缺課記錄:從鍵盤輸入數(shù)據(jù)(提示:為避免重復(fù)從鍵盤輸入數(shù)據(jù),測(cè)試時(shí)可 將數(shù)據(jù)存儲(chǔ)在文件中,利用輸入重定向功能讀入) ,輸入格式為:缺課日期 第幾節(jié)課 課程名稱 學(xué)生姓名 缺課類型 每行一條紀(jì)錄。例如:2008-04-29 3-4 C+程序設(shè)計(jì)實(shí)驗(yàn) 張三 遲到2008-04-28 3-4 C+程序設(shè)計(jì) 李四 曠課

2、 2修改某個(gè)學(xué)生的缺課記錄:可以對(duì)缺課紀(jì)錄的任意部分進(jìn)行修改。3查詢某個(gè)學(xué)生的缺課情況:查詢結(jié)果按照日期升序排序,同一天內(nèi)按照所缺課程的時(shí)間 升序排序。4統(tǒng)計(jì)某段時(shí)間內(nèi)(以天為單位) ,曠課學(xué)生姓名及曠課節(jié)數(shù), 查詢結(jié)果先按曠課節(jié)數(shù)降序 排序,曠課節(jié)數(shù)相同的學(xué)生按姓名升序排序;5統(tǒng)計(jì)某段時(shí)間內(nèi),有學(xué)生曠課的課程及曠課人次,按曠課人次由多到少排序,曠課人次 相同的課程按課程名稱升序排序;6系統(tǒng)以菜單方式工作。 通過(guò)幾天的奮斗終于將這個(gè)設(shè)計(jì)做出來(lái)了,如下是該程序的詳細(xì)過(guò)程*/#include #include #include #include #include #include #include

3、 #include using namespace std;struct Student_infoint year,month,day,lesson1,lesson2;std:string course,name,type; std:istream& read(std:istream&);istream& Student_info:read(istream& in) inyearmonthdaylesson1lesson2coursenametype; return in;istream& read_record(istream& in,vector& s)/ 第一個(gè)模塊 輸入學(xué)生的缺課記錄S

4、tudent_info record;s.clear();調(diào)用s.clear()來(lái)清空s的記錄while(record.read(in)s.push_back(record);in.clear();/ 將記錄的錯(cuò)誤狀態(tài)恢復(fù)正確,以繼續(xù)讀取記錄return in;bool is_empty(vector& s)/ 判斷輸入學(xué)生的記錄是否為空,為空則返回真return s.empty();bool compare(Student_info& x,Student_info& y)/ 按照時(shí)間排序 ,若日期相等則看課程時(shí)間if(x.year=y.year&x.month=y.month&x.day=y

5、.day)return x.lesson1y.lesson1;else if(x.year=y.year&x.month=y.month&x.day!=y.day)return x.dayy.day;else if(x.year=y.year&x.month!=y.month)return x.monthy.month;else return x.yeary.year;bool time(const Student_info& stud,int y1,int m1,int d1,int y2,int m2,int d2)/ 篩選符合輸入時(shí)間 段的數(shù)據(jù)if (y1 = stud.year & s

6、tud.month = m1 & stud.day d2)return 0;else if (y1 = stud.year & stud.month m2) return 0;else if (y1 stud.year | y2 stud.year) return 0;elsereturn 1;void rewrite(vector& s)/ 第二個(gè)模塊 修改某個(gè)學(xué)生的缺課情況 if(!is_empty(s) int n,m,j,k; mapstring,vector s_name; mapstring,vector :iterator ix2; vector:iterator ix,iter

7、,itera;string name;定義這些參數(shù)和迭代器必須在SWITHC外,不然它可能被忽略跳過(guò)while(true)coutendl;*endl;*級(jí)菜單cout * 1. 請(qǐng)輸入你要修改缺課記錄的學(xué)生姓名 cout*endl;cout *2. 返 回 上*endl;coutendl;*coutn;if(n=1)s_name.clear();/ 清空 MAP 容器for(ix=s.begin();ix!=s.end();+ix)s_name(*ix).name.push_back(*ix);s.clear();coutname;coutendl;if(s_name.find(name)!

8、=s_name.end()ix2=s_name.find(name); / 找到符合名字要求的數(shù)據(jù),并顯示出for(iter=(*ix2).second.begin();iter!=(*ix2).second.end();+iter) cout(*iter).year-(*iter).month-(*iter).dayt; cout(*iter).lesson1-(*iter).lesson2;coutt(*iter).courset(*iter).namet(*iter).typeendl;itera=(*ix2).second.begin();coutj;for(k=0;k!=j-1;+k

9、)+itera;cout*/ cridl;cout* 需要更改的項(xiàng)目*endl;cout*endl;cout * 1日期 2 節(jié)次3 課程名稱4 姓名5 缺課類型 6返回上一級(jí) *endl;cout*endl;cout*1endl;coutm;switch(m)case 1:cout(*itera).year(*itera).month(*itera).day; break;case 2:cout(*itera).lesson1(*itera).lesson2; break;case 3:cout(*itera).course;break;case 4:cout(*itera).name;br

10、eak;case 5: cout(*itera).type; break;case 6:break;default:cout你的選擇錯(cuò)了,請(qǐng)看清楚!second.begin();iter!=ix2-second.end();iter+)s.push_back(*iter);elsecout沒(méi)有這個(gè)學(xué)生的缺課記錄e ndl;coutendl;break;else if(n=2)return ;elsecout你的選擇錯(cuò)了,請(qǐng)看清楚!e ndl;elsecout 記錄為空,沒(méi)有學(xué)生的缺課記錄 !endl;void Search_record(vector& s)/ 第三個(gè)模塊 if(!is_emp

11、ty(s)int i;vector:iterator iter; mapstring,vector :iterator it1; mapstring,vector s_name; mapstring, vector :iterator itera; vector:iterator it;string name;while(true)cout查找某學(xué)生的缺課情況*endl;cout*endl;cout * 1 輸入你要查詢的學(xué)生姓名 2 返回上一級(jí) cout*endl;cout*endl;*endl;couti;if(i=1)s_name.clear();for(it=s.begin();it!

12、=s.end();+it)s_name(*it).name.push_back(*it);for(itera=s_name.begin();itera!=s_name.end(); +itera) sort(itera-second.begin(),itera-second.end(),compare);coutname;coutendl;if(s_name.find(name)!=s_name.end()it1=s_name.find(name);for(iter=(*it1).second.begin();iter!=(*it1).second.end();+iter) cout(*ite

13、r).year-(*iter).month-(*iter).dayt;cout(*iter).lesson1-(*iter).lesson2;coutt(*iter).courset(*iter).namet(*iter).typeendl;elsecout 沒(méi)有這個(gè)學(xué)生 .endl; coutendl;else if(i=2)return ;elsecout 對(duì)不起,沒(méi)有這個(gè)選項(xiàng) !endl;elsecout 沒(méi)有這個(gè)學(xué)生的缺課記錄 endl;struct Search_structstring name,course;int times;/ 定義另一個(gè)結(jié)構(gòu)模塊bool compare2(S

14、earch_struct& x,Search_struct& y)/ 按照次數(shù)排序 ,次數(shù)相等的則按照名字排 序if(x.times=y.times)return y.times;void Search_s_t(vector& std)/ 第四個(gè)模塊 查找某段時(shí)間內(nèi)曠課學(xué)生姓名及曠課節(jié)數(shù)if(!is_empty(std)vector:iterator it; vector:iterator itera; map:iterator iter; vector vec; int y1,m1,d1,y2,m2,d2; map ret;cout請(qǐng)輸入你要查找的一個(gè)時(shí)間段(y1 ml di y

15、2 m2 d2): y1m1d1y2m2d2;for(it=std.begin();it!=std.end();+it) if(time(*it,y1,m1,d1,y2,m2,d2) retit-name+=(it-lesson2-it-lesson1+1);for(iter=ret.begin();iter!=ret.end();iter+)Search_struct tmp;=iter-first;tmp.times=iter-second;vec.push_back(tmp);sort(vec.begin(),vec.end(),compare2); for(itera=

16、vec.begin();itera!=vec.end();itera+) coutnamettimesendl;elsecout對(duì)不起,沒(méi)有你要查找的記錄!e ndl;void Search_c_t(vector& std)/ 第五個(gè)模塊 查找某段時(shí)間內(nèi)曠課的課程及曠課人次if(!is_empty(std)vector:iterator it; vector:iterator itera; map:iterator iter; vector vec;int y1,m1,d1,y2,m2,d2;map ret;cout請(qǐng)輸入你想要查找的時(shí)間段(y1 mi di y2 m2 d2): y1m1d1

17、y2m2d2;for(it=std.begin();it!=std.end();+it)/ 建立 map 容器 if(time(*it,y1,m1,d1,y2,m2,d2)retit-course+=1;for(iter=ret.begin();iter!=ret.end();iter+)Search_struct tmp;tmp.course=iter-first;tmp.times=iter-second;vec.push_back(tmp);sort(vec.begin(),vec.end(),compare2); for(itera=vec.begin();itera!=vec.end

18、();itera+) coutcoursettimesendl;elsecout 這段時(shí)間內(nèi)沒(méi)有學(xué)生的缺課紀(jì)錄 !endl;int main()vector stu; int choice;while(true)coutendl;cout * *endl;coutendl;cout學(xué)生考勤管理系統(tǒng)*1. 錄 入 學(xué) 生 的 缺 課 記 錄*endl;cout*endl;cout * 2. 修 改 某 個(gè) 學(xué) 生 的 缺 課 記 錄 *endl;cout*endl;*endl;cout*endl;cout某段時(shí)間內(nèi)曠課學(xué)生姓名及曠*endl;cout*endl;cout5.某段時(shí)間內(nèi)曠課的課及曠*endl;cout*endl;cout6.*endl;cout*endl;coutchoice;if(choice=1)cout 請(qǐng)輸入數(shù)據(jù) : endl 年 月

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論