數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生成績管理系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生成績管理系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生成績管理系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生成績管理系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)題目: 1:學(xué)生成績管理系統(tǒng) 2:joseph環(huán) 3:猴子選大王姓 名 洪軍學(xué) 號 201420180706班 級 1421807指導(dǎo)教師 鄒國華 2015年 12月 17日1:學(xué)生成績管理系統(tǒng)1, 問題分析; 定義一個(gè)學(xué)生管理系統(tǒng)實(shí)現(xiàn)對學(xué)生基本數(shù)據(jù)的管理, 錄入:輸入每位學(xué)生的信息; 輸出:輸出每位學(xué)生的信息; 查詢:可以按3學(xué)號和4姓名查詢某個(gè)學(xué)生的信息; 修改:可以修改學(xué)生(按1學(xué)號修改,按2成績修改)的信息; 插入:可以插入一個(gè)學(xué)生的信息; 刪除:可以刪除(按1學(xué)號刪除,按2成績刪除)滿足條件的學(xué)生信息; 排序:可以按學(xué)生的總成績排序。2 結(jié)構(gòu)分析首先分析結(jié)果我采用

2、的是單鏈表的存儲(chǔ)結(jié)構(gòu)通過此系統(tǒng)可以實(shí)現(xiàn)如下功能:定義一個(gè)學(xué)生類型student(學(xué)號,姓名,四門課程成績),學(xué)生鏈表student,含有學(xué)生數(shù)組和學(xué)生數(shù)。3 實(shí)現(xiàn)流程分析 定義數(shù)據(jù)類型typedef struct student ò 初始化結(jié)構(gòu)體并輸入學(xué)生的數(shù)據(jù)inputstu(stu &s,int n) ò 重載運(yùn)算符便于輸入輸出學(xué)生的成績 ò 輸出函數(shù)輸出全部學(xué)生的信息output(stu s) ò 查找學(xué)生 3按學(xué)號查找getstu1(stu s,char i) 4按姓名查找getstu2(stu s,char c) ò 插入學(xué)生

3、insetstu(stu &s,int i,char nu,char na,char se,int sc) ò 1按學(xué)號刪除學(xué)生deletestu1(stu &s),2按姓名刪除學(xué)生deletestu2(stu &s) ò 1按學(xué)號修改學(xué)生的信息update1(stu &s) 2按姓名修改學(xué)生的信息update2(stu &s) ò 對總成績排序sort(stu &s,struct shu shuzu) ò CPP文件實(shí)現(xiàn)所有功能 4 算法實(shí)現(xiàn)頭文件status.htypedef int status;#d

4、efine TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define N 10typedef struct student /學(xué)生結(jié)構(gòu)體(鏈表)char num9;char name15;char sex2;int score4; student *next;student,*stu;struct shu /輔助結(jié)構(gòu)體數(shù)組存儲(chǔ)學(xué)生總成績和學(xué)號便于排序float allscore;char num9;shuzu10; ostream &operator<<(ostream &o

5、s,stu &s); /運(yùn)算符的重載istream &operator>>(istream &is,stu &s); /運(yùn)算符的重載void inputstu(stu &s,int n) /初始化并且輸入函數(shù) student *p,*r;int i; s=(stu)malloc(sizeof(student); /申請頭節(jié)點(diǎn) r=s; for(i=0;i<n;i+) p=(student *)malloc(sizeof(student); /申請鏈表空間 cin>>p; r->next=p; r=p; r->ne

6、xt=NULL; /最后節(jié)點(diǎn)指像空status output(stu s) /輸出函數(shù)student *r;r=s;r=r->next;while(r) /判斷結(jié)點(diǎn)存在 cout<<r; /輸出結(jié)點(diǎn) r=r->next;return 0;status getstu1(stu s,char i)/按學(xué)號查找student *p=s;while(strcmp(p->num,i)!=0) /結(jié)點(diǎn)的名字相比較p=p->next;if(p) /判斷結(jié)點(diǎn)存在并且輸出cout<<p;return TURE;elsereturn ERROR;status get

7、stu2(stu s,char c)/按名字查找student *p=s->next;while(strcmp(p->name,c)!=0) p=p->next; if(p) /判斷結(jié)點(diǎn)存在并且輸出 cout<<p;return 0;elsereturn ERROR;status insetstu(stu &s,int i,char nu,char na,char se,int sc) /插入學(xué)生student *p=s,*q;int j=0,m;while(j<i-1&&p->next) /找到學(xué)生的位置p=p->nex

8、t;j+;if(j=i-1)q=(student*)malloc(sizeof(student); /申請新結(jié)點(diǎn)if(!q)return OVERFLOW; /申請失敗返回錯(cuò)誤strcpy(q->name,na); /賦值strcpy(q->num,nu);for(m=0;m<4;m+)q->scorem=scm;strcpy(q->sex,se);q->next=p->next;p->next=q;return OK;else return ERROR;status deletestu1(stu &s) /按學(xué)號刪除學(xué)生char i10

9、;cout<<"請輸入你要?jiǎng)h除學(xué)生的學(xué)號"<<endl;cin>>i; student *p=s,*r;while(strcmp(p->next->num,i)!=0) /找到修改學(xué)生p=p->next;if(p) /存在就刪除不存在就返回錯(cuò)誤r=p->next;p->next=r->next;free(r);return 0;elsereturn ERROR;status deletestu2(stu &s) /按姓名刪除學(xué)生char i10;cout<<"請輸入你要?jiǎng)h除

10、學(xué)生的姓名"<<endl;cin>>i; student *p=s,*r;while(strcmp(p->next->name,i)!=0) /找到修改學(xué)生p=p->next;if(p)r=p->next;p->next=r->next;free(r);return 0;elsereturn ERROR;status update1(stu &s) /按學(xué)號修改學(xué)生的信息char i10;cout<<"請輸入你要修改學(xué)生的學(xué)號"<<endl;cin>>i; st

11、udent *p=s;while(strcmp(p->num,i)!=0) /找到修改學(xué)生p=p->next;if(p)cin>>p;return 0;elsereturn ERROR;status update2(stu &s) /按姓名修改學(xué)生的信息char i10;cout<<"請輸入你要修改學(xué)生的姓名"<<endl;cin>>i; student *p=s;while(strcmp(p->name,i)!=0) /找到修改學(xué)生p=p->next;if(p)cin>>p;ret

12、urn 0;elsereturn ERROR;void sort(stu &s,struct shu shuzu) /對總成績排序int n=0,i,j,k;student *p=s->next;while(p) /獲取多少個(gè)人數(shù)n+;p=p->next;p=s->next; for(i=1;i<=n;i+) /對結(jié)構(gòu)體進(jìn)行賦值 shuzui.allscore=0; for(j=0;j<4;j+)shuzui.allscore=shuzui.allscore+p->scorej; strcpy(shuzui.num,p->num); p=p-&

13、gt;next; for(i=1;i<n;i+) /對結(jié)構(gòu)體進(jìn)行排序 k=i; for(j=i+1;j<=n;j+) if(shuzuj.allscore>shuzuk.allscore) k=j; if(k!=j) shuzu0.allscore=shuzui.allscore; strcpy(shuzu0.num,shuzui.num); shuzui.allscore=shuzuk.allscore; strcpy(shuzui.num,shuzuk.num); shuzuk.allscore=shuzu0.allscore; strcpy(shuzuk.num,shu

14、zu0.num); for(i=1;i<=n;i+) /對總成績從大到小輸出 p=s->next; while(strcmp(p->num,shuzui.num)!=0) /按學(xué)號查找相對應(yīng)的學(xué)生信息 p=p->next; cout<<p<<" 總成績?yōu)?:"<<shuzui.allscore<<endl; ostream &operator<<(ostream &os,stu &s) /輸出函數(shù)的重載os<<"學(xué)號:"<<

15、s->num<<" 姓名:"<<s->name<<" 性別:"<<s->sex<<"科目1 "<<s->score0<<"科目2 "<<s->score1<<"科目3 "<<s->score2<<"科目4 "<<s->score3<<endl;return os;istream &

16、amp;operator>>(istream &is,stu &s) /輸入函數(shù)的重載 cout<<""<<"學(xué)號 "<<"姓名 "<<"性別 "<<"科目1 "<<"科目2 "<<"科目3 "<<"科目4 "<<endl;is>>s->num>>s->name>

17、;>s->sex>>s->score0>>s->score1>>s->score2>>s->score3;return is;CPP文件#include<iostream.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include"Status.h"void menu()cout<<"* * * * * * * *學(xué)生管理系統(tǒng)* * * * * * *&q

18、uot;<<endl;cout<<"* * * 1:添加學(xué)生 * * *"<<endl; cout<<"* * * 2:顯示信息 * * *"<<endl; cout<<"* * * 3:按學(xué)號查找 * * *"<<endl; cout<<"* * * 4:按姓名查找 * * *"<<endl;cout<<"* * * 5: 插入學(xué)生 * * *"<<endl;co

19、ut<<"* * * 6: 刪除學(xué)生 * * *"<<endl;cout<<"* * * 7: 修改學(xué)生 * * *"<<endl;cout<<"* * * 8: 學(xué)生總成績排序 * * *"<<endl;cout<<"* 其他:返回主菜單"<<endl;cout<<"請選擇"int main() stu s;struct shu shuzu10;int i,k4,j; char c9,p

20、9; char x20,o20; char l3;menu();while(1) static int n;scanf("%d",&n);switch(n)case 1:cout<<"輸入多少個(gè)學(xué)生"<<endl;cin>>n;inputstu(s,n);break;case 2:output(s);break;case 3:cout<<"請輸入你要找的學(xué)生學(xué)號:"cin>>c;getstu1(s,c);break;case 4:cout<<"請

21、輸入你要找的學(xué)生姓名:"cin>>x;getstu2(s,x);break;case 5:cout<<"需要插入位置,學(xué)號,姓名,性別,科目,科目,科目,科目"<<endl; cin>>i>>p>>o>>l;for(j=0;j<4;j+)cin>>kj; insetstu(s,i,p,o,l,k);break;case 6:cout<<"1:按學(xué)號刪除學(xué)生的信息;2:按姓名刪除學(xué)生的信息"<<endl;cin>&g

22、t;j;switch(j)case 1:deletestu1(s);break;case 2:deletestu2(s);break;break;case 7:cout<<"1:按學(xué)號修改學(xué)生的信息;2:按姓名修改學(xué)生的信息"<<endl;cin>>j;switch(j)case 1:update1(s);break;case 2:update2(s);break;break;case 8:sort(s,shuzu);break;default:return 0; 調(diào)試結(jié)果5 課程小結(jié) 我采用的是鏈表來存儲(chǔ)學(xué)生的信息,最大的難點(diǎn)就是總成績

23、的排序,其他的功能實(shí)現(xiàn)還是比較簡單,總成績排序我用啦一個(gè)輔助結(jié)構(gòu)體 struct shu 來存儲(chǔ)每個(gè)學(xué)生的學(xué)號char num來記錄學(xué)生以及便于排序的時(shí)候查找,還有總成績float allscore,且用結(jié)構(gòu)體數(shù)組來存儲(chǔ)首先對每個(gè)學(xué)生的學(xué)號及總成績賦值給結(jié)構(gòu)體數(shù)組shuzu,然后對結(jié)構(gòu)體數(shù)組進(jìn)行從大到小排序(選擇排序)然后對結(jié)構(gòu)體一一查找相應(yīng)的信息。假如用順序表來存儲(chǔ)可以避免這方面的麻煩。最后對一個(gè)管理系統(tǒng)具有較好的結(jié)構(gòu),即對鏈表的一系列的操作熟悉及運(yùn)用同時(shí)也對數(shù)據(jù)結(jié)構(gòu)這方面的認(rèn)識深刻,數(shù)據(jù)存儲(chǔ)的重要性。數(shù)據(jù)結(jié)構(gòu)在程序設(shè)計(jì)的重要性。 2:joseph環(huán)1 任務(wù)分析編號是1,2,,n的n個(gè)人按照

24、順時(shí)針方向圍坐一圈,每個(gè)人只有一個(gè)密碼(正整數(shù))。一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)仍開始順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值,從他在順時(shí)針方向的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。設(shè)計(jì)一個(gè)程序來求出出列順序。要求:利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)模擬此過程,按照出列的順序輸出各個(gè)人的編號。測試數(shù)據(jù):m的初值為20,n=7 ,7個(gè)人的密碼依次為3,1,7,2,4,7,4,首先m=6,則正確的輸出是什么?要求:輸入數(shù)據(jù):建立輸入處理輸入數(shù)據(jù),輸入m的初值,n ,輸入每個(gè)人的密碼,建立單循環(huán)鏈表。輸出形式:建立一個(gè)輸出函數(shù),

25、將正確的輸出序列2結(jié)構(gòu)分析采用鏈表來存儲(chǔ)每個(gè)人的密碼每一次出列將密碼為下一次報(bào)道的M。并輸出這個(gè)人。直到所有人輸出3算法實(shí)現(xiàn)頭文件status.htypedef int status;#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef struct node /結(jié)構(gòu)體存儲(chǔ)密碼int mima;struct node *next;nodelist,*nodeli;void creatlist(nodeli &s,int n) /創(chuàng)建循環(huán)鏈表nodelist *p,*r,*q;

26、int i;s=(nodeli)malloc(sizeof(nodelist); /申請空間r=s;cout<<"輸入他們的密碼:"<<endl; /輸入他們的密碼for(i=0;i<n;i+)p=(nodelist*)malloc(sizeof(nodelist); /創(chuàng)建人if(i=0) q=p; cin>>p->mima; /輸入密碼r->next=p;r=p;elsecin>>p->mima; /輸入密碼 r->next=p; /開始下一個(gè)r=p;r->next=q;void jos

27、eph(nodeli &s,int m,int n) /joseph函數(shù)nodelist *p=s,*q;int i;while(n!=0) i=1;while(i<m)i+;p=p->next;if(i=m) / 找到目標(biāo)q=p->next;p->next=q->next;cout<<q->mima<<" "/輸出密碼m=q->mima; /把密碼在復(fù)制給M找下一個(gè)p=p->next;free(q);n-;cout<<"n"Cpp文件#include<st

28、dio.h>#include<stdlib.h>#include<iostream.h>#include"status.h"void main()nodeli s; /定義個(gè)鏈表int n,m=20,l;cout<<"輸入人的個(gè)數(shù)"<<endl;cin>>n; /輸入人的個(gè)數(shù) creatlist(s,n); /創(chuàng)建鏈表cout<<"輸入初始的M "<<endl;cin>>l;m=l; joseph(s,m,n); /JOSEPH函數(shù)調(diào)

29、用調(diào)試結(jié)果4課程小結(jié)這是一個(gè)典型的約瑟夫環(huán)差不多的問題只要熟練鏈表的操作就可以比較容易實(shí)現(xiàn)。關(guān)鍵在于每一個(gè)的輸出。找下一個(gè)以上一次輸出鏈表的密碼來實(shí)現(xiàn)的。關(guān)鍵對數(shù)據(jù)結(jié)構(gòu)分析的重要。鏈表的運(yùn)用熟練3:猴子選大王 1 任務(wù)分析7、 猴子選大王一堆猴子都有編號,編號是1,2,3 .m ,這群猴子(m個(gè))按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個(gè),該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。要求:輸入數(shù)據(jù):輸入m,n m,n 為整數(shù),n<m輸出形式:中文提示按照m個(gè)猴子,數(shù)n 個(gè)數(shù)的方法,輸出為大王的猴子是幾號 ,建立一個(gè)函數(shù)來實(shí)現(xiàn)此功能 2結(jié)構(gòu)分析采

30、用鏈表來存儲(chǔ)每個(gè)猴子的序號每一次出列將序號為下一次報(bào)道的M。并輸出這個(gè)猴子。直到所有人輸出最后的猴子為大王下次3算法實(shí)現(xiàn)Cpp文件#include<stdio.h>#include<stdlib.h>typedef struct houzinode int num; /猴子編號struct houzinode *next;houzinode,*houzilist; /猴子類型void houzidawan(houzilist &s,int n,int m) /求解猴子選大王問題最后輸出的為大王int i,j;houzinode *r,*p,*q; s=(houzilist)malloc(sizeof(houzinode); /頭結(jié)點(diǎn) r=q=s; /r p 指向頭結(jié)點(diǎn) q=r; for(i=1;i<=n;i+) p=(houzilist)malloc(sizeof(houzinode);/產(chǎn)生結(jié)點(diǎn)

溫馨提示

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

最新文檔

評論

0/150

提交評論