用VC編寫一個程序?qū)崿F(xiàn)不超過50個學(xué)員成績管理概論_第1頁
用VC編寫一個程序?qū)崿F(xiàn)不超過50個學(xué)員成績管理概論_第2頁
用VC編寫一個程序?qū)崿F(xiàn)不超過50個學(xué)員成績管理概論_第3頁
用VC編寫一個程序?qū)崿F(xiàn)不超過50個學(xué)員成績管理概論_第4頁
用VC編寫一個程序?qū)崿F(xiàn)不超過50個學(xué)員成績管理概論_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、要求是:每個學(xué)員包括 3 門成績,從鍵盤輸入學(xué)號、姓名、 3 門課成績,計算出學(xué)員的平均成績,按照平 均成績由大到小排序。使用到 知識點:數(shù)組、帶參數(shù)的函數(shù)、字符串、結(jié)構(gòu)。在排序后的學(xué)員成績中插入一個學(xué)員的信息,要求 插入后仍然保持成績表原有排序。要求輸入指定的學(xué)號,從學(xué)員信息表中刪除該學(xué)員,刪除后的成績表保 持原有排序。/程序清單: #include <iostream.h> #include <iomanip.h> #include <fstream> #include <vector> #include <malloc.h> #

2、include <stdlib.h> #include <string> #include <process.h> #include <stdio.h> #define NULL 0 int const Q = 20;#define LEN sizeof(struct student) using namespace std;/int n = 0; / 定義一個全局變量統(tǒng)計學(xué)生人數(shù)> 定義一個學(xué)生考試信息的結(jié)構(gòu)體struct studentchar nameQ; / 用來存放姓名的 char sexQ; / 用來存放性別的 long int

3、 id; / 用來存放準(zhǔn)考證號的 int score4; / 用來存放分?jǐn)?shù)的 int total; / 用來存放總分?jǐn)?shù)的struct student* next;/student 向量容器vector <student> stu;/> 學(xué)生類class Information public:Information() ; / 構(gòu)造函數(shù) . Information() ; / 析構(gòu)函數(shù) . student* creat();/ 建立鏈表函數(shù)。void output(student* head);int count(student* head);/ 定義函數(shù) count() 統(tǒng)計

4、考生總數(shù)student* insert(student* head);/ 指針函數(shù) *insert() 用來添加考生信息 .student* cancel(student* head, long int num);/ 指針函數(shù) *cancel() 用來刪除考生信息 .student* find(student* head, long int num); /指針函數(shù) *find() 用來查找考生信息 .void paixu(student* head);/ 定義 paixu() 函數(shù)將考生的總分從大到小排列并輸出 void average(student* head);/ 求學(xué)生成績的平均分的函

5、數(shù) void save(student* head);/ 保存函數(shù)student* Read();/ 讀取函數(shù)private: student* p1, * p2, * p3, * head, st;Information:Information() cout << " *n"cout <<<< 歡迎您使用學(xué)生成績管理系統(tǒng) >>n"cout << " *nn"Information:Information() cout << " *n"cout <

6、<<< 謝謝您使用學(xué)生成績管理系統(tǒng) >>n"cout <<" *n"/> 建立鏈表函數(shù)student* Information:creat(void)/定義一個指向 struct student 的結(jié)構(gòu)體指針函數(shù) *creat() 用來增加考生信息 .char chQ;n = 0; / 用來存放姓名的p1 = p2 = (student *) malloc(LEN);/ 調(diào)用 malloc() 函數(shù)用來開辟一個新的存儲單元 cout <<<< 請建立學(xué)生考試信息表 ,在姓名處鍵以 ! 結(jié)束輸入

7、。 >><< endl;cout << " 姓名 :"cin >> ch;head = NULL; / 給指針 head 賦初值while (strcmp(ch, "!") != 0)/調(diào)用字符比較函數(shù) strcmp() 用來判斷是否繼續(xù)輸入p1 = (student *) malloc(LEN);/ 調(diào)用 malloc() 函數(shù)用來開辟一個新的存儲單元 strcpy(p1->name, ch); / 將循環(huán)結(jié)構(gòu)前面輸入的姓名復(fù)制到結(jié)構(gòu)體名為 p1 的數(shù)組 name 中cout << &q

8、uot; 性別 :"cin >> p1->sex;cout << " 準(zhǔn)考證號 (8 位 ):"cin >> p1->id; cout << " 數(shù)學(xué)成績 :"cin >> p1->score0;cout << " 物理成績 :"cin >> p1->score1; cout << " 英語成績 :"cin >> p1->score2; cout << &q

9、uot; C 語言成績 :"計算總分cin >> p1->score3;p1->total = p1->score0 + p1->score1 + p1->score2 + p1->score3;/ if (n = 0)head = p1;/ 如果是輸入第一組學(xué)生考試信息就將指針 p1 賦給指針 head else p2->next = p1;/ 否則將 p1 賦給 p2 所指結(jié)構(gòu)體的 next 指針 p2 = p1;/ 將指針 p1 賦給指針 p2n+; / 將 n 的值加 1cout << " 姓名 :&

10、quot;cin >> ch;/ 將輸入的姓名存放到字符數(shù)組 ch 中p2->next = NULL;/ 將 p2 所指結(jié)構(gòu)體的 next 指針重新賦空值 return (head);/ 將輸入的第一組學(xué)生考試信息返回/> 定義 output() 函數(shù)將考生的信息從頭指針?biāo)竷?nèi)容開始輸出void Information:output(student* head) if (head = NULL)cout << " 這是一個空表 ,請先輸入考生成績 .n"else cout <<n"cout << &quo

11、t; * 學(xué)生考試成績信息表 *n"cout <<n"cout << "準(zhǔn)考證號 姓 名 性別 數(shù)學(xué) 物理 英語 C+ 平均分 總分 n"cout <<n"p1 = head;/ 將頭指針賦給 p docout << setw(8) << p1->id << setw(9) << p1->name << setw(8) << p1->sex << setw(8) << p1->score0

12、<< setw(9) << p1->score1 << setw(9) << p1->score2 << setw(9) << p1->score3 << setw(9) << p1->total / 4.0 << setw(9) << p1->total << endl;cout <<n"p1 = p1->next;/ 將下一組考生信息的 next 指針賦給 pwhile (p1 != NULL);/ 若

13、指針 p 非空則繼續(xù) ,目的是把所有的考生信息都傳給指針p 然后輸出 ./> 統(tǒng)計學(xué)生人數(shù)的函數(shù)int Information:count(struct student* head)/ 定義函數(shù) count() 統(tǒng)計考生總數(shù)if (head = NULL)return(0);/ 若指針 head 為空返回值為 0 elsereturn(1 + count(head->next);/ 函數(shù)的遞歸調(diào)用/> 插入學(xué)生的成績的函數(shù)student* Information:insert(student* head)/插入新結(jié)點定義一個指向 struct student 的結(jié)構(gòu)體指針函數(shù)

14、 *insert() 用來添加考生信息 .cout << "t<< 請輸入新增學(xué)生成績信息 >>n"<< endl;p1 = (student *) malloc(LEN); / 使 p1 指向插入的新結(jié)點 cout << " 準(zhǔn)考證號 (8 位 ):"cin >> p1->id; /將輸入的準(zhǔn)考證號存放到p1所指結(jié)構(gòu)體的數(shù)組id中cout << " 姓名 :"p1 的數(shù)組 namecin >> p1->name; / 將輸入的

15、姓名存放到結(jié)構(gòu)體名為cout << " 性別 :"cin >> p1->sex;cout << " 數(shù)學(xué)成績 :"cin >> p1->score0;/ 將輸入的數(shù)學(xué)成績存放到 cout << " 物理成績 :"p1所指結(jié)構(gòu)體的數(shù)組scorecin >> p1->score1;/ 將輸入的物理成績存放到 cout << " 英語成績 :"p1所指結(jié)構(gòu)體的數(shù)組scorecin >> p1->scor

16、e2;/ 將輸入的英語成績存放到 cout << " C 語言成績 :"cin >> p1->score3;/ 將輸入的 C 語言成績存放到p1所指結(jié)構(gòu)體的數(shù)組scorep1 所指結(jié)構(gòu)體的數(shù)組 score 中p1->total = p1->score0 + p1->score1 + p1->score2 + p1->score3;/計算總分p2 = head;/ 將頭指針賦給 p2if (head = NULL) / 若沒調(diào)用次函數(shù)以前的頭指針 head 為空head = p1;p1->next = NULL

17、;/ 則將 p1 賦給頭指針 head 并將 p1 所指結(jié)構(gòu)體成員指針 next 賦空值elsewhile (p1->id > p2->id) && (p2->next != NULL)p3 = p2;/p3 指向原 p2 指向的結(jié)點p2 = p2->next; /p2 后移一個結(jié)點if (p1->id <= p2->id)if (head = p2)p1->next = head;head = p1; / 插入到第一個結(jié)點之前elsep3->next = p1;p1->next = p2; / 插入到 p3 所

18、指結(jié)點之后elsep2->next = p1;p1->next = NULL; / 插入到尾結(jié)點之后n+;/ 將學(xué)生人數(shù)加 1cout <<"t<< 你輸入的學(xué)生信息已經(jīng)成功插入 >><<endl;return (head);/> 刪除函數(shù)定義一個指向 struct student 的結(jié)構(gòu)體指針函數(shù)student* Information:cancel(student* head, long int num)/ *delete() 用來刪除考生信息 .if (head = NULL)/ 若調(diào)用次函數(shù)以前的頭指針 ret

19、urn(head);head 為空 elsep1 = head;/ 否則將頭指針賦給 p1while (num != p1->id && p1->next != NULL)/ 準(zhǔn)考證號并且 p1 所指的 next 指針不為空尋找要刪除的結(jié)點當(dāng) p1 所指的學(xué)生準(zhǔn)考證號不是輸入的學(xué)生 p2 = p1; p1 = p1->next;/p2 指向原 p1 指向的結(jié)點 p1 后移一個結(jié)點 if (num = p1->id)/ 如果輸入的學(xué)生準(zhǔn)考證號是 if (p1 = head)head = p1->next;/ 如果 head 指針和 p1 指針相等則將

20、下一個結(jié)點賦給指針 head elsep1 所指的學(xué)生準(zhǔn)考證號 /結(jié)點找到后刪除p2->next = p1->next;/ 否則將 p1 所指結(jié)點賦給 p2 所指結(jié)點將要刪除的學(xué)生信息跳過去 cout << " 刪除準(zhǔn)考證號為 " << num << " 的學(xué)生 n"n-;/ 將學(xué)生人數(shù)減 1return(head);/ 將頭指針返回/> 查找函數(shù)student* Information:find(student* head, long int num)/定義一個指向 struct student 的

21、結(jié)構(gòu)體指針函數(shù) *find() 用來查找考生信息 . if (head = NULL)/ 若調(diào)用次函數(shù)以前的頭指針 head 為空cout << " 這是一個空表 ,請先輸入考生成績 .n" return(head); elsep1 = head;/ 否則將頭指針賦給 p1while (num != p1->id && p1->next != NULL)/尋找結(jié)點當(dāng) p1 所指的學(xué)生準(zhǔn)考證號不是輸入的學(xué)生準(zhǔn)考證號并且 p1 所指的 next 指針不為空 p1 = p1->next;/p2 指向原 p1 指向的結(jié)點 p1 后移一個

22、結(jié)點if (num = p1->id)/ 如果要查找的學(xué)生準(zhǔn)考證號是 p1 所指的學(xué)生準(zhǔn)考證號cout <<n"cout << "準(zhǔn)考證號 姓 名 性別 數(shù)學(xué) 物理 英語 C+ 平均分 總分 n"cout <<n"cout << setw(8) << p1->id << setw(9) << p1->name << setw(6) << p1->sex << setw(7) << p1->sco

23、re0 << setw(7) << p1->score1 << setw(7) << p1->score2 <<setw(7) << p1->score3 << setw(10) << p1->total / 4.0 << setw(7) << p1->total << endl;cout <<n"else cout << " 沒找到準(zhǔn)考證號為 " << num <

24、;< " 的學(xué)生 .n" / 結(jié)點沒找到return(head);/定義 paixu() 函數(shù)將考生的總分從大到小排列并輸出void Information:paixu(student* head)int i, k, m = 0, j;student* pQ;/ 定義一個指向 struct student 的結(jié)構(gòu)體指針數(shù)組 pif (head != NULL)/ 如果頭指針是空則繼續(xù)m = count(head);cout <<n"cout << " * 學(xué)生考試成績統(tǒng)計表 *n"cout <<n&qu

25、ot;cout << "準(zhǔn)考證號 姓 名 性別 數(shù)學(xué) 物理 英語 C+ 平均分 總分 名次 n"cout <<n"p1 = head;for (k = 0; k < m; k+) pk = p1;p1 = p1->next;for (k = 0; k < m - 1; k+) / 選擇排序法for (j = k + 1; j < m; j+) if (pk->total < pj->total) p2 = pk;pk = pj;pj = p2; / 從大到小排列的指針for (i = 0; i &l

26、t; m; i+) cout << setw(8) << pi->id << setw(9) << pi->name << setw(6) << pi->sex << setw(7) << pi->score0 << setw(7) << pi->score1 << setw(7) << pi->score2 << setw(7) << pi->score3 << setw(

27、8) << pi->total / 4.0 << setw(7) << pi->total << setw(9) << i + 1 << endl;cout <<n"/> 求各科平均分成績的函數(shù)void Information:average(student* head) int k, m;float arg1 = 0, arg2 = 0, arg3 = 0, arg4 = 0; if (head = NULL)/ 如果頭指針是空則繼續(xù)cout << " 這是一

28、個空表 ,請先輸入考生成績 .n"else m = count(head);p1 = head;for (k = 0; k < m; k+) arg1 += p1->score0;arg2 += p1->score1;arg3 += p1->score2;arg4 += p1->score3;p1 = p1->next;arg1 /= m;arg2 /= m;arg3 /= m;arg4 /= m; cout << " * 全班單科成績平均分 *n"cout << void Information:sav

29、e(student* head)n"cout <<" 數(shù)學(xué)平均分 :" <<setw(7) <<arg1 <<" 物理平均分 :" <<setw(7)<<arg2 <<" 英語平均分 :" <<setw(7) <<arg3 <<"C語言平均分:"<<setw(7) <<arg4 <<endl;cout <</> 保存函數(shù) .n&quo

30、t;ofstream out("data.txt", ios:out);out << count(head) << endl;while (head != NULL) out << head->name << "t" << head->id << "t" << "t" << head->sex << "t" << head->score0 <<

31、; "t" << head->score1 << "t" << head->score2 << "t" << head->score3 << "t" << head->total << endl;head = head->next;/>讀取函數(shù)的實現(xiàn)student* Information:Read() int i = 0;p1 = p2 = (student *) malloc(LE

32、N);head = NULL;ifstream in("data.txt", ios:out);in >> i;if (i = 0)cout << " data.txt 文件中的數(shù)據(jù)為空,請先輸入數(shù)據(jù)。 " << endl; return 0; else cout <<<< endl;for (; i > 0; i-) p1 = (student *) malloc(LEN);in >> >> st.id >> st.sex >&g

33、t; st.score0 >> st.score1 >> st.score2 >> st.score3 >> st.total; strcpy(p1->name, );p1->id = st.id;strcpy(p1->sex, st.sex);p1->score0 = st.score0;p1->score1 = st.score1;p1->score2 = st.score2;p1->score3 = st.score3;p1->total = st.total;if (n = 0

34、)head = p1;/ 如果是輸入第一組學(xué)生考試信息就將指針 p1 賦給指針 head else p2->next = p1;/ 否則將 p1 賦給 p2 所指結(jié)構(gòu)體的 next 指針p2 = p1;/ 將指針 p1 賦給指針 p2n+; / 將 n 的值加 1 /顯示讀入數(shù)據(jù) cout << " " << p1->name << "t" << p1->id << "t" << "t" << p1->sex

35、 << "t" << p1->score0 << "t" << p1->score1 << "t" << p1->score2 << "t" << p1->score3 << "t" << p1->total << endl;cout <<<< endl;/ cout << " 數(shù)據(jù)已經(jīng)成功讀取完畢。 " << endl;p2->next = NULL;return (head);int main(void)Inf

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論