日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

学生成绩管理系统(完整版)

發布時間:2024/3/12 windows 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学生成绩管理系统(完整版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明

一.設計報告的基本內容至少包括封面、 正文、 參考文獻三部分。

1. 封面

封面按照模版填寫,不得隨意更改。

2. 正文

正文是設計報告的主體, 具體由以下幾部分組成:

(1) 問題描述

描述要求編程解決的問題。

(2) 基本要求

給出程序要達到的具體的要求。

(3) 需求分析

以無歧義的陳述說明程序設計的任務,強調的是程序要做什么?并明確規定:輸入的形式和輸入值的范圍;輸出的形式;程序所能達到的功能;測試數據:包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。

(4) 概要設計

說明本程序中主程序的流程以及各程序模塊之間的層次(調用) 關系。

(5) 詳細設計

實現概要設計中定義的所有數據類型,給出關鍵部分源程序的清單,要求程序有充分的注釋語句,至少要注釋每個函數參數的含義和函數返回值的含義。

(6) 調試分析

內容包括:調試過程中遇到的問題是如何解決的以及對設計與實現的回顧討論和分析。

(7) 用戶使用說明

說明如何使用你編寫的程序, 詳細列出每一步的操作步驟。

(8) 測試結果

設計測試數據,或具體給出測試數據。要求測試數據完整和嚴格,能全面地測試所設計程序的功能。

(9) 程序設計總結

(10) 參考文獻

列出參考的相關資料和書籍。

一.問題描述

設計一個學生成績管理程序,實現按班級完成對學生成績信息的錄入和修改,并用文件保 存。實現按班級輸出學生的成績單;實現按學號和姓名進行查詢,按平均成績進行排序功能。

二.基本要求

(1)使用面向對象編程思想編寫開發過程中需要用到的類,比如:Person 類,學生類繼 承Person類,管理類實現對成績信息的操作。

(2)輸入和輸出可以使用文本文件重定向輸入(保存數據為磁盤文件);也可以使用標 準輸入輸出進行(提交時需要提交TXT格式輸入數據)。比如 score.txt 的文件(包含 20 個 以上記錄),包含數據信息有:學號(長度為10位,不允許重復)、姓名、班級(至少有 2 個) 、 課程成績(至少 3 門);在運行程序時自動載入,若文件不存則創建一個空文件。平均成績 不作為類成員,只是在程序運行時產生,也不須保存。

(3)程序運行時顯示菜單功能,按班錄入成績,查詢個人成績,修改成績,按班輸出成績 單,按平均分排序顯示。

(4)基本功能要求具有增、刪、改、查。 3

三.需求分析?

學生成績管理在日常生活中運用十分廣泛,因此需要用許多程序來對它們進行管理,此程序包含了學生成績的錄入,學生成績的查詢和排序,學生成績添加及修改等。

按班級完成對學生成績信息的錄入和修改,并用文件保存。實現按班級輸出學生的成績單;實現按學號和姓名進行查詢,按平均成績進行排序功能。

功能1

按班錄入所有的學生成績信息,管理員可以錄入學生的班級,姓名,學號,各科成績等信息。

功能2

查詢個人成績(擁有二級菜單:學號,姓名),可以通過輸入學號或姓名查詢學生成績。

功能3

修改成績(按學號,課程),管理員可以修改學生信息。

功能4

按班輸出成績單,管理員可以按照班級輸出學生成績單。

功能5

按平均分顯示,可以直接按照平均分顯示學生成績。

功能6

退出系統

1.2用戶界面的設計:

包含顯示菜單,菜單包含:

  • 選擇功能,讓用戶輸入數字進行選擇
  • 擁有二級菜單,方便用戶進行查找功能
  • 顯示功能,用戶在修改或插入信息后可以及時查看修改內容
  • 輸入提示功能,方便用戶知道下一步如何進行操作
  • 退出功能,用戶保存完可以及時退出本系統
  • 1.3環境需求分析

    操作系統:Windows 7

    開發軟件:Dev-c++

    1.4方法需求分析

    設計一個學生成績管理程序,實現按班級完成對學生成績信息的錄入和修改,并用文件保 存。實現按班級輸出學生的成績單;實現按學號和姓名進行查詢,按平均成績進行排序功能。

    四.概要設計

    1.功能模塊框圖:

    2.界面設計

    (1)分別定義person類、student類和manager類。

    (2)設計菜單menu實現所需的功能。

    (3)編寫main函數。

    五.詳細設計

    1.類的處理

    1.1定義person

    #include <string>#include <thread>#include <vector>#include <iomanip>#include <fstream>#include <iostream>#include <Windows.h>using namespace std;class person {???????????????????????public:?????? person() = default;?????? person(string ID, string gender):????????????? ID(ID), gender(gender){?????? }?????? string getID() {????????????? return ID;?????? }?????? string getGender() {????????????? return gender;?????? }?????? void initialized(const string& ID, const string& gender) {????????????? this->ID = ID;????????????? this->gender = gender;?????? }?????? void display() {????????????? cout << setw(20) << left << ID << " "???????????????????? << setw(3) << left << gender << endl;?????? }private:?????? string ID;?????? string gender;};

    1.2定義student類(繼承person類)

    lass student : public person{public:?????? student() = default;?????? student(string studyNum, string name, string classAndGrade, int mathScore, int chineseScore, int englishScore, string ID, string gender) :????????????? person(ID, gender),???? studyNum(studyNum), name(name), classAndGrade(classAndGrade), mathScore(mathScore),????????????? chineseScore(chineseScore), englishScore(englishScore) {?????? }

    1.3定義manager

    class manager {public:?????? void loid(vector<student*>& students, int *linesS) {????????????? //從txt文件中載入家電類的數據及日用品類的數據????????????? ifstream ifileStudentScoreInfo;????????????? ifileStudentScoreInfo.open("studentScoreInfo.txt", ios::in | ios::binary);????????????? *linesS = CountLines2CRLF(ifileStudentScoreInfo, 1);????????????? ifileStudentScoreInfo.seekg(0, ios::beg);????????????? students.resize(*linesS);????????????? student::initializeLoop(students, ifileStudentScoreInfo, *linesS);????????????? ifileStudentScoreInfo.close();????????????? //進度條線程????????????? thread th(loiding);? th.join();?????? }?????? //獲取文件行數的函數?????? int CountLines2CRLF(ifstream& ReadFile, short state) {????????????? int n = 0;????????????? char line[512] = { 0 };????????????? if (ReadFile.fail()) {???????????????????? n = 0;????????????? }????????????? else {???????????????????? while (!ReadFile.eof()) {??????????????????????????? if (!state || 1 == state) {? //CR/CRLF?????? ??????????????????????????? ReadFile.getline(line, 512, ' ');??????????????????????????? }??????????????????????????? else {?????????????????????????????????? ReadFile.getline(line, 512, ' ');? //LF??????????????????????????? }??????????????????????????? n++;???????????????????? }???????????????????? //CRLF文件末尾手動添加了' '#ifdef eofHasLF???????????????????? if (line[0] == ' ') n -= 1;#endif???????????????????? if (state != 1)??????????????????????????? return n - 1;? //LF - 1 CR - 1????????????? ?????? return n;????????????? }?????? }

    1.4設計菜單

    ???

    void menu() {????????????? cout << "--------------------------------------" << endl;????????????? cout << "|************************************|" << endl;????????????? cout << "|?????? 1. 顯示所有學生信息????????? |" << endl;????????????? cout << "|?????? 2. 按平均分排序顯示????????? |" << endl;????????????? cout << "|?????? 3. 按班輸出成績單??????????? |" << endl;????????????? cout << "|?????? 4. 查詢個人成績????????????? |" << endl;????????????? cout << "|?????? 5. 按班錄入成績????????????? |" << endl;????????????? cout << "|?????? 6. 修改成績????????????????? |" << endl;????????????? cout << "|?????? 7. 按班排序??? ??????????????|" << endl;????????????? cout << "|?????? 0. 退出????????????????????? |" << endl;????????????? cout << "|* 請輸入要執行的操作所對應的數字:";?????? }

    ???

    1.5錄入成績

    void titleMenu() {????????????? cout << "__________________________________"???????????????????? << "_______________________________"???????????????????? << "_________________________" << endl;????????????? cout << setw(12) << left << "|學號??????????? " << setw(4) << left << "|姓名?? "???????????????????? << setw(7) << left << "|班級??? " << setw(6) << left << "|數學成績 "???????????????????? << setw(6) << left << "|語文成績 " << setw(6) << left << "|英語成績 "???????????????????? << setw(20) << left << "|ID? " << setw(3) << left << "|性別 " << endl;?????? }?????? void AveragetitleMenu() {????????????? cout << "___________________________________"???????????????????? << "_________________________________"???????????????????? << "_______________________________" << endl;????????????? cout << setw(12) << left << "|學號????? ??????" << setw(4) << left << "|姓名?? "???????????????????? << setw(7) << left << "|班級??? " << setw(6) << left << "|數學成績 "???????????????????? << setw(6) << left << "|語文成績 " << setw(6) << left << "|英語成績 "???????????????????? << setw(7) << left << "|平均成績" << setw(20) << left << "|ID? " << setw(3) << left << "|性別 " << endl;?????? }?????? template<typename _T>?????? void swap(_T* a, _T* b) {????????????? _T tmp = *a;????????????? *a = *b;????????????? *b = tmp;?????? }

    1.6對成績進行排序

    //按平均分排序(冒泡排序)?????? template<typename _T1, typename _T2>?????? void sortByAverageScore(_T1& s) {????????????? for (int i = s.size()-1; i > 0 ; --i) {???????????????????? for (int j = 0; j < i; ++j) {??????????????????????????? if (s[j]->sumOfScore() > s[j + 1]->sumOfScore())?????????????????????????????????? swap<_T2>(&s[j], &s[j+1]);???????????????????? }????????????? }?????? }?????? //循環將數據寫回txt文件?????? void backToTxtLoop(vector<student*>& s, ofstream& f, int n) {????????????? for (int i = 0; i < n; ++i)???????????????????? s[i]->backToTxt(f);?????? }?????? //打印所有學生信息?????? void printAllStuInfo(vector<student*>& s) {????????????? person* p = nullptr;????????????? for (size_t i = 0; i < s.size(); ++i) {???????????????????? s[i]->display(); p = s[i];???????????????????? p->display();????????????? }?????? }?????? //打印平均成績?????? void printAverangeScore(vector<student*>& s) {????????????? person* p = nullptr;????????????? for (size_t i = 0; i < s.size(); ++i) {???????????????????? s[i]->displayAverangeScore(); p = s[i];???????????????????? p->display();????????????? }?????? }?????? //按班排序?????? template<typename _T1, typename _T2>?????? bool sortByClassAndGrade(_T1& s) {????????????? for (int i = s.size()-1; i > 0; --i) {???????????????????? for (int j = 0; j < i; ++j) {??????????????????????????? if (s[j]->getClassAndGrade().compare(s[j + 1]->getClassAndGrade()) > 0)?????????????????????????????????? swap<_T2>(&s[j], &s[j + 1]);???????????????????? }????????????? }????????????? return true;?????? }

    1.7查詢成績

    /通過學號查詢個人成績?????? void searchByStudentNumAndPrint(vector<student*>& s, string& num) {????????????? person* p = nullptr;????????????? student* st = nullptr;????????????? for (size_t i = 0; i < s.size(); ++i) {???????????????????? p = s[i];???????????????????? if (st = s[i]->searchScoreByStudyNum(num))??????????????????????????? break;????????????? }????????????? AveragetitleMenu();????????????? st->displayAverangeScore();????????????? p->display();?????? }?????? //通過學號查詢到個人然后錄入成績?????? bool writeScore(vector<student*>& s, string& num, int& mathScore, int& chineseScore, int& englishScore) {????????????? student* st = nullptr;????????????? for (size_t i = 0; i < s.size(); ++i) {???????????????????? if (st = s[i]->searchScoreByStudyNum(num))??????????????????????????? break;????????????? }????????????? if (nullptr == st)????????????? return false;????????????? return st->writeScore(mathScore, chineseScore, englishScore);?????? }?????? void ending(vector<student*>& students, int& linesS) {????????????? //程序關閉之前將數據寫回txt文件????????????? ofstream ofileStudentScoreInfo("eleticalAppliance.txt", ios::trunc | ios::out | ios::binary);????????????? backToTxtLoop(students, ofileStudentScoreInfo, linesS);????????????? ofileStudentScoreInfo.close();????????????? students.clear();?????? }};

    1.8 main函數

    int main() {manager* manag = new manager;int linesS = 0;vector<student*> students;//從文件載入數據manag->loid(students , &linesS);manag->menu();int input = 0;string stuNum;int mathScore;int chineseScore;int englishScore;while (cin >> input && input != 0) {switch (input) {case 1:cout << "1.原始數據 2.求平均值 請輸入選項:" << endl;cin >> input;switch (input) {case 1:manag->titleMenu();manag->printAllStuInfo(students);system("pause");break;case 2:manag->AveragetitleMenu();manag->printAverangeScore(students);break;}break;case 2:manag->sortByAverageScore<vector<student*>, student*>(students);manag->AveragetitleMenu();manag->printAverangeScore(students);break;case 3:manag->sortByClassAndGrade<vector<student*>, student*>(students);manag->AveragetitleMenu();manag->printAverangeScore(students);break;case 4:cout << "請輸入要查詢的學生的學號:" << endl;cin >> stuNum;manag->searchByStudentNumAndPrint(students, stuNum);break;case 5:cout << "請輸入要錄入成績的學生的學號及數學語文英語的成績:" << endl;cin >> stuNum >> mathScore >> chineseScore >> englishScore;if (mathScore < 0 && mathScore > 100 && chineseScore < 0 &&chineseScore > 100 && englishScore < 0 && englishScore > 100) {cout << "成績輸入不規范,請重新輸入:" << endl;break;}if (manag->writeScore(students, stuNum, mathScore, chineseScore, englishScore)) {cout << "成績錄入成功" << endl;manag->searchByStudentNumAndPrint(students, stuNum);}elsecout << "錄入失敗, 找不到此學生信息" << endl;manag->sortByClassAndGrade<vector<student*>, student*>(students);break;case 6:cout << "請輸入要修改的學生的學號及數學語文英語的成績:" << endl;cin >> stuNum >> mathScore >> chineseScore >> englishScore;if (mathScore < 0 && mathScore > 100 && chineseScore < 0 &&chineseScore > 100 && englishScore < 0 && englishScore > 100) {cout << "成績輸入不規范,請重新輸入:" << endl;break;}if (manag->writeScore(students, stuNum, mathScore, chineseScore, englishScore)) {cout << "成績修改成功" << endl;manag->searchByStudentNumAndPrint(students, stuNum);}elsecout << "修改失敗, 找不到此學生信息" << endl;break;case 7:if (manag->sortByClassAndGrade<vector<student*>, student*>(students))cout << "排序成功" << endl;break;default:cout << "輸入錯誤,請重新輸入:" << endl;}manag->menu();}//將數據寫回文件manag->ending(students, linesS);delete manag;system("pause");return 0;}

    六.調試分析

    (1)化繁為簡,先將代碼分為幾個小板塊,一個板塊一個板塊的進行輸入和輸出。

    (2)一開始時定義的變量太多,容易記混淆,編譯時出錯很多,并且對變量名掌握的不是很牢固,反復修改了好多次。

    (3)對函數的調用掌握的不牢固,期間又翻看之前的筆記和老師的課件。

    (4)在寫代碼的過程中總是習慣性的弄錯中文和英文的輸入法,也會標點符號標錯,反復檢查后才發現問題并修改。

    七.用戶使用說明

    1. 檢測

    用戶使用時首先檢測編譯環境是否正確,正確后方可進行編譯運行。

    2. 查看菜單

    用戶運行后會看到菜單頁

    根據菜單頁給出的信息選擇用戶所要執行的操作,需從0-7這八個數字中選擇對應的操作即可進行下一步。

    3.選擇功能

    3.1 顯示出學生所有學生信息

    選擇1,實現此功能。并且出現第二菜單繼續進行選擇,“1”顯示原始數據,“2”顯示平均成績。操作結束后按enter即可返回菜單。

    3.2按平均分排序顯示

    選擇2,實現此功能。將采用冒泡排序法,學生成績將按照平均分的高低來進行排序和顯示。

    3.3按班輸出成績單

    選擇3,實現此功能。學生的成績單將以班級為單位輸出,用戶可直接查看。

    3.4查詢個人成績

    選擇4,實現此功能。用戶可通過輸入學生學號來查詢該生成績。

    3.5按班錄入成績

    選擇5,實現此功能。用戶需輸入要錄入成績的學生的學號及數學、語文、英語的成績。若成績大于100或小于0,則會顯示成績輸入不規范,請重新輸入。按要求正確錄入則會顯示成績錄入成功,其余情況下會顯示出錄入失敗, 找不到此學生信息。

    3.6修改成績

    選擇6,實現此功能。用戶需輸入要修改的學生的學號及數學、語文、英語的成績。若修改后的成績大于100或小于0,則會顯示成績輸入不規范,請重新輸入。按要求正確輸入后則會顯示成績修改成功,其余情況下則會顯示修改失敗, 找不到此學生信息。

    3.7按班排序

    選擇7,實現此功能。選擇此項后學生的成績將按班排序。學生信息正確后則會顯示排序成功,否則會顯示輸入錯誤,需重新輸入。

    3.8 退出學生成績管理系統

    八.測試結果

    1 .顯示出學生所有學生信息

    ???? 1.1顯示原始數據

    ???? 1.2求平均值

    2按平均分排序顯示

    3按班輸出成績單

    4查詢個人成績

    ?? 4.1 按學號查詢

    ?? 4.2顯示學生成績

    5按班錄入成績

    6修改成績

    ??? 6.1 輸入修改后的成績

    ???? 6.2 顯示修改后的成績

    7按班排序

    8 退出學生成績管理系統

    總結

    以上是生活随笔為你收集整理的学生成绩管理系统(完整版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。