網站首頁 編程語言 正文
本文實例為大家分享了C++實現學生成績管理系統的具體代碼,供大家參考,具體內容如下
一、問題描述
設計一個學生成績管理程序,實現按班級完成對學生成績信息的錄入和修改,并用文件保存。實現按班級輸出學生的成績單;實現按學號和姓名進行查詢,按平均成績進行排序功能。
二、基本要求
(1)使用面向對象編程思想編寫開發過程中需要用到的類,比如:Person 類,學生類繼承Person類,管理類實現對成績信息的操作。
(2)輸入和輸出可以使用文本文件重定向輸入(保存數據為磁盤文件);也可以使用標準輸入輸出進行(提交時需要提交TXT格式輸入數據)。比如 score.txt 的文件(包含 20 個 以上記錄),包含數據信息有:學號(長度為10位,不允許重復)、姓名、班級(至少有 2 個)、 課程成績(至少 3 門);在運行程序時自動載入,若文件不存則創建一個空文件。平均成績 不作為類成員,只是在程序運行時產生,也不須保存。
平均成績設置獨立的計算函數,對文件的所有數據進行遍歷,將每個人三門課程的成績累加起來然后除以課程數最終得到每個人的平均成績,在每次輸出時,將平均成績同時輸出出來,但在文件保存時對平均成績不保存。
(3)程序運行時顯示菜單功能,按班錄入成績,查詢個人成績,修改成績,按班輸出成績單,按平均分排序顯示。
按平均分排序顯示需要對所有同學的平均成績進行比較,然后排序,初步考慮在遍歷的過程中進行比較,然后借助中間變量進行排序,后來查找資料發現頭文件下有sort專門的排序函數,不過默認的是從小到大的排序,因此需要對排序方式進行定義。
(4)基本功能要求具有增、刪、改、查。
基本流程圖
(1)score.h
#include#include //為了使用string類? #include //vector數組的頭文件? #include //文件操作的頭文件? #include //使用getch()函數 #include //使用庫函數sort進行排序? using namespace std;? class person { ?? ?public: ?? ??? ?string Number;//學號? ?? ??? ?string Name;//姓名? ?? ??? ?string Class;//班級? ?? ??? ?person(){} //缺省構造函數? ?? ??? ?~person(){}//析構函數? } ; class student:public person//學生類,繼承person類? { ?? ?public: ?? ??? ?double Lesson_1;//課程1? ?? ??? ?double Lesson_2;//課程2? ?? ??? ?double Lesson_3; //課程3? ?? ?friend istream& operator>>(istream& in, student & t)//重載>>操作符 ?? ?{ ?? ??? ?in>>t.Number>>t.Name>>t.Class>>t.Lesson_1>>t.Lesson_2>>t.Lesson_3; ?? ? }? ?? ?friend ostream& operator<<(ostream& out, const student& t)//重載<<操作符? ?? ?{ ?? ??? ?out< stu;//vector數組? ?? ??? ?void AddScore();//添加成績 ? ?? ??? ?void ShowScore();//顯示成績? ?? ??? ?void ChangeScore();//修改成績? ?? ??? ?void ShowClass();//按班輸出成績單 ?? ??? ?void DelScore();//刪除學生成績? ?? ??? ?void SearchScore();//查找學生成績? ?? ??? ?void ShowSort();//按平均分排序? ?? ??? ?int GetScore();//獲取文件中的學生成績? ?? ??? ?void Keep();//保存為文件數據? };
(2)main.cpp
#include"score.h" void Admin::AddScore()//添加 成績? { ?? ?student s; //定義student類的對象? ?? ?cout<<"Input Number: "; cin>>s.Number;? ?? ?cout<<"Input Name: "; cin>>s.Name;? ?? ?cout<<"Input Class: "; cin>>s.Class;? ?? ?cout<<"Input學生課程1的成績: "; cin>>s.Lesson_1;? ?? ?cout<<"Input學生課程2的成績: "; cin>>s.Lesson_2;? ?? ?cout<<"Input學生課程3的成績: "; cin>>s.Lesson_3;? ?? ?stu.push_back(s); ?? ?cout<<"學生成績添加成功!"<::iterator iter; //定義學生Vector數組的迭代器? ?? ?for(iter=this->stu.begin();iter!=this->stu.end();iter++)//對vector數組進行遍歷,調用begin()和end()函數進行? ?? ?{ ?? ??? ?cout<<"Number: "< Number<<" ? Name: ?"< Name<<" ?Class: ?"< Class<<" ?課程1: ?"< Lesson_1 ?? ??? ?<<" ?課程2: ?"< Lesson_2<<" ?課程3: ?"< Lesson_3<<" ?平均分: ?"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3< >_name; ?? ?vector ::iterator iter; //定義學生Vector數組的迭代器? ?? ?for(iter=this->stu.begin();iter!=this->stu.end();)//對vector數組進行遍歷,調用begin()和end()函數進行? ?? ?{ ?? ??? ?if(iter->Name==_name) ? ?//根據輸入的Name找到成績信息? ?? ??? ?{ ?? ??? ??? ?cout<<"Input Number: ";cin>>iter->Number; ?? ??? ??? ?cout<<"Input Class: ";cin>>iter->Class;? ?? ??? ??? ?cout<<"Input 課程1的成績: ";cin>>iter->Lesson_1;? ?? ??? ??? ?cout<<"Input 課程2的成績: ";cin>>iter->Lesson_2;? ?? ??? ??? ?cout<<"Input 課程3的成績: ";cin>>iter->Lesson_3;? ?? ??? ??? ?this->Keep(); ?//調用keep函數將修改后的數據保存? ?? ??? ??? ?cout<<"修改成功!"< >_Class; ?? ?if(Class!="網絡1901"||Class!="網絡1902")? ?? ?{ ?? ??? ?cout<<"請在網絡1901和網絡1902兩個班之間選擇"< ::iterator iter; //定義學生Vector數組的迭代器? ?? ?for(iter=this->stu.begin();iter!=this->stu.end();iter++)//對vector數組進行遍歷,調用begin()和end()函數進行? ?? ?{ ?? ??? ?if(iter->Class==_Class) ?? ??? ?{ ?? ??? ?cout<<"Number: "< Number<<" ? Name: ?"< Name<<" ?Class: ?"< Class<<" ?課程1: ?"< Lesson_1 ?? ??? ?<<" ?課程2: ?"< Lesson_2<<" ?課程3: ?"< Lesson_3<<" ?平均分: ?"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3< >_name; ?? ?vector ::iterator iter; //定義學生Vector數組的迭代器? ?? ?for(iter=this->stu.begin();iter!=this->stu.end();)//對vector數組進行遍歷,調用begin()和end()函數進行? ?? ?{ ?? ??? ?if(iter->Name==_name){ ?? ??? ??? ?stu.erase(iter);//從vector數組中刪除這條學生信息? ?? ??? ??? ?this->Keep();//保存學生信息? ?? ??? ?} ?? ?} }? void Admin::SearchScore()//查詢學生成績信息? { ?? ?cout<<" ? ? 1、按 姓 名 查 找"< "; cin>>n; ?? ?switch(n) ?? ?{ ?? ??? ?case 1: ?? ??? ??? ?{ ?? ??? ??? ??? ?string _name; ?? ??? ??? ??? ?cout<<"Input ?Name: "; cin>>_name; ?? ??? ??? ??? ?vector ::iterator iter; //定義學生Vector數組的迭代器? ?? ??? ??? ??? ?for(iter=this->stu.begin();iter!=this->stu.end();iter++)//對vector數組進行遍歷,調用begin()和end()函數進行? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(iter->Name==_name) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout<<"Number: "< Number<<" ? Name: ?"< Name<<" ?Class: ?"< Class<<" ?課程1: ?"< Lesson_1 ?? ??? ??? ??? ??? ?<<" ?課程2: ?"< Lesson_2<<" ?課程3: ?"< Lesson_3<<" ?平均分: ?"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3< >_number; ?? ??? ??? ??? ?vector ::iterator iter; //定義學生Vector數組的迭代器? ?? ??? ??? ??? ?for(iter=this->stu.begin();iter!=this->stu.end();iter++)//對vector數組進行遍歷,調用begin()和end()函數進行? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(iter->Number==_number) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout<<"Number: "< Number<<" ? Name: ?"< Name<<" ?Class: ?"< Class<<" ?課程1: ?"< Lesson_1 ?? ??? ??? ??? ??? ?<<" ?課程2: ?"< Lesson_2<<" ?課程3: ?"< Lesson_3<<" ?平均分: ?"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3< (B.Lesson_1+B.Lesson_2+B.Lesson_3)/3; } void Admin::ShowSort()//按平均分排序? { ?? ?sort(stu.begin(),stu.end());//調用庫函數sort? ?? ?vector ::iterator iter;//定義迭代器? ?? ?for (iter = this->stu.begin(); iter != this->stu.end();iter++ )//對vector數組進行循環? ?? ?{?? ??? ? ?? ??? ?cout<<"Number: "< Number<<" ? Name: ?"< Name<<" ?Class: ?"< Class<<" ?課程1: ?"< Lesson_1 ?? ??? ?<<" ?課程2: ?"< Lesson_2<<" ?課程3: ?"< Lesson_3<<" ?平均分: ?"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3< >s.Number>>s.Name>>s.Class>>s.Lesson_1>>s.Lesson_2>>s.Lesson_3))//如果第一次讀取為空 ?? ??? ?{ ?? ??? ??? ?cout << "文件為空"< >s.Number>>s.Name>>s.Class>>s.Lesson_1>>s.Lesson_2>>s.Lesson_3)//讀取后存入vector容器中 ?? ??? ?{ ?? ??? ??? ?rows++; ?? ??? ??? ?stu.push_back(s); //vector數組第要調用 push_back函數進行讀入? ?? ??? ?} ?? ??? ?cout<<"數據讀取成功!"< ::iterator iter;//vector數組保存的磁盤文件? ?? ?for (iter=this->stu.begin(); iter!=this->stu.end();iter++) //vector數組的頭部要用begin(),尾部要用end(),從頭到尾利用迭代器進行遍歷 ?? ?{ ?? ??? ?outfile< Number<<"\t"< Name<<"\t"< Class<<"\t"< Lesson_1<<"\t"< Lesson_2<<"\t"< Lesson_3< >n; ?? ??? ?switch(n) ?? ??? ?{ ?? ??? ??? ?case 1: a.AddScore();getch();break; ?? ??? ??? ?case 2: a.ShowScore();getch();break; ?? ??? ??? ?case 3: a.ChangeScore();getch();break; ?? ??? ??? ?case 4: a.ShowClass();getch();break; ?? ??? ??? ?case 5: a.DelScore();getch();break; ?? ??? ??? ?case 6: a.ShowSort();getch();break; ?? ??? ??? ?case 7: a.SearchScore(); getch();break; ?? ??? ??? ?case 8: exit(0); ?? ??? ? }? ?? ?}while(1); ?? ?return 0;
原文鏈接:https://blog.csdn.net/cjl1831050185/article/details/109231456
相關推薦
- 2022-10-19 react創建項目啟動報錯的完美解決方法_React
- 2022-08-15 matplotlib基礎知識
- 2023-01-09 Redis排序命令Sort深入解析_Redis
- 2022-07-08 一文詳解C++中運算符的使用_C 語言
- 2022-11-13 Python中np.random.randint()參數詳解及用法實例_python
- 2022-01-11 require from ‘xxx‘是如何找到node_modules目錄下的依賴包?
- 2022-08-03 C++單例設計模式詳細講解_C 語言
- 2022-11-19 React組件的應用介紹_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支