學生成績管理系統設計doc_第1頁
學生成績管理系統設計doc_第2頁
學生成績管理系統設計doc_第3頁
學生成績管理系統設計doc_第4頁
學生成績管理系統設計doc_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、學生信息管理系統設計1、設計目的設計該程序是為了實現更簡潔的學生信息管理,滿足管理學生學號、姓名和成績等信息的要求。2、總體設計(程序設計組成框圖、流程圖)圖1. 系統程序功能組成框圖菜單選擇學生信息管理系統保存至文件統計信息從文件讀查找記錄刪除記錄插入記錄按成績排序讀入記錄顯示記錄退出系統圖2.系統總流程圖存儲記錄退出程序統計信息查找記錄N=0N=9N=8N=7N=6開始輸入NN=1N=2N=3N=4N=5輸入數據顯示記錄按成績排序插入記錄刪除記錄讀入數據結束3、詳細設計(模塊功能說明(如函數功能、入口及出口參數說明,函數調用關系描述等)1.程序結構該系統首先定義了包含:學生學號、姓名、成績

2、的結構體。然后定義了菜單函數供用戶選擇,緊接著定義了實現以上各功能的子函數。最后是主函數,主函數通過switch語句實現對各子函數的調用。2. 數據描述結構體類型定義說明說明:該程序定義了一個結構體,結構體變量名為student,結構體數組包含:(char型)學號、(char型)學生姓名以及(int型)學生成績。該結構體如下:typedef struct /*定義結構體數組*/ char num10; /*學號*/ char name20; /*姓名*/ int score; /*成績*/ Student; Student stu80; /*結構體數組變量*/3. 函數功能說明程序包含11個函

3、數,除主函數外,還有:菜單函數int menu_select()、輸入記錄函數int input(student stud,int n)、顯示所有記錄函數void Display(student stud,int n)、排序函數void sort_by_score(student stud ,int n)、插入記錄函數int Insert_a_record(student stud int n)、刪除記錄函數int Delete_a_record(student stud,int n)、查詢函數void Query_a_record(student stud ,int n)、統計系統信息函數v

4、oid Statistic(student stud,int n)、讀取信息函數int AddfromText(stuent stud,int n)、存儲信息函數void WritetoText(student stud,int n)等10個輔助系統完成各項功能函數。各函數詳細說明如下:(1)主函數void main()算法描述:利用無限次循環for(;)和switch()實現對各函數的調用,系統根據輸入的數字選項來調用相應的函數,實現相應的功能。(2)菜單函數int menu_select()函數功能:使用者通過輸入數字選項實現對各功能的使用。當運行完任一功能,返回運行界面時,也要用到該函數

5、。算法描述:使用do-while循環進行菜單選擇,在循環內用getchar()讀如所選擇的序號,并且每次運行都運用system("cls")進行清屏。(3)輸入記錄函數int input(student stud,int n)函數功能:輸入學生學號、姓名和成績,輸入后有一個提示語句是否繼續輸入。根據需要選擇Y:繼續輸入記錄;選擇N:停止輸入。算法描述:使用while循環和標準輸入函數進行數據的輸入。(4)顯示所有記錄函數void Display(student stud,int n) 函數功能:將輸入的所有記錄顯示在運行界面,或將按成績排序后的記錄顯示在界面。 算法描述:使

6、用for循環進行循環輸出,循環內運用if語句使十條數據可以實現暫停功能。其中還包含了一些輔助的使界面更簡潔、清晰的語句(5)排序函數void sort_by_score(student stud ,int n) 函數功能:按學生成績由高到底的順序進行排序。算法描述:運用簡單冒泡法排序,排序后通過顯示記錄功能將排序后的記錄顯示在界面。(6)插入記錄函數 int Insert_a_record(student stud int n)函數功能:插入學生信息,包括學生學號、姓名和成績,插入同時按成績進行排序,并顯示“添加成功”。算法描述:使用標準的輸入函數輸入一條學生記錄,帶到返回值中,并調用排序函數

7、將該學生記錄插入到排好序的記錄中。(7)刪除記錄函數int Delete_a_record(student stud,int n)函數功能:按學號將需要刪除的記錄刪除。首先輸入學號,判斷是否存在該學生記錄:如果存在,回車后,顯示“刪除成功”;如果不存在,顯示“無法找到該信息”。算法描述:運用標準輸入函數輸入需要刪除記錄的學生的學號,通過用while循環查找該學生信息,再運用if語句看是否存在該學生,無則返回“無法找到該信息”,有則運用for循環進行刪除操作,即找到記錄后用后面記錄覆蓋前面的記錄。這種方法雖不是直接將記錄刪除,只是將后邊的學生記錄復制到要刪除的學生記錄,但實現的功能是相同的。執行

8、完刪除命令后返回“刪除成功”。(8)查詢函數void Query_a_record(student stud ,int n)函數功能:定義該函數為無返回值的的有參函數,根據輸入的姓名查找并顯示學生的學號、姓名和成績。算法描述:運用標準的輸入函數輸入要查找的學生姓名,然后進行while循環,用if語句進行判斷是否存在該學生信息,無則顯示“無法找到該信息”,有則將該學生信息運用標準輸出函數輸出。(9)統計系統信息函數void Statistic(student stud,int n)函數功能:統計輸入的學生信息,包括記錄總數,成績最低和最高學生的學號、姓名和成績,以及所有學生的平均成績和掛科學生(

9、即成績小于60分)的信息。算法描述:首先統計記錄的條數輸出總共的記錄條數,然后對所有成績求和,存入sum變量中,再求平均值并將平均值輸出。用兩條if語句找到最高分和最低分,并分別將他們的信息輸出。最后運用for循環并定義flag作為標記掛科的變量,即當flag=1時,該學生掛科,輸出他的信息。若沒有學生掛科,則輸出“無學生掛科”。(10)讀取信息函數int AddfromText(stuent stud,int n)函數功能:定義該函數為一個有返回值的有參函數,根據輸入的文件名進行讀取記錄。算法描述:運用標準輸入函數輸入文件名,通過if語句判斷,如果有該文件則打開,并使用fscanf進行操作,

10、無該文件則顯示“打開失敗”。(11)存儲信息函數void WritetoText(student stud,int n)函數功能:該函數定義為無返回值的有參函數,可以把學生記錄保存自己命名的文件中。算法描述:運用while循環進行存儲,并使用fprintf,存儲完成之后顯示“操作成功”,可以使用讀取功能讀取此文件的內容。4、調試與測試:調試方法,測試結果的分析與討論,測試過程中遇到的主要問題及采取的解決措施(1) 設計難點設計難點包括:數組的調用、按成績運用冒泡法進行排序、查找掛科學生信息和文件的使用以及怎樣將記錄存儲到指定文件等。(2) 解決方法通過看書以及請教同學或者百度相關知識將難點一一

11、解決。5、源程序清單執行結果#include<stdio.h> /*引用庫函數*/ #include<stdlib.h> #include<ctype.h> #include<string.h> typedef struct /*定義結構體數組*/ char num10; /*學號*/ char name20; /*姓名*/ int score; /*成績*/ Student;Student stu80; /*結構體數組變量*/ int menu_select() /*菜單函數*/ char c; do system("color 1A

12、"); /*設置界面顏色*/system("cls"); /*運行前清屏*/ printf("tt 歡迎使用學生信息管理系統 n");printf("tt *學生管理信息系統* n"); /*菜單選擇*/ printf("tt * 1. 請輸入學生的信息 n"); printf("tt * 2. 顯示所有學生記錄 n"); printf("tt * 3. 所有學生成績排序 n"); printf("tt * 4. 添加學生管理信息 n"); pr

13、intf("tt * 5. 刪除學生錯誤記錄 n"); printf("tt * 6. 查詢學生成績信息 n"); printf("tt * 7. 統計系統學生信息 n"); printf("tt * 8. 從正文中添加記錄 n"); printf("tt * 9. 將記錄存儲到文件中 n"); printf("tt * 0. 退出學生管理信息系統 n"); printf("tt 請選擇使用選項:(0-9):"); c=getchar(); /*讀入選擇*

14、/ while(c<'0'|c>'9'); return(c-'0'); /*返回選擇*/ int Input(Student stud,int n) /*輸入若干條記錄*/ int i=0; char sign,x10; /*x10為清除多余的數據所用*/ while(sign!='n'&&sign!='N') /*判斷*/ printf("ttt請輸入學生證號:"); /*交互輸入*/ scanf("ttt%s",studn+i.num); p

15、rintf("ttt請輸入學生姓名:"); scanf("ttt%s",studn+); printf("ttt請輸入學生成績:"); scanf("ttt%d",&studn+i.score); gets(x); /*清除多余的輸入*/ printf("ttt是否繼續輸入記錄?(Y/N)"); scanf("ttt%c",&sign); /*輸入判斷*/ i+; return(n+i); void Display(Student stud,int

16、 n) /*顯示所有記錄*/ int i; printf("ttt_n"); /*格式頭*/ printf("ttt學生證號 姓名 成績n"); printf("ttt_n"); for(i=1;i<n+1;i+) /*循環輸入*/ printf("ttt%-16s%-15s%dn",studi-1.num,,studi-1.score); system("pause"); void Sort_by_score(Student stud,int n) /*按成績排序

17、*/ int i,j,*p,*q,s; char t10; for(i=0;i<n-1;i+) /*冒泡法排序*/ for(j=0;j<n-1-i;j+) if(studj.score<studj+1.score) strcpy(t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t); strcpy(t,studj+1.name); strcpy(studj+1.name,); strcpy(,t); p=&studj+1.score; q=&

18、studj.score; s=*p; *p=*q; *q=s; int Insert_a_record(Student stud,int n) /*插入一條記錄*/ char x10; /*清除多余輸入所用*/ printf("ttt學生證號:"); /*交互式輸入*/ scanf("ttt%s",studn.num); printf("ttt學生姓名:"); scanf("ttt%s",); printf("ttt學生成績:"); scanf("ttt%d&quo

19、t;,&studn.score); gets(x); n+;Sort_by_score(stud,n);printf("ttt添加學生信息成功!n"); /*返回成功信息*/ return(n); int Delete_a_record(Student stud,int n) /*按姓名查找,刪除一條記錄*/ char s20; int i=0,j; printf("ttt請輸入該學生姓名:"); /*交互式問尋*/ scanf("%s",s); while(strcmp(,s)!=0&&i

20、<n) i+; /*查找判斷*/ if(i=n) printf("ttt無法找到該信息!n"); /*返回失敗信息*/ return(n); for(j=i;j<n-1;j+) /*刪除操作*/ strcpy(studj.num,studj+1.num); strcpy(,studj+1.name); studj.score=studj+1.score; printf("ttt刪除學生記錄成功!n"); /*返回成功信息*/ return(n-1); void Query_a_record(Student stud,int

21、 n) /*查找并顯示一個記錄*/ char s20; int i=0; printf("ttt請輸入要查詢的學生學號:"); /*交互式輸入*/ scanf("ttt%s",s); while(strcmp(,s)!=0&&i<n) i+; /*查找判斷*/ if(i=n) printf("ttt無法找到該信息!n"); /*輸入失敗信息*/ return; printf("ttt該學生學生姓名:%sn",studi.num); /*輸出該學生信息*/ printf(&q

22、uot;ttt該學生的成績:%dn",studi.score); void Statistic(Student stud,int n) /*新增功能,輸出統計信息*/ int i,j=0,k=0,sum=0,flag,m=0; double aver; /*成績平均值*/ for(i=0;i<n;i+) /*循環輸入判斷*/ sum+=studi.score; if(studj.score>studi.score) j=i; if(studk.score<studi.score) k=i; aver=1.0*sum/n; printf("ttt總計 %d

23、記錄n",n); /*總共記錄數*/ printf("ttt最高學生成績:n"); /*最高分*/ printf("ttt平均成績: %5.2fn",aver); /*平均分*/ printf("ttt學生證號:%s 姓名:%s 成績:%dn",studk.num,,studk.score); printf("ttt最低學生成績:n"); /*最低分*/ printf("ttt學生證號:%s 姓名:%s 成績:%dn",studj.num,,st

24、udj.score); printf("nttt掛科學生信息:n");for(i=0;i<n;i+)flag=0;if(studi.score<60)flag=1;+m;if(flag=1)printf("ttt學生證號:%s 姓名:%s 成績:%dn",studi.num,,studi.score);if(m) printf("ttt掛科人數為:%dn",m);else printf("ttt無學生掛科!n"); int AddfromText(Student stud,int n

25、) /*從文件中讀入數據*/ int i=0,num; FILE *fp; /*定義文件指針*/ char filename20; /*定義文件名*/ printf("ttt請輸入文件名:"); scanf("ttt%s",filename); /*輸入文件名*/ if(fp=fopen(filename,"rb")=NULL) /*打開文件*/ printf("ttt無法打開文件!n"); /*打開失敗信息*/ ; system("pause"); return(n); fscanf(fp,&

26、quot;%d",&num); /*讀入總記錄量*/ while(i<num) /*循環讀入數據*/ fscanf(fp,"%s%s%d",studn+i.num,studn+,&studn+i.score); i+; n+=num; fclose(fp); /*關閉文件*/ printf("ttt成功!n"); printf("ttt"); system("pause"); return(n); void WritetoText(Student stud,int n)

27、/*將所有記錄寫入文件*/ int i=0; FILE *fp; /*定義文件指針*/ char filename20; /*定義文件名*/ printf("ttt從正文中添加記錄:n"); /*輸入文件名*/ printf("ttt請輸入文件名:"); scanf("ttt%s",filename); if(fp=fopen(filename,"w")=NULL) /*打開文件*/ printf("ttt無法打開文件!n"); system("pause"); return

28、; fprintf(fp,"%dn",n); /*循環寫入數據*/ while(i<n) fprintf(fp,"%-16s%-15s%dn",studi.num,,studi.score); i+; fclose(fp); /*關閉文件*/ printf("成功!n"); /*返回成功信息*/ void main() /*主函數*/ int n=0; for(;) switch(menu_select() /*選擇判斷*/ case 1: printf("ttt請輸入學生信息記錄:n"); /*輸入若干條記錄*/ n=Input(stu,n); break; case 2: printf("ttt顯示所有學生信息記錄:n"); /*顯示所有記錄*/ Display(stu,n); break; case 3: printf("ttt學生信息排序n"); Sort_by_score(stu,n); /*按學號排序*

溫馨提示

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

評論

0/150

提交評論