C++綜合應(yīng)用實例_第1頁
C++綜合應(yīng)用實例_第2頁
C++綜合應(yīng)用實例_第3頁
C++綜合應(yīng)用實例_第4頁
C++綜合應(yīng)用實例_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C/C+綜合應(yīng)用實例1、數(shù)據(jù)代數(shù)運算系統(tǒng)的設(shè)計(相當于計算器)2、學生成績管理系統(tǒng)的設(shè)計3、三角形面積驗證程序的設(shè)計1、數(shù)據(jù)代數(shù)運算系統(tǒng)的設(shè)計(相當于計算器)問題:設(shè)計一個計算器程序,完成整數(shù)間的加、減、乘、除設(shè)計一個計算器程序,完成整數(shù)間的加、減、乘、除以及求運算,以及累加求和、計算以及求運算,以及累加求和、計算n!等。!等。 (1)計算器程序設(shè)計文檔 (2)使用TC開發(fā)的dos界面程序; (3)程序運行演示; 這樣的系統(tǒng)不好,我們可以將其改寫為圖形界面 (4)圖形界面程序演示; (5) 圖形界面程序源代碼2、學生成績管理系統(tǒng)的設(shè)計例2:編寫程序,實現(xiàn)學生成績管理:要求實現(xiàn) 用戶登錄,用戶登

2、錄, 顯示主菜單,顯示主菜單, 學生信息的輸入學生信息的輸入, 學生信息的輸出,學生信息的輸出, 按學號查詢學生信息,按學號查詢學生信息, 按成績降序排序,按成績降序排序, 追加學生信息,追加學生信息, 把學生信息保存到文件,把學生信息保存到文件, 從文件中導出學生信息從文件中導出學生信息 等有關(guān)的功能。等有關(guān)的功能。 關(guān)于該設(shè)計題目的有關(guān)問題與分析:(1)采用的程序設(shè)計方法的選擇?)采用的程序設(shè)計方法的選擇? A)面向結(jié)構(gòu)的設(shè)計方法?面向結(jié)構(gòu)的設(shè)計方法? B)面向?qū)ο蟮脑O(shè)計方法?面向?qū)ο蟮脑O(shè)計方法?(2)運行界面的選擇?)運行界面的選擇? A) DOS界面的設(shè)計?界面的設(shè)計? B) 圖形界面

3、(圖形界面(Windows界面)?界面)? (3)數(shù)據(jù)類型的定義)數(shù)據(jù)類型的定義 (結(jié)構(gòu)體或類的定義)(結(jié)構(gòu)體或類的定義)(4)(數(shù)據(jù)結(jié)構(gòu)的定義)存放數(shù)據(jù)的方式)(數(shù)據(jù)結(jié)構(gòu)的定義)存放數(shù)據(jù)的方式 順序表(數(shù)組存放一個班學生信息)順序表(數(shù)組存放一個班學生信息) 鏈表(利用指針存放一個班的學生信息)鏈表(利用指針存放一個班的學生信息)該題目的分析與設(shè)計:本題目可以采用本題目可以采用4種方式實現(xiàn):種方式實現(xiàn): (1)采用面向結(jié)構(gòu)的程序設(shè)計方法,用)采用面向結(jié)構(gòu)的程序設(shè)計方法,用順序順序表(數(shù)組和結(jié)構(gòu)表(數(shù)組和結(jié)構(gòu)體),體),DOS界面。界面。(2)采用面向結(jié)構(gòu)的程序設(shè)計方法,用)采用面向結(jié)構(gòu)的程序

4、設(shè)計方法,用鏈表鏈表(指針和結(jié)構(gòu)體),(指針和結(jié)構(gòu)體),DOS界面界面(3)采用面向?qū)ο蟮某绦蛟O(shè)計方法,用)采用面向?qū)ο蟮某绦蛟O(shè)計方法,用順序表順序表(定義順序表(定義順序表類),類),DOS界面界面(4)采用面向?qū)ο蟮某绦蛟O(shè)計方法,用)采用面向?qū)ο蟮某绦蛟O(shè)計方法,用鏈表鏈表(定義(定義鏈表鏈表類),類),DOS界面界面 另外,對這另外,對這4種方式,都可以采用種方式,都可以采用Windows(圖形圖形)界面實現(xiàn)。界面實現(xiàn)。(1)采用面向結(jié)構(gòu)的程序設(shè)計方法)采用面向結(jié)構(gòu)的程序設(shè)計方法 用用順序順序表(數(shù)組和結(jié)構(gòu)體)表(數(shù)組和結(jié)構(gòu)體)DOS界面界面采用面向結(jié)構(gòu)的程序設(shè)計方法,用采用面向結(jié)構(gòu)的程序

5、設(shè)計方法,用順序順序表表(數(shù)組和結(jié)構(gòu)體),(數(shù)組和結(jié)構(gòu)體),DOS界面界面處理過程:(1)定義學生結(jié)構(gòu)體;)定義學生結(jié)構(gòu)體;(2)定義學生數(shù)組()定義學生數(shù)組(一般放到主函數(shù)中定義一般放到主函數(shù)中定義) 這里要注意,學生人數(shù)問題這里要注意,學生人數(shù)問題(3)按功能要求定義各有關(guān)功能函數(shù);)按功能要求定義各有關(guān)功能函數(shù); 這里要注意,每個函數(shù)的參數(shù)及其函數(shù)的返回值這里要注意,每個函數(shù)的參數(shù)及其函數(shù)的返回值(4)設(shè)計主函數(shù),實現(xiàn)系統(tǒng)所要求的功能。)設(shè)計主函數(shù),實現(xiàn)系統(tǒng)所要求的功能。思考:思考: 假設(shè)將(假設(shè)將(2)定義成一個)定義成一個“班級結(jié)構(gòu)體班級結(jié)構(gòu)體”,那么,整,那么,整個系統(tǒng)該如何實現(xiàn))

6、;個系統(tǒng)該如何實現(xiàn));(1)定義學生結(jié)構(gòu)體;)定義學生結(jié)構(gòu)體;struct st char Class20; /班級 int num; /學號 char name8; /姓名 float kc6; /各課程成績(6門) float ave; /平均成績 int order; /名次 ;按功能要求定義各有關(guān)功能函數(shù)按功能要求定義各有關(guān)功能函數(shù) (1)學生信息的輸入)學生信息的輸入(輸入學生的信息,存放到數(shù)組輸入學生的信息,存放到數(shù)組s中,返回實際學中,返回實際學生個數(shù)給生個數(shù)給n,注意:輸入的結(jié)束條件如何設(shè)計?注意:輸入的結(jié)束條件如何設(shè)計?) void iuput(st s int *n); (

7、2)將數(shù)組)將數(shù)組s中,中,n個學生信息輸出,要求:按一定得格式輸出學生信個學生信息輸出,要求:按一定得格式輸出學生信息(最好是表格格式,并且當學生人數(shù)較多時,應(yīng)按頁顯示)息(最好是表格格式,并且當學生人數(shù)較多時,應(yīng)按頁顯示) void pint(st s,int n) (3)從數(shù)組)從數(shù)組s,n個學生信息中,查詢學號為個學生信息中,查詢學號為x的學生信息,并返回查找的學生信息,并返回查找成功是(位置號)否(成功是(位置號)否(-1)。)。 int find(st s,int n, int x) (4)將數(shù)組將數(shù)組s,n個學生信息中按平均成績降序排序,形成排序數(shù)組個學生信息中按平均成績降序排序

8、,形成排序數(shù)組y。 sort(st s,int n,st y) (5)在數(shù)組在數(shù)組s,n個學生信息的未,輸入追加學生信息。個學生信息的未,輸入追加學生信息。 該功能的實現(xiàn),可以使用(該功能的實現(xiàn),可以使用(1)輸入學生信息功能)輸入學生信息功能(6)將數(shù)組)將數(shù)組s,n個學生信息,保存到文件個學生信息,保存到文件f中。中。 save(st s,int n, char *f) (7) 從文件從文件f中導出學生信息中導出學生信息,存放到數(shù)組存放到數(shù)組s中,并返回實際學生人數(shù)中,并返回實際學生人數(shù)n。 load(char *f,st s,int &n)給出每個函數(shù)的具體實現(xiàn) 同學們自己給出各

9、函數(shù)的源代碼。同學們自己給出各函數(shù)的源代碼。設(shè)計主函數(shù),實現(xiàn)系統(tǒng)所要求的功能設(shè)計主函數(shù),實現(xiàn)系統(tǒng)所要求的功能定義學生數(shù)組:定義學生數(shù)組: 這里要注意,學生人數(shù)問題這里要注意,學生人數(shù)問題Void main() st *t; 定義數(shù)組定義數(shù)組 int m; 數(shù)組的最大空間數(shù)組的最大空間 int n; 實際學生人數(shù)實際學生人數(shù) m=1000; st=new stm; n=0; 顯示菜單,分別調(diào)用有關(guān)的函數(shù)。顯示菜單,分別調(diào)用有關(guān)的函數(shù)。 (3)采用面向?qū)ο蟮某绦蛟O(shè)計方法)采用面向?qū)ο蟮某绦蛟O(shè)計方法 用用順序表順序表(定義(定義順序表類順序表類) DOS界面界面采用面向結(jié)構(gòu)的程序設(shè)計方法,用采用面向

10、結(jié)構(gòu)的程序設(shè)計方法,用順序表順序表(定義(定義順序表類順序表類),),DOS界面界面處理過程:(1)定義學生類;)定義學生類;(2)定義班級類)定義班級類(3)設(shè)計主函數(shù),定義有關(guān)的對象,并調(diào)用有關(guān)的函數(shù),)設(shè)計主函數(shù),定義有關(guān)的對象,并調(diào)用有關(guān)的函數(shù),完成系統(tǒng)功能。完成系統(tǒng)功能。分析:分析: 由于成績管理是由多名學生構(gòu)成的,所以需要定義由于成績管理是由多名學生構(gòu)成的,所以需要定義學生類學生類; 另外,由多個學生,形成一個班或年級,所以還需要定義另外,由多個學生,形成一個班或年級,所以還需要定義一個一個班級(年級)類班級(年級)類(1)定義學生類;)定義學生類;class st private

11、: char Class20; /班級 int num; /學號 char name8; /姓名 float kc6; /各課程成績(6門) float ave; /平均成績 int order; /名次 public: 分析:關(guān)于學生類,該有哪些函數(shù)成員?分析:關(guān)于學生類,該有哪些函數(shù)成員? ;學生類,函數(shù)成員的定義與實現(xiàn)學生類,函數(shù)成員的定義與實現(xiàn)public: (1) 構(gòu)造函數(shù)的定義:構(gòu)造函數(shù)的定義: 利用參數(shù)傳遞,形成一個學生利用參數(shù)傳遞,形成一個學生 有鍵盤輸入形成一個學生有鍵盤輸入形成一個學生 (2) 輸出學生信息函數(shù);輸出學生信息函數(shù); (2)定義班級類)定義班級類class b

12、j private: int m; /私有變量,順序表實例的最大長度私有變量,順序表實例的最大長度 int n; / 私有變量,順序表實例的當前長度私有變量,順序表實例的當前長度 st *s; /存放學生的數(shù)組(利用指針實現(xiàn))存放學生的數(shù)組(利用指針實現(xiàn)) public: 分析:關(guān)于班級類,該有哪些函數(shù)成員?分析:關(guān)于班級類,該有哪些函數(shù)成員?;班級類,函數(shù)成員的定義與實現(xiàn)班級類,函數(shù)成員的定義與實現(xiàn)public: (1) 構(gòu)造函數(shù)的定義:構(gòu)造函數(shù)的定義: 利用參數(shù)傳遞,形成班級 由數(shù)組由數(shù)組s中,中,n各學生,形成班級各學生,形成班級 bj(st s int n); 有鍵盤輸入形成班級 學生

13、信息的輸入學生信息的輸入(輸入的結(jié)束條件如何設(shè)計?輸入的結(jié)束條件如何設(shè)計?) bj(); 有文件導入,形成班級; 從文件從文件f中導出學生信息中導出學生信息, bj(char *f)其它成員函數(shù)其它成員函數(shù) (2)輸出學生信息,要求:按一定得格式輸出學生信息)輸出學生信息,要求:按一定得格式輸出學生信息(最好是表格格式,并且當學生人數(shù)較多時,應(yīng)按頁顯示)(最好是表格格式,并且當學生人數(shù)較多時,應(yīng)按頁顯示) void pint() (3)查詢學號為)查詢學號為x的學生信息,并返回查找成功是(位置的學生信息,并返回查找成功是(位置號)否(號)否(-1)。)。 int find(int x) (4)

14、 按平均成績降序排序,形成新類。按平均成績降序排序,形成新類。 st sort() (5)在學生信息的未,輸入追加學生信息。在學生信息的未,輸入追加學生信息。 注意:輸入的結(jié)束條件如何設(shè)計?注意:輸入的結(jié)束條件如何設(shè)計? void input() (6)在學生信息的未,通過文件在學生信息的未,通過文件f,追加學生信息。追加學生信息。 void app(char *f) (7)保存到文件)保存到文件f中。中。 void save(char *f) 給出每個函數(shù)的具體實現(xiàn) 同學們自己給出各函數(shù)的源代碼。同學們自己給出各函數(shù)的源代碼。設(shè)計主函數(shù),實現(xiàn)系統(tǒng)所要求的功能設(shè)計主函數(shù),實現(xiàn)系統(tǒng)所要求的功能定

15、義有關(guān)的對象定義有關(guān)的對象Void main() bj b; 定義班級對象定義班級對象 st s; 定義學生對象定義學生對象 顯示菜單,分別調(diào)用有關(guān)的函數(shù)。顯示菜單,分別調(diào)用有關(guān)的函數(shù)。 鏈表成績管理1.鏈表的定義與結(jié)構(gòu)描述2.鏈表的有關(guān)操作實現(xiàn)3.利用鏈表結(jié)構(gòu)實現(xiàn)成績管理 (1) 成績管理的功能分析 (2) 成績管理的類定義與實現(xiàn)3 采用面向?qū)ο蟮某绦蛟O(shè)計方法,采用面向?qū)ο蟮某绦蛟O(shè)計方法,用用鏈表鏈表(定義(定義鏈表鏈表類),類),DOS界面界面1 單鏈表單鏈表通過指針把它的一串存儲結(jié)點鏈接成一個鏈 存儲結(jié)點由兩部分組成: data字段 next 字段 data next頭指針指向下一個節(jié)點

16、的指針附加頭結(jié)點結(jié)點尾指針單鏈表的結(jié)點類型struct ListNode int data;ListNode * next; ;data next問題問題(有關(guān)鏈表的操作有關(guān)鏈表的操作):n 如何定義如何定義(申明申明)一個鏈表呢一個鏈表呢?n 如何形成一個鏈表呢如何形成一個鏈表呢?n 在鏈表中指定的位置處在鏈表中指定的位置處,如何插入一個節(jié)點呢如何插入一個節(jié)點呢?n 在鏈表中如何刪除一個節(jié)點呢在鏈表中如何刪除一個節(jié)點呢?n 一個鏈表中一個鏈表中,有幾個數(shù)據(jù)元素呢有幾個數(shù)據(jù)元素呢?如何定義如何定義(申明申明)一個鏈表呢一個鏈表呢? 一個鏈表一般只要告訴該鏈表的頭指針即可。定義鏈表: struc

17、t ListNode *first 該鏈表所有的操作,全部是從該鏈表所有的操作,全部是從“first”開始,開始, 并且,該指針并且,該指針永遠永遠指向第一個位置指向第一個位置。一個鏈表是如何形成呢一個鏈表是如何形成呢?一個鏈表的形成,一般需要兩步:First(2)在空鏈表的基礎(chǔ)上不斷的插入節(jié)點,從而形成鏈表。)在空鏈表的基礎(chǔ)上不斷的插入節(jié)點,從而形成鏈表。 一般分為:在前插入、在后插入兩種一般分為:在前插入、在后插入兩種(1)首先形成一個空鏈表:)首先形成一個空鏈表:NULL(0)構(gòu)造空單鏈表LinkList() first=new ListNode; first-next =0; ;fir

18、st(a) 建空表建空表建立單鏈表建立單鏈表頭插法建立單鏈表圖示頭插法建立單鏈表圖示 first(a) 建空表建空表c1ss 指向新申請的結(jié)點指向新申請的結(jié)點sdatac1(b) 申請新結(jié)點并賦值申請新結(jié)點并賦值firstlast(c) 插入第一個結(jié)點插入第一個結(jié)點 last=slast=sc1執(zhí)行的語句組為執(zhí)行的語句組為:snextfirstnext;firstnexts;ci1firstc2c1cis(d) 插入第插入第i個元素個元素頭插法頭插法尾插法建表尾插法建表 尾插法建表圖示尾插法建表圖示 c1ss 指向新申請的結(jié)點空間指向新申請的結(jié)點空間sdatac1(b) 申請新結(jié)點并賦值申請新

19、結(jié)點并賦值firstL(a ) 建空表建空表lastfs(c) 插入第一個結(jié)點插入第一個結(jié)點c1lastlasts;last指向鏈表的結(jié)尾指向鏈表的結(jié)尾c1firstc2last nexts;(d) 插入第二個結(jié)點插入第二個結(jié)點sr將新建的節(jié)點插入到鏈表的最后將新建的節(jié)點插入到鏈表的最后尾指針尾指針在頭結(jié)點之后插入一個新結(jié)點void LinkList:insert(int a)ListNode *temp;temp=new ListNode;temp-data=a;temp-next=0;temp-next=first-next; first-next=temp;執(zhí)行的語句組為執(zhí)行的語句組為:

20、snextfirstnext;firstnexts;ci1firstc2c1cis 插入第插入第i個元素個元素單鏈表的建立(調(diào)用插入函數(shù),可以創(chuàng)建鏈表:形成具有n個元素的鏈表)void LinkList:create(int n) int i=0; int data; cout endlplease input the data of the list; while (idata; insert(data); i+; 查找單鏈表中第i個結(jié)點算法 ListNode * FindIndex(const int i) ListNode *pif( i = -1) return first; p=fi

21、rst-next; /int j=0; while( p !=NULL & j next;j+;return p; 單鏈表插入算法 (第i節(jié)點前插入)La1ai1aianpre(a) 尋找第尋找第 i1 個結(jié)點個結(jié)點es(b) 申請新的結(jié)點申請新的結(jié)點preLa1ai1aianes 與與ai連鏈連鏈: :snextprenextai-1與與ai斷斷鏈鏈, ,插入插入 e:prenexts;(c) 插入插入單鏈表插入算法ListNode * Insert(int value, int i) / 插入數(shù)據(jù)內(nèi)容為value的新結(jié)點,為第i個結(jié)點。 ListNode *p,*q;q = new

22、 ListNode; q-data = value; p = FindIndex(i-1);if(p = NULL ) return NULL; q-next = p-next; p-next = q; return q; pLa1ai1aianeq 與與ai連鏈連鏈: :snextprenextai-1與與ai斷斷鏈鏈, ,插入插入 e:prenexts;(c) 插入插入單鏈表刪除算法 void RemoveAfter(ListNode * link) /刪除參數(shù)link的后繼結(jié)點 ListNode *newlink;if(link!=NULL) newlink=link-next; lin

23、k-next=newlink-next link-next=link-next-nexy delete newlink; 求長度算法int Length() ListNode *p=first-next;int count=0;while(p!=NULL)p=p-next;count+;return count; La0ai1aian( ) p單鏈表的類定義單鏈表的類定義分析分析1數(shù)據(jù)成員數(shù)據(jù)成員: 兩個指向結(jié)點的指針兩個指向結(jié)點的指針:頭指針和尾指針頭指針和尾指針 2成員函數(shù)成員函數(shù): (1) 構(gòu)造函數(shù)構(gòu)造函數(shù) /創(chuàng)建并形成一個初始鏈表創(chuàng)建并形成一個初始鏈表 (2)析構(gòu)函數(shù)析構(gòu)函數(shù) /刪除構(gòu)

24、造函數(shù)所創(chuàng)建的鏈表刪除構(gòu)造函數(shù)所創(chuàng)建的鏈表 (3)插入元素函數(shù)插入元素函數(shù) /在表的第在表的第i 個位置處個位置處,插入數(shù)據(jù)或在表尾插入元素插入數(shù)據(jù)或在表尾插入元素 (4)刪除元素函數(shù)刪除元素函數(shù) /刪除表中數(shù)值為刪除表中數(shù)值為x的元素的元素 (5)查找元素查找元素 /在表中查找數(shù)據(jù)為在表中查找數(shù)據(jù)為x的元素在表中的位置的元素在表中的位置 (6)輸出鏈表輸出鏈表 /從頭到尾輸出表中的所有的元素從頭到尾輸出表中的所有的元素 (7)判定鏈表是否為空判定鏈表是否為空 /為了進行刪除進行的一種判定為了進行刪除進行的一種判定 (8) 將鏈表設(shè)置為一個空表將鏈表設(shè)置為一個空表 / (9)計算鏈表的長度計算

25、鏈表的長度 /統(tǒng)計鏈表中元素個數(shù)統(tǒng)計鏈表中元素個數(shù) (10) 將鏈表元素值寫到文件中將鏈表元素值寫到文件中 (11) 將文件中的數(shù)據(jù)讀到鏈表中將文件中的數(shù)據(jù)讀到鏈表中 class LinkList /鏈表類鏈表類 private: ListNode *first,*last; /鏈表的表頭指針和尾指針鏈表的表頭指針和尾指針 public: LinkList ( ) LinkList ( ) ; /析構(gòu)函數(shù)析構(gòu)函數(shù) ListNode *Insert ( int value, int i ); Listnode *insert(intvalue) int Remove (int value );

26、ListNode *FindIndex ( int value ); void PrintList( ); /遍歷單鏈表遍歷單鏈表 void MakeEmpty ( ); /將鏈表置為空表將鏈表置為空表 int Length ( ) const; /計算鏈表的長度計算鏈表的長度 int NotNull ( ) ; /判斷是否是空表判斷是否是空表 void create();單鏈表的類定義單鏈表的類定義三、利用鏈表結(jié)構(gòu)實現(xiàn)成績管理三、利用鏈表結(jié)構(gòu)實現(xiàn)成績管理 (1) 成績管理的功能分析 (2) 成績管理的類定義與實現(xiàn)要求:1簡單的系統(tǒng)與功能分析2建立數(shù)據(jù)結(jié)構(gòu)表3要建立一個測試的數(shù)據(jù)表,至少要有2

27、0個測試數(shù)據(jù)4使用數(shù)據(jù)鏈表實現(xiàn)數(shù)據(jù)的:錄入、查詢、修改、增加、刪除、統(tǒng)計、輸出,一、定義學生成績管理系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)表一、定義學生成績管理系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)表序號 成員名 數(shù)據(jù)類型 長度 字段含義 1 Class int 班級 2 num int 學號 3 name char 8 姓名 4 kc0 float 電子技術(shù) 5 kc1 float C+程序設(shè)計 6 kc2 float 多媒體技術(shù) 7 kc3 float 大學英語 8 kc4 float 高等數(shù)學 9 kc5 float 大學體育 10 Ave float 平均成績 11 Order int 名次 13 next ”自定義的結(jié)構(gòu)類型 “

28、指針,指向下一個結(jié)點二、根據(jù)所要求的成績管理系統(tǒng)定義類系統(tǒng)的功能要求: 使用數(shù)據(jù)鏈表實現(xiàn)如下功能: 初始鏈表的建立,錄入、查詢、修改、增加、刪除、統(tǒng)計、輸出等功能。(一一)數(shù)據(jù)定義數(shù)據(jù)定義(類的數(shù)據(jù)成員說明類的數(shù)據(jù)成員說明): 一個指向?qū)W生結(jié)構(gòu)的頭指針一個指向?qū)W生結(jié)構(gòu)的頭指針; (注意注意:該指針就是鏈表的頭該指針就是鏈表的頭)struct node int Class; /班級 int num; /學號 char name8; /姓名 float kc6; /各課程成績(6門) float ave; /平均成績 int order; /名次 node *next; /指針;class cj

29、private: struct node *head; public: 待定義的各功能函數(shù)待定義的各功能函數(shù) 結(jié)點定結(jié)點定義義類定義類定義(二)操作定義(函數(shù)功能劃分劃分)1.初始鏈表的建立初始鏈表的建立: 利用類的構(gòu)造函數(shù)構(gòu)造函數(shù),建立一個只有附加頭結(jié)點附加頭結(jié)點的空鏈表空鏈表; 2.錄入錄入(增加一個增加一個)學生信息學生信息: 由鍵盤一個一個輸入學生的信息,并鏈到鏈表中; (注意:什么時候停止輸入呢?即:輸入的結(jié)束條件?) 如何鏈到鏈表上呢?(在表的尾上追加尾上追加)3.追加結(jié)點追加結(jié)點: 在鏈表尾上鏈上一個結(jié)點(p所指的結(jié)點):4.鏈表的建立鏈表的建立: 在空鏈表已經(jīng)建立的基礎(chǔ)上,向鏈

30、表中提供信息(注意:采用先提供的信息在表的前面,依次向后); 可以分為兩種方式: (1)由鍵盤一個一個輸入學生的信息,并鏈到鏈表中; (可以直接使用添加學生操作;即使用2) (2)利用文件將文件中的內(nèi)容讀入利用文件將文件中的內(nèi)容讀入,并鏈到鏈表中并鏈到鏈表中5.定位定位: 提供學生的學號,在鏈表中查找該學生所在鏈表中的位置 (返回指向該結(jié)點的一個指針) (注意:該操作是為后面的操作服務(wù)的,特別是:刪除、修改、查詢)6.查詢查詢: 提供學生的學號,在鏈表中查找該學生并輸出該學生的信息(包括學生的名次)7.刪除刪除: 提供學生的學號,在鏈表中查找該學生,并從表中刪除學號是該值的學生8.修改成績修改

31、成績: 提供學生的學號,在鏈表中查找該學生,找到后先顯示原來的學生信息,然后修改(重新輸入)學生信息 9.統(tǒng)計統(tǒng)計: 給出各課成績的平均分,總平均分,并分別按各課程統(tǒng)計成績段的人數(shù):優(yōu)秀人數(shù)、良好人數(shù)、中等人數(shù)、及格人數(shù),不及格人數(shù), 并按一定的格式將所有統(tǒng)計結(jié)果顯示出來。10.排序排序(降序降序): 按學生的平均成績進行由小到大排序,新形成一個排序鏈表,. (注意:該操作是為其它操作服務(wù)的;例如:5(查詢)可以使用,當添加學生或刪除學生以及修改學生成績后,都需要重新排序)11.輸出鏈表輸出鏈表: 按鏈表中的先后次序輸出表中的所有信息 (注意:該操作為按順序輸出信息和排序輸出服務(wù)):12. 寫

32、文件寫文件: 將進行各種操作后所形成的鏈表信息,寫入文件中,備以后使用時,利用3(2)再讀入形成鏈表. (注意:可以形成兩類文件:按輸入的順序,按排序后的)13. 其他的一些服務(wù)操作: (1)析構(gòu)函數(shù)析構(gòu)函數(shù): (2)輸出表頭函數(shù)輸出表頭函數(shù): (為功能、6、7、8、11、12服務(wù)) (3)輸出輸出P指針所指結(jié)點信息指針所指結(jié)點信息: (為功能: 6、7、8、11、12服務(wù))類聲明:由以上分析,可以給出成績管理的類聲明:class cj private: struct node *head; public: cj(); /1:構(gòu)造函數(shù)構(gòu)造函數(shù),建立一個只有建立一個只有附加頭結(jié)點附加頭結(jié)點的的空

33、鏈表空鏈表 input(); / 2:向鏈表中添加學生的信息向鏈表中添加學生的信息(在表的在表的尾上追加尾上追加) appen(node *p); /3.追加結(jié)點追加結(jié)點: 在鏈表尾上鏈上一個結(jié)點在鏈表尾上鏈上一個結(jié)點(p所指的結(jié)點所指的結(jié)點) void rf(char *f); /4.讀文件,形成鏈表讀文件,形成鏈表 node *post(int num); /5.定位定位: 提供學號提供學號, 返回指向該結(jié)點的一個指針返回指向該結(jié)點的一個指針) void lookup(int num); / 6.查詢查詢 提供學號提供學號, 查找學生并輸出學生的信息查找學生并輸出學生的信息 void De

34、lete(int num); /7.刪除刪除: 提供學號提供學號, 刪除學號是該值的學生刪除學號是該值的學生 void modify(int num); /8.修改成績修改成績: 提供學號提供學號, 修改修改(重新輸入重新輸入)學生信息學生信息 void statistic() ; /9.統(tǒng)計函數(shù)統(tǒng)計函數(shù),統(tǒng)計平均成績統(tǒng)計平均成績 void sort(cj &h); /10.排序排序(降序降序): 按平均成績排序按平均成績排序,形成排序的鏈表形成排序的鏈表h void Insert(cj &h,node *p); /在有序表在有序表h中結(jié)點后仍有序中結(jié)點后仍有序(排序的一個輔助

35、函數(shù)排序的一個輔助函數(shù): void output(); /11: 輸出鏈表中各結(jié)點值輸出鏈表中各結(jié)點值 void wf(char *f); /12. 由鏈表由鏈表,形成文件形成文件 cj(); / 13(1):析構(gòu)函數(shù)析構(gòu)函數(shù),程序運行結(jié)束時程序運行結(jié)束時,刪除鏈表中的各結(jié)點刪除鏈表中的各結(jié)點, void print1(); /13(2): 輸出一個同學的成績輸出一個同學的成績(標題標題) void print2(node *p); /13(3) 輸出一個同學的成績輸出一個同學的成績 node *gethead()return head; /13(4)獲取頭指針獲取頭指針 int Length

36、 ( ) const; /13(5) 計算鏈表的長度計算鏈表的長度;cj:cj() /1:構(gòu)造函數(shù)構(gòu)造函數(shù),建立一個只有附加頭結(jié)點附加頭結(jié)點的空鏈表空鏈表head=new node;head-next=0;void cj: input() / 2:錄入學生信息錄入學生信息: 由鍵盤一個一個輸入學生的信息由鍵盤一個一個輸入學生的信息,并在表的尾上追加并在表的尾上追加) int Class; char name8; int num; float c6,ave; int order; node *p2; int t,i; coutt; while(t=1) cout請輸入班級請輸入班級,姓名姓名,學

37、號學號,電子技術(shù)電子技術(shù),C+,數(shù)學,數(shù)學,; cout英語,政治,體育成績英語,政治,體育成績Classnamenumc0c1c2c3c4c5; p2=new node; ave=(c0+c1+c2+c3+c4+c5)/6; p2-Class=Class; p2-num=num; strcpy(p2-name,name); for(i=0;ikci=ci; p2-order=0; p2-ave=ave; appen(p2); coutt; void cj: appen(node *p) /3.追加結(jié)點追加結(jié)點: 在鏈表尾上鏈上一個結(jié)點在鏈表尾上鏈上一個結(jié)點(p所指的結(jié)點所指的結(jié)點) node

38、 *p1,*p2; p1=head; p2=p1-next; while(p2) p1=p2; p2=p2-next; p1-next=p; p-next=p2; void cj:rf(char *f) /4.讀文件,形成鏈表讀文件,形成鏈表 int Class; char name8; int num; float c6,ave; int order; char ss250; /存放標題的存放標題的 node *p2; ifstream ff;ff.open(f);ff.getline(ss,200); /取第一行標題取第一行標題ff.getline(ss,200); /取第二行標題取第二行

39、標題ffClassnamenumc0c1c2c3c4c5;while(!ff.eof() p2=new node; ave=(c0+c1+c2+c3+c4+c5)/6; p2-Class=Class; p2-num=num; strcpy(p2-name,name); for(i=0;ikci=ci; p2-order=0; p2-ave=ave; appen(p2); ffClassnamenumc0c1c2c3c4c5;ff.close();node cj:*post (int num) /5.定位定位: 提供學號提供學號, 返回指向該結(jié)點的一個指針返回指向該結(jié)點的一個指針) node *

40、p1,*p2; p1=head; if(p1-next=0) return 0; p2=p1-next; while(p2-num!=num & p2-next!=0) p1=p2; p2=p2-next; if(p2-num=num) return p2; else return 0; void cj:lookup(int num) / 6.查詢查詢 提供學號提供學號, 查找學生并輸出學生的信息查找學生并輸出學生的信息 node *p1; p1=post (num) ;/定位定位: 提供學號, 返回指向該結(jié)點的一個指針) if(p1!=0) print1(); /輸出一個同學的成績(

41、標題) print2(p1); /輸出一個同學的信息 else cout無學生記錄!next; if(p1=0) cout無學生記錄無學生記錄!num!=num & p2-next!=0) p1=p2; p2=p2-next; if(p2-num=num) p1-next=p2-next; delete p2;cout已刪除了這個學生的記錄已刪除了這個學生的記錄endl; else cout沒找到該學生沒找到該學生!endl; return;void cj:modify(int num) /8: 修改函數(shù)修改函數(shù),修改對應(yīng)學號的學生成績修改對應(yīng)學號的學生成績 node *p,*p2;

42、p=post ( num) ;/定位定位: 提供學號, 返回指向該結(jié)點的一個指針) if(p!=0) float c6, cout原成績:; print1(); print2(p); cout請輸入新的成績:c0c1c2c3c4c5; ave=(c0+c1+c2+c3+c4+c5)/6; for(i=0;ikci=ci; p-ave=ave; else cout沒找到該學生!next; while(p1!=0) print2(p1); s1=s1+p1-kc0; s2=s2+p1-kc1; s3=s3+p1-kc2; s4=s4+p1-kc3; s5=s5+p1-kc4; s6=s6+p1-k

43、c5; i+; p1=p1-next; cout平均成績平均成績:endl; cout電子技術(shù)電子技術(shù)s1/itC+:s2/i; cout數(shù)學數(shù)學s3/it英語英語s4/it政治政治s5/it; cout體育體育s6/inext; while(p1) p2=new node; p2-ave=p1-ave; p2-Class=p1-Class; p2-num=p1-num;strcpy(p2-name,p1-name); for(j=0;jkcj=p1-kcj; Insert(h,p2); p1=p1-next; p1=h.gethead()-next; int i=1; while(p1!=0

44、) p1-order=i; i=i+1; p1=p1-next; void cj:Insert(cj &h, node *p) /在有序表中插入一個結(jié)點后仍有序(10.排序排序(降序降序)的一個輔助函數(shù)的一個輔助函數(shù): ) node *p1,*p2; p1=h.gethead(); if (p1-next=0) p1-next=p; p-next=0; else p2=p1-next; while(p2-next & p2-avep-ave) p1=p2; p2=p2-next; p1-next=p; p-next=p2; void cj:output()/11: 輸出鏈表中各

45、結(jié)點值輸出鏈表中各結(jié)點值 node *p; p=head-next; cout輸出學生信息:next; coutendl;void cj:wf(char *f) /12. 由鏈表由鏈表,形成文件形成文件 node *p;ofstream ff;ff.open(f); ff 學生成績表endl;ff姓名 學號 班級 elec C+ 數(shù)學 英語 政治 體育 next;while(p) ffnametnumtClasst; ffkc0tkc1tkc2t; ffkc3tkc4tkc5next; ff.close(); cj:cj() / 13(1):析構(gòu)函數(shù)析構(gòu)函數(shù),程序運行結(jié)束時程序運行結(jié)束時,刪除

46、鏈表中的各結(jié)點刪除鏈表中的各結(jié)點, node *p1; while(head) p1=head; head=head-next; delete p1; void cj:print1() /13(2): 輸出一個同學的成績(標題) cout“姓名 ”“學號 ”“班級 ”“電子 “; coutC+ 數(shù)學 英語 政治 體育 endl;void cj:print2(node *p) /13(3): 輸出一個同學的成績 int I; coutnametnumtClasst; for(i=0;i=5;+i) coutkci; coutnext; while(p!=0)n=n+1;p=p-next;retu

47、rn n;node cj: *gethead() /13(5)獲取頭指針return head;void main() /主函數(shù)主函數(shù) cj A,B; int a; int num; while(1) cout*endl; cout* 歡迎使用本系統(tǒng)歡迎使用本系統(tǒng)(請選擇你所要的功能請選擇你所要的功能) *endl; cout 0.退出系統(tǒng)退出系統(tǒng). endl; cout 1.成績錄入成績錄入. endl; cout 2.成績修改成績修改. endl; cout 3.成績查詢成績查詢. endl; cout 4.刪除成績刪除成績. endl; cout 5.順序輸出所有人的成績順序輸出所有人的

48、成績 . endl; cout 6.統(tǒng)計平均成績統(tǒng)計平均成績. endl; cout 7. 顯示學生人數(shù)顯示學生人數(shù) endl; cout 8. 輸出排序結(jié)果輸出排序結(jié)果 endl; cout 9. 讀文件讀文件 endl; cout 10. 寫文件寫文件 endl; cout*endl; couta;switch(a) case 0: goto end; case 1:A.create();break; case 2:coutnum; A.modify(num); A.sort(B); break; case 3 :A.sort(B); coutnum; B.lookup(num); bre

49、ak; case 4:coutnum; A.Delete(num); break; case 5:A.output();break; case 6:A.statistic();break; case 7: cout學生人數(shù)學生人數(shù)為為:A.Length()endl; break; case 8:A.sort(B); B.output();break; case 9:A.rf(abc);break; case 10:A.wf(abc);break; default:break; ;cout按任意鍵繼續(xù)操作按任意鍵繼續(xù)操作!endl;getchar();end:; cout謝謝您使用本系統(tǒng)謝謝您使

50、用本系統(tǒng)!endl; 3、三角形面積驗證程序的設(shè)計問題:問題: 給出求解下列問題逐步求精的分析過程給出求解下列問題逐步求精的分析過程,并設(shè)并設(shè)計程序完成其驗證:計程序完成其驗證: 已知一個正三角形已知一個正三角形ABC,其內(nèi)分點,其內(nèi)分點A1、B1、C1,使得,使得2AC1=C1B、2BA1=A1C、2CB1=B1A,連接連接CC1、BB1、AA1,三條直線分別相交于,三條直線分別相交于A2、B2、C2。要求編寫程序驗證。要求編寫程序驗證 ,三角形三角形A2B2C2的面的面積是三角形積是三角形ABC的面積的的面積的7分之一。分之一。分析問題的基本方法分析問題的基本方法 基本方法是:基本方法是:

51、 由頂向下,逐步求精;由頂向下,逐步求精; 即:即: 將復雜問題,分解為小問題,小問題解決了,將復雜問題,分解為小問題,小問題解決了,大問題也就解決了。大問題也就解決了。例如:如下的問題例如:如下的問題 已知一個正三角形已知一個正三角形ABC,其內(nèi)分點,其內(nèi)分點A1、B1、C1,使得使得2AC1=C1B、2BA1=A1C、2CB1=B1A,連接,連接CC1、BB1、AA1,三條直線分別相交于,三條直線分別相交于A2、B2、C2(見圖(見圖1)。)。要求編寫程序驗證要求編寫程序驗證 : 三角形三角形A2B2C2面積是三角形面積是三角形 ABC面積的七分之一面積的七分之一. A C1 B2 B1

52、A2 C2 B A1 C (7)建立平面直角坐標系;建立平面直角坐標系;。運用邏輯思維分析程序設(shè)計:運用邏輯思維分析程序設(shè)計: 設(shè)正三角形設(shè)正三角形ABC的邊長為的邊長為a,則本題目就是求兩個三角形的面積,則本題目就是求兩個三角形的面積,已知三角形的邊長求面積,對于三角形已知三角形的邊長求面積,對于三角形ABC是很容易的,但對于是很容易的,但對于三角形三角形A2B2C2的面積的求解卻比較麻煩。的面積的求解卻比較麻煩。(如何求呢如何求呢?)對于該問題的邏輯思維及其分析過程:對于該問題的邏輯思維及其分析過程:(1) 三角形三角形A2B2C2的面積的面積(2)求邊長(求邊長(A2B2、B2C2、C2

53、A2)(3)求交點坐標(求交點坐標(A2、B2、C2)(4)求直線方程(求直線方程(AA1、BB1、CC1)(5)求內(nèi)分點坐標(求內(nèi)分點坐標(A1、B1、C1)(6)已知邊長已知邊長a,確定三角形,確定三角形ABC的頂點坐標(的頂點坐標(A、B、C) A C1 B2 B1 A2 C2 B A1 C 分析分析實實現(xiàn)現(xiàn)設(shè)計分析(1)采用什么設(shè)計方法:)采用什么設(shè)計方法: 面向結(jié)構(gòu)的設(shè)計方法?面向結(jié)構(gòu)的設(shè)計方法? 面向?qū)ο蟮脑O(shè)計方法?面向?qū)ο蟮脑O(shè)計方法? (2)不同的設(shè)計方法,需要定義不同的數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類)不同的設(shè)計方法,需要定義不同的數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類型),如何定義數(shù)據(jù)結(jié)構(gòu);型),如何定義數(shù)據(jù)結(jié)構(gòu)

54、; 結(jié)構(gòu)體結(jié)構(gòu)體 類類 (3)下面我們對兩種設(shè)計方法,分別給出設(shè)計程序)下面我們對兩種設(shè)計方法,分別給出設(shè)計程序 采用采用“面向結(jié)構(gòu)的設(shè)計方法面向結(jié)構(gòu)的設(shè)計方法”采用采用“面向結(jié)構(gòu)的設(shè)計方法面向結(jié)構(gòu)的設(shè)計方法”需要的工作步驟:需要的工作步驟: (1)定義有關(guān)的結(jié)構(gòu)體:)定義有關(guān)的結(jié)構(gòu)體: 點,直線,三角形點,直線,三角形 (2)給出有關(guān)的函數(shù)設(shè)計實現(xiàn):)給出有關(guān)的函數(shù)設(shè)計實現(xiàn): 根據(jù)前面的分析,需要定義什么函數(shù),完成什么功能,根據(jù)前面的分析,需要定義什么函數(shù),完成什么功能,使用什么參數(shù),函數(shù)返回值及其類型;使用什么參數(shù),函數(shù)返回值及其類型; (3)設(shè)計主函數(shù):)設(shè)計主函數(shù): 調(diào)用(調(diào)用(2)中

55、的函數(shù),完成要求的功能。)中的函數(shù),完成要求的功能。1、已知一個三角形、已知一個三角形t,求面積求面積mj;2、已知兩頂點、已知兩頂點a,b, 求內(nèi)分點求內(nèi)分點 (在這里兩段的比值為在這里兩段的比值為1:2);3、已知兩頂點、已知兩頂點p1,p2,求直線方程求直線方程line4、已知兩直線、已知兩直線l1,l2,求交點坐標,求交點坐標5、已知兩點、已知兩點P1,P2,求距離,求距離(1)首先,定義有關(guān)的數(shù)據(jù)結(jié)構(gòu)(采用結(jié)構(gòu)體)三角形結(jié)構(gòu)(三邊形成三角形)三角形結(jié)構(gòu)(三邊形成三角形)(a,b,c)struc T double a; double b; double c;直線方程結(jié)構(gòu)直線方程結(jié)構(gòu):a

56、x+by+c=0struc L double a; double b; double c;點結(jié)構(gòu)點結(jié)構(gòu):(x,y) struc P double x; double y; ;直線方程結(jié)構(gòu)直線方程結(jié)構(gòu):y=kx+bstruc L double k; double b;或者或者(2)給出有關(guān)的函數(shù)設(shè)計 (注意:形參和函數(shù)的返回值):1、已知一個三角形t,求面積mj; double mj( T t) double L,ss; L=(t.a+t.b+t.c)/2; ss=sqr(L*(L-t.a)*(L-t.b)*(L-t.c); return ss; 2、已知兩頂點a,b, 求內(nèi)分點 (在這里兩段的

57、比值為1:2); P fd( P a, P b) P q; q.x=(b.x-a.x)/3+a.x; q.y=(b.y-a.y)/3+a.y; return q; 3、已知兩頂點p1,p2,求直線方程line (ax+by+c=0) L zx(P p1,P p2) L q; 實現(xiàn)過程. 4、已知兩直線l1,l2,求交點坐標 P jd(L l1,L l2) 實現(xiàn)過程. 5、已知兩點P1,P2,求距離 double jl(P p1,P p2) 實現(xiàn)過程. (3)設(shè)計主函數(shù)(調(diào)用前面的各函數(shù),完成計算)Void main() P A,B,C,A1,B1,C1,A2,B2,C2; L L1,L2,L3

58、; double d1,d2,d3,s1,s2; double a=10.00; B.x=0;B.y=0; A.x=a/2;A.y=a*sqr(3)/2; C.x=a;C.y=0; A1=fd(B,C);B1=fd(C,A);C1=fd(A,B); L1=zx(A,A1);L2=zx(B,B1);L3=zx(C,C1); A2=jd(L1,L2);B2=jd(L1,L3);C2=jd(L2,L3); d1=jl(A2,B2);d2=jl(B2,C2);d3=j;(C2,A2); s1=mj(a,a,a); s2=mj(d1,d2,d3); if (fabs(s1-7*s2)=0.001) /? cout“正確!”;else cout“錯誤!” A C1 B2 B1 A2 C2 B A1 C 采用采用“面向?qū)ο蟮脑O(shè)計方法面向?qū)ο蟮脑O(shè)計方法”采用采用“面向?qū)ο蟮脑O(shè)計方法面向?qū)ο蟮脑O(shè)計方法”需要的工作步驟:需要的工作步驟

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論