版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、南昌航空大學學院:軟件學院 學號:10203204 姓名:未猛猛 指導老師:王星目錄一、需求分析.2二、概要設計.2三、詳細設計.4四、調試分析.8五、用戶手冊.9六、測試數(shù)據(jù).9七、附錄.10一、需求分析先看題目要求:用數(shù)據(jù)文件存放學生的學籍,可對學生學籍進行注冊,增加,修改,刪除,查找,學籍變化等操作。系統(tǒng)必須以菜單方式工作;登記學生的學號,姓名,年齡,籍貫,系別,專業(yè),班級;修改已知學生的學號信息;刪除已知學號的學生信息;查找已知學號的學生信息;按學號,專業(yè)輸出學生籍貫表;查詢學生學籍變化,比如入學,轉專業(yè),退學,降級,休學,畢業(yè);1.本題目要求做出學生學籍管理系統(tǒng),系統(tǒng)以菜單方式工作,
2、我們可以用一個類的成員函數(shù)來單獨完成菜單功能,然后在主函數(shù)調用。2.根據(jù)題目我們首先確定用兩個類去實現(xiàn),一個可類為student,里面為學生的信息,例如學號,姓名等,另一個類為operate;實現(xiàn)各個操作,例如注冊,增加等。3.需要對學生學籍進行注冊,那么我們就用input()輸入函數(shù)去完成注冊,在opetate類體里面完成,在student中用input()去實現(xiàn)輸入功能,在operate中用input()對student中的input()進行調用,具體調用及實現(xiàn)會在下面詳細介紹。4.需要對學生信息進行增加,那么我們就增加個add()函數(shù),實現(xiàn)注冊玩后的增加功能。5.可以在operate中添
3、加mend()函數(shù)和del()函數(shù)實現(xiàn)修改和刪除功能,用found()函數(shù)和show()函數(shù)實現(xiàn)查找和統(tǒng)計功能,單獨用一個xueji()函數(shù)去實現(xiàn)學籍變化操作,如入學,轉專業(yè)等,并按學號和專業(yè)去輸出學生籍貫表。6.主函數(shù)執(zhí)行命令:1.初始化對象2.初始化菜單3. 操作執(zhí)行,結果顯示二、概要設計1.兩個類模塊:第一個class student,首先在student中定義幾個保護型的數(shù)據(jù)成員,學號num,姓名 name,性別sex,a年齡 age,籍貫address,學院 collge,班級classes,專業(yè)zhuan;再定義一個student的next指針student *next;這樣是將兩
4、個類聯(lián)系起來的橋梁。 成員函數(shù)介紹string getname ()/返回姓名name; Int getnum()/返回學號num; string getplace()/返回籍貫 address; String getzhuan();/返回專業(yè) zhuan; void getxueji(int b,int c,int d,int e,int f,int g)/將6個整型值分別表示入學,轉專業(yè),退學,降級,休學,畢業(yè); 整型值負值1或0; Void input();/在學生類中定義一個input函數(shù)實現(xiàn)屏幕上的輸入功能; void input(ifstream &is)/創(chuàng)建文件類型引用Void
5、 output()/輸出學生的信息,與類operate中的output聯(lián)系將其打印在屏幕,下面會講述;void output(ofstream &os)/實現(xiàn)對文件的寫入2. 第二個類模塊操作類operate,首先兩個類必須有個接口將他們聯(lián)系起來,這樣我們就在用一個類的對象指針作為operate類中的一個私有數(shù)據(jù)成員,故定義私有成員student *head再定義一個整型key,下面在保存和推出時會用到;下面介紹共有的成員函數(shù): Operate()/構造函數(shù),賦初值operate()/析構函數(shù)Void input()/這里的input函數(shù)才是實現(xiàn)真正的注冊,用此數(shù)據(jù)成員(即student的對象
6、)實現(xiàn)對學生類中input的調用;Void show()/次實現(xiàn)實現(xiàn)統(tǒng)計功能Void mend()/實現(xiàn)對注冊信息的修改功能Void found()/實現(xiàn)查找功能,并將其顯示Int find(student *p,int num,string name)/自查找函數(shù),在此函數(shù)中實現(xiàn)查找功能,并在found函數(shù)中調用它完成查找的操作Void del()/此函數(shù)實現(xiàn)刪除功能,與find()共同實現(xiàn)Void add()/增加函數(shù)Void xueji()/查詢學籍變化的函數(shù)Void jiguan()/按學號,專業(yè)輸出籍貫的函數(shù)Void bf()/初始化的文件操作函數(shù)Void save()/保存函數(shù)In
7、t mainmenu()/主菜單函數(shù)Int key()/返回key Void setkey()/創(chuàng)建key3. void main()/主函數(shù)中實現(xiàn)對象的建立和各個功能的調用和主菜單的循環(huán);三、詳細設計 這里我們將詳細的介紹各個函數(shù)的函數(shù)體實現(xiàn)與之間的調用; 1.首先看類student; string getname()return name; /返回姓名name;name為字符串型; int getnum() return num; /返回一個整形值 學號num; string getplace() /返回籍貫(字符串型) return address; string getzhuan()
8、/返回專業(yè)(字符串型) return zhuan; 看函數(shù)getxueji()void getxueji(int b,int c,int d,int e,int f,int g)/實現(xiàn)學籍的查詢if(b=1) cout入學 ; /如果b=1,那么就輸出入學;相反則未入學 elsecout未入學 ;if(b=0)cout暫無學籍信息; /未入學,則顯示無學籍信息elseif(c=1) cout轉專業(yè) ; /若c=1,顯示轉專業(yè) else cout未轉專業(yè) ; /不等于,則顯示未轉專業(yè) if(d=1) cout未退學 ; /同上,若d=1,則顯示未退學else cout已退學 ; /若d!=1則顯
9、示已退學,下面的同上if(e=1) cout未降級 ;else cout已降級 ;if(f=1) cout未休學 ;else cout已休學 ;if(g=1) cout未畢業(yè) ;else cout已畢業(yè) ;void input()/輸入函數(shù)int a=1; /定義整型變量并負值1coutttt請按提示輸入:endl;coutnum;coutname;coutage;docoutsex; if(sex=男|sex=女) /判斷輸入的性別是否正確 coutaddress; coutcollage; coutclasses; coutzhuan; coutn請輸入學生學籍信息:默認1:入學;1:轉專
10、業(yè);1:未退 學;1:未降級;1:未休學;1:未畢業(yè);endl; couttt輸入學籍信息,請依次輸入6個數(shù):(0或1) /上面已經(jīng) 提過,輸入0或者1 coutbcdefg;/一次輸入五個值(0或1) getxueji(b,c,d,e,f,g); /調用個getxueji()函數(shù),上面已介紹該函數(shù) a=0; /把0賦給a,使循環(huán)結束 else cout無此性別,請重新輸入!numnameagesexaddresscollageclasses zhuan; /輸入學號,姓名,年齡,性別,學院,班級,專業(yè) is.get(); /獲取文件指針void output() /輸出顯示函數(shù),實現(xiàn)顯示co
11、ut學生的基本信息如下:endl; cout學號:num; cout 姓名:name;cout 年齡:age;cout 性別:sex;cout 籍貫:address;cout 學院:collage;cout 班級:classes;cout 專業(yè):zhuanendl;void output(ofstream &os) /將內容寫入文件顯示 ossetw(6)numsetw(10)namesetw(5)agesetw(10)sex setw(10)addresssetw(10)collagesetw(6)classes setw(10)zhuannext=NULL;key=1;operate()d
12、elete head; /析構函數(shù) void operate:input() /注冊(輸入)函數(shù),和上個類的input一塊/實現(xiàn)功能看下面函數(shù)體student *p,*p2=NULL; /定義一個對象指針p,p2指向空 p=head; int n; /把p賦給頭指針headwhile(n) /進行循環(huán) p2=new student; p2-input(); /為p2開辟空間并指向/input函數(shù) p-next=p2; p2-next=NULL; p=p-next; /增加新的結點 coutn; /輸入n判斷/while循環(huán)是否繼續(xù)void operate:add() /增加函數(shù),和input(
13、)功能相同input(); /將input在執(zhí)行一次,void operate:jiguan() /輸出籍貫函數(shù) student *p;/定義學生類的指針p并負值head p=head; while(p-next) / 執(zhí)行循環(huán)直至p-next=NULL結束 cout學號:next)-getnum() 專業(yè):next)-getzhuan() 籍貫:next)-getplace() next; /p執(zhí)行循環(huán),指向下一個 void operate:xueji() /查詢學籍變化函數(shù)student *p=head;int num; /定義指針p,負值headcoutnum; /輸入學號if(p-ge
14、tnum()!=num) /判斷輸入的學號是否等于第一個注冊/的學生學號,p=p-next; /若不等,令p指向下一個,繼續(xù)判斷 coutgetxueji(p-b,p-c,p-d,p-e,p-f,p-g); /調用getxueji()函數(shù)void operate:show() /統(tǒng)計(顯示)函數(shù) student *p; p=head; /定義指針p并賦值headwhile(p-next) /執(zhí)行循環(huán),只到p-next為空 (p-next)-output(); /指向調用output函數(shù) p=p-next; /使p指向下一個void operate:bf() /初始化函數(shù),文件操作 studen
15、t *p,*p2; /定義兩個指針p和p2,將p賦值head p=head; long t; /定義長整型t ifstream is(課設.txt,ios:in); /打開課設.txt文件 if(!is) / 如果打不開 ofstream os(課設.txt,ios:out); /進行寫操作 os.close(); return ; int num=-1; while(1) num=-1; t=is.tellg(); /搭配seeg() isnum; is.seekg(t); /不連續(xù)進行訪問if(numinput(is); /為p2分配空間,并指向input p-next=p2; p2-ne
16、xt=NULL; p=p-next; / 開辟新的結點,以便下次主函數(shù)運行的時候已經(jīng)為此開辟了空間,否則將不能打開 void operate:save() /保存函數(shù) student *p; p=head; /定義指針p賦值headofstream os(課設.txt,ios:out); /打開文件進行寫入保存while(p-next) (p-next)-output(os); /將p-next指向的output內容寫入/ 文件p=p-next; /p指向下一個coutttt文件已保存! next) (*p1)=p; /將p賦值*p1,用雙指針,方便下面的調用if( (p-next)-getn
17、um()=num|(p-next)-getname()=pn)/判/斷是否相等(學號或姓名) return 1; p=p-next; return 0; void operate:found() /查找函數(shù)student *p; int num=-1;int t=-1; /隨便賦值初值num和t為-1 string name;do coutt;while(t2|t1); if(t=1) /即按學號查找 coutnum; if(t=2) /即按姓名查找 coutname; if( !find(&p,num,name) ) /調用find函數(shù)實現(xiàn)查找 couttt找不到你要查找的內容!next)-
18、output(); /將其輸出void operate:del() /刪除函數(shù) student *p,*p2; int num; coutnum;if( !find(&p,num,) ) /再次調用find函數(shù) couttt找不到你要刪除的內容!next)-output(); /輸出 p2=p-next; p-next=p2-next; delete p2; /刪除結點void operate:mend() /修改函數(shù) student *p; int num=-1,n; string name; do coutn; while(n2); if(n=1) /即按學號修改 coutnum; if(
19、n=2) /按姓名修改 coutname; if( !find(&p,num,name) ) /再次調用find函數(shù)查找要修改的/內容 couttt找不到你要修改的內容!next)-output(); /先將其輸出 coutnext)-input(); /再次輸入進行修改int operate:mainmenu() /主菜單函數(shù)int n;coutt 001 001 001 001 001 歡迎光臨學生學籍管理系統(tǒng) 001 001 001 001 001 endl * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * *
20、 * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * 001 1.學生注冊 * * * * * * * *endl * * * * * * * * 001 2.增加 * * * * * * * *endl * * * * * * * * 001 3.修改信息 * * * * * * * *endl * * * * * * * * 001 4.刪除 * * * * * * * *endl * * * * * * * * 001 5.查找 * * * * * * * *endl * * * * * * * * 001
21、6.統(tǒng)計 * * * * * * * *endl * * * * * * * * 001 7.學籍查詢 * * * * * * * *endl * * * * * * * * 001 8.籍貫輸出 * * * * * * * *endl * * * * * * * * 001 9.保存信息 * * * * * * * *endl * * * * * * * * 001 0.退出系統(tǒng) * * * * * * * *endl * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * * * * * * * *
22、 * * * * * * * * * * * *endln; return n; 3. 兩個類已經(jīng)介紹完畢,下面看主函數(shù) void main() operate o; /定義operate的對象o int n=1;int c; o.bf(); /初始化查找文件 while(n) / 使其能在沒有命令的前提下保持菜單的循環(huán) coutendl; c=o.mainmenu(); switch(c) /選擇語句進行判斷該執(zhí)行什么功能 case 1:o.input();break; /若c=1,執(zhí)行input(); case 2:o.add();break; case 3:o.mend();break;
23、 case 4:o.del();break; case 5:o.found();break; case 6:o.show();break; case 7:o.xueji();break; case 8:o.jiguan();break; case 9:o.save();break; case 0: if(o.getkey()=1) /判斷key是否等于1 coutn; if(n=1) o.save(); n=0; /將n賦值0,跳出while循環(huán) break;結構圖如下:8籍貫輸出7學籍查詢現(xiàn)行系統(tǒng)組織結構圖:開始選擇菜單序號0退出9保存信息6統(tǒng)計成績5查找信息4刪除信息3修改信息2增加信息1
24、錄入信息選擇查找方式1?按要求逐步輸入學生信息2?保存?按編號修改按姓名修改保存退出系統(tǒng)功能結構圖:主程序籍貫輸出學籍查詢采單程序初始化程序增加刪除修改統(tǒng)計退出查找顯示輸入類體結構:Getname()Student()Input(ifstream&is)ClassStudentGetnum()Getxueji()Getzhuan()Input()student()Output(ofsttream&os)Output()Bf()Found()opetate()Operate()Mainmenu()Input()ClassOperateGetkey()Find()Setkey()Add()Show
25、()Mend()Save()Del()Jiguan()Xueji()四 調試分析1.首先設計思想上開始想用友員去實現(xiàn)兩個類的相互聯(lián)系,但是因為僅僅用一個類去調用另一個類的函數(shù),所以就用一個類的對象指針作為另一個類的數(shù)據(jù)成員更為合適,調用也簡單很多2. 編譯會出現(xiàn)很多錯誤,但是卻都是不太難,可以在努力下改正,但是運行是卻出現(xiàn)問題,會自動出現(xiàn)錯誤而關閉,后來知道是指針的運用不當!在 input函數(shù)中當p2指向學生類中的input()之后,應先將p2賦給p-next而不是將p-next賦給p2,這樣p2空間出現(xiàn)問題,也未能釋放,出現(xiàn)錯誤!故不能運行;3. 開始菜單只出現(xiàn)一次然后就跳出了,后來加了個w
26、hile循環(huán)將它一直循環(huán)下去就可以;4. 運行后按9可以保存,但是再繼續(xù)按0它將繼續(xù)提示問是否保存,但此時已經(jīng)保存,所以贅余,因此在類中加兩個函數(shù)即可,即所看到的key;5. 在保存后出現(xiàn)亂碼,即屯屯屯屯屯,主要是在output(os&)函數(shù)中的數(shù)據(jù)age未寫入導致最后的專業(yè)未能存儲進去,導致出現(xiàn)亂碼!五、用戶手冊1.首先對此程序運行,然后會有菜單提示2.按鍵實現(xiàn)您所想的操作3.進行一次結束后會繼續(xù)跳出菜單框,請按鍵實現(xiàn)繼續(xù)循環(huán),操作比較簡單易懂六、測試數(shù)據(jù)我們依次看運行結果按鍵:1;再依次按提示輸入 按1繼續(xù);先按0,在按2,進行信息添加按6進行顯示繼續(xù)按3進行修改修改完畢再次顯示按4刪除;
27、刪除完畢進行顯示;按5進行查找按7看學籍輸出按8輸出學號專業(yè)和籍貫;按9進行文件的保存,便于下次的打開最后按0退出;此時文件已保存;七、附錄#include#include#include#include using namespace std; class student protected: int num; string name; string sex; int age; string address; string collage; string classes; string zhuan; public: int b,c,d,e,f,g; student *next;student
28、()student() string getname() return name;int getnum() return num; string getplace() return address; string getzhuan() return zhuan; void getxueji(int b,int c,int d,int e,int f,int g)if(b=1) cout入學 ;elsecout未入學 ;if(b=0)cout暫無學籍信息;elseif(c=1) cout轉專業(yè) ; else cout未轉專業(yè) ; if(d=1) cout未退學 ;else cout已退學 ;if
29、(e=1) cout未降級 ;else cout已降級 ;if(f=1) cout未休學 ;else cout已休學 ;if(g=1) cout未畢業(yè) ;else cout已畢業(yè) ;void input()int a=1; coutttt請按提示輸入:endl;coutnum;coutname;coutage;docoutsex; if(sex=男|sex=女) coutaddress; coutcollage; coutclasses; coutzhuan; coutn請輸入學生學籍信息:默認1:入學;1:轉專業(yè);1:未退學;1:未降級;1:未休學;1:未畢業(yè);endl; couttt輸入學
30、籍信息,請依次輸入6個數(shù):(0或1);coutbcdefg; getxueji(b,c,d,e,f,g); a=0; else cout無此性別,請重新輸入!numnameagesexaddresscollageclasses zhuan; is.get();/獲取文件指針void output()cout學生的基本信息如下:endl; cout學號:num; cout 姓名:name;cout 年齡:age;cout 性別:sex;cout 籍貫:address;cout 學院:collage;cout 班級:classes;cout 專業(yè):zhuanendl;void output(ofs
31、tream &os) ossetw(6)numsetw(10)namesetw(5)agesetw(10)sex setw(10)addresssetw(10)collagesetw(6)classes setw(10)zhuannext=NULL;key=1;operate()delete head;void input();void show();void mend();void found();void del(); void add();int find(student *p,int num,string pn);void xueji();void jiguan();void bf()
32、;void save(); int mainmenu();int getkey()return key;void setkey(int k)key=k; ; void operate:input()student *p,*p2=NULL; p=head; int n; while(p-next) p=p-next;while(n) p2=new student; p2-input(); p-next=p2; p2-next=NULL; p=p-next; coutn; void operate:add()input(); void operate:jiguan() student *p; p=
33、head; while(p-next) cout學號:next)-getnum() 專業(yè):next)-getzhuan() 籍貫:next)-getplace() next; void operate:xueji()student *p=head;int num;coutnum;if(p-getnum()!=num)p=p-next; coutgetxueji(p-b,p-c,p-d,p-e,p-f,p-g); void operate:show() student *p; p=head; while(p-next) (p-next)-output(); p=p-next; void oper
34、ate:bf()/初始化函數(shù),文件操作 student *p,*p2; p=head; long t; ifstream is(課設.txt,ios:in); if(!is) ofstream os(課設.txt,ios:out);/進行寫操作 os.close(); return ; int num=-1; while(1) num=-1; t=is.tellg(); isnum; is.seekg(t);/不連續(xù)進行訪問if(numinput(is); p-next=p2; p2-next=NULL; p=p-next; void operate:save() /保存函數(shù) student *p; p=head;ofstream os(課設.txt,ios:out);/打開文件進行寫入保存while(p-next) (p-next)-output(os);p=p-next;coutttt文件已保存! next) (*p1)=p;if( (p-next)-getnum()=num|(p-next)-getname()=pn) return 1; p=p-next; return 0; void operate:found()student *p; int num=-1;int t=-1; string name;do coutt;while
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度離婚協(xié)議書起草與跨國婚姻解除服務合同3篇
- 2024年船舶照明安裝協(xié)議3篇
- 2024年食品供應鏈合作合同標準模板一
- 2024版?zhèn)€人借款協(xié)議含第三方擔保條款版B版
- 2025年度影視基地場地租賃及拍攝制作服務協(xié)議3篇
- 2024生物醫(yī)藥研發(fā)過程中數(shù)據(jù)共享協(xié)議
- 2024年金融衍生品期貨交易合同規(guī)范文本3篇
- 2024年虛擬展覽開發(fā)合同3篇
- 2024年綠色金融融資居間服務合同范本3篇
- 2024年集裝箱房屋買賣法律合同書樣本版B版
- T-HNKCSJ 002-2023 河南省地源熱泵系統(tǒng)工程技術規(guī)范
- 人教版數(shù)學三年級下冊《簡單的小數(shù)加、減法》說課稿(附反思、板書)課件
- 漁業(yè)資源基本術語-編制說明
- 酒店住宿水單模板-皇冠假日
- 中醫(yī)優(yōu)勢病種優(yōu)化方案及總結
- 春節(jié)期間值班值守方案
- 2021-2022學年貴州省貴陽市花溪區(qū)人教版五年級上冊期末測試數(shù)學試卷
- 基礎寫作(小學教育專業(yè))全套教學課件
- 戶口未婚改已婚委托書
- 二甲雙胍恩格列凈片(Ⅲ)-臨床用藥解讀
- 煤層應力狀態(tài)及煤與瓦斯突出防治研究
評論
0/150
提交評論