版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 面向?qū)ο笳n程設(shè)計(jì)</b></p><p> 題 目 C++課程設(shè)計(jì) </p><p> 課題:C++課程設(shè)計(jì)</p><p> (一)、課程設(shè)計(jì)題目:</p><p><b> C++課程設(shè)計(jì) </b></p>&
2、lt;p> ?。ǘ⒛康呐c要求: </p><p><b> 1、目的: </b></p><p> ?。?)要求學(xué)生達(dá)到熟練掌握C++語言的基本知識和技能; </p><p> (2)基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; </p><p> ?。?)能夠利用所學(xué)的基本知識和技能,解決簡單的面向?qū)ο蟪绦?/p>
3、設(shè)計(jì)問題。 </p><p><b> 2、基本要求: </b></p><p> (1)要求利用面向?qū)ο蟮姆椒ㄒ约癈++的編程思想來完成系統(tǒng)的設(shè)計(jì); </p><p> ?。?)要求在設(shè)計(jì)的過程中,建立清晰的類層次; </p><p> ?。?)在系統(tǒng)中至少要定義四個類,每個類中要有各自的屬性和方法; </p
4、><p> (4)在系統(tǒng)的設(shè)計(jì)中,至少要用到面向?qū)ο蟮囊环N機(jī)制。 </p><p><b> 3、創(chuàng)新要求: </b></p><p> 在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì),如根據(jù)查找結(jié)果進(jìn)行修改的功能。 </p><p> 4、寫出設(shè)計(jì)說明書 </p><p> ?。ㄈ?、設(shè)計(jì)方法和基本原理:
5、 </p><p> 1、問題描述(功能要求): </p><p> 考勤信息記錄了學(xué)生的缺課情況,它包括:缺課日期、第幾節(jié)課(連續(xù)多節(jié)課用 begin-end 的形式表示)、課程名稱(課程名稱中不會出現(xiàn)空格)、學(xué)生姓名、缺課類型(遲到、早退、請假及曠課)。試設(shè)計(jì)考勤管理系統(tǒng),使之能提供以下功能:</p><p> 1).錄入學(xué)生的缺課記錄:從鍵盤輸入數(shù)據(jù)(提
6、示:為避免重復(fù)從鍵盤輸入數(shù)據(jù),測試時可將數(shù)據(jù)存儲在文件中,利用輸入重定向功能讀入),輸入格式為:</p><p> 缺課日期第幾節(jié)課 課程名稱學(xué)生姓名 缺課類型</p><p><b> 每行一條紀(jì)錄。</b></p><p><b> 例如:</b></p><p> 2008-04-29
7、 3-4 C++程序設(shè)計(jì)實(shí)驗(yàn) 張三 遲到</p><p> 2008-04-28 3-4 C++程序設(shè)計(jì) 李四 曠課</p><p> 2).修改某個學(xué)生的缺課記錄:可以對缺課紀(jì)錄的任意部分進(jìn)行修改,然后顯示一下修改后的紀(jì)錄。</p><p> 3).查詢某個學(xué)生的缺課情況:查詢結(jié)果按照日期升序排序,同一天內(nèi)按照所缺課程的時間升序排序。</p>
8、<p> 4).統(tǒng)計(jì)某段時間內(nèi)(以天為單位),曠課學(xué)生姓名及曠課節(jié)數(shù),查詢結(jié)果先按曠課節(jié)數(shù)降序排序,曠課節(jié)數(shù)相同的學(xué)生按姓名升序排序;</p><p> 5).統(tǒng)計(jì)某段時間內(nèi),有學(xué)生曠課的課程及曠課人次,按曠課人次由多到少排序,曠課人次相同的課程按課程名稱升序排序; </p><p> 6).系統(tǒng)以菜單方式工作。(所謂菜單指用戶可以自由選擇所要執(zhí)行的功能)</p&g
9、t;<p> 2、問題的解決方案: </p><p> 根據(jù)系統(tǒng)功能要求,可以將問題解決分為以下步驟: </p><p> ?。?)應(yīng)用系統(tǒng)分析,建立該系統(tǒng)的功能模塊框圖以及界面的組織和設(shè)計(jì);</p><p> (2)分析系統(tǒng)中的各個實(shí)體及它們之間的關(guān)系包括屬性和行為; </p><p> ?。?)根據(jù)問題描述,設(shè)計(jì)系統(tǒng)的
10、類層次; </p><p> ?。?)完成類層次中各個類的描述(包括屬性和方法); </p><p> ?。?)完成類中各個成員函數(shù)的定義; </p><p> ?。?)完成系統(tǒng)的應(yīng)用模塊; </p><p><b> ?。?)功能調(diào)試; </b></p><p> ?。?)完成系統(tǒng)總結(jié)報告以及系
11、統(tǒng)使用說明書</p><p><b> 目 錄</b></p><p> 1.系統(tǒng)需求分析1</p><p><b> 2.總體設(shè)計(jì)1</b></p><p><b> 3.詳細(xì)設(shè)計(jì)1</b></p><p><b>
12、4.系統(tǒng)調(diào)試1</b></p><p><b> 5.結(jié)果分析1</b></p><p><b> 6.總結(jié)1</b></p><p><b> 附錄:源程序清單</b></p><p><b> 系統(tǒng)需求分析</b><
13、;/p><p> 考勤信息記錄了學(xué)生的缺課情況,它包括:缺課日期、第幾節(jié)課(連續(xù)用begin-end的形式表示)、課程名稱(課程名稱中不會出現(xiàn)空格)、學(xué)生姓名、缺課類型(遲到、早退、請假及曠課)。試設(shè)計(jì)考勤管理系統(tǒng),使之能提供以下功能:</p><p> 1).錄入學(xué)生的缺課記錄:從鍵盤輸入數(shù)據(jù)(提示:為避免重復(fù)從鍵盤輸入數(shù)據(jù),測試時可將數(shù)據(jù)存儲在文件中,利用輸入重定向功能讀入),輸入格式
14、為:缺課日期 第幾節(jié)課 課程名稱學(xué)生姓名 缺課類型</p><p><b> 每行一條紀(jì)錄。</b></p><p><b> 例如:</b></p><p> 2009-04-29 2-4 中國近現(xiàn)代文學(xué)史 李云龍 遲到</p><p> 2009-04-28 2-4 大學(xué)生社交禮儀 馬志
15、鵬 曠課</p><p> 2).修改某個學(xué)生的缺課記錄:可以對缺課紀(jì)錄的任意部分進(jìn)行修改,然后顯示一下修改后的紀(jì)錄。</p><p> 3).查詢某個學(xué)生的缺課情況:查詢結(jié)果按照日期升序排序,同一天內(nèi)按照所缺課程的時間升序排序。</p><p> 4).統(tǒng)計(jì)某段時間內(nèi)(以天為單位),曠課學(xué)生姓名及曠課節(jié)數(shù),查詢結(jié)果先按曠課節(jié)數(shù)降序排序,曠課節(jié)數(shù)相同的學(xué)生按姓
16、名升序排序;</p><p> 5).統(tǒng)計(jì)某段時間內(nèi),有學(xué)生曠課的課程及曠課人次,按曠課人次由多到少排序,曠課人次相同的課程按課程名稱升序排序; </p><p> 6).系統(tǒng)以菜單方式工作。(所謂菜單指用戶可以自由選擇所要執(zhí)行的功能。學(xué)生可以通過以上功能錄入信息、修改信息、查詢信息、整理統(tǒng)計(jì)出所要了解的信息,除了要實(shí)現(xiàn)上述的基本功能之外,本系統(tǒng)還應(yīng)該在細(xì)節(jié)上下工夫,使用戶使用方便,
17、在使用的過程中保持一個愉快的心情。學(xué)生考勤管理系統(tǒng)有廣大的用戶群,這其中有老師、有教務(wù)處主任、有公司管理人員,也可以供給一般用戶使用??傊撓到y(tǒng)可以滿足用戶需求,實(shí)現(xiàn)對其管理的人員的考勤工作。</p><p><b> 總體設(shè)計(jì)</b></p><p> 學(xué)生考勤管理系統(tǒng)包含五個大的功能,分別是:錄入學(xué)生缺課信息、修改學(xué)生缺課信息、查詢某個學(xué)生的缺課情況、統(tǒng)計(jì)某段
18、時間內(nèi)(以天為單位),曠課學(xué)生姓名及曠課節(jié)數(shù)和統(tǒng)計(jì)某段時間內(nèi),有學(xué)生曠課的課程及曠課人次。學(xué)生的缺課信息主要包含缺課日期,第幾節(jié)課、課程名稱,學(xué)生姓名,缺課類型。</p><p> 在錄入學(xué)生缺課信息時根據(jù)系統(tǒng)提示逐一輸入。每輸入完一條信息,系統(tǒng)會提示是否繼續(xù)輸入,用戶可以選擇繼續(xù)或返回主菜單。</p><p> 在修改學(xué)生缺課信息時,用戶首先輸入要修改的學(xué)生姓名,系統(tǒng)會檢索如果系統(tǒng)中
19、有該學(xué)生的相關(guān)信息則系統(tǒng)首先會提示用戶修改該學(xué)生的那一部分信息,用戶可自行選擇。如果系統(tǒng)中沒有該學(xué)生的相關(guān)信息,則系統(tǒng)會給相關(guān)提示,用戶可以選擇繼續(xù)輸入要修改的學(xué)生姓名或選擇退出返回主菜單。</p><p> 在查詢學(xué)生缺課信息時,用戶先輸入要查詢的學(xué)生姓名,系統(tǒng)檢索判斷是否存在該</p><p> 學(xué)生的信息然后做出相應(yīng)的提示??傊?,用戶可以方便的在系統(tǒng)提示下進(jìn)行使用。</p&
20、gt;<p> 學(xué)生考勤管理系統(tǒng)中功能模塊圖:</p><p><b> 3. 詳細(xì)設(shè)計(jì)</b></p><p> 學(xué)生考勤管理系統(tǒng)中四個類的類層次圖為:</p><p> 圖2 學(xué)生考勤管理系統(tǒng)中中四個類的類層次圖</p><p> 學(xué)生考勤管理系統(tǒng)中各功能模塊的實(shí)現(xiàn):</p>
21、<p> 圖3 學(xué)生考勤管理系統(tǒng)中菜單函數(shù)的功能圖</p><p> 學(xué)生缺課信息錄用功能模塊:</p><p> 圖4 學(xué)生缺課信息錄入的功能</p><p> 修改某學(xué)生缺課信息功能的模塊圖</p><p> 圖5 學(xué)生考勤管理系統(tǒng)修改學(xué)生缺課信息功能圖</p><p> 3 查詢
22、某學(xué)生缺課信息功能圖:</p><p> 圖6 學(xué)生考勤管理系統(tǒng)查詢學(xué)生缺課信息功能圖</p><p> 統(tǒng)計(jì)某段時間內(nèi)曠課學(xué)生姓名及曠課節(jié)數(shù)功能模塊:</p><p> 圖7統(tǒng)計(jì)某段時間內(nèi)曠課學(xué)生姓名及曠課節(jié)數(shù)功能圖</p><p> 5、統(tǒng)計(jì)某段時間內(nèi),有學(xué)生曠課的課程及曠課人次功能模塊</p><p>
23、 圖8 統(tǒng)計(jì)某段時間內(nèi),有學(xué)生曠課的課程及曠課人次功能圖</p><p> 圖 9 學(xué)生考勤管理系統(tǒng)中四個類的UML圖</p><p><b> 系統(tǒng)調(diào)試</b></p><p> 程序編寫完成后,我進(jìn)行了程序調(diào)試。調(diào)試過程中,出現(xiàn)了以下問題:當(dāng)錄入學(xué)生缺課信息時,出現(xiàn)了無法退出錄入函數(shù)的情況,主要原因是輸入函數(shù)中whi
24、le循環(huán)語句沒有設(shè)置跳出循環(huán)的條件。除此之外,修改某學(xué)生缺課信息時,如果沒有該學(xué)生的缺課信息,系統(tǒng)沒有提示要用戶沒有該學(xué)生信息,也沒有建議用戶重新輸入要修改的學(xué)生姓名。由此我發(fā)現(xiàn)了該系統(tǒng)修改學(xué)生缺課信息的不足。于是,我對修改函數(shù)進(jìn)行了修改與完善。在該函數(shù)中,我設(shè)置了if語句用來判斷系統(tǒng)中是否存有用戶要修改的學(xué)生缺課信息。如果沒有,則提示用戶沒有該學(xué)生的缺課信息,用戶可以選擇繼續(xù)輸入要修改的學(xué)生姓名或者退出修改環(huán)節(jié),可以在 循環(huán)語句中改變
25、循環(huán)進(jìn)行的條件從而終止循環(huán)。至于在修改后顯示該學(xué)生的缺課信息,運(yùn)行時發(fā)現(xiàn)系統(tǒng)并沒有做到這一點(diǎn),對源代碼檢查之后發(fā)現(xiàn)是修改函數(shù)中顯示函數(shù)的調(diào)用出了點(diǎn)問題,顯示函數(shù)的實(shí)參有誤,應(yīng)該把要修改缺課信息的學(xué)生所在的信息類對象作為實(shí)參,然后用顯示函數(shù)的形參引用實(shí)參對象,通過對象調(diào)用信息類的成員函數(shù),從而實(shí)現(xiàn)顯示功能。至于該系統(tǒng)的查詢功能的實(shí)現(xiàn),在調(diào)試時發(fā)現(xiàn)還有欠缺,當(dāng)隨便輸入一個學(xué)生姓名時,系統(tǒng)沒有顯示該學(xué)生的缺課信息,也沒有提</p>
26、<p><b> 5. 結(jié)果分析</b></p><p> 這次的課設(shè),我寫的程序也沒有什么獨(dú)到之處,我覺得唯一可以從我的程序可以看出的是數(shù)組用得比較多,反正是沒啥特色,不僅如此,還寫得功能不全,實(shí)在是慚愧。現(xiàn)在在這里也只能說說它的不足之處了。</p><p> 類層次不夠清晰,縱觀整個程序可以發(fā)現(xiàn)四個類之間的關(guān)系不甚恰當(dāng),我有這個感覺,但我不知如
27、何改進(jìn)。</p><p> 函數(shù)參數(shù)設(shè)定不夠完美,整個程序中對指針的運(yùn)用比較少。對于指針的巧妙運(yùn)用把握得不夠。還有就是容易missing;或者是},這都是些應(yīng)該改掉的毛病。</p><p> 除此以外,我對于怎樣用文件保存數(shù)據(jù)還沒深入了解,但我將數(shù)據(jù)保存到文件后又因文件打不開而無法訪問文件中的數(shù)據(jù),對于動態(tài)鏈表,我不是很清晰,也就是說無法做到熟稔運(yùn)用。在調(diào)試過程中我發(fā)現(xiàn)在主函數(shù)中把字符
28、數(shù)組名name賦值給字符指針p即p=name;然后用cout<<p;語句可以輸出字符數(shù)組里全部的內(nèi)容,但利用函數(shù)返回指針值卻不能做到這一點(diǎn),在我思考一番后終于明白了,這與內(nèi)存中的地址值有關(guān)。具體為什么我是解釋不清了</p><p> 在調(diào)用系統(tǒng)的顯示功能時,如果在getname()函數(shù)前加一個*號輸出的只是一個字符,不加反而能輸出所有字符。getname()函數(shù)的返回值為指針類型,但前面說過利用函數(shù)
29、返回指針類型的值并不能輸出字符數(shù)組中所有的字符,為什么這里又可以呢?老天,這是為什么?我不知道這一知識,這也算我的程序的不足之處吧!</p><p> 對于兩個統(tǒng)計(jì)函數(shù)的功能不全,我感到無能為力,我為了這兩函數(shù)苦思了兩天,硬是沒湊合來。到后來,腦子里都亂了,運(yùn)行時屏幕上盡是些亂七八糟的東西。老師幫我看看,看有沒有什么簡單的方法一下搞定它。</p><p> 結(jié)果不是很好,但過程夠了就行
30、。這也是自欺欺人的看法,讓我再一次自責(zé)吧。</p><p><b> 6.總結(jié)</b></p><p> 這次的程序設(shè)計(jì)相對于上學(xué)期還是有了進(jìn)步的。學(xué)生考勤管理系統(tǒng)要求至少要有四個類,在起初,對于定義哪四個類我是不清楚的,通過仔細(xì)的研讀問題描敘終于在腦海里確定了這四個類。既然是學(xué)生考勤管理系統(tǒng),那由學(xué)生缺課信息中的日期我想到了時間類,這是一個很簡單的類。從系統(tǒng)的幾
31、大功能我又想到了系統(tǒng)的基礎(chǔ)就是缺課學(xué)生的缺課信息,于是我又想到了一個信息類,還有兩個類是根據(jù)兩個統(tǒng)計(jì)功能想到的,在現(xiàn)在看來似乎有些不妥。通過這次的課程設(shè)計(jì)我明白了學(xué)習(xí)程序設(shè)計(jì)語言必須要勤做實(shí)驗(yàn),通過實(shí)驗(yàn)總結(jié)經(jīng)驗(yàn)。平時遇到的一些小問題一定要重視,越是基礎(chǔ)的知識越要理解透徹。比如指針與數(shù)組方面的知識,一旦沒有弄清楚,在設(shè)計(jì)程序時就會吃虧。</p><p> 這次的課設(shè)中,我遇到了很多的問題,有的通過思考或查看書本解
32、決了,有的還留在腦子里,只有通過孜孜不倦的求索我們才會有進(jìn)步,不懂得思考就不能真正的掌握一門知識。這次的實(shí)驗(yàn)給以了我警示,它讓我明白我所掌握的知識還很欠缺,對于繼承與派生這一章的知識,我以為自己勉強(qiáng)掌握了,這次實(shí)驗(yàn)后我發(fā)現(xiàn)我掌握得還不夠?;惖谋Wo(hù)成員公有繼承到派生類,類外是否可以通過對象來訪問呢,原先我認(rèn)為是可以的,經(jīng)過這次程序設(shè)計(jì),我知道我錯了。</p><p> 總之,我覺得做學(xué)問不應(yīng)該馬虎,對于所學(xué)一定
33、要有深入的理解,這也是我這次課設(shè)得到的啟示。</p><p><b> 附錄:源程序清單 </b></p><p> #include<iostream></p><p> #include<cstring></p><p> #include<windows.h></p
34、><p> using namespace std; </p><p><b> //時間類</b></p><p> class time</p><p><b> {public:</b></p><p> time(int y=0,int m=0,int d=0)
35、</p><p> {year=y;month=m;day=d;}</p><p><b> ~time(){}</b></p><p> protected:</p><p> int year,month,day;</p><p><b> };</b><
36、/p><p><b> //信息類</b></p><p> class xinxi:public time</p><p><b> { public:</b></p><p> xinxi(){ tiaoshu++;}</p><p> ~xinxi(){tiaos
37、hu--;}</p><p> void setname(char *n){strcpy(name,n);}</p><p> void settime(int y,int m,int d){year=y;month=m;day=d;}</p><p> void setqklx(char *qk){strcpy(queke,qk);}</p>
38、<p> void setjieci(char *jc){strcpy(jieci,jc);}</p><p> void setkechen(char *kc){strcpy(kechen,kc);}</p><p> char *getname(){char *n;n=name;return n;}</p><p> char *getqklx
39、(){char *qk=queke;return qk;}</p><p> char *getjieci(){char *jc;jc=jieci;return jc;}</p><p> char *getkechen(){char *gk;gk=kechen;return gk;}</p><p> int *gettime();</p>&
40、lt;p><b> private:</b></p><p> char name[20];//姓名</p><p> char jieci[3],kechen[10],queke[10];</p><p> int tm[3];</p><p> static int tiaoshu;</p>
41、;<p><b> };</b></p><p> int xinxi::tiaoshu=0;</p><p> int *xinxi::gettime()</p><p> { int *t;</p><p><b> t=tm;</b></p><
42、p> tm[0]=year;</p><p> tm[1]=month;</p><p> tm[2]=day;</p><p><b> return t;</b></p><p><b> }</b></p><p><b> //缺課課程類&
43、lt;/b></p><p> class qkechen:public xinxi</p><p><b> {public:</b></p><p> qkechen(){kcshu++;}</p><p> ~qkechen(){kcshu--;}</p><p> int
44、getrc(xinxi st1[],int n,int j);</p><p> char qkn[20];//公有數(shù)據(jù)成員</p><p><b> private:</b></p><p> int renci;</p><p> static int kcshu;//靜態(tài)數(shù)據(jù)成員</p>&l
45、t;p><b> };</b></p><p> int qkechen::kcshu=0;</p><p> int qkechen::getrc(xinxi st1[],int n,int j)</p><p> { renci=0;</p><p><b> renci++;</
46、b></p><p> for(int i=0;i<n;i++)</p><p> if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+2)==</p><p> *(st1[j].gettime()+2))</p><p
47、> if(strcmp(qkn,st1[i].getkechen())==0)</p><p><b> renci++;</b></p><p> return renci;</p><p><b> }</b></p><p><b> //缺課學(xué)生類</b>
48、;</p><p> class qstu:public xinxi</p><p><b> {public:</b></p><p> qstu(){qst++;}</p><p> ~qstu(){qst--;}</p><p> void print(xinxi &st1
49、);</p><p> int getjs(xinxi st1[],int n,int j);</p><p> int setjs(int js=0)</p><p> {jieshu=js;}</p><p> char qstn[20];</p><p><b> private:</b
50、></p><p> int jieshu; </p><p> static int qst; //靜態(tài)數(shù)據(jù)成員</p><p><b> };</b></p><p> int qstu::qst=0; </p><p><b> //類的實(shí)現(xiàn)</b>&l
51、t;/p><p> void qstu::print(xinxi &st1)</p><p><b> { </b></p><p> cout<<"| 缺課日期 |"<<" 第幾節(jié)課 |"<<" 課程名稱 |"<<"
52、 缺課類型|"<<endl;</p><p> cout<<"|"<<*st1.gettime()<<"|"<<*(st1.gettime()+1)<<*(st1.gettime()+2)<<"|"<<st1.getjieci()<<&
53、quot;|"</p><p> <<st1.getkechen()<<"|"<<st1.getqklx()<<"|"<<endl;</p><p><b> }</b></p><p> int qstu::getjs(xinx
54、i st1[],int n,int j)</p><p> { int i=0,js=0;</p><p> xinxi min; </p><p> if(*(st1[j].getjieci()+2)!='\0')</p><p><b> js=+2;</b></p>&l
55、t;p><b> else</b></p><p><b> js++;</b></p><p> for(i=0;i<n;i++)</p><p> if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettim
56、e()+2)==*(st1[j].gettime()+2))</p><p> if(strcmp(st1[i+1].getname(),qstn)==0)</p><p><b> { </b></p><p> if(*(st1[i].getjieci()+2)!='\0')</p><p>
57、<b> js=+2;</b></p><p><b> else</b></p><p><b> js++;</b></p><p><b> }</b></p><p> jieshu=js;</p><p> r
58、eturn jieshu;</p><p><b> }</b></p><p><b> // 函數(shù)聲明</b></p><p> int shuru(xinxi st1[]);</p><p> void chaxun(xinxi st1[],qstu qt[]);</p>
59、<p> void xiugai(xinxi st1[],int n);</p><p> void tongji1(xinxi st1[],qstu qt1[]);</p><p> void tongji2(xinxi st1[],qkechen qk1[]);</p><p> void caidan();</p><p
60、> void xiansi(xinxi &st1);</p><p> void setqstn(xinxi st1[],qstu qt1[],int n);</p><p> void setqkn(xinxi st1[],qkechen qk[],int n);</p><p><b> //全局變量</b></
61、p><p> int g,k=1,b=1;</p><p><b> int q=-1;</b></p><p> char name[20],kechen[10],queke[10],jieci[3];</p><p> int y,m,d; </p><p><b> //主
62、函數(shù)</b></p><p> int main()</p><p> { xinxi tl[15];//定義15條信息類對象</p><p> qstu qt[10];</p><p> qkechen qk[6];</p><p><b> int ch;</b>&l
63、t;/p><p><b> while(1)</b></p><p> {cout<<"********歡迎進(jìn)入學(xué)生考勤管理系統(tǒng)!*********"<<endl;</p><p><b> caidan();</b></p><p> cout<
64、;<"--------請選擇菜單項(xiàng):"<<endl;</p><p><b> cin>>ch;</b></p><p> switch(ch)</p><p> {case 1: g=shuru(tl); break;</p><p> case 2: xiug
65、ai(tl,g); break;</p><p> case 3: chaxun(tl,qt); break;</p><p> case 4: tongji1(tl,qt); break;</p><p> case 5: tongji2(tl,qk); break;</p><p> case 6: exit(0);</p&
66、gt;<p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> } </b></p><p><b> //菜單函數(shù)</
67、b></p><p> void caidan()</p><p> { system("color A");</p><p> cout<<"*************************************************************"<<endl;</
68、p><p> cout<<"* 學(xué)生考勤管理系統(tǒng) *"<<endl;</p><p> cout<<"*************************************************************"<
69、<endl; cout<<"1.-------------錄入學(xué)生的缺課記錄---------------------------*"<<endl; cout<<"2.-------------修改學(xué)生的缺課記錄---------------------------*"<<endl;</p><p> cout<
70、<"3.-------------查詢學(xué)生的缺課情況---------------------------*"<<endl;</p><p> cout<<"4.--------統(tǒng)計(jì)某段時間內(nèi)曠課學(xué)生姓名及曠課節(jié)數(shù)--------------*"<<endl; </p><p> cout<<
71、"5.--------統(tǒng)計(jì)某段時間內(nèi)曠課的課程及曠課人次----------------*"<<endl;</p><p> cout<<"6.----------------退出系統(tǒng)----------------------------------*"<<endl;</p><p><b> }&
72、lt;/b></p><p><b> //輸入函數(shù)</b></p><p> int shuru(xinxi st1[])</p><p><b> { char a;</b></p><p> cout<<"------輸入開始!----"<&
73、lt;endl;</p><p><b> do{ q++;</b></p><p> cout<<"請輸入學(xué)生姓名"<<endl;</p><p> cin>>name;</p><p> st1[q].setname(name);</p>
74、<p> cout<<"請輸入課程名稱"<<endl;</p><p> cin>>kechen;</p><p> st1[q].setkechen(kechen);</p><p> cout<<"請輸入缺課日期"<<endl;</p>
75、;<p> cin>>y>>m>>d;</p><p> st1[q].settime(y,m,d);</p><p> cout<<"請輸入缺課類型"<<endl;</p><p> cin>>queke;</p><p>
76、st1[q].setqklx(queke);</p><p> cout<<"請輸入缺課節(jié)次"<<endl;</p><p> cin>>jieci;</p><p> st1[q].setjieci(jieci);</p><p> cout<<"是否還要
77、繼續(xù)輸入:(y/n)"<<endl;</p><p><b> cin>>a;</b></p><p> }while(a=='y');</p><p> return q+1;</p><p><b> }</b></p>&
78、lt;p><b> //修改函數(shù)</b></p><p> void xiugai(xinxi st1[],int n)</p><p><b> { </b></p><p> int k=1,j=0,a[10];</p><p><b> int flgh;<
79、/b></p><p><b> int h;</b></p><p> while(k==1) </p><p> { cout<<"請輸入你要修改缺課記錄的學(xué)生姓名"<<endl;</p><p> cin>>name;</p>
80、<p><b> flgh=0;</b></p><p> for(int i=0;i<n;i++)</p><p> if(strcmp(name,st1[i].getname())==0)</p><p> do{ a[j]=i;</p><p> cout<<"1.修
81、改日期2.修改節(jié)次3.修改課程名稱4.修改缺課類型"<<endl;</p><p> cout<<"請輸入要選擇的數(shù)值(1,2,3,4)"<<endl;</p><p><b> int b;</b></p><p><b> cin>>b;</
82、b></p><p><b> if(b==1)</b></p><p> { cout<<"請輸入新日期"<<endl;</p><p> cin>>y>>m>>d;</p><p> st1[i].settime(y,m,d
83、);</p><p><b> }</b></p><p> else if(b==2)</p><p> {cout<<"請輸入新節(jié)次"<<endl;</p><p> cin>>jieci;</p><p> st1[i].se
84、tjieci(jieci);</p><p><b> }</b></p><p> else if(b==3)</p><p> {cout<<"請輸入新課程名稱"<<endl;</p><p> cin>>kechen;</p><p
85、> st1[i].setkechen(kechen);</p><p><b> }</b></p><p> else if(b==4)</p><p> { cout<<"請輸入新缺課類型"<<endl;</p><p> cin>>queke;
86、</p><p> st1[i].setqklx(queke);</p><p><b> } </b></p><p> flgh=1;j++;</p><p> }while(b<1||b>4);</p><p> if(flgh==0)</p><p
87、> {cout<<"沒有你要找的學(xué)生姓名,請重試要退出請按0"<<endl;</p><p><b> cin>>k;</b></p><p><b> }</b></p><p><b> else</b></p>
88、<p> {cout<<"還要繼續(xù)嗎(1\0)退出請按0"<<endl;</p><p><b> cin>>k;</b></p><p><b> }</b></p><p><b> }</b></p><
89、;p> for(int i=0;i<j;i++)</p><p> { h=a[i];</p><p> xiansi(st1[h]);</p><p><b> }</b></p><p><b> }</b></p><p><b>
90、 // 查詢函數(shù)</b></p><p> void chaxun(xinxi st1[],qstu qt[])</p><p><b> { </b></p><p> char n='y';</p><p> int u[10];</p><p> w
91、hile(n=='y')</p><p> { int j=0;</p><p> cout<<"輸入你要查詢的學(xué)生姓名:"<<endl;</p><p> cin>>name; </p><p><b> int i=0;</b>
92、</p><p> for(;i<g;i++)</p><p> if(strcmp(name,st1[i].getname())==0)</p><p> { u[j]=i;</p><p><b> j++;</b></p><p><b> }</b>
93、</p><p><b> if(j==0)</b></p><p> { cout<<"沒有你所要的學(xué)生名字!";//沒有找到</p><p> cout<<"是否退出退出請按n\n";</p><p><b> cin>>
94、;n;</b></p><p><b> }</b></p><p> for(int a=0;a<j;a++)</p><p> { //只有一條信息</p><p><b> if(j<2)</b></p><p><b>
95、 { i=u[a];</b></p><p> cout<<"| 缺課日期 |"<<" 第幾節(jié)課 |"<<" 課程名稱 |"<<" 缺課類型|"<<endl;</p><p> cout<<"| "<
96、;<*st1[i].gettime()<<"| "<<*(st1[i].gettime()+1)<<"| "<<*(st1[i].gettime()+2)<<"| "<<st1[i].getjieci()<<"| "</p><p> <
97、;<st1[i].getkechen()<<"| "<<st1[i].getqklx()<<"| "<<endl;</p><p><b> } </b></p><p> //兩條信息以上排序</p><p><b> el
98、se</b></p><p><b> {</b></p><p><b> i=u[a];</b></p><p> if(*(st1[i].gettime()+1)<*(st1[i+1].gettime()+1))</p><p> qt[i].print(st1[i]
99、);</p><p> else if(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)<*(st1[i+1].gettime()+2))</p><p> qt[i].print(st1[i]);</p><p> else if(*(st1[i]
100、.gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)==*(st1[i+1].gettime()+2))</p><p> if(strcmp(st1[i].getjieci(),st1[i+1].getjieci())==-1)</p><p> qt[i].print(st1[i]);</p
101、><p><b> }</b></p><p> cout<<"是否繼續(xù)查詢(y/n)繼續(xù)請按y退出按n"<<endl;</p><p><b> cin>>n;</b></p><p><b> }</b></
102、p><p><b> } </b></p><p><b> } </b></p><p> //統(tǒng)計(jì)某段時間內(nèi)曠課學(xué)生姓名及曠課節(jié)數(shù)</p><p> void tongji1(xinxi st1[],qstu qt1[])</p><p> { int
103、d1=0,js=0;</p><p> xinxi min;</p><p><b> if(g==0)</b></p><p> cout<<"沒有你要統(tǒng)計(jì)的學(xué)生信息請返回菜單錄入學(xué)生缺課信息"<<endl;</p><p> else if(g==1)</p&
104、gt;<p> {cout<<"姓名:"<<st1[0].getname()<<endl;</p><p> if(*(st1[0].getjieci()+2)!='\0')</p><p><b> js=+2;</b></p><p><b&
105、gt; else</b></p><p><b> js++;</b></p><p> cout<<"節(jié)數(shù):"<<js<<endl;</p><p><b> } </b></p><p><b> else
106、</b></p><p><b> //信息按時間排序</b></p><p><b> {int i=0;</b></p><p> for(;i<(g-1);i++)</p><p><b> {</b></p><p>
107、 if(*(st1[i].gettime()+1)<*(st1[i+1].gettime()+1))</p><p> {min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}</p><p> else if(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].ge
108、ttime()+2)<*(st1[i+1].gettime()+2))</p><p> {min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}</p><p> else if(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)==*(s
109、t1[i+1].gettime()+2))</p><p><b> d1++;</b></p><p><b> }</b></p><p> for(int j=0;j<(g-d1);j++)</p><p><b> {</b></p><
110、;p> cout<<*st1[j].gettime()<<*(st1[j].gettime()+1)<<*(st1[j].gettime()+2)<<endl;</p><p> for(i=0;i<k;i++)</p><p> { setqstn(st1,qt1,g);</p><p> cou
111、t<<"姓名:"<<qt1[i].qstn<<endl;</p><p> cout<<"節(jié)數(shù):"<<qt1[i].getjs(st1,g,i)<<endl;</p><p><b> }</b></p><p><b>
112、; }</b></p><p><b> }</b></p><p><b> }</b></p><p> //統(tǒng)計(jì)某段時間內(nèi)曠課的課程及曠課人次 </p><p> void tongji2(xinxi st1[],qkechen qk1[])</p><
113、;p> { int d1=0,rc=0;</p><p> xinxi min;</p><p><b> if(g==0)</b></p><p> cout<<"沒有你要統(tǒng)計(jì)的學(xué)生信息請返回菜單錄入學(xué)生缺課信息"<<endl;</p><p> else i
114、f(g==1)</p><p> {cout<<"課程名:"<<st1[0].getkechen()<<endl;</p><p><b> rc++;</b></p><p> cout<<"人數(shù):"<<rc<<endl;&
115、lt;/p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p><b> int i=0;</b></p><p> for(;i<g;i+
116、+)</p><p><b> {</b></p><p> if(*(st1[i].gettime()+1)<*(st1[i+1].gettime()+1))</p><p> {min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}</p><p> else if(
117、*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)<*(st1[i+1].gettime()+2))</p><p> {min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}</p><p> else if(*(st1[i].gettim
118、e()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)==*(st1[i+1].gettime()+2))</p><p><b> d1++;</b></p><p><b> }</b></p><p> for(int j=0;j<(g
119、-d1);j++)</p><p><b> {</b></p><p> cout<<*st1[j].gettime()<<*(st1[j].gettime()+1)<<*(st1[j].gettime()+2)<<endl;</p><p> for(i=0;i<b;i++)<
120、;/p><p> { setqkn(st1,qk1,g);</p><p> cout<<"課程名:"<<qk1[i].qkn<<endl;</p><p> cout<<"人數(shù):"<<qk1[i].getrc(st1,g,i)<<endl;</p
121、><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //顯示函數(shù)</b></
122、p><p> void xiansi(xinxi &st1)</p><p> { cout<<"| 缺課日期 |"<<" 第幾節(jié)課 |"<<" 課程名稱 |"<<" 學(xué)生姓名|"<<" 缺課類型|"<&
123、lt;endl;</p><p> cout<<"|"<<*(st1.gettime())<<"|"<<*(st1.gettime()+1)<<*(st1.gettime()+2)</p><p> <<"|"<<st1.getjieci()&
124、lt;<"|"<<st1.getkechen()<<"|"<<st1.getname()<<"|"<<st1.getqklx()<<"|"<<endl; </p><p><b> }</b></p>&l
125、t;p><b> //設(shè)置缺課學(xué)生名</b></p><p> void setqstn(xinxi st1[],qstu qt1[],int n)</p><p><b> { </b></p><p><b> int i=0;</b></p><p> f
126、or(;i<n;i++)</p><p><b> {if(i==0)</b></p><p> strcpy(qt1[0].qstn,st1[i].getname());</p><p> else if(strcmp(st1[i].getname(),st1[i+1].getname())!=0)</p><
127、p> {strcpy(qt1[i].qstn,st1[i].getname());</p><p><b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
128、</p><p> //設(shè)置有缺課學(xué)生的課程名</p><p> void setqkn(xinxi st1[],qkechen qk[],int n)</p><p><b> { </b></p><p><b> int i=0;</b></p><p>
129、 for(;i<n;i++)</p><p> { if(i==0)</p><p> strcpy(qk[0].qkn,st1[i].getkechen());</p><p> else if(strcmp(st1[i].getkechen(),st1[i+1].getkechen())!=0)</p><p>
130、{strcpy(qk[i].qkn,st1[i+1].getkechen());</p><p><b> b++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人事考勤管理系統(tǒng)c++課程設(shè)計(jì)
- c++課程設(shè)計(jì)報告-學(xué)生考勤管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- c++課程設(shè)計(jì)-學(xué)生管理系統(tǒng)
- c++學(xué)生管理系統(tǒng)課程設(shè)計(jì)
- c++課程設(shè)計(jì)學(xué)生通訊管理系統(tǒng)
- c++課程設(shè)計(jì)---學(xué)生學(xué)籍管理系統(tǒng)
- c++課程設(shè)計(jì)完-----學(xué)生管理系統(tǒng)
- c++課程設(shè)計(jì)----學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)----學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)c++課程設(shè)計(jì)
- c++課程設(shè)計(jì)---學(xué)生信息管理系統(tǒng)
- c++課程設(shè)計(jì)-學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)學(xué)生學(xué)籍成績管理系統(tǒng)
- c++課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)——學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- c++學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- c++課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)報告(學(xué)生學(xué)籍管理系統(tǒng))
評論
0/150
提交評論