計算機程序編程課程設(shè)計實驗報告學(xué)生成績_第1頁
計算機程序編程課程設(shè)計實驗報告學(xué)生成績_第2頁
計算機程序編程課程設(shè)計實驗報告學(xué)生成績_第3頁
計算機程序編程課程設(shè)計實驗報告學(xué)生成績_第4頁
計算機程序編程課程設(shè)計實驗報告學(xué)生成績_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機程序編程課程設(shè)計實驗報告2實驗名稱學(xué)生成績管理系統(tǒng)學(xué) 院通信工程學(xué)院專業(yè)班級通信工程系11級25班姓 名梁仙友學(xué) 號52112507任課教師孫大洋實驗時間2013/8/14 實驗?zāi)康模菏褂脴藴蔆或C+實現(xiàn)學(xué)生成績管理系統(tǒng)的錄入、查詢、刪除、統(tǒng)計等基本操作。進一步鞏固C語言的學(xué)習(xí),以提高學(xué)生對開發(fā)環(huán)境的進一步認識和綜合編程能力。系統(tǒng)功能模塊結(jié)構(gòu)圖:數(shù)據(jù)結(jié)構(gòu)設(shè)計及用法說明:數(shù)據(jù)結(jié)構(gòu)定義如下 typedef struct St1 char IDNumber16;/*學(xué)號*/ char FamilyName16; /*姓*/char GivenName16; /*名*/ int sex; /*性

2、別(0代表“女”,1代表“男”)*/ int BirthYear; /*出生年*/int BirthMonth; /*出生月*/int BirthDay; /*出生日*/ float score4; /*成績*/ float sum; /*總分*/ float average; /*平均分*/ struct St1 *next; StudentNode;需要處理的基礎(chǔ)數(shù)據(jù)學(xué)生基本信息:學(xué)號(例如2003級12班6號寫作20031206)、姓、名、性別、出生年月日、課程名稱(外語SCORE0、高數(shù)SCORE1、C語言SCORE2、馬哲SCORE3)、考試成績等。統(tǒng)計每個學(xué)生各門功課的平均成績,并

3、按平均成績從高到低的次序排名輸出每個學(xué)生各門功課的綜合成績和平均成績(名次、學(xué)號、姓名、平均成績、各門功課的考試成績)。列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格學(xué)生清單(學(xué)號、姓名、不及格的課程和成績)。統(tǒng)計并輸出各門功課的平均成績和總平均成績。按班級統(tǒng)計并輸出總成績。(需要對學(xué)號進行解析)以下代碼可以獲取系統(tǒng)當(dāng)前時間,用于判斷年齡是否合理。#include "time.h " void main()struct tm* ptm;long ts;int y,m,d,h,n,s;ts = time(NULL);

4、 ptm = localtime(&ts); y = ptm-> tm_year+1900; /年 m = ptm-> tm_mon+1; /月d = ptm-> tm_mday; /日h = ptm-> tm_hour; /時n = ptm-> tm_min; /分s = ptm-> tm_sec; /秒程序結(jié)構(gòu)(畫流程圖):主函數(shù):StudentNode *head; head=first();Scanf(%d,&n)Menuseclect=1開始Menuseclect=2Menuselect=3Menuselect=4Menuselec

5、t=5Menuselect=6Menuselect=7Menuselect=8Menuselect=9Menuselect=10head=Create()head=Delete(head)Print(head)Search(head)Save(head)head=Load()分析數(shù)據(jù)SearchClass(head):head=Insert(head,New)exit(0)結(jié)束StudentNode *create ()StudentNode *Delete(StudentNode *head)void Print(StudentNode *head)StudentNode *Load()St

6、udentNode *compute(StudentNode *head)Search(head) StudentNode *Insert(StudentNode *head,StudentNode *New) 各模塊的功能1、StudentNode *Create() :根據(jù)提示學(xué)生錄入學(xué)生基本信息:學(xué)號(例如2003級12班6號寫作20031206)、姓、名、性別、出生年月日、課程(外語SCORE0、高數(shù)SCORE1、C語言SCORE2、馬哲SCORE3)成績。2、StudentNode *Delete (StudentNode *head):根據(jù)所給學(xué)號刪除對應(yīng)學(xué)號學(xué)生對基本信息。3、v

7、oid Print(StudentNode *head):先根據(jù)學(xué)生干的平均成績對學(xué)生進行排序,再根據(jù)平均成績從高到低依次輸出各個學(xué)生的基本信息,在統(tǒng)計列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格學(xué)生清單(學(xué)號、姓名、不及格的課程和成績)。4、StudentNode *search(StudentNode *head):找出對應(yīng)姓名的學(xué)生的基本信息并輸出。5、StudentNode *Save(StudentNode *head):將鏈表中的記錄依次保存到所指定的文件中。6、StudentNode *Load():從指定文件中讀取學(xué)

8、生的相關(guān)信息并依次輸出。7、StudentNode *compute(StudentNode *head):計算所有學(xué)生的總分和平均分并輸出。8、StudentNode * CompositorByAverage (StudentNode *head):輸出對應(yīng)班級的學(xué)生的學(xué)號 姓 名 總分 平均分。9、StudentNode *Insert(StudentNode *head,StudentNode *New):將輸入的學(xué)生的基本信息插入到對應(yīng)鏈表中并按平均成績排序后輸出鏈表中學(xué)生的基本信息。試驗結(jié)果(包括輸入數(shù)據(jù)和輸出結(jié)果)菜單界面顯示界面文件查找:體會通過一個星期的C語言編程設(shè)計實驗我學(xué)

9、會了很多東西,初步了解了學(xué)生成績管理系統(tǒng)的編程過程,對編程有了更深一次的掌握,學(xué)會了如何分塊把問題解決。使用標準C或C+實現(xiàn)學(xué)生成績管理系統(tǒng)的錄入、查詢、刪除、統(tǒng)計等基本操作。本次實驗設(shè)計的成績管理系統(tǒng)功能還有限,都是些基本功能,還有很多的功能有待完善,比如學(xué)生成績是否符合正太分布,雖然完成的功能有限,但是感覺收獲還是很大,寫代碼的時候需要集中精力,很多小細節(jié)可能導(dǎo)致大錯誤,比如大括號的丟失,程序調(diào)試也很費時間,最好是分布檢查每個部分,確保準確的運行,再逐步釋放代碼,很容易發(fā)現(xiàn)問題所在。附錄:程序清單及源程序軟盤#include<stdio.h>#include<stdlib

10、.h>#include<malloc.h>#include <string.h> /*字符串函數(shù)*/ #include <time.h>#define LEN sizeof(StudentNode)typedef struct St1 char IDNumber16; /*學(xué)號*/ char FamilyName16; /*姓*/ char GivenName16; /*名*/ int sex; /*性別(0代表"女",1代表"男")*/ int BirthYear; /*出生年*/ int BirthMonth

11、; /*出生月*/ int BirthDay; /*出生日*/ int score4; /*成績*/ int sum; /*總分*/ int average; /*平均分*/ int rank; /*排名*/ struct St1 *next; StudentNode;StudentNode *New;StudentNode *first()return NULL;int Menu() /菜單選擇函數(shù)int m;printf("n按回車鍵進入主菜單.press any button to enter menun");getchar(); printf("nn&qu

12、ot;);printf("n");printf("tt歡迎使用學(xué)生管理系統(tǒng)n");printf("ntt Welcome to student database systemn");printf(" MENUn"); printf("ttt1 輸入學(xué)生成績記錄 Enter listn");printf("ttt2 刪除記錄 Delete a record from listn"); printf("ttt3 顯示鏈表中所有記錄 Print listn");

13、printf("ttt4 按照姓名查找記錄 Search record on namen");printf("ttt5 記錄保存到文件 Save the filen");printf("ttt6 從文件中讀入記錄 Load the filen");printf("ttt7 計算總分和均分 Compute the scoren");printf("ttt8 按班級查詢學(xué)生總分 Query by classn");printf("ttt9 插入記錄 Insert record to lis

14、tn");printf("ttt10 退出 Quitn ");printf("nn");printf("nn");doprintf("nttt請輸入你要操作的代號 Enter your select choice(110):");fflush(stdin);scanf("%d",&m);while(m<1|m>10);return (m);StudentNode *Create() /信息的輸入int i,s=0;StudentNode *head=NULL,*p;

15、system("cls");for(;)p=(StudentNode *)malloc(LEN);if(!p)printf("n輸出內(nèi)存溢出.OUT OF MEMORY.");return (head);printf("請輸入學(xué)號,please enter the num:(輸入n結(jié)束輸入)");scanf("%s",p->IDNumber);if(p->IDNumber0='n') break;printf("請輸入姓名:(姓名之間用空格間隔)"); scanf(&

16、quot;%s %s",p->FamilyName,p->GivenName);do printf("請輸入性別:0代表女,1代表男");scanf("%d",&p->sex);while(p->sex!=0)&&(p->sex!=1);doprintf("請輸入生日(年月日用空格分隔):"); scanf("%d %d %d",&p->BirthYear,&p->BirthMonth,&p->BirthDay

17、);while(p->BirthMonth<0&&p->BirthMonth>13); printf("請輸入4門成績 please enter the scoren");for(i=0;i<4;i+)do printf("成績%d:",i+1); scanf("%d",&p->scorei);if(p->scorei<0|p->scorei>100)printf("數(shù)據(jù)輸入錯誤,請重新輸入n");while(p->score

18、i<0|p->scorei>100);s=s+p->scorei;p->sum=s;p->average=s/4;p->rank=0;p->next=head;head=p;return (head); void Print(StudentNode *head) /信息的顯示 int i=0; StudentNode *p; char s2; system("cls"); p=head; printf("n學(xué)生信息n"); printf("-n"); printf("|Rec

19、Num Fna Gna Sex Yea Mon Day Sc1 Sc2 Sc3 Sc4 Sum Ave Rank|n"); printf("-n"); while (p!=NULL) i+; printf("|%3d %4s %2s %2s %d %d %d %d %d %d %d %d %d %d %d |n",i, p->IDNumber,p-> FamilyName,p-> GivenName,p->sex,p->BirthYear,p->BirthMonth, p->BirthDay,p->

20、;score0,p->score1,p->score2,p->score3,p->sum,p->average, p->rank); p=p->next; printf("-n"); printf("ENDn"); scanf("%s",s); printf("輸入任意鍵返回菜單.n"); void Search(StudentNode *head) /查找記錄函數(shù) StudentNode *p; char s2;char f2; system("cls"

21、;); printf("請輸入姓:n"); scanf("%s",s); printf("請輸入名:n"); scanf("%s",f); p=head; while(p!=NULL) if(strcmp(p->FamilyName,s)!=0)|(strcmp(p->GivenName,f)!=0) p=p->next; else break; if(p) printf("n已找到n"); printf("-n"); printf("| Num

22、Name sc1 sc2 sc3 sc4 Sum Ave Rank|n"); printf("-n"); printf("| %4s %s %s %3d %3d %3d %3d %3d %d %-5d|n",p->IDNumber,p->FamilyName, p->GivenName,p->score0,p->score1,p->score2,p->score3,p->sum,p->average,p->rank); printf("-n"); printf(&q

23、uot;結(jié)束n"); else printf("n沒有需要查找的%s %s學(xué)生",s, f); StudentNode *Sort (StudentNode *head) /排序函數(shù)int i=0;StudentNode *p1,*p2,*t,*temp;temp=head->next;head->next=NULL;while(temp!=NULL)t=temp;temp=temp->next;p1=head;p2=head;while(t->average<p1->average&&p1!=NULL)p2=p

24、1;p1=p1->next;if(p1=p2)t->next=p1;head=t;elset->next=p1;p2->next=t;p1=head;while(p1!=NULL)i+;p1->rank=i;p1=p1->next;printf("已排序成功.n");return(head);StudentNode *Insert(StudentNode *head,StudentNode *New) /信息的插入 StudentNode *p0,*p1,*p2; /int n=0;int sum1,i;p1=head;p0=New;pr

25、intf("輸入學(xué)號:");scanf("%s",New->IDNumber);printf("輸入姓:");scanf("%s",New->FamilyName);printf("輸入名"); scanf("%s",New->GivenName);printf("性別:");scanf("%d",&New->sex); printf("出生年:");scanf("%d&qu

26、ot;,&New->BirthYear);printf("出生月:");scanf("%d",&New->BirthMonth);printf("出生日:");scanf("%d",&New->BirthDay);printf("Please enter the 4 scores.n");sum1=0;for(i=0;i<4;i+)doprintf("成績score%d:",i+1); scanf("%d",

27、&New->scorei); if(New->scorei>100|New->scorei<0) printf("數(shù)據(jù)錯誤,請重新輸入n"); while(New->scorei>100|New->scorei<0); sum1=sum1+New->scorei;New->sum=sum1;New->average=sum1/4;New->rank=0;if(head=NULL)head=p0;p0->next=NULL;elsewhile(p0->average<p1-

28、>average)&&(p1->next!=NULL)p2=p1; p1=p1->next;if(p0->average>=p1->average)if (head=p1)head=p0;else p2->next=p0;p0->next=p1;elsep1->next=p0;p0->next=NULL;/n=n+1;head=Sort(head);printf("學(xué)生%s %s已被更新.n",New->FamilyName,New->GivenName); return(head);

29、StudentNode *Delete (StudentNode *head) /刪除記錄函數(shù) int n=0; StudentNode *p1,*p2; char c,s6; printf("請輸入要刪除的學(xué)生學(xué)號:"); scanf("%s",s); p1=p2=head; while(strcmp(p1->IDNumber,s)&&p1!=NULL) p2=p1; p1=p1->next; if(strcmp(p1->IDNumber,s)=0) printf("找到了n"); printf(&

30、quot;-n"); printf("-n"); printf("結(jié)束n"); printf("刪除請按Y,退出請按N");for(;)scanf("%c",&c);if(c='n'|c='N')break;if(c='Y'|c='y')if(p1=head)head=p1->next;else p2->next=p1->next;n=n-1;printf("n%s學(xué)生的信息已被刪除n",s);b

31、reak; else printf("n沒有此人信息n"); return(head); void Save(StudentNode *head) /保存數(shù)據(jù)到文件FILE *fp;StudentNode *p;char outfile10;printf("輸入文件例如:c: score enter outfile name.n");scanf("%s",outfile);if(fp=fopen(outfile,"w")=NULL)printf("打不開文件n");return;printf(&

32、quot;保存中.n");p=head;while(p!=NULL)fwrite(p,LEN,1,fp);p=p->next;fclose(fp);printf("保存成功n");StudentNode *Load() /從文件讀取數(shù)據(jù) StudentNode *p1,*p2,*head=NULL; FILE *fp; char infile10; printf("導(dǎo)入文件例如:c: score enter infile namen"); scanf("%s",infile); if(fp=fopen(infile,&

33、quot;r")=NULL) printf("打不開文件n"); return(head); printf("n查找中.n"); p1=(StudentNode *)malloc(LEN); if(!p1) printf("out of memoryn"); return(head); head=p1; while(!feof(fp) if(fread(p1,LEN,1,fp)!=1) break; p1->next=(StudentNode *)malloc(LEN); if(!p1->next) printf

34、("out of memoryn"); return(head); p2=p1; p1=p1->next; p2->next=NULL; fclose(fp); printf("n成功從文件中讀取數(shù)據(jù)n"); return(head);/基于班級的成績查詢void SearchClass(StudentNode *head)StudentNode *c,*p;int flag=0;p=head;if(p=NULL) printf("現(xiàn)在還沒學(xué)生信息,請先輸入學(xué)生信息n"); return; printf("請輸入

35、您需要查詢的班級:n");c=(StudentNode *)malloc(sizeof(StudentNode);scanf("%s",c->IDNumber);printf("%sn",c->IDNumber);while(p!=NULL) if(c->IDNumber0=p->IDNumber 4)&&(c->IDNumber1=p->IDNumber 5) printf("學(xué)號:%sn姓:%st名:%st性別:%dn出生年:%dt出生月:%dt出生日:%dn外語:%ft高數(shù):%

36、ftc語言:%ft馬哲:%fn",p->IDNumber,p->FamilyName,p->GivenName,p->sex,p->BirthYear,p->BirthMonth,p->BirthDay,p->score0,p->score1,p->score2,p->score3);printf("學(xué)生總分:%fn",p->sum=p->score0+p->score1+p->score2+p->score3);printf("學(xué)生平均分:%fn"

37、,p->average=p->sum/4);flag+; p=p->next; if(!flag)printf("共有%d名學(xué)生符合您的查詢要求n",flag);else printf("沒有找到符合您的查詢條件的學(xué)生n");void CompositorByAverage(StudentNode *head)StudentNode exchange,*p,*p1,*p2; p=head;if(p=NULL) printf("現(xiàn)在還沒學(xué)生信息,請先輸入學(xué)生信息n"); return; while(p->next

38、!=NULL)/*兩層while循環(huán)實現(xiàn)排序*/ p1=p; p2=p->next;while(p2) if(&p2->average>&p1->average) /*先復(fù)制p2結(jié)點信息到exchange*/ strcpy(exchange.IDNumber,p2->IDNumber);strcpy(exchange.FamilyName,p2->FamilyName); strcpy(exchange.GivenName,p2->GivenName);exchange.sex=p2->sex;exchange.BirthDay=

39、p2->BirthDay;exchange.BirthMonth=p2->BirthMonth;exchange.BirthYear=p2->BirthYear;exchange.score0=p2->score0;exchange.score1=p2->score1;exchange.score2=p2->score2;exchange.score3=p2->score3;exchange.average=p2->average;exchange.sum=p2->sum;/*再復(fù)制p1結(jié)點信息到p2*/strcpy(p2->IDNu

40、mber,p1->IDNumber);strcpy(p2->FamilyName,p1->FamilyName); strcpy(p2->GivenName,p1->GivenName);p2->sex=p1->sex;p2->BirthDay=p1->BirthDay;p2->BirthMonth=p1->BirthMonth;p2->BirthYear=p1->BirthYear;p2->score0=p1->score0;p2->score1=p1->score1;p2->scor

41、e2=p1->score2;p2->score3=p1->score3;p2->average=p1->average;p2->sum=p1->sum; /*最后復(fù)制exchange結(jié)點信息到p1*/ strcpy(p1->IDNumber,exchange.IDNumber);strcpy(p1->FamilyName,exchange.FamilyName); strcpy(p1->GivenName,exchange.GivenName);p1->sex=exchange.sex;p1->BirthDay=excha

42、nge.BirthDay;p1->BirthMonth=exchange.BirthMonth;p1->BirthYear=exchange.BirthYear;p1->score1=exchange.score1;p1->score2=exchange.score2;p1->score3=exchange.score3;p1->average=exchange.average;p1->sum=exchange.sum; p2=p2->next; p=p->next; printf(".");/分數(shù)段列表void Dis

43、playMarkSegment(StudentNode *head)void func(int n); int m;printf("如想查詢請按1,退出查詢請按0n"); scanf("%d",&m);while(m)printf("選擇您需要查詢的課程,n外語請按1,高數(shù)請按2,C語言請按3,馬哲請按4,退出請按任意鍵n");scanf("%d",&m);switch(m)case 1:func(1);continue;case 2:func(2);continue;case 3:func(3);

44、continue;case 4:func(4);continue;default :break;break;void func(int n)StudentNode *p;StudentNode *head;p=head;if(p=NULL) printf("現(xiàn)在還沒學(xué)生信息,請先輸入學(xué)生信息n"); return; printf("不及格的學(xué)生清單如下:n");while(p)if(p->scoren-1<60)printf("學(xué)號:%st姓:%s名:%st性別:%dn出生年:%d出生月:%d出生日:%dt您所查詢的課程:%ftn&

45、quot;,&p->IDNumber,&p->FamilyName,&p->GivenName,p->sex,p->BirthYear,p->BirthMonth,p->BirthDay,p->scoren-1);p=p->next;p=head;printf("60分與70分間的學(xué)生清單如下:n");while(p)if(70>p->scoren-1)&&(p->scoren-1>=60)printf("學(xué)號:%st姓:%s名:%st性別:%dn

46、出生年:%d出生月:%d出生日:%dt您所查詢的課程:%ftn",&p->IDNumber,&p->FamilyName,&p->GivenName,p->sex,p->BirthYear,p->BirthMonth,p->BirthDay,p->scoren-1);p=p->next;p=head;printf("70分與80分間的學(xué)生清單如下:n");while(p)if(80>p->scoren-1)&&(p->scoren-1>=70)pr

47、intf("學(xué)號:%st姓:%s名:%st性別:%dn出生年:%d出生月:%d出生日:%dt您所查詢的課程:%ftn",&p->IDNumber,&p->FamilyName,&p->GivenName,p->sex,p->BirthYear,p->BirthMonth,p->BirthDay,p->scoren-1);p=p->next;p=head;printf("80分與90分間的學(xué)生清單如下:n");while(p)if(90>p->scoren-1)&am

48、p;&(p->scoren-1>=80)printf("學(xué)號:%st姓:%s名:%st性別:%dn出生年:%d出生月:%d出生日:%dt您所查詢的課程:%ftn",&p->IDNumber,&p->FamilyName,&p->GivenName,p->sex,p->BirthYear,p->BirthMonth,p->BirthDay,p->scoren-1);p=p->next;p=head;printf("90分以上的學(xué)生清單如下:n");while(p)if(p->scoren-1>=90)printf("學(xué)號:%st姓:%s名:%st性別:%dn出生年:%d出生月:%d出生日:%dt您所查詢的課程:%ftn",&p->IDNumber,&p->FamilyNam

溫馨提示

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

評論

0/150

提交評論