版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> VC++課程設(shè)計(jì)報(bào)告</p><p><b> 目 錄</b></p><p> 1.1 程序功能簡(jiǎn)介</p><p> 一個(gè)簡(jiǎn)單的紙牌對(duì)抗游戲,根據(jù)隨機(jī)產(chǎn)生的數(shù)字決定雙方的輸贏。</p><p> 1.2 課程設(shè)計(jì)要求</p><p> ?。?)當(dāng)雙方進(jìn)行對(duì)抗時(shí),
2、游戲者可根據(jù)自身的牌點(diǎn)決定是否繼續(xù)下注,例如拿到A,把握增大,則在計(jì)算機(jī)的牌點(diǎn)出來(lái)之前加大賭注,但不超過(guò)5點(diǎn);</p><p> ?。?)將雙方牌點(diǎn)的比較擴(kuò)大為兩張牌點(diǎn)之和,若出現(xiàn)一組對(duì)子,則對(duì)子牌點(diǎn)大于任何單牌,若雙方均為對(duì)子,則比較牌點(diǎn)之和。</p><p> 2.1 程序具體實(shí)現(xiàn)原理</p><p><b> 總體方案</b><
3、/p><p> 增加變量plyrAddBet,compAddBet用來(lái)存儲(chǔ)玩家和計(jì)算機(jī)加注的值,值并判斷值的大小是否符合要求,若玩家不加注則plyrAddBet,compAddBet賦值為0,并對(duì)原成員函數(shù)Increase(),Decrease()做一定修改。分別定義變量plyr1,plyr2 ,comp1,comp2用來(lái)儲(chǔ)存玩家和計(jì)算機(jī)的兩張牌點(diǎn),而且定義成員函數(shù)Player1(),Player2(),Compu
4、ter1(),Computer2()用來(lái)返回玩家和計(jì)算機(jī)的牌點(diǎn),再定義成員函數(shù)Initialize1() ,Initialize2()隨機(jī)產(chǎn)生玩家牌點(diǎn)plyr1,plyr2 和計(jì)算機(jī)的牌點(diǎn)comp1,comp2,再對(duì)主函數(shù)中的比較語(yǔ)句做出修改。</p><p><b> 基本原理</b></p><p> 主函數(shù)中首先定義了War類的對(duì)象Play,然后分別調(diào)用In
5、itialize1() ,Initialize2()隨機(jī)產(chǎn)生玩家牌點(diǎn)plyr1,plyr2 和計(jì)算機(jī)的牌點(diǎn)comp1,comp2,調(diào)用函數(shù)Loops()計(jì)算出牌的次數(shù),依次輸出玩家的兩張牌plyr1,plyr2,詢問(wèn)玩家是否繼續(xù)加注,若繼續(xù)加注就將值賦給plyrAddBett,若不繼續(xù)加注則plyrAddBet賦值為0,然后再依次輸出計(jì)算機(jī)的牌點(diǎn)comp1,comp2,由計(jì)算機(jī)自動(dòng)判斷是否加注,若加注則compAddBet賦值為3,若不
6、加注則compAddBet賦值為0。再根據(jù)要求比較玩家和計(jì)算機(jī)的牌點(diǎn)大小,調(diào)用Increase()或Decrease(),再調(diào)用CheckScore()返回玩家的分?jǐn)?shù),最后用if語(yǔ)句判斷游戲是否繼續(xù)進(jìn)行。</p><p> 程序各個(gè)功能說(shuō)明以及課程設(shè)計(jì)要求的實(shí)現(xiàn)</p><p><b> 程序結(jié)構(gòu)</b></p><p> #includ
7、e <iostream.h></p><p> #include <stdlib.h></p><p> #include <time.h></p><p> #define MAX 13//牌的最大點(diǎn)為13</p><p><b> class War</b></p&
8、gt;<p><b> {</b></p><p> int plyr1,plyr2 ,comp1,comp2;//plyr玩者的牌點(diǎn), comp計(jì)算機(jī)的牌點(diǎn)</p><p> static int Score;//玩者的分?jǐn)?shù),當(dāng)分?jǐn)?shù)為0或50時(shí)游戲結(jié)束</p><p> static int Loop;//出牌次數(shù),游戲
9、結(jié)束時(shí)給出總的出牌次數(shù)</p><p><b> public:</b></p><p> static int plyrAddBet,compAddBet;//plyrAddBet,compAddBet分別為玩家和計(jì)算機(jī)的加大賭注</p><p> int Player1(),Player2();//返回玩者的牌點(diǎn)</p>
10、<p> int Computer1(), Computer2();//返回計(jì)算機(jī)的牌點(diǎn)</p><p> void Initialize1(),Initialize2();//給出玩者和計(jì)算機(jī)的牌點(diǎn)</p><p> int CheckScore();//返回玩者分?jǐn)?shù)</p><p> void GameOver();</p>&
11、lt;p> War();//缺省構(gòu)造函數(shù),初始化對(duì)象</p><p> static int Increase();//分?jǐn)?shù)增加</p><p> static int Decrease();//分?jǐn)?shù)減少</p><p> static int Loops();//出牌次數(shù)增加</p><p><b> };<
12、/b></p><p> int War::Score = 26; //初始分?jǐn)?shù)</p><p> int War::Loop = 0;//比賽輪數(shù)</p><p> int War::Increase()//增分,每輪贏一分加大的賭注</p><p><b> {</b></p><p
13、> Score=++Score+plyrAddBet+compAddBet;</p><p> return Score;</p><p><b> }</b></p><p> int War::Decrease()//減分,每輪輸一分加大的賭注</p><p><b> {</b>
14、;</p><p> Score=--Score-plyrAddBet+compAddBet;</p><p> return Score;</p><p><b> }</b></p><p> int War::Loops()//雙方出牌一次,為一輪</p><p><b>
15、 {</b></p><p><b> Loop++;</b></p><p> return Loop;</p><p><b> }</b></p><p> War::War()//構(gòu)造函數(shù),初始雙方牌點(diǎn)為0</p><p><b>
16、{</b></p><p> plyr1,plyr2, comp1,comp2 = 0;</p><p><b> }</b></p><p> int War::Player1()//返回玩者牌點(diǎn)</p><p><b> {</b></p><p>
17、 return plyr1;</p><p><b> }</b></p><p> int War::Player2()//返回玩者牌點(diǎn)</p><p><b> {</b></p><p> return plyr2;</p><p><b> }&
18、lt;/b></p><p> int War::Computer1()//返回計(jì)算機(jī)的牌點(diǎn)</p><p><b> {</b></p><p> return comp1;</p><p><b> }</b></p><p> int War::Comp
19、uter2()//返回計(jì)算機(jī)的牌點(diǎn)</p><p><b> {</b></p><p> return comp2;</p><p><b> }</b></p><p> void War::Initialize1()//隨機(jī)產(chǎn)生玩家牌點(diǎn)</p><p><
20、b> {</b></p><p> //srand ( time (NULL) );</p><p> plyr1 = rand()%MAX+2;//牌點(diǎn)為2-14,14點(diǎn)為A</p><p> plyr2 = rand()%MAX+2;//牌點(diǎn)為2-14,14點(diǎn)為A</p><p><b> }<
21、/b></p><p> void War::Initialize2()//隨機(jī)產(chǎn)生計(jì)算機(jī)牌點(diǎn)</p><p> { //srand ( time (NULL) );</p><p> comp1 = rand()%MAX+2;</p><p> comp2 = rand()%MAX+2;</p><p&
22、gt;<b> }</b></p><p> int War::CheckScore()//返回玩者分?jǐn)?shù)</p><p><b> {</b></p><p> return Score;</p><p><b> }</b></p><p>
23、 void War::GameOver()//游戲結(jié)束時(shí)的相關(guān)信息</p><p><b> {</b></p><p> cout << endl << "游戲結(jié)束! 謝謝參與." << endl;</p><p> cout << "你用了 "
24、<< War::Loops() << " 輪." << endl;</p><p><b> }</b></p><p> int War::plyrAddBet;</p><p> int War::compAddBet;</p><p> void ma
25、in()</p><p><b> {</b></p><p><b> War Play;</b></p><p><b> int x;</b></p><p> cout << endl << "準(zhǔn)備開(kāi)始!" <&
26、lt; endl << endl;</p><p> Play.Initialize1();//隨機(jī)產(chǎn)生玩家牌點(diǎn)</p><p> Play.Initialize2();</p><p> Play.Loops();//輪次增加</p><p> cout << "你的牌是一張";</
27、p><p> if(Play.Player1() == 11)</p><p> cout << "J" << endl;</p><p> else if(Play.Player1() == 12)</p><p> cout << "Q" << e
28、ndl;</p><p> else if (Play.Player1() == 13)</p><p> cout << "K" << endl;</p><p> else if (Play.Player1() == 14)</p><p> cout << "A&
29、quot; << endl;</p><p><b> else</b></p><p> cout << Play.Player1() << endl;</p><p> cout << "和一張";</p><p> if(Play.Play
30、er2() == 11)</p><p> cout << "J" << endl;</p><p> else if(Play.Player2() == 12)</p><p> cout << "Q" << endl;</p><p> els
31、e if (Play.Player2() == 13)</p><p> cout << "K" << endl;</p><p> else if (Play.Player2() == 14)</p><p> cout << "A" << endl;</p>
32、<p><b> else</b></p><p> cout << Play.Player2() << endl;</p><p> cout<<"是否繼續(xù)加注?加注請(qǐng)輸入1到5,如不加注請(qǐng)輸入0"<<endl;</p><p> cin>>
33、Play.plyrAddBet;</p><p> if(Play.plyrAddBet>5||Play.plyrAddBet<0){</p><p> cout<<"加注錯(cuò)誤,重新加注"<<endl;</p><p> cout<<"是否繼續(xù)加注?加注請(qǐng)輸入1到5,如不加注請(qǐng)輸入0
34、"<<endl;</p><p> cin>>Play.plyrAddBet;</p><p><b> }</b></p><p> cout << "計(jì)算機(jī)有一張";</p><p> if(Play.Computer1() == 11)<
35、;/p><p> cout << "J" << endl;</p><p> else if(Play.Computer1() == 12)</p><p> cout << "Q" << endl; </p><p> else if (Play.
36、Computer1() == 13)</p><p> cout << "K" << endl;</p><p> else if (Play.Computer1() == 14)</p><p> cout << "A" << endl;</p><p
37、><b> else</b></p><p> cout << Play.Computer1() << endl;</p><p> cout<<"和一張";</p><p> if(Play.Computer2() == 11)</p><p>
38、cout << "J" << endl;</p><p> else if(Play.Computer2() == 12)</p><p> cout << "Q" << endl; </p><p> else if (Play.Computer2() == 13)&l
39、t;/p><p> cout << "K" << endl;</p><p> else if (Play.Computer2() == 14)</p><p> cout << "A" << endl;</p><p><b> else&
40、lt;/b></p><p> cout << Play.Computer2() << endl;</p><p> if (Play.Player1()==Play.Player2()&&Play.Computer1()!=Play.Computer2()) //比較玩家與計(jì)算機(jī)的輸贏</p><p> cout
41、<<"你贏了";</p><p> Play.Increase();</p><p> if (Play.Player1()==Play.Player2()&&Play.Computer1()==Play.Computer2())</p><p> {if (Play.Player1()>Play.Com
42、puter1())</p><p> cout<<"你贏了";</p><p> Play.Increase();</p><p> if( Play.Player1()<Play.Computer1())</p><p> cout<<"你輸了";</p&g
43、t;<p> Play.Decrease(); </p><p> cout << "勢(shì)均力敵!" << endl;</p><p><b> }</b></p><p> if (Play.Player1()!=Play.Player2()&&Play.Comp
44、uter1()!=Play.Computer2())</p><p> {if (Play.Player1()+Play.Player2()>Play.Computer1()+Play.Computer2() )</p><p> cout<<"你贏了";</p><p> Play.Increase();</p&g
45、t;<p> if (Play.Player1()+Play.Player2()<Play.Computer1()+Play.Computer2() )</p><p> cout<<"你輸了";</p><p> Play.Decrease(); </p><p> cout << "
46、;勢(shì)均力敵!" << endl;</p><p><b> }</b></p><p> Play.CheckScore();//返回分?jǐn)?shù)</p><p> cout << endl << "你的分?jǐn)?shù)是: " << Play.CheckScore() <&
47、lt; endl;</p><p> if(Play.CheckScore()<=0||Play.CheckScore()>=52)Play.GameOver(); </p><p> else {cout << endl <<"繼續(xù) 1 [退出 0]" << endl;//選擇游戲是否繼續(xù)進(jìn)行</p>
48、<p><b> cin >> x;</b></p><p> if (x == 1)main();} //若是遞歸調(diào)用主函數(shù)</p><p><b> }</b></p><p> 實(shí)現(xiàn)一:當(dāng)雙方進(jìn)行對(duì)抗時(shí),游戲者可根據(jù)自身的牌點(diǎn)決定是否繼續(xù)下注,例如拿到A,把握增大,則在計(jì)算機(jī)的牌點(diǎn)出來(lái)
49、之前加大賭注,但不超過(guò)5點(diǎn)。</p><p> 在類War中定義了一個(gè)變量AddBet,用來(lái)表示玩家加大的賭注。在成員函數(shù)Increase()和Decrease()中分別做出修改。具體如下:</p><p> int War::Increase()//增分,每輪贏一分及加大的賭注</p><p><b> {</b></p>
50、<p> Score=++Score+AddBet+compAddBet;</p><p> return Score;</p><p><b> }</b></p><p> int War::Decrease()//減分,每輪輸一分加大的賭注</p><p><b> {</b&
51、gt;</p><p> Score=--Score-AddBet-compAddBet;</p><p> return Score;</p><p><b> }</b></p><p> 在主函數(shù)中也加入了一段輸入語(yǔ)句:</p><p> cout<<"是否繼
52、續(xù)加注?加注請(qǐng)輸入1到5,如不加注請(qǐng)輸入0"<<endl;</p><p> cin>>Play. plyrAddBet;</p><p> if(Play. plyrAddBet>5||Play. plyrAddBet<0){</p><p> cout<<"加注錯(cuò)誤,重新加注"&
53、lt;<endl;</p><p> cout<<"是否繼續(xù)加注?加注請(qǐng)輸入1到5,如不加注請(qǐng)輸入0"<<endl;</p><p> cin>>Play. plyrAddBet;</p><p><b> }</b></p><p> 實(shí)現(xiàn)二:將雙方
54、牌點(diǎn)的比較擴(kuò)大為兩張牌點(diǎn)之和,若出現(xiàn)一組對(duì)子,則對(duì)子牌點(diǎn)大于任何單牌,若雙方均為對(duì)子,則比較牌點(diǎn)之和。</p><p> 在類War中分別定義了函數(shù)Player1(),Player2()用來(lái)返回玩者的牌點(diǎn),Computer1(), Computer2()用來(lái)返回計(jì)算機(jī)的牌點(diǎn),Initialize1(),Initialize2()用來(lái)隨機(jī)產(chǎn)生玩者和計(jì)算機(jī)的牌點(diǎn)。在主函數(shù)中分別調(diào)用這些函數(shù),具體修改如下:<
55、/p><p> Play.Initialize1();//隨機(jī)產(chǎn)生玩家牌點(diǎn)</p><p> Play.Initialize2();</p><p> Play.Loops();//輪次增加</p><p> cout << "你的牌是一張";</p><p> if(Play.P
56、layer1() == 11)</p><p> cout << "J" << endl;</p><p> else if(Play.Player1() == 12)</p><p> cout << "Q" << endl;</p><p>
57、else if (Play.Player1() == 13)</p><p> cout << "K" << endl;</p><p> else if (Play.Player1() == 14)</p><p> cout << "A" << endl;</p&
58、gt;<p><b> else</b></p><p> cout << Play.Player1() << endl;</p><p> cout << "和一張";</p><p> if(Play.Player2() == 11)</p><
59、;p> cout << "J" << endl;</p><p> else if(Play.Player2() == 12)</p><p> cout << "Q" << endl;</p><p> else if (Play.Player2() == 13)
60、</p><p> cout << "K" << endl;</p><p> else if (Play.Player2() == 14)</p><p> cout << "A" << endl;</p><p><b> else&
61、lt;/b></p><p> cout << Play.Player2() << endl;</p><p> cout<<"是否繼續(xù)加注?加注請(qǐng)輸入1到5,如不加注請(qǐng)輸入0"<<endl;</p><p> cin>>Play.plyrAddBet;</p>
62、<p> if(Play.plyrAddBet>5||Play.plyrAddBet<0){</p><p> cout<<"加注錯(cuò)誤,重新加注"<<endl;</p><p> cout<<"是否繼續(xù)加注?加注請(qǐng)輸入1到5,如不加注請(qǐng)輸入0"<<endl;</p&g
63、t;<p> cin>>Play.plyrAddBet;</p><p><b> }</b></p><p> cout << "計(jì)算機(jī)有一張";</p><p> if(Play.Computer1() == 11)</p><p> cout &l
64、t;< "J" << endl;</p><p> else if(Play.Computer1() == 12)</p><p> cout << "Q" << endl; </p><p> else if (Play.Computer1() == 13)</p>
65、;<p> cout << "K" << endl;</p><p> else if (Play.Computer1() == 14)</p><p> cout << "A" << endl;</p><p><b> else</b&g
66、t;</p><p> cout << Play.Computer1() << endl;</p><p> cout<<"和一張";</p><p> if(Play.Computer2() == 11)</p><p> cout << "J"
67、 << endl;</p><p> else if(Play.Computer2() == 12)</p><p> cout << "Q" << endl; </p><p> else if (Play.Computer2() == 13)</p><p> cout &
68、lt;< "K" << endl;</p><p> else if (Play.Computer2() == 14)</p><p> cout << "A" << endl;</p><p><b> else</b></p><p&
69、gt; cout << Play.Computer2() << endl;</p><p> if (Play.Player1()==Play.Player2()&&Play.Computer1()!=Play.Computer2()) //比較玩家與計(jì)算機(jī)的輸贏</p><p> cout<<"你贏了";<
70、;/p><p> Play.Increase();</p><p> if (Play.Player1()==Play.Player2()&&Play.Computer1()==Play.Computer2())</p><p> {if (Play.Player1()>Play.Computer1())</p><p&
71、gt; cout<<"你贏了";</p><p> Play.Increase();</p><p> if( Play.Player1()<Play.Computer1())</p><p> cout<<"你輸了";</p><p> Play.Decreas
72、e(); </p><p> cout << "勢(shì)均力敵!" << endl;</p><p><b> }</b></p><p> if (Play.Player1()!=Play.Player2()&&Play.Computer1()!=Play.Computer2())&
73、lt;/p><p> {if (Play.Player1()+Play.Player2()>Play.Computer1()+Play.Computer2() )</p><p> cout<<"你贏了";</p><p> Play.Increase();</p><p> if (Play.Pla
74、yer1()+Play.Player2()<Play.Computer1()+Play.Computer2() )</p><p> cout<<"你輸了";</p><p> Play.Decrease(); </p><p> cout << "勢(shì)均力敵!" << endl;
75、</p><p><b> 3 調(diào)試報(bào)告</b></p><p><b> 4 總體小結(jié)</b></p><p> 將所學(xué)的c++知識(shí)第一次進(jìn)行系統(tǒng)大量的運(yùn)用,對(duì)于c++知識(shí)有了進(jìn)一步的掌握和理解。而在實(shí)驗(yàn)過(guò)程中,不斷遇到問(wèn)題,但又解決問(wèn)題,一次次的不斷嘗試,不斷調(diào)節(jié),使解決問(wèn)題的能力有了提高。并對(duì)程序的編寫(xiě)有了一定
76、的了解,對(duì)將來(lái)的學(xué)習(xí)方向有了進(jìn)一步的認(rèn)識(shí)。</p><p><b> 2:工資管理</b></p><p><b> 1.1程序功能簡(jiǎn)介</b></p><p> 這是一個(gè)員工工資管理程序。工資管理的數(shù)據(jù)文件中儲(chǔ)存有員工姓名和工資,該程序可以錄入,顯示,修改,刪除,查找員工姓名和工資。</p><
77、p><b> 課程設(shè)計(jì)要求</b></p><p> 用類的形式改寫(xiě)程序,將程序中工資數(shù)據(jù)用鏈表的形式存放,定義一個(gè)鏈表類,封裝主要的操作函數(shù)。</p><p> 顯示,修改,刪除數(shù)據(jù)項(xiàng)時(shí)大小寫(xiě)通用。</p><p> 工資數(shù)據(jù)按工資值的大小進(jìn)行排序存放。</p><p> 修改,刪除數(shù)據(jù)前增加提示信息,
78、用戶確認(rèn)后才能進(jìn)一步操作,否則操作被取消。</p><p> 增加程序的文件輸入輸出功能,在執(zhí)行程序中首先將工資數(shù)據(jù)從文件中。</p><p> 2.1程序具體實(shí)現(xiàn)原理</p><p><b> 總體方案</b></p><p><b> 1、數(shù)簡(jiǎn)易流程圖:</b></p>&
79、lt;p> 1、調(diào)用函數(shù)AddRecord()</p><p> 2、調(diào)用函數(shù)ShowRecord()</p><p> 3、調(diào)用函數(shù)LookUpRecord()</p><p> 開(kāi)始 輸入選擇項(xiàng) 判斷 4、調(diào)用函數(shù)DeleteRecord()</p><p> 5、調(diào)用函數(shù)EditRecord()<
80、;/p><p> 6、調(diào)用函數(shù)SaveToFile()</p><p><b> 7、退出程序</b></p><p> 2、義多個(gè)類使程序看起來(lái)更有理,更容易明白。</p><p> 一個(gè)數(shù)據(jù)類,把程序基本用得上的數(shù)據(jù)全在在各類中定義。</p><p> 一個(gè)結(jié)點(diǎn)類,定義結(jié)點(diǎn)指針函數(shù)。&l
81、t;/p><p> 一個(gè)鏈表類,定義所有鏈表指針函數(shù)和相關(guān)操作函數(shù)。</p><p> 一個(gè)自定義類,封裝主函數(shù)主要操作函數(shù)。</p><p> 3、使用文件輸入輸出流來(lái)實(shí)現(xiàn)最終的程序的文件輸入輸出功能。</p><p> 2.2 程序各個(gè)功能說(shuō)明以及課程設(shè)計(jì)要求的實(shí)現(xiàn)</p><p><b> 程序結(jié)
82、構(gòu)</b></p><p><b> 數(shù)據(jù)類:</b></p><p> class CSalary//數(shù)據(jù)類</p><p><b> {</b></p><p><b> private:</b></p><p> char
83、szName[20];//姓名</p><p> double dlSalary;//工資</p><p><b> public:</b></p><p> CSalary() {strcpy(szName,"\0");dlSalary=0.0;}//構(gòu)造函數(shù),初始化數(shù)據(jù)</p><p>
84、CSalary(char *name,double salary) {strcpy(szName,name);dlSalary=salary;}//重載構(gòu)造函數(shù)</p><p> void SetSalary(char *,double);//置姓名與工資</p><p> char* GetName() {return szName;}//返回姓名</p><
85、p> double GetSal() {return dlSalary;}//返回工資</p><p> int Compare(CSalary &);//比較姓名,供查找用,比較結(jié)果為1,0</p><p> void Show();//打印</p><p> void EditData();//編輯數(shù)據(jù)</p><p&
86、gt;<b> }</b></p><p><b> 結(jié)點(diǎn)類:</b></p><p> class CNode//結(jié)點(diǎn)類的定義</p><p><b> {</b></p><p><b> private:</b></p>&
87、lt;p> CSalary *pData;//指向數(shù)據(jù)的指針</p><p> CNode *pNext;//指向下一個(gè)結(jié)點(diǎn)的指針</p><p><b> public:</b></p><p> CNode() {pData=0;pNext=0;}//構(gòu)造函數(shù)</p><p> CNode(CNo
88、de &node);//重載構(gòu)造函數(shù)</p><p> void InputData(CSalary *pSal);//輸入數(shù)據(jù)</p><p> void ShowNode() {pData->Show();}//數(shù)據(jù)的輸出</p><p> CSalary *GetData() {return pData;}//數(shù)據(jù)的得到</p&g
89、t;<p> friend class CList;//把鏈表類設(shè)為友元類</p><p><b> };</b></p><p> CNode::CNode(CNode &node)//重載構(gòu)造函數(shù)</p><p><b> {</b></p><p> pData
90、=node.pData;</p><p> pNext=node.pNext;</p><p><b> }</b></p><p> void CNode::InputData(CSalary *pSal)//輸入數(shù)據(jù)</p><p><b> {</b></p><p
91、> pData=pSal;</p><p><b> pNext=0;</b></p><p><b> }</b></p><p><b> 鏈表類:</b></p><p> class CList//鏈表類</p><p><
92、b> {</b></p><p> protected:</p><p> CNode *pHead;//鏈表頭指針</p><p><b> public:</b></p><p> CList() {pHead=0;}//構(gòu)造函數(shù)</p><p> ~CList
93、() {DeleteList();}//析構(gòu)函數(shù)</p><p> void AddNode(CNode *pnode);//在首部添加結(jié)點(diǎn)</p><p> void DeleteNode(CNode *);//刪除一個(gè)指定的結(jié)點(diǎn),返回該節(jié)點(diǎn)的指針</p><p> CNode *LookUp(CSalary&);//查找姓名</p>
94、<p> void ShowList();//打印整個(gè)鏈表</p><p> void DeleteList();//刪除整個(gè)鏈表</p><p> CNode *GetpHead();///返回鏈表頭指針</p><p> CNode *GetNextNode(CNode *);//返回鏈表指定結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),</p><
95、p> void Insert(CNode *);//按工資順序插入一個(gè)節(jié)點(diǎn)</p><p> CNode *GetLastNode();//返回鏈表尾節(jié)點(diǎn)</p><p><b> };</b></p><p><b> 封裝類:</b></p><p> class CRecord
96、//定義一個(gè)類,此類封裝所有在主函數(shù)內(nèi)調(diào)用的函數(shù)</p><p><b> {</b></p><p> CList list;</p><p><b> public:</b></p><p> void ReadFromFile();//讀取文件</p><p>
97、 void SaveToFile();//保存記錄到文件里</p><p> void AddRecord();//添加記錄</p><p> void ShowRecord();//顯示記錄</p><p> void LookUpRecord();//根據(jù)姓名查詢</p><p> void EditRecord();//根據(jù)姓
98、名編輯</p><p> void DeleteRecord();//根據(jù)姓名刪除</p><p> void change(char*);//大小寫(xiě)轉(zhuǎn)換</p><p><b> };</b></p><p><b> 主函數(shù):</b></p><p> void
99、 main()</p><p><b> {</b></p><p> CRecord Record;</p><p> Record.ReadFromFile();</p><p> cout<<"* * * * * * * * * * 工資管理系統(tǒng) * * * * * * * * * *
100、\n";</p><p> cout<<"主菜單:"<<endl;</p><p> cout<<"1.添加工資記錄"<<endl;</p><p> cout<<"2.顯示工資記錄"<<endl;</p>
101、<p> cout<<"3.根據(jù)姓名查詢工資數(shù)據(jù)"<<endl;</p><p> cout<<"4.根據(jù)姓名刪除工資數(shù)據(jù)"<<endl;</p><p> cout<<"5.根據(jù)姓名修改工資數(shù)據(jù)"<<endl;</p><
102、;p> cout<<"6.存儲(chǔ)文件"<<endl;</p><p> cout<<"0.退出系統(tǒng)"<<endl;</p><p> cout<<"* * * * * * * * * * * * * * * * * * * * * * *\n";</p&g
103、t;<p><b> while(1)</b></p><p><b> {</b></p><p> cout<<"請(qǐng)選擇要進(jìn)行操作的代號(hào):"<<endl;</p><p><b> char num;</b></p>
104、<p><b> cin>>num;</b></p><p> switch(num)</p><p><b> {</b></p><p> case '1':Record.AddRecord();break;//添加工資記錄</p><p> ca
105、se '2':Record.ShowRecord();break;//顯示工資記錄</p><p> case '3':Record.LookUpRecord();break;//根據(jù)姓名查詢工資數(shù)據(jù)</p><p> case '4':Record.DeleteRecord();break;//根據(jù)姓名刪除工資數(shù)據(jù)</p>
106、<p> case '5':Record.EditRecord();break;//根據(jù)姓名修改工資數(shù)據(jù)</p><p> case '6':Record.SaveToFile();break;//存儲(chǔ)文件</p><p> case '0':exit(-1);break;//退出系統(tǒng)</p><p&g
107、t; default:break;</p><p><b> }</b></p><p><b> }</b></p><p><b> 實(shí)現(xiàn)</b></p><p> 改進(jìn)一:進(jìn)行了類的封裝,將主要的操作函數(shù)都封裝在了類中</p><p>
108、 程序中,定義了三個(gè)類,數(shù)據(jù)類,結(jié)點(diǎn)類,鏈表類。還定義一個(gè)類,把主要操作函數(shù)包含其中。</p><p><b> 具體實(shí)現(xiàn):</b></p><p> class CRecord//定義一個(gè)類,此類封裝所有在主函數(shù)內(nèi)調(diào)用的函數(shù)</p><p><b> {</b></p><p> CLis
109、t list;</p><p><b> public:</b></p><p> void ReadFromFile();//讀取文件</p><p> void SaveToFile();//保存記錄到文件里</p><p> void AddRecord();//添加記錄</p><p&
110、gt; void ShowRecord();//顯示記錄</p><p> void LookUpRecord();//根據(jù)姓名查詢</p><p> void EditRecord();//根據(jù)姓名編輯</p><p> void DeleteRecord();//根據(jù)姓名刪除</p><p> void change(char*
111、);//大小寫(xiě)轉(zhuǎn)換</p><p><b> };</b></p><p> 改進(jìn)二:要求顯示、修改、刪除數(shù)據(jù)時(shí)大小寫(xiě)通用</p><p> 只要修改大寫(xiě)字母就行,把大寫(xiě)轉(zhuǎn)化成小寫(xiě)字母程序就能實(shí)現(xiàn)大小寫(xiě)通用了。</p><p><b> 具體實(shí)現(xiàn)</b></p><p&g
112、t; void CRecord::change(char* name)//大小寫(xiě)轉(zhuǎn)換</p><p><b> {</b></p><p><b> int v=0;</b></p><p> while(name[v]!='\0')</p><p><b> {
113、</b></p><p> if (name[v]>='A' && name[v]<='Z') name[v]+=32;</p><p><b> v++;</b></p><p><b> }</b></p><p>&
114、lt;b> }</b></p><p> 改進(jìn)三:由于要求工資數(shù)據(jù)按工資值的大小進(jìn)行排序存放</p><p> 只要在將數(shù)據(jù)添加到文件中時(shí)保證是按工資的順序添加進(jìn)去的就行了。</p><p><b> 具體實(shí)現(xiàn):</b></p><p> void CList::Insert(CNode *
115、pnode)//按照工資順序插入一個(gè)節(jié)點(diǎn)</p><p><b> {</b></p><p> CNode *p,*q;</p><p> if(pHead==0)</p><p><b> {</b></p><p> pHead=pnode;</p>
116、;<p> pHead->pNext=0;</p><p><b> return;</b></p><p><b> }</b></p><p> if(pHead->pData->GetSal()>pnode->pData->GetSal())</p>
117、;<p><b> {</b></p><p> pnode->pNext=pHead;</p><p> pHead=pnode;</p><p><b> return;</b></p><p><b> }</b></p>&l
118、t;p><b> p=pHead;</b></p><p> while(p&&p->pData->GetSal()<pnode->pData->GetSal())</p><p><b> {</b></p><p><b> q=p;</b&g
119、t;</p><p> p=p->pNext;</p><p><b> }</b></p><p> q->pNext=pnode;</p><p> pnode->pNext=p;</p><p><b> }</b></p>&
120、lt;p> 改進(jìn)四:修改、刪除數(shù)據(jù)前增加提示信息,用戶確認(rèn)后才能進(jìn)一步操作,否則操作取消。</p><p> 要實(shí)現(xiàn)確認(rèn)操作,真正刪除或者刪除前增加一個(gè)輸出輸入再一個(gè)判斷語(yǔ)句而已。</p><p><b> 具體實(shí)現(xiàn):</b></p><p><b> do</b></p><p>&
121、lt;b> {</b></p><p> p->ShowNode();</p><p> cout<<"修改?(Y/N)";//修改需要再次確認(rèn)</p><p> cin>>edit;</p><p> if(edit=='N'||edit==
122、9;n')break;</p><p><b> else</b></p><p><b> {</b></p><p> p->GetData()->EditData();</p><p><b> break;</b></p>&l
123、t;p><b> }</b></p><p> }while(edit!='Y'&&edit!='y'&&edit!='N'&&edit!='n');</p><p><b> }</b></p><p&
124、gt; 改進(jìn)五:增加程序的文件輸入輸出功能,在執(zhí)行程序中首先將工資數(shù)據(jù)從文件中讀出再進(jìn)行管理,在程序結(jié)束時(shí)能將工資數(shù)據(jù)保存在原文件中。</p><p><b> 具體實(shí)現(xiàn):</b></p><p> void CRecord::ReadFromFile()//讀取文件</p><p><b> {</b></
125、p><p> ifstream infile("data.txt");</p><p> if(!infile)</p><p><b> {</b></p><p> cout<<"文件讀取失敗!"<<endl;</p><p>
126、;<b> exit(1);</b></p><p><b> }</b></p><p> char name[20];</p><p> double salary;</p><p> while(infile>>name>>salary)//文件數(shù)據(jù)的讀取&l
127、t;/p><p><b> {</b></p><p> CSalary *psalary=new CSalary;//</p><p> psalary->SetSalary(name,salary);//置姓名與工資</p><p> CNode *pnode=new CNode;//</p>
128、<p> pnode->InputData(psalary);//輸入數(shù)據(jù)</p><p> list.AddNode(pnode);//把數(shù)據(jù)轉(zhuǎn)移到鏈表上</p><p><b> }</b></p><p><b> }</b></p><p> void CReco
129、rd::SaveToFile()//保存記錄到文件</p><p><b> {</b></p><p> ofstream outfile("data.txt");</p><p> if(!outfile)</p><p><b> {</b></p>
130、<p> cout<<"文件寫(xiě)入失敗!"<<endl;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> char name[20];</p><p> double salar
131、y;</p><p> CNode *p=list.GetpHead();</p><p><b> while(p)</b></p><p><b> {</b></p><p> strcpy(name,p->GetData()->GetName());</p>
132、<p> salary=p->GetData()->GetSal();</p><p> outfile<<name<<" "<<salary<<endl;//文件數(shù)據(jù)的輸入</p><p> p=list.GetNextNode(p);//循環(huán)往復(fù),直到錄入所有的數(shù)據(jù)</p>
133、<p><b> }</b></p><p><b> }</b></p><p><b> 3調(diào)試報(bào)告</b></p><p> 以下面的表格形式記錄程序調(diào)試和測(cè)試過(guò)程。</p><p><b> 4.總體小結(jié)</b></p&g
134、t;<p> 沒(méi)編程序時(shí)感覺(jué)難度很大,無(wú)從下手。當(dāng)耐下心來(lái)從頭至尾將源代碼看了兩遍才對(duì)程序有個(gè)模糊的認(rèn)識(shí)。在修改程序時(shí),發(fā)現(xiàn)有許多不懂和淡忘的地方,回過(guò)頭來(lái)查找相關(guān)資料,把問(wèn)題一個(gè)個(gè)擊破。并且有些較難理解的語(yǔ)句在不斷修改的過(guò)程中可以逐漸清晰。課程設(shè)計(jì)可以充分發(fā)揮我的編程綜合能力,將自己的編程知識(shí)串聯(lián)起來(lái),綜合利用,自己的編程能力。很高興有這個(gè)機(jī)會(huì)促使我編程。總之,在這個(gè)程序設(shè)計(jì)中的收獲還是非常多的。</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vc++課程設(shè)計(jì)報(bào)告--對(duì)抗游戲
- vc++課程設(shè)計(jì)報(bào)告----對(duì)抗游戲
- vc++課程設(shè)計(jì)報(bào)告
- vc++軟件課程設(shè)計(jì)報(bào)告
- vc++課設(shè)課程設(shè)計(jì)報(bào)告
- mfc課程設(shè)計(jì)———利用vc++程序編寫(xiě)掃雷游戲
- vc++課程設(shè)計(jì)報(bào)告---球員管理系統(tǒng)
- vc++課程設(shè)計(jì)報(bào)告---橫向繪制余弦曲線
- vc++俄羅斯方塊課程設(shè)計(jì)報(bào)告
- vc++庫(kù)函數(shù)課程設(shè)計(jì)
- vc++課程設(shè)計(jì)-- 餐飲管理系統(tǒng)
- vc++課程設(shè)計(jì)--工資管理
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)
- vc++課程設(shè)計(jì)--工資管理
- vc++課程設(shè)計(jì)報(bào)告--圖書(shū)館管理系統(tǒng)
- 課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 漢諾塔課程設(shè)計(jì)--基于vc++的漢諾塔游戲設(shè)計(jì)
- VC++課程設(shè)計(jì)--工資管理.doc
- vc++數(shù)據(jù)庫(kù)課程設(shè)計(jì)報(bào)告---外賣訂餐平臺(tái)
- vc++課程設(shè)計(jì)報(bào)告 paint board 簡(jiǎn)易畫(huà)圖板
評(píng)論
0/150
提交評(píng)論