程序設計大作業含源代碼_第1頁
程序設計大作業含源代碼_第2頁
程序設計大作業含源代碼_第3頁
程序設計大作業含源代碼_第4頁
程序設計大作業含源代碼_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 面向對象程序設計大作業姓名:葉爾凱西 學院(系):計科系 班級:計科系07-1班學號:08080605227設計本程序的目的:關于一些并不太復雜的集體來說,一般需要管理集體中的每個人的基本信息的,本程序專門為一些在校學生的基本信息的管理而設計的,主要目的是通過本程序來實現簡單的記錄和查找學生的基本信息;程序功能簡介:本程序是通過面向對象的最重要的特點“類”來設計出來的,其功能是實現簡單的學生基本信息管理。包括一些要求用戶從鍵盤輸入(記錄)學生的基本信息、輸出學生的基本信息和用學生的學號來查找學生信息表中的某個學生的基本信息等功能;程序功能的詳細介紹:本人設計程序時考慮到的很所內容,其中輸入輸

2、出學生的基本信息是最基本的功能。下面來給大家介紹程序的核心類的構建: 在程序中共建立了兩種類,分別是person類和student類。person作為student類的基類,其內部是如下設計的:class personpublic:void SetPersonAddress(char *AddressFromMain); void SetPersonSex(char *SexFromMain); void ShowPersonSex();void ShowPersonAddress();private:char Address25;char Sex2;可以看到,在上面分別聲明了四個成員函數和兩

3、個數據成員。四個成員函數的作用是對私有數據成員進行訪問(包括輸入和輸出)。所以當建立了一個person類之后就可以通過它的對象來訪問該類的數據成員。下面分別說明每一個成員函數的具體定義:(1) 設置(輸入)人地址的成員函數: void person:SetPersonAddress(char *AddressFromMain)strcpy(Address,AddressFromMain);通過strcpy把字符指針的內容送入person類中的數據成員Address。(2) 設置(輸入)人性別的成員函數: void person:SetPersonSex(char *SexFromMain)st

4、rcpy(Sex,SexFromMain); 通過strcpy把字符指針SexFromMain的內容作為地址的存儲單元中的內容送入person類中Sex數據成員。(3) 輸出地址成員函數: void person:ShowPersonAddress()cout<<Address<<endl;輸出person類中的Address數據成員的內容;(4) 輸出性別的成員函數: void person:ShowPersonSex()cout<<Sex<<endl;輸出person類中的Sex數據成員的內容;接下來就是person基類的派生類student

5、類的內部設計如下:class student: public personpublic:void SetStudentInformation(char*NameFromMain,char *StudentAddressFromMain,char *StudentSexFromMain,char *StudentNumberFromMain, int *score);void ShowStudentInformation();friend void FindStudentNumber(student *data);friend void FindStudentName(student *data

6、);private:int MathResult,EnglishResult,CResult,CompilationLanguageResult,DigitalLogicResult,MarksismResult;char StudentNumber25;char Name25;float Average;int total;當設計student派生類的時候,最主要的特點就是利用了“類”的一個特點繼承。所以說派生出來的student類也具有基類person的一些特點。在繼承的方式上本人使用了共有繼承方式(public),下面來給大家介紹student類的內部構造: 成員函數共有設置(輸入)學生

7、信息、輸出學生信息等兩個。還有一個非成員函數的一個函數,它為該student類的友元函數,其功能是實現查找。除此之外還有從基類person類繼承下來的一些成員函數; 數據成員分別為整形變量的學生成績(包括數學成績、英語成績、C+成績、匯編語言成績、數字邏輯成績、馬克思哲學成績等),字符數組的學生學號和學生姓名以及整型變量的學生的總分和單精度變量的平均分;下面介紹student派生類中的各個成員函數的定義部分:設置(輸入)學生信息的成員函數:Void student:SetStudentInformation(char*NameFromMain,char*StudentAddressFromMa

8、in,char* StudentSexFromMain,char *StudentNumberFromMain, int *score)strcpy(Name,NameFromMain);SetPersonAddress(StudentAddressFromMain);SetPersonSex(StudentSexFromMain);strcpy(StudentNumber ,StudentNumberFromMain);for(int i=0; i<6; i+)switch(i)case 0: MathResult=score0;case 1: EnglishResult=score1

9、;case 2: CResult=score2;case 3: CompilationLanguageResult=score3;case 4: DigitalLogicResult=score4;case 5: MarksismResult=score5;total=MathResult+EnglishResult+CResult+CompilationLanguageResult+DigitalLogicResult+MarksismResult;Average=total/6.0;可以看到在設計student類的輸入成員函數時其內部同時調用了從基類繼承下來的一些成員函數,這就是繼承的特點

10、。下面將會詳細地介紹該成員函數的功能:首先是student類的兩個字符數組變量學生姓名和學生學號的賦值通過strcpy來直接實現,也就是可通過該類的成員函數來給數據成員賦值。還有兩個數據成員是不能夠被繼承下來的基類的兩個字符數組學生性別和家庭地址,它們是通過student派生類的成員函數中調用從基類person中繼承下來的成員函數,從而改變對不能被繼承下來的基類的數據成員賦值。接著就是對student類中自己的數據成員學生成績的賦值,它們是通過一個簡單的switch case語句來實現的。輸出學生信息的成員函數:void student:ShowStudentInformation()cout

11、<<endl;cout<<"學生的基本信息如下: "<<endl<<endl;cout<<"學生的姓名: "<<Name<<endl<<endl; cout<<"學生的學號為: "<<StudentNumber<<endl<<endl;cout<<"學生的家庭地址為: "ShowPersonAddress();cout<<endl;cout<&

12、lt;"學生的性別為: "ShowPersonSex();cout<<endl;cout<<"學生的考試課程成績如下: "<<endl<<endl;cout<<"學生的離散數學課程成績為: "<<MathResult<<"分"<<endl<<endl;cout<<"學生的英語課程成績為: "<<EnglishResult<<"分"&l

13、t;<endl<<endl;cout<<"學生的C+課程成績為: "<<CResult<<"分"<<endl<<endl;cout<<"學生的匯編語言課程成績為: "<<CompilationLanguageResult<<"分"<<endl<<endl;cout<<"學生的數字邏輯課程成績為: "<<DigitalLogicResul

14、t<<"分"<<endl<<endl;cout<<"學生的馬克思主義哲學課程成績為: "<<MarksismResult<<"分"<<endl<<endl;cout<<"學生的總分為:"<<total<<"分"<<endl<<endl;cout<<"學生的平均分為:"<<Average<<

15、;"分"<<endl<<endl;輸出學生信息的成員函數的定義中不難發現輸出時不僅會輸出student派生類自己的數據成員的值還會同時輸出不能被繼承下來的基類person中的數據成員的值。這顯然只能通過繼承下來的成員函數來實現(如ShowPersonAddress()和ShowPersonSex()。下面來介紹三個非成員函數,其中兩個為student類的友元函數。它就是實現查找功能的(分別用學生學號和學生姓名來進行查找),另一個是一個單獨的普通函數。其功能是當程序運行時保持一個用戶界面的功能。Student類共有兩個友元函數,分別是friend vo

16、id FindStudentNumber(student *data)和friend void FindStudentName(student *data),它們兩個都有查找功能,只是一個用學生的學號另一個用學生的姓名進行查找。下面詳細介紹student類的兩個友元函數中的用學號查找的函數是如何的定義:void FindStudentNumber(student *data)char findnum25;cout<<"請輸入學號:"cin>>findnum;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.St

17、udentNumber,findnum)=0)cout<<"在第"<<i+1<<"個編號里有您查找的記錄:"<<endl;datai.ShowStudentInformation();if(strcmp(datai.StudentNumber,findnum)<0)|(strcmp(datai.StudentNumber,findnum)>0)cout<<"在編號"<<i+1<<"里沒有您查找的記錄!"<<e

18、ndl; 下面詳細介紹student類的兩個友元函數中的用姓名查找的函數是如何的定義:void FindStudentName(student *data)char findname25;cout<<"請輸入姓名:"cin>>findname;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.Name,findname)=0)cout<<"在第"<<i+1<<"個編號里有您查找的記錄:"<<endl;datai.ShowSt

19、udentInformation();if(strcmp(datai.Name,findname)<0)|(strcmp(datai.Name,findname)>0)cout<<"在編號"<<i+1<<"里沒有您查找的記錄!"<<endl; 可以看出student類的兩個友元函數即查找(分別用學號和姓名)函數的定義都很相似,主要是算法是一致。因為在student類中數據成員學生姓名和學生學號都是用字符數組來定義的,所以上面的兩個分別用學號和姓名來查找的函數的算法是基本一致的,只是一個是用stu

20、dent類的一個對象中里面的name(姓名)去查找,另一個是用student類的一個對象中里面的StudentNumber(學生姓名)去查找。在整個查找函數先是在函數的參數表中聲明student類的對象指針,在主函數main中當調用查找函數時把main函數中定義的student類的數組的首地址傳送給查找函數。在查找函數中先定義一個字符數組,再提示用戶輸入要查找的學生的姓名或學號,當姓名或學號在相應的學生編號里的相應的name(姓名)和StudentNumber(學生學號)相等時查找便成功并提示用戶該學號或姓名為基本信息的學生信息輸出在屏幕上,當不相等時查找不成功并提示用戶沒有找到學生的記錄。下

21、面介紹非成員函數即普通函數(程序運行時保持一個用戶界面功能的函數):void paint() int i; cout<<" 學生信息管理系統"<<endl; for (i = 0; i<80; i+) putchar('%'); cout<<endl; cout<<"(1) 輸入學生的信息 (3)用學號查找學生基本信息 "<<endl; cout<<endl; cout<<"(2) 輸出學生信息 (4)用姓名查找學生基本信息 "&

22、lt;<endl; cout<<endl; cout<<"(0) 退出程序 "<<endl; cout<<" 備注:如果您還沒有輸入任何信息,請先輸入信息再輸出!"<<endl; cout<<endl; for (i = 0; i<80; i+) putchar('%'); cout<<endl;上面的普通函數只是一個簡單的函數,其功能只是在屏幕上保持如下一個畫面:學生信息管理系統%(1) 輸入學生的信息 (3)用學號查找學生基本信息(2) 輸

23、出學生信息 (4)用姓名查找學生基本信息(0) 退出程序備注:如果您還沒有輸入任何信息,請先輸入信息再輸出!%接著給大家介紹主函數main的定義部分:void main()char StuSex2,StuName25 ,StuAddress25,StuNumber25;int StuScore6,ctrl;int i=0,j;student stuStuNum;paint();cout<<"請選擇一個序號 "<<endl;cin>>ctrl;while (ctrl != 0) switch(ctrl) case 1:for(i; i<

24、;StuNum; i+ )system("cls");cout<<"請輸入第"<<i+1<<"個學生的基本信息:"<<endl;cout<<"請輸入學生的姓名:"cin>>StuName;cout<<endl;cout<<"請輸入學生的性別: "cin>>StuSex;cout<<endl;cout<<"請輸入學生的學號: "cin>>

25、;StuNumber;cout<<endl;cout<<"請輸入學生的家庭地址: "cin>>StuAddress;cout<<endl;cout<<"請按順序輸入學生的考試成績"<<endl;cout<<endl;cout<<"離散數學課程成績: "cin>>StuScore0;cout<<endl;cout<<"英語課程成績: "cin>>StuScore1;cout&

26、lt;<endl;cout<<"C+課程成績: "cin>>StuScore2;cout<<endl;cout<<"匯編語言課程成績: "cin>>StuScore3;cout<<endl;cout<<"數字邏輯課程成績: "cin>>StuScore4;cout<<endl;cout<<"馬克思主義哲學課程成績: " cin>>StuScore5;cout<<end

27、l<<endl;stui.SetStudentInformation(StuName,StuAddress,StuSex,StuNumber,StuScore); break; case 2:cout<<endl;system("cls");for(j=0; j<StuNum; j+)stuj.ShowStudentInformation(); system("pause");break; case 3: cout<<endl;system("cls");FindStudentNumber(s

28、tu);system("pause");break; case 4:cout<<endl;system("cls");FindStudentName(stu);system("pause");break;if (ctrl != 'n')system("cls");paint();cout<<"請選擇一個序號"<<endl;cin>>ctrl;main主函數的實現比較長,主要是因為在main函數中不僅僅定義了普通變量(基本變量)用來暫

29、時存放從鍵盤輸入的學生基本信息,還定義了student類的對象數組,且使用了while循環和switch case語句來不停地進行選擇,case的每一個分句分別實現不同的功能,case 1主要實現輸入,用for循環來把student對象數組的每一個對象本別進行賦值;case 2主要實現輸出功能,輸出時用for循環調用每一個student數組對象的ShowStudentInformation()函數(輸出學生信息的成員函數);case 3和case 4主要就是實現查找功能,只是因為查找函數不是student類的成員函數,所以可以直接調用函數,在實參表里寫了student對象數組的首地址,把stu

30、dent對象數組的首地址傳遞給查找函數;程序源代碼:#include<iostream>#include<iomanip>using namespace std;const int StuNum=1;class personpublic:void SetPersonAddress(char *AddressFromMain); void SetPersonSex(char *SexFromMain); void ShowPersonSex();void ShowPersonAddress();private:char Address25;char Sex2;void p

31、erson:SetPersonAddress(char *AddressFromMain)strcpy(Address,AddressFromMain);void person:SetPersonSex(char *SexFromMain)strcpy(Sex,SexFromMain); void person:ShowPersonAddress()cout<<Address<<endl;void person:ShowPersonSex()cout<<Sex<<endl;class student: public personpublic:vo

32、id SetStudentInformation(char *NameFromMain,char *StudentAddressFromMain,char *StudentSexFromMain,char *StudentNumberFromMain, int *score);void ShowStudentInformation();friend void FindStudentNumber(student *data);friend void FindStudentName(student *data);private:int MathResult,EnglishResult,CResul

33、t,CompilationLanguageResult,DigitalLogicResult,MarksismResult;char StudentNumber25;char Name25;float Average;int total;void student:SetStudentInformation(char *NameFromMain,char *StudentAddressFromMain,char* StudentSexFromMain,char *StudentNumberFromMain, int *score)strcpy(Name,NameFromMain);SetPers

34、onAddress(StudentAddressFromMain);SetPersonSex(StudentSexFromMain);strcpy(StudentNumber ,StudentNumberFromMain);for(int i=0; i<6; i+)switch(i)case 0: MathResult=score0;case 1: EnglishResult=score1;case 2: CResult=score2;case 3: CompilationLanguageResult=score3;case 4: DigitalLogicResult=score4;ca

35、se 5: MarksismResult=score5;total=MathResult+EnglishResult+CResult+CompilationLanguageResult+DigitalLogicResult+MarksismResult;Average=total/6.0;void student:ShowStudentInformation()cout<<endl;cout<<"學生的基本信息如下: "<<endl<<endl;cout<<"學生的姓名: "<<Na

36、me<<endl<<endl; cout<<"學生的學號為: "<<StudentNumber<<endl<<endl;cout<<"學生的家庭地址為: "ShowPersonAddress();cout<<endl;cout<<"學生的性別為: "ShowPersonSex();cout<<endl;cout<<"學生的考試課程成績如下: "<<endl<<e

37、ndl;cout<<"學生的離散數學課程成績為: "<<MathResult<<"分"<<endl<<endl;cout<<"學生的英語課程成績為: "<<EnglishResult<<"分"<<endl<<endl;cout<<"學生的C+課程成績為: "<<CResult<<"分"<<endl<<

38、;endl;cout<<"學生的匯編語言課程成績為: "<<CompilationLanguageResult<<"分"<<endl<<endl;cout<<"學生的數字邏輯課程成績為: "<<DigitalLogicResult<<"分"<<endl<<endl;cout<<"學生的馬克思主義哲學課程成績為: "<<MarksismResult<

39、<"分"<<endl<<endl;cout<<"學生的總分為:"<<total<<"分"<<endl<<endl;cout<<"學生的平均分為:"<<Average<<"分"<<endl<<endl;void FindStudentNumber(student *data)char findnum25;cout<<"請輸入學號

40、:"cin>>findnum;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.StudentNumber,findnum)=0)cout<<"在第"<<i+1<<"個編號里有您查找的記錄:"<<endl;datai.ShowStudentInformation();if(strcmp(datai.StudentNumber,findnum)<0)|(strcmp(datai.StudentNumber,findnum)>0)cout

41、<<"在編號"<<i+1<<"里沒有您查找的記錄!"<<endl; void FindStudentName(student *data)char findname25;cout<<"請輸入姓名:"cin>>findname;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.Name,findname)=0)cout<<"在第"<<i+1<<"個編號里有您查找

42、的記錄:"<<endl;datai.ShowStudentInformation();if(strcmp(datai.Name,findname)<0)|(strcmp(datai.Name,findname)>0)cout<<"在編號"<<i+1<<"里沒有您查找的記錄!"<<endl; void paint() int i; cout<<" 學生信息管理系統"<<endl; for (i = 0; i<80; i+) p

43、utchar('%'); cout<<endl; cout<<"(1) 輸入學生的信息 (3)用學號查找學生基本信息 "<<endl; cout<<endl; cout<<"(2) 輸出學生信息 (4)用姓名查找學生基本信息 "<<endl; cout<<endl; cout<<"(0) 退出程序 "<<endl; cout<<" 備注:如果您還沒有輸入任何信息,請先輸入信息再輸出!&quo

44、t;<<endl; cout<<endl; for (i = 0; i<80; i+) putchar('%'); cout<<endl;void main()char StuSex2,StuName25 ,StuAddress25,StuNumber25;int StuScore6,ctrl;int i=0,j;student stuStuNum;paint();cout<<"請選擇一個序號 "<<endl;cin>>ctrl;while (ctrl != 0) switch(ctrl) case

溫馨提示

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

評論

0/150

提交評論