語言學生信息管理系統2_第1頁
語言學生信息管理系統2_第2頁
語言學生信息管理系統2_第3頁
語言學生信息管理系統2_第4頁
語言學生信息管理系統2_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、學生信息管理系統 本題目設計目的是訓練學生的基本編程能力,了解管理信息系統的開發流程,熟悉C語言的文件和單鏈表的各種基本操作。本程序中涉及結構體、單鏈表、文件等方面的知識。通過本程序的訓練,使學生能對C語言的文件操作有一個更深刻的了解,掌握利用單鏈表存儲結構實現對學生成績管理的原理,為進一步開發出高質量的管理信息系統打下堅實的基礎。1、問題定義創建一個學生成績管理系統。假設系統中每個學生記錄只包括學生學號、學生姓名、年齡、性別、出生年月、電話等信息。程序的運行效果如下圖所示,選擇任意菜單后,實現相應功能。在問題定義階段要考慮題目的可行性和需求分析,接下來進入開發階段,完成系統設計和系統實現的任

2、務。2、系統設計21 總體設計采用模塊化的程序設計方法,即將較大的任務按照一定的原則分為一個個較小的任務,然后分別設計各個小任務。需要注意的是劃分出來的模塊應該相對獨立但又相關,且容易理解。可以用模塊化層次結構來分析其任務的劃分,一般從上到下進行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細化描述。本成績管理系統要求采用數組實現,它由如下六大功能模塊組成:l 輸入學生記錄。l 查詢學生記錄。l 刪除學生記錄。l 顯示所有學生記錄。l 統計學生人數。刷新當前信息。22 詳細設計數據結構設計l 學生個人信息結構體結構體struct student將用于存儲學生的基本信息,它將作為單鏈表的數據

3、域。struct record /*結構體*/char codeLEN+1; /* 學號 */char nameLEN+1; /* 姓名 */int age; /* 年齡 */char sex3; /* 性別 */char dateLEN+1; /* 出生年月 */char telLEN+1; /* 電話號碼 */stuN;輸入記錄模塊void readfile()/* 建立信息 */char *p="student.txt"FILE *fp;int i=0;if (fp=fopen("student.txt","r")=NULL)

4、printf("Open file %s error! Strike any key to exit!",p);system("pause");exit(0);while(fscanf(fp,"%s %s %d %s %s %s",stui.code,,&stui.age,stui.sex,stui.date,stui.tel)=8)i+;i=i;fclose(fp);n=i;printf("錄入完畢!n");查詢記錄模塊void seek() /*查找*/int i,item,flag;

5、char s121; /* 以姓名和學號最長長度+1為準 */printf("-n");printf("-1.按學號查詢-n");printf("-2.退出本菜單-n");printf("-n");while(1)printf("請選擇子菜單編號:");scanf("%d",&item);flag=0;switch(item)case 1:printf("請輸入要查詢的學生的學號:n");scanf("%s",s1);for(i

6、=0;i<n;i+)if(strcmp(stui.code,s1)=0)flag=1;printf("學生學號 學生姓名 年齡 性別 出生年月 電話 n");printf("-n");printf("%6s %7s %6d %5s %9s %10sn",stui.code,,stui.age,stui.sex,stui.date,stui.tel);if(flag=0)printf("該學號不存在!n"); break;case 2:return;default:printf("請

7、在1-2之間選擇n");刪除記錄模塊void del()int i,j,flag=0;char s1LEN+1;printf("請輸入要刪除學生的學號:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) flag=1;for(j=i;j<n-1;j+)stuj=stuj+1;if(flag=0)printf("該學號不存在!n");if(flag=1)printf("刪除成功,顯示結果請選擇菜單6n");n-;顯示所有學生記

8、錄模塊void display() int i;printf("所有學生的信息為:n");printf("學生學號 學生姓名 年齡 性別 出生年月 電話 n");printf("-n");for(i=0;i<n;i+) printf("%6s %7s %5d %5s %8s %10sn",stui.code,,stui.age,stui.sex,stui.date,stui.tel); 3、系統實現3.1.1 程序預處理包括加載頭文件,定義結構體、常量和變量,并對它們進行初始化工作#incl

9、ude<stdio.h> /*I/O函數*/#include<stdlib.h> /*其它說明*/#include<malloc.h>#include<string.h> /*字符串函數*/#define BUFLEN 100 /* 緩沖區最大字符數 */#define LEN 15 /* 學號和姓名最大字符數,實際請更改 */#define N 100 /* 最大學生人數,實際請更改*/3.1.2 主函數main()main()函數主要實現了對整個程序的運行控制,以及相關功能模塊的調用。FILE *fp;void seek();/* 函數聲明

10、*/void insert();void del();void display();void save();void getnum();void readfile();void menu(); int main() while(k)menu();system("pause");return 0; switch(num) case 1:insert();break;case 2:del();break;case 3:seek();break;case 4:display();break;case 5:getnum();break;case 6:readfile();break

11、;case 7:k=0;break;default:printf("請在1-7之間選擇n");3.1.3 主菜單界面用戶進入成績管理系統時,需要顯示主菜單,提示用戶進行選擇,完成相應任務。此代碼被main()函數調用。void menu()/* 界面 */int num;printf(" *系統功能菜單* n");printf(" *閆晨曦 0951100206* n");/printf("友情提醒:查詢前請先刷新系統! n");printf(" * * n");printf(" *

12、1.增加學生信息 *n");printf(" * 2.刪除學生信息 *n");printf(" * 3.查詢學生信息 *n");printf(" * 4.顯示當前信息 *n");printf(" * 5.統計學生人數 *n"); printf(" * 6.刷新當前信息 *n"); printf(" * 7.退出系統 *n"); printf(" * * n");printf("請選擇菜單編號:");scanf("%d

13、",&num); 插入學生記錄在插入學生記錄操作中,系統會先按學號查找到要插入的節點的位置,然后在該學號之后插入一個新節點。void insert() /*插入函數*/ int i=n,j,flag;printf("請輸入待增加的學生數:n");scanf("%d",&m);do flag=1;while(flag)flag=0;printf("請輸入第 %d 個學生的學號:n",i+1);scanf("%s",stui.code);for(j=0;j<i;j+)if(strcmp(

14、stui.code,stuj.code)=0)printf("已有該學號,請檢查后重新錄入!n");flag=1;break; /*如有重復立即退出該層循環,提高判斷速度*/printf("請輸入第 %d 個學生的姓名:n",i+1);scanf("%s",);printf("請輸入第 %d 個學生的年齡:n",i+1);scanf("%d",&stui.age);printf("請輸入第 %d 個學生的性別(格式:男1女0):n",i+1);sca

15、nf("%s",stui.sex);printf("請輸入第 %d 個學生的出生年月:(格式:年.月)n",i+1);scanf("%s",stui.date);printf("請輸入第 %d 個學生的電話:n",i+1);scanf("%s",stui.tel);if(flag=0) i=i;i+;while(i<n+m);n+=m;printf("錄入完畢!nn");sort(); 統計學生記錄在統計學生記錄操作中,系統會統計學生人數總數,并打印輸出統計結果。voi

16、d getnum() int num_b=0,num_g=0; int i; fp=fopen("student.txt","a+"); for(i=0;i<num;i+) if(strcmp(stui.sex,"1") num_g+; else num_b+; printf("【統計結果】n"); fprintf(fp,"【統計結果】n"); printf("學生總人數為:10人n",num); fprintf(fp,"學生總人數為:10人n",n

17、um); printf("其中男生5人,女生5人n",num_b,num_g); fprintf(fp,"其中男生%d人,女生%d人n",num_b,num_g); fclose(fp); 排序學生記錄在排序學生記錄操作中,系統會利用插入排序法實現單鏈表的按總分字段的降序排序,并打印出排序前和排序后的結果。void sort()/*按學號排序*/int i,j,*p,*q,s; char temp10;for(i=0;i<n-1;i+)for(j=n-1;j>i;j-)if(strcmp(stuj-1.code,stuj.code)>0

18、)strcpy(temp,stuj-1.code);strcpy(stuj-1.code,stuj.code);strcpy(stuj.code,temp);strcpy(temp,);strcpy(,);strcpy(,temp);strcpy(temp,stuj-1.sex);strcpy(stuj-1.sex,stuj.sex);strcpy(stuj.sex,temp);strcpy(temp,stuj-1.date);strcpy(stuj-1.date,stuj.date);strcpy(stuj.da

19、te,temp);strcpy(temp,stuj-1.tel);strcpy(stuj-1.tel,stuj.tel);strcpy(stuj.tel,temp); p=&stuj-1.age; q=&stuj.age; s=*q; *q=*p; *p=s;32 測試與調試3.2.1 概述一般情況下,為解決一個問題所編寫的程序代碼較長,可能包括幾百條甚至成千上萬條語句。在檢查并排除所有語法錯誤后,還會有不易發現的邏輯錯誤,因此要對程序進行認真仔細的測試與調試。測試是通過運行程序發現錯誤的過程,常見的錯誤有數據溢出、數組越界、進入死循環、語句順序顛倒、多加“;”或少加“”等等。調試則是確定測試中找到的錯誤性質并改正錯誤的過程。測試與調試通常交替進行,即測試調試再測試再調試。能檢查出尚未發現的、各種不同類型錯誤的測試才是成功的測試。測試程序需要測試用例,測試用例可用如下公式表示:測試用例測試數據預期結果。好的測試用例應該是用盡可能少的測試數據發現盡可能多的錯誤,即發現錯誤的概率要大。要選擇合適的測試數據,使系統在運行時盡量能執行到每條語句,以測試各指令是否正確。還應分別測試輸入合法數據與非法數據時,程序的運行情況,。對于合法數據,還要考慮數據的一般性與特殊性,如求最大值的問題,應測試最大值在最前面、最后面、中間某一位置的情況。測試程序時,用監

溫馨提示

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

評論

0/150

提交評論