![C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計3_第1頁](http://file4.renrendoc.com/view3/M03/2F/25/wKhkFmbFKNGAefVXAACWANS6L2c432.jpg)
![C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計3_第2頁](http://file4.renrendoc.com/view3/M03/2F/25/wKhkFmbFKNGAefVXAACWANS6L2c4322.jpg)
![C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計3_第3頁](http://file4.renrendoc.com/view3/M03/2F/25/wKhkFmbFKNGAefVXAACWANS6L2c4323.jpg)
![C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計3_第4頁](http://file4.renrendoc.com/view3/M03/2F/25/wKhkFmbFKNGAefVXAACWANS6L2c4324.jpg)
![C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計3_第5頁](http://file4.renrendoc.com/view3/M03/2F/25/wKhkFmbFKNGAefVXAACWANS6L2c4325.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計/C++課程設(shè)計-學(xué)生選課系統(tǒng)設(shè)計目錄1系統(tǒng)需求分析 142總體設(shè)計 153詳細設(shè)計 164界面設(shè)計與各功能模塊實現(xiàn) 195系統(tǒng)調(diào)試 236實驗心得體會 247附:源程序 251系統(tǒng)需求分析(1)、本系統(tǒng)是針對高校學(xué)生的選修課程而設(shè)計,通過本系統(tǒng)高校學(xué)生可以很方便地進行自由選課。主要的問題描述是(功能要求):n門課程,每門課程有課程編號,課程名稱,課程性質(zhì),總學(xué)時,授課學(xué)時,實驗或上機學(xué)時,學(xué)分,開課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課。(2)、主要要求實現(xiàn)的功能如下:①
課程信息錄入功能:能根據(jù)提示將各課程的相關(guān)信息進行輸入并保存;②課程信息瀏覽功能:能將已經(jīng)錄入并保存的信息進行瀏覽;③
查詢功能:可根據(jù)不同的查詢方式查詢相應(yīng)的課程信息。其中查詢方式有按學(xué)分查詢和按課程性質(zhì)查詢兩種;系統(tǒng)流程圖如下:輸入與功能對應(yīng)的的數(shù)字輸入與功能對應(yīng)的的數(shù)字判斷有否開始執(zhí)行相應(yīng)功能結(jié)束是否(3)、輸入輸出要求:系統(tǒng)以菜單方式工作。用戶根據(jù)每一個功能模塊輸入相應(yīng)內(nèi)容,然后進行相應(yīng)的操作。如需進行其他操作,可返回主菜單。輸出的內(nèi)容要有一個良好的界面,使用戶看清楚明白。2總體設(shè)計(1)、系統(tǒng)功能分析本系統(tǒng)主要由一個Class類與其五個成員函數(shù)組成。課題所要求的功能由各個函數(shù)分別得以實現(xiàn)。首先,在Class類內(nèi)定義了一些成員變量,用來保存課程編號,課程名稱,課程性質(zhì),總學(xué)時,授課學(xué)時,實驗或上機學(xué)時,學(xué)分,開課學(xué)期等信息,還對它的成員變量進行了聲明,如:然后,在類外,通過作用域運算符將類內(nèi)聲明的成員函數(shù)定義,以與進行相應(yīng)的操作,以實現(xiàn)相應(yīng)的功能。主要包括功能要求中的五大功能,即信息輸入、信息瀏覽、按學(xué)分查詢課程、按課程性質(zhì)查詢課程等。最后,在主函數(shù)中設(shè)置目錄顯示。用switch瓜分不同的功能選項。系統(tǒng)根據(jù)用戶輸入的符號,調(diào)用相應(yīng)的成員函數(shù),完成功能的實現(xiàn)。(2)、各個模塊之間的關(guān)系如下圖:學(xué)生選修課程系統(tǒng)設(shè)計學(xué)生選修課程系統(tǒng)設(shè)計Course類M函數(shù)Input()Output()SearchByscore()SearchByKind()3詳細設(shè)計 數(shù)據(jù)庫需求分析該程序主要包含一個Class類和一個main()函數(shù)。其中Class類中有Input(),OutPut(),Search(),SearchByscore(float),SearchByKind(string)函數(shù)來實現(xiàn)各功能。像在Input()信息輸入函數(shù)中,ofstreamoutfile創(chuàng)建一個文件輸出流對象語句就要用到系統(tǒng)庫函數(shù)fstream,而conio.h則是Console(鍵盤和屏幕)輸出輸入函數(shù)的頭文件,con-Console,io--input,output。程序中各功能函數(shù)如SearchBy(float)按分數(shù)查詢和SearchByKind(string)按性質(zhì)查詢,顯然是兩個獨立的函數(shù),但其實現(xiàn)過程很像似。數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(E-R圖)課程課程授課學(xué)時時編號名稱上級學(xué)時性質(zhì)學(xué)分時時總學(xué)分開課學(xué)期輸入入輸出顯示查找數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計類層次圖課程課程課程編號課程名字課程性質(zhì)總學(xué)時授課學(xué)時實驗或上機學(xué)時學(xué)分開課學(xué)期課程信息錄入功能課程信息瀏覽功能查詢功能按學(xué)分查詢按課程性質(zhì)查詢學(xué)生選修課程4界面設(shè)計與各功能模塊實現(xiàn)(1)、功能實現(xiàn)的文件模塊:在主函數(shù)中設(shè)置目錄顯示。設(shè)計一個友好、漂亮的界面,通過switch語句進行選擇進入相應(yīng)的功能模塊,建立一個class類的對象a,用對象名調(diào)用class類的功能函數(shù),恰當?shù)氖褂们迤梁瘮?shù)。通過對象a調(diào)用相應(yīng)的成員函數(shù),如a.Input()、a.OutPut()、a.Search()等等,這些公有函數(shù)成員就是這個系統(tǒng)要求設(shè)計的功能模塊。各個功能函數(shù)的具體實現(xiàn)如下:錄入函數(shù)模塊:首先,創(chuàng)建一個文件輸出流對象outfile,打開文件,判斷文件是否存在。通過while設(shè)一個無限循環(huán),當給出指定條件時退出。在循環(huán)中,調(diào)用cout函數(shù)來提示用戶輸入相應(yīng)的信息,如課程編號、名稱、課程性質(zhì)、總學(xué)時、授課學(xué)時、實驗或上機學(xué)時、學(xué)分、開課學(xué)期等等。將需要的課程輸入完畢之后,可根據(jù)提示再輸入“f”,即可返回主菜單,重新進行功能的選擇。該步驟界面設(shè)計操作圖如下:(輸入“1”顯示(瀏覽)函數(shù)模塊:該函數(shù)首先創(chuàng)建了輸入流文件對象infile,使用語句infile.open(file),然后定義一個string類型的二維數(shù)組,用來保存從文本內(nèi)讀取的信息,用for循環(huán)保證保存不止一門課程的信息。最后,cout輸出顯示所有保存的信息。操作界面圖如下:查找功能,即按學(xué)分查找和按課程性質(zhì)查找,具體的實現(xiàn)如下:按課程性質(zhì)查找:創(chuàng)建輸入流文件對象infile,然后定義一個string類型的二維數(shù)組,用來保存從文本內(nèi)讀取的信息,比較用戶輸入的字符和保存的信息中那些課程的性質(zhì)相對應(yīng),將相應(yīng)的課程信息進行輸出顯示,界面設(shè)計操作圖如下:按課程學(xué)分查找:原理同上,如果用戶輸入的學(xué)分與所保存的信息想對應(yīng),則將對應(yīng)的課程信息輸出顯示。輸入“0”可返回主菜單。具體程序見源程序清單。該步驟界面顯示如下:5系統(tǒng)調(diào)試(1)、在查找功能函數(shù)當中,剛開始我輸入的課程性質(zhì)用數(shù)字代替,而后面我的查找函數(shù)在進行輸入比較時是用漢字進行比較的,這樣就導(dǎo)致了查找錯誤,剛開始我找了好久也找不出來,后來還是在同學(xué)的幫助下終于找到了這個錯誤,并改正。輸出了正確的結(jié)果。(2)、在class類當中我剛開始把成員變量如課程性質(zhì)只簡單的設(shè)置為字符型char,當在類外進行初始化時出現(xiàn)了錯誤,因為把要獲得字符串的函數(shù)只簡單的設(shè)置為字符型是不行的,它的返回得不到一個字符串,要把其設(shè)置string類型或者數(shù)組類型,這樣就可以通過編譯了。(3)、進行程序調(diào)試時,事先函數(shù)中沒有用到清屏,導(dǎo)致界面繁瑣不清晰。后來在頭文件中加了#include<windows.h>,又在程序中適當?shù)靥砑恿藄ystem("cls")語句,這才使得界面友好清晰。6實驗心得體會心得連續(xù)三天的課程設(shè)計終于要接近尾聲了。雖然接下來還要面臨緊張的期末考試,但總算可以稍微松一口氣。說實話,每次做課程設(shè)計、寫實驗報告,我都好上火長痘好幾天。本來因為上學(xué)期的課程設(shè)計沒有認真做,在網(wǎng)上下載了一篇類似的題目,自己作了一些修改,便跑去答辯,被老師當眾批評,心里羞愧得要死!心里暗下決心,這次試驗報告一定要自己寫,不管寫得多差,只要自己很努力地認真在寫就好了。這次題目初看不是很難,一個類,一些成員變量,幾個成員函數(shù),將它們組合起來就OK了??墒窃綄懴氯?,便覺得處處是難題。到最后感覺自己像處在一個大迷宮里,四周到處是出口,走近了一看,卻發(fā)現(xiàn)那只是上面畫著門的墻壁······我只會定義一個類和它的成員變量以與成員函數(shù),但要求是要有N門課程呢,還要能顯示你所輸入的課程信息,還要按要求將分類不同的信息挑選出來······天哪,這可怎么辦呢?看來,要將自己輸入的信息有記錄地保存起來就好了??墒抢蠋煕]教這個呀(后來才知道相關(guān)內(nèi)容在C語言教科書上有,上學(xué)期的課程設(shè)計也有涉與到,但由于上次的沒有認真做,所以對該知識點沒有印象)。還跑去圖書館找資料,找到了相關(guān)內(nèi)容,可是,答辯的時間也逼近了······第三天上午進實驗室,問同學(xué),發(fā)現(xiàn)已經(jīng)有人將這個題目完整地做了出來,我不得不感嘆人家的才思敏捷。也難怪哦,人家是腳踏實地,C語言的基礎(chǔ)打得好,誰讓我上學(xué)期玩去了呢?呵······老師在實驗室里鼓勵大家積極答辯,我盯著自己的作品,這個連“半成品”都談不上的程序,這能去答辯嗎?老師也沒要求必須答辯,要不,直接copy他們的程序?qū)懥藢嶒瀳蟾娼徊钔晔铝?!但這不跟上學(xué)期一樣了么?我這近三天的寢食難安不都白熬了么?去答辯吧,就算給自己的付出一個結(jié)果吧······老師很仁慈,我的那個程序?qū)τ陬}目要求根本沒什么意義,也就是說我根本沒完成任務(wù)。估計老師是看我熬了這三天太可憐了,勉強讓我過了。實驗做完了,心情還是有點沉重,但沒上次那樣難過了。畢竟自己寫的,通過思考,查資料,還是學(xué)到了不少東西的,對C語言也進行了鞏固。我要盡快將所缺的知識填補上來,然后再下次的課程設(shè)計中打個漂亮的勝仗!7附:源程序#include<conio.h>#include<stdlib.h>#include<iostream>#include<fstream>#include<string>usingnamespacestd;classCourse{private: intcourseNumber; stringcourseName; stringcourseKind; intcoursePeriod; intschoolPeriod; intexperimentPeriod; floatcredithour; stringcourseterm;public: voidCourseInfoInput();//信息輸入 voidCourseInfoOutPut();//信息輸出 voidSearch();//查找信息 voidSearchByCredithour(float);//按照學(xué)分查找 voidSearchByCourseKind(string);//按照課程;類型查找};constchar*coursefile="C:\\course.txt";//將課程信息定位到C盤下的course.txt中!?。。。。。。?!voidCourse::CourseInfoInput()//課程信息的錄入{ ofstreamoutcoursefile;//創(chuàng)建一個文件輸出流對象 outcoursefile.open(coursefile);//打開文件 if(!outcoursefile)//判斷文件是否存在 { cout<<"文件打開失敗!"<<endl; return; } while(1)//無限循環(huán),給出指定條件退出 { cout<<"***********************************課程信息***********************************\n"; cout<<"按任意鍵開始信息錄入\n"; cout<<"輸入q退出\n"; if(getch()=='q') { break; } cout<<"請輸入課程編號:"; cin>>courseNumber; cout<<"請輸入課程名稱:"; cin>>courseName; cout<<"請輸入課程性質(zhì):"; cin>>courseKind; cout<<"請輸入總學(xué)時:"; cin>>coursePeriod; cout<<"請輸入授課學(xué)時:"; cin>>schoolPeriod; cout<<"請輸入實驗&上機學(xué)時:"; cin>>experimentPeriod; cout<<"請輸入學(xué)分:"; cin>>credithour;cout<<"請輸入開課學(xué)期:"; cin>>courseterm; outcoursefile<<courseNumber<<""<<courseName<<""<<courseKind<<""<<coursePeriod <<""<<schoolPeriod<<""<<experimentPeriod<<""<<credithour<<""<<endl; } outcoursefile.close();//關(guān)閉輸出流文件}voidCourse::CourseInfoOutPut()//課程信息的瀏覽{ ifstreamincoursefile;//創(chuàng)建輸入流文件對象 incoursefile.open(coursefile);//打開 if(!incoursefile)//判斷文件存在 { cout<<"文件讀取失敗"; return; } cout<<"課程編號|課程名稱|課程性質(zhì)|總學(xué)時|授課學(xué)時|實驗上機學(xué)時|學(xué)分|開課學(xué)期\n"; stringarrcourse[100][100];//定義一個string類型的二維數(shù)組,用來保存從文本內(nèi)讀取的信息 intline=0; memset(arrcourse,0,sizeof(arrcourse));//將數(shù)組清空 while(!incoursefile.eof())//文件不為空的條件設(shè)置 { for(intj=0;j<7;j++) { incoursefile>>arrcourse[line][j]; } line++; } for(inti=0;i<line;i++) { for(intj=0;j<7;j++) { cout<<arrcourse[i][j]<<"\t"; } cout<<endl; } incoursefile.close();}voidCourse::SearchByCredithour(floattempch){ ifstreamincoursefile;//創(chuàng)建輸入流文件對象 incoursefile.open(coursefile);//打開 if(!incoursefile)//判斷文件存在 { cout<<"文件讀取失敗"; return; } stringarrcourse[100][100];//定義一個string類型的二維數(shù)組,用來保存從文本內(nèi)讀取的信息 intline=0; memset(arrcourse,0,sizeof(arrcourse));//將數(shù)組清空 while(!incoursefile.eof())//文件不為空的條件設(shè)置 { incoursefile>>arrcourse[line][0]>>arrcourse[line][1]>>arrcourse[line][2]>>arrcourse[line][3] >>arrcourse[line][4]>>arrcourse[line][5]>>arrcourse[line][6];//文件流讀取數(shù)據(jù) line++; } cout<<"課程編號|課程名稱|課程性質(zhì)|總學(xué)時|授課學(xué)時|實驗上機學(xué)時|學(xué)分|開課學(xué)期\n"; for(inti=0;i<line;i++) { if(atof(arrcourse[i][6].c_str())==tempch)//比較 { cout<<arrcourse[i][0]<<"\t"<<arrcourse[i][1]<<"\t"<<arrcourse[i][2]<<"\t" <<arrcourse[i][3]<<"\t"<<arrcourse[i][4]<<"\t" <<arrcourse[i][5]<<"\t"<<arrcourse[i][6]<<"\n"<<endl; } } cout<<"\n\n"; incoursefile.close();}voidCourse::SearchByCourseKind(stringstrtemp)///課程類型查詢{ ifstreamincoursefile;//創(chuàng)建輸入流文件對象 incoursefile.open(coursefile);//打開 if(!incoursefile)//判斷文件存在 { cout<<"文件讀取失敗"; return; } stringarrcourse[100][100]; intline=0; memset(arrcourse,0,sizeof(arrcourse)); while(!incoursefile.eof()) { incoursefile>>arrcourse[line][0]>>arrcourse[line][1]>>arrcourse[line][2]>>arrcourse[line][3] >>arrcourse[line][4]>>arrcourse[line][5]>>arrcourse[line][6]; line++; } cout<<"課程編號|課程名稱|課程性質(zhì)|總學(xué)時|授課學(xué)時|實驗上機學(xué)時|學(xué)分|開課學(xué)期\n"; for(inti=0;i<line;i++) { if(arrcourse[i][2]==strtemp) { cout<<arrcourse[i][0]<<"\t"<<arrcourse[i][1]<<"\t"<<arrcourse[i][2]<<"\t" <<arrcourse[i][3]<<"\t"<<arrcourse[i][4]<<"\t" <<arrcourse[i][5]<<"\t"<<arrcourse[i][6]<<"\n"<<endl; } } cout<<"\n\n";}voidCourse::Search(){ while(1) { cout<<"選擇查詢方式:"<<endl; cout<<"(1).按課程類型查詢"<<endl; cout<<"(2).按學(xué)分查詢"<<endl; cout<<"(0).返回"<<endl; inti; cin>>i; switch(i) { case1: cout<<"請輸入課程類型:\n"; charstrtmp[100]; cin>>strtmp; SearchByCourseKind(strtmp); break; case2: cout<<"請輸入學(xué)分:\n"; floatftemp; cin>>ftemp; SearchByCredithour(ftemp); break; } if(i==0) { break; } }}intmain(){ CourseExcourse; while(1) { cout<<"***************************************************************************\n"; cout<<"*學(xué)生選課系統(tǒng)
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025股份轉(zhuǎn)讓合同
- 煤礦集中檢修方案
- 襄陽防腐木屋施工方案
- 青島垂直植物墻施工方案
- 2024-2025學(xué)年高中歷史 專題八 當今世界經(jīng)濟的全球化趨勢 第三課 經(jīng)濟全球化的世界說課稿 人民版必修2
- 凈化設(shè)備合同范例
- 28 棗核 說課稿-2023-2024學(xué)年統(tǒng)編版語文三年級下冊
- Unit 3 Fit for life Welcome to the unit 說課稿-2024-2025學(xué)年高中英語譯林版(2020)選擇性必修第二冊
- 橋面防腐木施工方案
- 線性系統(tǒng)理論鄭大鐘第二版
- 寧騷公共政策學(xué)完整版筆記
- 走進奧運奧運知識簡介
- 項目負責(zé)人考試題庫含答案
- GB/T 7251.5-2017低壓成套開關(guān)設(shè)備和控制設(shè)備第5部分:公用電網(wǎng)電力配電成套設(shè)備
- 2023年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))試題庫含答案解析
- 中考語文非連續(xù)性文本閱讀10篇專項練習(xí)及答案
- 勇者斗惡龍9(DQ9)全任務(wù)攻略
- 經(jīng)顱磁刺激的基礎(chǔ)知識及臨床應(yīng)用參考教學(xué)課件
- 小學(xué)語文人教四年級上冊第四單元群文閱讀“神話故事之人物形象”PPT
- ISO 31000-2018 風(fēng)險管理標準-中文版
評論
0/150
提交評論