




已閱讀5頁,還剩28頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
河南工程學院高級程序設計語言課程設計成果報告學生成績管理系統設計與實現學生學號: 學生姓名: 學 院: 計算機學院 專業班級: 軟件工程1341 專業課程: 高級程序設計語言 指導教師: 2014 年 6 月 27 日題 目學生成績管理系統設計與實現考核項目考核內容得分平時考核(30分)出勤情況、態度、效率;知識掌握情況、基本操作技能、知識應用能力、獲取知識能力系統設計(20分)分析系統的功能模塊編程調試(20分)實現系統的各個功能模塊,并完成調試回答問題(15分)回答老師針對課程設計提出的問題課程設計報告撰寫(10分)嚴格按照規范要求完成課程設計報告源代碼(5分)按照規范要求完成課程設計源代碼的排版總 評 成 績指導教師評語: 日期: 年 月 日目 錄第1章 系統設計目的11.1 課程設計目的11.2課程設計任務1第2章 系統實現思路22.1 類的設計22.2 自定義函數的設計32.3 主函數的設計4第3章 系統詳細設計63.1 數據錄入、保存功能函數63.2 數據查詢功能函數73.3 數據修改功能函數93.4 成績打印函數10第4章 系統調試運行124.1 系統程序運行過程124.2 系統程序運行結果15課程設計體會17參考文獻18附 錄19第1章 系統設計目的1.1 課程設計目的本課程設計的目的是培養應用面向對象程序設計設計方法及思想解決實際問題的能力,掌握使用面向對象程序設計語言C+,熟悉面向對象開發平臺VisualC+6.0,提高調查研究、查閱技術資料以及編寫技術文獻的能力。1.2課程設計任務(1)設計四個類,包括學生類(描述學生基本信息);成績類:班級類;課程類(描述課程信息:課程編號,科目名稱,如高等數學,大學英語等);(2)學生成績及課程信息用文件保存,程序執行時從文件讀入;(3)能按學期,按班級完成對學生成績的錄入、修改,能按班級統計學生的成績;(4)求學生的總分及平均分,并能根據學生的平均成績進行排序,能查詢學生成績,不及格科目及學生名單;能按班級輸出學生的成績單。 設置學生的成績信息:學生學號、姓名、所選課程名稱、平時成績、期末成績、平時成績所占百分比。 計算學生總評成績:總評成績=平時成績*平時成績所占百分比+期末成績*(1-平時成績所占百分比)。 顯示學生的姓名、所選課程名稱以及平時成績、期末成績和總評成績信息。分單人顯示和以班輸出(班成績單格式輸出到文件)。 注意,至少應包含一個班、30人、三門課。 第2章 系統實現思路通過類的封裝,將課程類的信息儲存在學生類中,學生信息儲存在班級類中,程序的所有功能均通過班級類的成員函數實現。2.1 類的設計第一步建立四個類用于描述各個操作對象的基本信息class score /分數信息類public: /各科期末成績 int s_math; int s_english; int s_c; /各科成績 int s_total_m; int s_total_e; int s_total_c; int s_average; /綜評成績 int s_sum; /總成績;class course /課程信息類public: int cou_id; /科目編碼 string cou_name; /科目名稱;class student:public score /學生信息類public: string name; /學生姓名 string sex; /學生性別 int std_id; /學號 /各科平時成績 int s_normal_m; int s_normal_e; int s_normal_c; double per; /平時成績所占百分比 friend bool operator stu2.s_average; ;class grades /班級信息類public: string major; int cla_id; int peop_num; multisetstu; /儲存學生信息/包含自定義函數 void fread(int n); /錄入學生信息 void seek(int m_std_id); /查找 void revise(int m_std_id); /學生信息修改 void display(void); /按班級輸出成績 void display1(void); /查找成績不及格同學并輸出相關不及格科目;2.2 自定義函數的設計第二步設計功能函數用于操作第一步中所建立的操作對象以實現系統功能的核心步驟void fread(int n); /錄入學生信息void seek(int m_std_id); /查找(按學號)void revise(int m_std_id); /學生信息修改(按學號)void display(void); /按班級輸出成績void display1(void); /查找成績不及格同學并輸出相關不及格科目2.3 主函數的設計第三部建立實際操作對象,運用自定義函數實現系統功能int main() /主函數,用來實現系統功能int c; int t; grades cla; /定義操作對象 cout*endl; cout請輸入專業cla.major; cout請輸入班級cla.cla_id; cout請輸入學生人數:cla.peop_num; cla.fread(cla.peop_num); while(1) system(cls); cout1_修改學生信息endl; cout2_打印班級成績單endl; cout3_打印個人成績單endl; cout4_打印不及格學生名單endl; cout5_退出c; switch (c) case 1: coutt; cla.revise(t); break; case 2: cla.display(); break; case 3: coutt; cla.seek(t); break; case 4: cla.display1(); break; case 5: return 0; default: cout輸入錯誤!endl; system(pause); return 0;第3章 系統詳細設計系統包括查詢/修改個人分數,打印班級成績單及不及格名單,并對學生排序。所有功能均由grades成員函數實現:fread()負責初始化讀入信息,display()負責打印班級成績單,revise()負責修改學生信息,seek()負責查找,failshow()負責打印不及格名單。3.1 數據錄入、保存功能函數該函數運用C+面向對象程序設計(譚浩強版)一書中的“文件操作與文件流”章節中所介紹的知識,通過使用VC+編譯器中的庫函數進行學生信息的錄入與保存工作。說明:每一個打開的文件都有一個文件指針,該指針的初始位置是由I/O方式指定,每次讀寫都從文件指針的當前位置開始。每讀入一個字節,指針就后移一個字節。當文件指針移到最后,就會遇到文件結束EOF(文件結束符也占一個字節,其值為-1),此時流對象的成員函數eof的值為非0值(一般設為1),表示文件結束了。這就是該輸入方式的運行機制。void grades:fread(int n) /按照學生信息錄入成績 student tem; ifstream infile(f1.txt,ios:in);/錄入f1.txt文件中的信息 if(! infile) cerr open error!endl; exit(1); for(int i=0;tem.sextem.std_idtem.pertem.s_normal_mtem.s_normal_etem.s_normal_c;infiletem.s_mathtem.s_englishtem.s_c;tem.s_total_m=tem.s_normal_m*tem.per+tem.s_math*(1-tem.per); tem.s_total_e=tem.s_normal_e*tem.per+tem.s_english*(1-tem.per); tem.s_total_c=tem.s_normal_c*tem.per+tem.s_c*(1-tem.per); tem.s_sum=tem.s_total_m+tem.s_total_e+tem.s_total_c; tem.s_average=(tem.s_sum)/3; stu.insert(tem); infile.close();3.2 數據查詢功能函數根據自定義函數設定,在對學生進行成績錄入時唯一不會改變、不會出現錯誤的就是學生的學號,所以該函數使用學生信息中的學號為操作對象進行學生成績查詢基本不會出現太大的問題。void grades:seek(int m_std_id) /按學號查找學生 student temstu; temstu.std_id=m_std_id; multiset:iterator iter; iter=stu.find(temstu); if(iter!=stu.end() cout姓名:(*iter).nameendl; cout學號:(*iter).std_idendl; cout高等數學1:(*iter).s_normal_m大學英語1:(*iter).s_normal_e程序設計1:(*iter).s_normal_cendl; cout高等數學2:(*iter).s_math大學英語2:(*iter).s_english程序設計2:(*iter).s_cendl; cout高等數學:(*iter).s_total_m大學英語:(*iter).s_total_e程序設計:(*iter).s_total_cendl; cout總成績:(*iter).s_sumendl; cout綜評成績:(*iter).s_averageendl; else cout找不到該學生!endl;運用條件函數查找學生中成績不及格的學生同時將這些名單及不及格科目進行打印。void grades:display1(void) /查找各學科不及格學生名單 student stu1; multiset:iterator iter; iter=stu.find(stu1); if(iter!=stu.end() if(*iter).s_total_m60|(*iter).s_total_e60|(*iter).s_total_c) cout姓名:(*iter).nameendl; cout不及格科目:endl; if(*iter).s_total_m60) cout高等數學endl; if(*iter).s_total_e60) cout大學英語endl; if(*iter).s_total_c60) cout程序設計endl; 3.3 數據修改功能函數根據自定義函數設定,在對學生進行成績錄入時唯一不會改變、不會出現錯誤的就是學生的學號,所以該函數使用學生信息中的學號為操作對象進行學生成績查詢基本不會出現太大的問題。void grades:revise(int m_std_id) /學生信息修改 student temstu; temstu.s_sum=0; temstu.std_id=m_std_id; multiset:iterator iter; iter=stu.find(temstu); if(iter!=stu.end() cout請輸入要修改的學生信息endl; cout期末成績:temstu.s_math; cintemstu.s_english; cintemstu.s_c; cout平時成績:temstu.s_normal_m; cintemstu.s_normal_e; cintemstu.s_normal_c; cout平時成績所占百分比temstu.per; temstu.s_total_m=temstu.s_normal_m*temstu.per+temstu.s_math*(1-temstu.per); temstu.s_total_e=temstu.s_normal_e*temstu.per+temstu.s_english*(1-temstu.per); temstu.s_total_c=temstu.s_normal_c*temstu.per+temstu.s_c*(1-temstu.per); temstu.s_sum=temstu.s_total_m+temstu.s_total_e+temstu.s_total_c;temstu.s_average=(temstu.s_sum)/3;cout姓名;cout性別:temstu.sex;stu.erase(iter); /刪除舊元素tu.insert(temstu); /插入新元素 else cout找不到該學生endl;3.4 成績打印函數通過主函數進行控制使該函數運行,從而達到打印班級成績單的目的,該函數同樣運用C+面向對象程序設計(譚浩強版)一書中的“文件操作與文件流”章節中所介紹的知識,具體內容可翻閱查看。 void grades:display(void) /按照班級打印學生成績單 multiset:iterator iter; /multiset容器,提取fread函數向容器中儲存的學生信息 ofstream outfile(f1.txt,ios:out); if(! outfile) cerr open error!endl; exit(1); outfile專業:major班級:cla_id人數peop_numendl; outfile姓名t性別t學號t高等數學1t高等數學t大學英語1t大學英語t程序設計1t程序設計t總成績tt綜評成績tendl; for(iter=stu.begin();iter!=stu.end();iter+) outfile(*iter).namet(*iter).sext(*iter).std_idt; outfile(*iter).s_math(*iter).s_total_mt; outfile(*iter).s_english(*iter).s_total_et; outfile(*iter).s_c(*iter).s_total_ct; outfile(*iter).s_sum(*iter).s_averageendl; outfile.close();第4章 系統調試運行對已經編碼完畢的程序進行調試運行,發現程序錯誤,更改錯誤。將代碼進一步優化,功能進一步完善。4.1 系統程序運行過程對已經編碼完畢的程序進行調試運行,發現程序錯誤,更改錯誤。將代碼進一步優化,功能進一步完善。輸入班級信息,按照班級信息進行下一步操作。圖4.1班級信息圖按照學生學號對學生信息進行修改并儲存到原文件中。圖4.2修改信息圖按照班級信息將班級成績單打印并儲存到D:王豪杰的程序設計rDebugr.exe文件中。圖4.3個人信息儲存圖按照學生學號單獨打印成績并儲存到D:王豪杰的程序設計rDebugr.exe文件中。圖4.4學生成績打印圖按照學生基本信息將成績不及格學生名單進行打印并將結果儲存到D:王豪杰的程序設計rDebugr.exe文件中。圖4.5成績不及格圖4.2 系統程序運行結果原文件中儲存的學生信息。經過“1”操作之后背修改的原文件信息。經過“2”操作之后按照班級信息打印的班級成績單。課程設計體會學期末的課程設計是一次非常珍貴的機會,這是一次可以讓我們所學的理論與實際相結合的機會。老師給我們布置了學生成績管理系統這一題目。通過這次比較完整的一個程序的設計,我走出了純理論的學習,從一種全新的角度去學習。理論與實際相結合的設計,鍛煉了我綜合運用所學的基礎知識,解決實際問題的能力,同時也提高我查閱文獻資料、對程序整體的把握等其他能力水平。而且通過對整體的掌控,對局部的取舍,以及對細節的斟酌處理,都使我的能力得到了鍛煉,我的各方面經驗都得到了極大的豐。當然在程序設計過程中我跟其他同學之間也進行了一定的交流,我們在交流中,迸發出了很多設計靈感,互相建議改進的過程中,從各個方面共同改進著,這個已經不能僅僅稱作課程設計的作品。 參考文獻1 譚浩強.C+面向對象程序設計.清華大學出版社2 譚浩強.C+面向對象程序設計習題上機指導.清華大學出版社3 Kenneth C.Louden.編譯原理及實踐.機械工業出版社4H.M.Deitel(美) P.J.Deitel(美).C+大學教程.電子工業出版社5Herbert Schildt.C+編譯藝術.清華大學出版社6Al Stevens Clayton Walnum(美).標準C+寶典.電子工業出版社附 錄#include #include #include #include #include #include #include #include using namespace std;class score /分數public: int s_total; int s_ave; int s_sum;class course /課程信息 public: int cou_id; string cou_name; int mark; /分數;class student:public score /學生信息public: string name; string sex; int std_id; int s_normal; /平時成績 double per; /平時成績所占百分比 int m; /該學生選課的門數 vector cour; /該學生所選的課;bool operator stu2.std_id; class grades /班級public: string major; int cla_id; int peop_num; multiset stu; void fread(int n); /對成績的錄入,n個學生 void revise(int t_ID); /根據學號修改學生信息 void display(void); /打印班級成績單 void seek(int t_ID); /查找 void failshow(void); /打印不及格學生名單;void grades:failshow() ofstream outfile(outn.dat,ios:out); multiset:iterator iter; for(iter=stu.begin();iter!=stu.end();iter+) if(*iter).s_ave60) outfile(*iter).name (*iter).std_id endl; outfile.close(); cout完成:輸出到:./outn.datendl;void grades:seek(int t_ID) /查找學號為t_ID的學生 student temstu; temstu.std_id=t_ID; multiset:iterator iter=stu.find(temstu); if(iter!=stu.end() cout姓名: (*iter).name學號:(*iter).std_idendl; for(int i=0;i(*iter).m;i+) cout(*iter).cour.at(i).cou_name: (*iter).cour.at(i).mark; cout總成績:(*iter).s_sum綜評成績:(*iter).s_totalendl; else cout找不到該學生endl;void grades:display(void) /輸出班級成績單 multiset:iterator iter; ofstream outfile(out.dat,ios:out); if(!outfile) coutopen errorendl; exit(1); outfile專業:major班級:cla_id人數peop_numendl; outfile姓名t性別t學號t各科成績t總成績tt綜評成績tendl; for(iter=stu.begin();iter!=stu.end();iter+) outfile(*iter).namet(*iter).sext(*iter).std_id ; for(int i=0;i(*iter).m;i+) outfile(*iter).cour.at(i).cou_name (*iter).cour.at(i).mark ; outfilet(*iter).s_sumt(*iter).s_totaltendl; outfile.close(); cout完成,輸出到:./out.datendl;void grades:fread(int n) student tem; course t; ifstream infile(in.dat,ios:in); if(!infile) coutopen error !endl; exit (1); for(int i=0;tem.sextem.std_idtem.pertem.s_normal; /設置學生信息 infiletem.m; tem.s_sum=0; for(int j=0;jt.cou_idt.cou_namet.mark; tem.s_sum+=t.mark; /總分 tem.cour.push_back(t); tem.s_ave=(tem.s_sum)/tem.m; /平均分 tem.s_total=tem.s_normal*tem.per+tem.s_sum*(1-tem.per); /總評成績 stu.insert(tem); infile.close();void grades:revise(int t_ID) student temstu; temstu.std_id=t_ID; temstu.s_sum=0; vector:iterator i; multiset:iterator iter=stu.find(temstu); if(iter!=stu.end() cout請輸入要修改的學生信息endl; /*for(i=(*iter).cour.begin();i!=(*iter).cour.end();i+) cout(*iter).cour.at(i).cou_name:temstu.cour.at(i).mark; temstu.s_sum+=temstu.cour.at(i).mark; */ cout平時成績temstu.s_normal; cout平時成績所占百分比temstu.per; temstu.s_ave=temstu.s_sum/temstu.m; temstu.s_total=temstu.s_normal*temstu.per+temstu.s_sum*(1-temstu.per); cout姓名; cout性別:temstu.sex; stu.erase(iter); /刪除舊元素 stu.insert(temstu); /插入新元素 cout修改完成endl; else cout找不到該學生endl;int main() system(color d0); int c; int t; grades cla; cout*endl; cout*學生管理系統*endl; cout請輸入學生人數:cla.peop_num; cout請輸入專業:cla.major; cout請輸入班級cla.cla_id; cla.fread(cla.peop_num); while(1) system(cls); cout*endl; cout*endl; cout 1_修改學生信息endl; cout 2_打印班級成績單endl; cout 3_打印個人成績單endl; cout 4_打印不及格學生名單endl; cout 5_退出c; switch (c) case 1: coutt; cla.revise(t); break; case 2: cla.display(); break; case 3: coutt; cla.seek(t); break; case 4: cla.failshow(); break; case 5: return 0; default: cout輸入錯誤!endl; system(pause); return 0;#include #include #include #include #include #include #include #include using namespace std;class score /分數public: int s_total; int s_ave; int s_sum;class course /課程信息 public: int cou_id; string cou_name; int mark; /分數;class student:public score /學生信息public: string name; string sex; int std_id; int s_normal; /平時成績 double per; /平時成績所占百分比 int m; /該學生選課的門數 vector cour; /該學生所選的課;bool operator stu2.std_id; class grades /班級public: string major; int cla_id; int peop_num; multiset stu; void fread(int n); /對成績的錄入,n個學生 void revise(int t_ID); /根據學號修改學生信息 void display(void); /打印班級成績單 void seek(int t_ID); /查找 void failshow(void); /打印不及格學生名單;void grades:failshow() ofstream outfile(outn.dat,ios:out); multiset:iterator iter; for(iter=stu.begin();iter!=stu.end();iter+) if(*iter).s_ave60) outfile(*iter).name (*iter).std_id endl; outfile.close(); cout完成:輸出到:./outn.datendl;void grades:seek(int t_ID) /查找學號為t_I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能微電網系統優化與應用研究-洞察闡釋
- 節能建筑施工技術在綠色市場中的推廣效果-洞察闡釋
- 跨界融合下的信息服務-洞察闡釋
- 全球變暖影響評估-第2篇-洞察及研究
- 冰雪運動損傷預防-洞察闡釋
- 量子并行計算與量子算法研究-洞察闡釋
- 工作滿意度在遠程工作環境中的表現研究-洞察闡釋
- 智能電力網絡與能源互聯網-洞察闡釋
- 胸腔穿刺定位與深度
- 國術館運營管理制度
- 初中數學課程標準解讀與教材分析doc
- 江蘇省鹽城市2022-2023學年七年級下冊生物期中試卷
- GA∕T 1781-2021 公共安全社會視頻資源安全聯網設備技術要求
- 基本藥物和國家基本藥物制度
- Photoshop二級考試試題及答案
- 裂隙燈數碼型slm說明書
- 傷口基礎知識和濕性愈合理論
- 晶圓封裝測試工序和半導體制造工藝流程
- 重力式橋臺的計算公式
- 專家共識--缺血性卒中側支循環評價知識講解
- 氣動油泵的工作原理
評論
0/150
提交評論