c語(yǔ)言程序課程設(shè)計(jì)學(xué)生成績(jī)管理程序_第1頁(yè)
c語(yǔ)言程序課程設(shè)計(jì)學(xué)生成績(jī)管理程序_第2頁(yè)
c語(yǔ)言程序課程設(shè)計(jì)學(xué)生成績(jī)管理程序_第3頁(yè)
c語(yǔ)言程序課程設(shè)計(jì)學(xué)生成績(jī)管理程序_第4頁(yè)
c語(yǔ)言程序課程設(shè)計(jì)學(xué)生成績(jī)管理程序_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、武漢科技大學(xué)二一二一一學(xué)年第一學(xué)期信息科學(xué)與工程學(xué)院課程設(shè)計(jì)報(bào)告書(shū)課程名稱: c語(yǔ)言課程設(shè)計(jì) 班 級(jí): 自動(dòng)化2009級(jí)2班 學(xué) 號(hào): 姓 名: 指導(dǎo)老師: 二一 年 九 月設(shè)計(jì)題目:學(xué)生成績(jī)管理程序任務(wù):自學(xué)c語(yǔ)言中相關(guān)知識(shí),設(shè)計(jì)出學(xué)生成績(jī)管理程序。設(shè)計(jì)要求:l 能錄入學(xué)生信息存儲(chǔ)在文件中,每位學(xué)生錄入的信息有:姓名、學(xué)號(hào)、性別、班級(jí)、和三門功課(數(shù)學(xué)、英語(yǔ)、計(jì)算機(jī))的成績(jī);l 能夠統(tǒng)計(jì)每個(gè)學(xué)生三門課程的總成績(jī);l 能按學(xué)生學(xué)號(hào)查詢其三門功課成績(jī)并顯示;l 能瀏覽全部學(xué)生成績(jī);l 能按總成績(jī)有高到低顯示學(xué)生信息。系統(tǒng)功能需求分析:1, 系統(tǒng)要求用戶必須輸入正確的信息格式;2, 系統(tǒng)應(yīng)該提供已

2、經(jīng)記錄在案的信息數(shù)目;3, 系統(tǒng)應(yīng)提供查詢、刪除、保存、瀏覽功能;系統(tǒng)總體設(shè)計(jì)框架:主界面查詢學(xué)生資料刪除學(xué)生資料登記學(xué)生資料修改學(xué)生資料保存瀏覽全部排序?yàn)g覽系統(tǒng)功能模塊圖:1,登記學(xué)生資料盡快保存; 2,刪除學(xué)生信息;3,查詢學(xué)生信息;4,修改學(xué)生信息;5,保存學(xué)生信息;6,保存資料后瀏覽全部學(xué)生成績(jī);7,保存資料后按總成績(jī)排名;0, 退出系統(tǒng)。功能模塊的算法設(shè)計(jì)思路:1,增加學(xué)生:將指針?lè)旁阪湵砦玻_(kāi)辟一個(gè)結(jié)構(gòu)體單元,輸入學(xué)號(hào),查找是否有重復(fù)學(xué)號(hào),如無(wú),則寫入,再關(guān)閉文件。2,查詢信息:如果l->next為空,則無(wú)信息;按學(xué)號(hào)查,輸入要查的學(xué)號(hào),與鏈表中數(shù)據(jù)一個(gè)一個(gè)進(jìn)行比較,找到所在

3、處,指針指向,輸出信息。無(wú)信息則提示。3,刪除信息:如果l->next為空,則無(wú)信息;按學(xué)號(hào)刪,輸入要?jiǎng)h的學(xué)號(hào),在鏈表中號(hào)碼一個(gè)一個(gè)與所找學(xué)號(hào)比較,找到后將前一個(gè)數(shù)據(jù)的尾接到后一個(gè)的頭;4,修改信息:如果l->next為空,則無(wú)信息,輸入要該的學(xué)號(hào),在文件中找到,重新寫入各項(xiàng)信息,保存。5,保存:打開(kāi)一個(gè)制定文件,將鏈表的內(nèi)容寫入文件中,關(guān)閉文件。6,瀏覽:打開(kāi)文件,找到鏈表頭,逐個(gè)輸出。7,排序:建立一個(gè)新的結(jié)構(gòu)體,將文件中內(nèi)容復(fù)制到新結(jié)構(gòu)體中,用冒泡排序?qū)⒖偝煽?jī)排序,輸出。工作流程圖: 主要源程序代碼:#include "stdio.h" #include

4、"stdlib.h" #include "string.h" int numbercount=0; /* */ struct student char num10;/* 學(xué)號(hào) */ char name20; /*姓名*/ char sex10;/*性別*/ char clas10;/*班級(jí)*/ int mgrade;/*數(shù)學(xué)*/ int egrade; /*英語(yǔ)*/ int cgrade;/*計(jì)算機(jī)*/ int totle;/*總分*/ ;typedef struct node struct student data; struct node *next

5、; node,*link;void printenglish(node *p)/* 本函數(shù)用于輸出英文 */ printf("%-12s%st%st%st%dt%dt%dt%dn",p->data.num,p->,p->data.sex,p->data.clas,p->data.mgrade,p->data.egrade,p->data.cgrade,p->data.totle);void add(link l) /* 增加學(xué)生信息*/ node *p,*r,*s; char num10,a10; r=l;

6、/*l為小寫l*/ s=l->next; while(r->next!=null) r=r->next; /* 將指針置于最末尾 */ while(1) printf("請(qǐng)你輸入學(xué)號(hào):"); scanf("%s",num); for(;s!=null;s=s->next) if(strcmp(s->data.num,num)=0) printf("提示:學(xué)號(hào)為'%s'的學(xué)生已經(jīng)存在,若要修改請(qǐng)你選擇'4 修改'!n",num); printf("學(xué)號(hào) 姓名 性別

7、班級(jí) 數(shù)學(xué)成績(jī) 英語(yǔ)成績(jī) 計(jì)算機(jī)成績(jī) 總分n"); printenglish(s); printf("n"); return; p=(node *)malloc(sizeof(node); strcpy(p->data.num,num); printf("請(qǐng)你輸入姓名:"); scanf("%s",p->); getchar(); printf("請(qǐng)你輸入性別:"); scanf("%s",p->data.sex); getchar(); print

8、f("請(qǐng)你輸入班級(jí):"); scanf("%s",p->data.clas); getchar(); printf("請(qǐng)你輸入計(jì)算機(jī)成績(jī):"); scanf("%d",&p->data.cgrade); getchar(); printf("請(qǐng)你輸入數(shù)學(xué)成績(jī):"); scanf("%d",&p->data.mgrade); getchar(); printf("請(qǐng)你輸入英語(yǔ)成績(jī):"); scanf("%d&quo

9、t;,&p->data.egrade); getchar(); p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; /* 信息輸入已經(jīng)完成 */ p->next=null; r->next=p; r=p; numbercount=1; printf("是否輸入下一個(gè)學(xué)生信息?按y/n選擇n"); scanf("%s",a); if(strcmp(a,"n")=0) break; /*while(1)結(jié)束*/void q

10、urify( link l) /* 查詢學(xué)生信息 */ char findmess20; node *p,*r; int i=0; if(l->next=null) printf("n提示:沒(méi)有資料可以查詢!n"); return; printf("請(qǐng)你輸入要查找的學(xué)號(hào):"); scanf("%s",findmess); r=l->next; p=null; while(r!=null) if(strcmp(r->data.num,findmess)=0) p=r; r=r->next; if(p) print

11、f("tttt查找結(jié)果n"); printf("學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué)成績(jī) 英語(yǔ)成績(jī) 計(jì)算機(jī)成績(jī) 總分n"); printenglish(p); /*輸出英文*/ else printf("n提示:沒(méi)有找到該學(xué)生!n");return; void delete(link l) /* 刪除 */ int sel; node *p,*r; char findmess20; if(!l->next) printf("n提示:沒(méi)有資料可以刪除!n"); return; printf("n1按學(xué)號(hào)刪除n

12、2按姓名刪除n"); scanf("%d",&sel); if(sel=1) printf("請(qǐng)你輸入要?jiǎng)h除的學(xué)號(hào):"); scanf("%s",findmess); r=l->next; p=null; while(r!=null) if(strcmp(r->data.num,findmess)=0) p=r; r=r->next; if(p) r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); print

13、f("n提示:該學(xué)生已經(jīng)成功刪除!n"); numbercount=1; else printf("n提示:沒(méi)有找到該學(xué)生!n"); else if(sel=2) printf("請(qǐng)你輸入要?jiǎng)h除的姓名:"); scanf("%s",findmess); r=l->next; p=null; while(r!=null) if(strcmp(r->,findmess)=0) p=r; r=r->next; if(p) r=l; while(r->next!=p) r=r-&g

14、t;next; r->next=p->next; free(p); printf("n提示:該學(xué)生已經(jīng)成功刪除!n"); numbercount=1; else printf("n提示:沒(méi)有找到該學(xué)生!n"); else printf("n提示:輸入錯(cuò)誤!n");void modify(link l) /*修改學(xué)生信息*/ node *p,*r; char findmess20; if(!l->next) /*l->next為空時(shí)*/ printf("n提示:沒(méi)有資料可以修改!n"); re

15、turn; printf("請(qǐng)你輸入要修改的學(xué)生學(xué)號(hào):"); scanf("%s",findmess); r=l->next; p=null; while(r!=null) if(strcmp(r->data.num,findmess)=0) p=r; r=r->next; if(p) printf("請(qǐng)你輸入新學(xué)號(hào)(原來(lái)是%s):",p->data.num); scanf("%s",p->data.num); printf("請(qǐng)你輸入新姓名(原來(lái)是%s):",p-

16、>); scanf("%s",p->); getchar(); printf("請(qǐng)你輸入新性別(原來(lái)是%s):",p->data.sex); scanf("%s",p->data.sex); getchar(); printf("請(qǐng)你輸入新班級(jí)(原來(lái)是%s):",p->data.clas); scanf("%s",p->data.clas); getchar(); printf("請(qǐng)你輸入新的數(shù)學(xué)成績(jī)(原來(lái)是%d分

17、):",p->data.mgrade); scanf("%d",&p->data.mgrade); getchar(); printf("請(qǐng)你輸入新的英語(yǔ)成績(jī)(原來(lái)是%d分):",p->data.egrade); scanf("%d",&p->data.egrade); getchar(); printf("請(qǐng)你輸入新的計(jì)算機(jī)成績(jī)(原來(lái)是%d分):",p->data.cgrade); scanf("%d",&p->data.c

18、grade); getchar(); p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; /*總成績(jī)*/ printf("n=>提示:資料修改成功!n"); numbercount=1; else printf("n提示:沒(méi)有找到該學(xué)生!n");void save(link l) /*保存到文件*/ file * fp; node *p; int flag=1,count=0; fp=fopen("c:student","wb&

19、quot;); if(fp=null) printf("n提示:重新打開(kāi)文件時(shí)發(fā)生錯(cuò)誤!n"); exit(0); p=l->next; while(p) if(fwrite(p,sizeof(node),1,fp)=1) /*寫入*/ p=p->next; count+; else flag=0; break; if(flag=1) printf("n提示:文件保存成功.(有%d條記錄已經(jīng)保存.)n",count); numbercount=0; fclose(fp);void skim(link l,int amount) /*瀏覽全部成

20、績(jī)*/ int i;file * fp; node *p,*r; fp=fopen("c:student","rb"); printf("學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué)成績(jī) 英語(yǔ)成績(jī) 計(jì)算機(jī)成績(jī) 總分n"); r=l;p=l->next; for(i=1;i<=amount;i+) if(fread(p,sizeof(node),1,fp)=1) printenglish(p); p=p->next; fclose(fp); void sort(link l,int amount)/*按總成績(jī)排序*/struct pe

21、rson char num10;/* 學(xué)號(hào) */ char name20; /*姓名*/ char sex10;/*性別*/ char clas10;/*班級(jí)*/ int mgrade;/*數(shù)學(xué)*/ int egrade; /*英語(yǔ)*/ int cgrade;/*計(jì)算機(jī)*/ int totle;/*總分*/;struct person cop100;/*這個(gè)地方有局限性,只能從文件中復(fù)制100個(gè)到新定義的結(jié)構(gòu)體中*/int i,t,j;char num110,name120,sex110,clas110; file* fp; node *p; fp=fopen("c:student&

22、quot;,"rb"); /*打開(kāi)文件*/ if(fp=null) printf("n提示:重新打開(kāi)文件時(shí)發(fā)生錯(cuò)誤!n"); return; p=l->next; for(i=1;i<=amount;i+)/*將文件中的內(nèi)容復(fù)制到新結(jié)構(gòu)體中*/ fread(&copi,sizeof(node),1,fp); printf("學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué)成績(jī) 英語(yǔ)成績(jī) 計(jì)算機(jī)成績(jī) 總分n"); for(t=1;t<amount;t+) for(i=t+1;i<=amount;i+) if(copt.tot

23、le<copi.totle) j=copt.totle;copt.totle=copi.totle;copi.totle=j; j=copt.mgrade;copt.mgrade=copi.mgrade;copi.mgrade=j; j=copt.cgrade;copt.cgrade=copi.cgrade;copi.cgrade=j; j=copt.egrade;copt.egrade=copi.egrade;copi.egrade=j; strcpy(num1,copt.num);strcpy(copt.num,copi.num);strcpy(copi.num,num1); str

24、cpy(name1,);strcpy(,);strcpy(,name1); strcpy(sex1,copt.sex);strcpy(copt.sex,copi.sex);strcpy(copi.sex,sex1); strcpy(clas1,copt.clas);strcpy(copt.clas,copi.clas);strcpy(copi.clas,clas1); for(t=1;t<=amount;t+)printf("%st%stt%st%st%dt%dt%dtt%dn",copt.num

25、,,copt.sex,copt.clas, copt.mgrade,copt.egrade,copt.cgrade,copt.totle); fclose(fp);void main() /*主函數(shù)*/ link l;/* 鏈表 */ file *fp; /* 文件指針 */ node *p,*r;/*指針*/ int n,count=0; char ch,chuang; l=(node*)malloc(sizeof(node); /*開(kāi)創(chuàng)一個(gè)node大小的連續(xù)空間*/ l->next=null; r=l; fp=fopen("c:student",

26、"rb"); /*打開(kāi)文件,只讀*/ if(fp=null) printf("n提示:文件還不存在,請(qǐng)創(chuàng)建?輸入y確認(rèn)n"); scanf("%c",&chuang); fp=fopen("c:student","wb"); /*打開(kāi)文件,只寫形式*/ printf("n提示:文件已經(jīng)打開(kāi),正在導(dǎo)入記錄.n"); while(!feof(fp) /*文件沒(méi)結(jié)束則feof(fp)為0*/ p=(node*)malloc(sizeof(node); /*創(chuàng)建內(nèi)存區(qū),地址給

27、p*/ if(fread(p,sizeof(node),1,fp) /* 將文件的內(nèi)容放入接點(diǎn)中 */ p->next=null; r->next=p; r=p; /* 將該接點(diǎn)掛入連中 */ count+; fclose(fp); /* 關(guān)閉文件 */ printf("n=>提示:記錄導(dǎo)入完畢,共導(dǎo)入%d條記錄.n",count); for(;) printf("*n"); printf("t1登記學(xué)生資料盡快保存n"); printf("t2刪除學(xué)生資料n"); printf("t3查詢學(xué)生資料n"); printf("t4修改學(xué)生資料n"); printf("t5保存學(xué)生資料n"); printf("t6保存資料后瀏覽全部學(xué)

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論