日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++實現簡單學生成績管理系統_C 語言

作者:陸鳴笙 ? 更新時間: 2022-05-20 編程語言

本文實例為大家分享了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

欄目分類
最近更新