C語言學(xué)生信息管理系統(tǒng)2_第1頁
C語言學(xué)生信息管理系統(tǒng)2_第2頁
C語言學(xué)生信息管理系統(tǒng)2_第3頁
C語言學(xué)生信息管理系統(tǒng)2_第4頁
C語言學(xué)生信息管理系統(tǒng)2_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

2、務(wù)。2、系統(tǒng)設(shè)計(jì)21 總體設(shè)計(jì)采用模塊化的程序設(shè)計(jì)方法,即將較大的任務(wù)按照一定的原則分為一個(gè)個(gè)較小的任務(wù),然后分別設(shè)計(jì)各個(gè)小任務(wù)。需要注意的是劃分出來的模塊應(yīng)該相對獨(dú)立但又相關(guān),且容易理解??梢杂媚K化層次結(jié)構(gòu)來分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述。本成績管理系統(tǒng)要求采用數(shù)組實(shí)現(xiàn),它由如下六大功能模塊組成:l 輸入學(xué)生記錄。l 查詢學(xué)生記錄。l 刪除學(xué)生記錄。l 顯示所有學(xué)生記錄。l 統(tǒng)計(jì)學(xué)生人數(shù)。刷新當(dāng)前信息。22 詳細(xì)設(shè)計(jì)2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)l 學(xué)生個(gè)人信息結(jié)構(gòu)體結(jié)構(gòu)體struct student將用于存儲學(xué)生的基本信息,它將作為單

3、鏈表的數(shù)據(jù)域。struct record /*結(jié)構(gòu)體*/char codeLEN+1; /* 學(xué)號 */char nameLEN+1; /* 姓名 */int age; /* 年齡 */char sex3; /* 性別 */char dateLEN+1; /* 出生年月 */char telLEN+1; /* 電話號碼 */stuN;2.2.2輸入記錄模塊void readfile()/* 建立信息 */char *p="student.txt"FILE *fp;int i=0;if (fp=fopen("student.txt","r&quo

4、t;)=NULL) 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");2.2.3查詢記錄模塊void seek() /*查找*/i

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

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

7、:printf("請?jiān)?-2之間選擇n");2.2.4刪除記錄模塊void del()int i,j,flag=0;char s1LEN+1;printf("請輸入要?jiǎng)h除學(xué)生的學(xué)號: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("該學(xué)號不存在!n");if(flag=1)printf("刪除成功,顯示結(jié)果請選擇菜單

8、6n");n-;2.2.5顯示所有學(xué)生記錄模塊void display() int i;printf("所有學(xué)生的信息為:n");printf("學(xué)生學(xué)號 學(xué)生姓名 年齡 性別 出生年月 電話 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、系統(tǒng)實(shí)現(xiàn)3.1.1 程序預(yù)處理包括加載頭文件,定義結(jié)

9、構(gòu)體、常量和變量,并對它們進(jìn)行初始化工作#include<stdio.h> /*I/O函數(shù)*/#include<stdlib.h> /*其它說明*/#include<malloc.h>#include<string.h> /*字符串函數(shù)*/#define BUFLEN 100 /* 緩沖區(qū)最大字符數(shù) */#define LEN 15 /* 學(xué)號和姓名最大字符數(shù),實(shí)際請更改 */#define N 100 /* 最大學(xué)生人數(shù),實(shí)際請更改*/3.1.2 主函數(shù)main()main()函數(shù)主要實(shí)現(xiàn)了對整個(gè)程序的運(yùn)行控制,以及相關(guān)功能模塊的調(diào)用。FILE

10、 *fp;void seek();/* 函數(shù)聲明 */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();brea

11、k;case 6:readfile();break;case 7:k=0;break;default:printf("請?jiān)?-7之間選擇n");3.1.3 主菜單界面用戶進(jìn)入成績管理系統(tǒng)時(shí),需要顯示主菜單,提示用戶進(jìn)行選擇,完成相應(yīng)任務(wù)。此代碼被main()函數(shù)調(diào)用。void menu()/* 界面 */int num;printf(" *系統(tǒng)功能菜單* n");printf(" *閆晨曦 0951100206* n");/printf("友情提醒:查詢前請先刷新系統(tǒng)! n");printf(" * *

12、n");printf(" * 1.增加學(xué)生信息 *n");printf(" * 2.刪除學(xué)生信息 *n");printf(" * 3.查詢學(xué)生信息 *n");printf(" * 4.顯示當(dāng)前信息 *n");printf(" * 5.統(tǒng)計(jì)學(xué)生人數(shù) *n"); printf(" * 6.刷新當(dāng)前信息 *n"); printf(" * 7.退出系統(tǒng) *n"); printf(" * * n");printf("請選擇菜單

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

14、);for(j=0;j<i;j+)if(strcmp(stui.code,stuj.code)=0)printf("已有該學(xué)號,請檢查后重新錄入!n");flag=1;break; /*如有重復(fù)立即退出該層循環(huán),提高判斷速度*/printf("請輸入第 %d 個(gè)學(xué)生的姓名:n",i+1);scanf("%s",);printf("請輸入第 %d 個(gè)學(xué)生的年齡:n",i+1);scanf("%d",&stui.age);printf("請輸入第 %d 個(gè)學(xué)

15、生的性別(格式:男1女0):n",i+1);scanf("%s",stui.sex);printf("請輸入第 %d 個(gè)學(xué)生的出生年月:(格式:年.月)n",i+1);scanf("%s",stui.date);printf("請輸入第 %d 個(gè)學(xué)生的電話:n",i+1);scanf("%s",stui.tel);if(flag=0) i=i;i+;while(i<n+m);n+=m;printf("錄入完畢!nn");sort();3.1.5 統(tǒng)計(jì)學(xué)生記錄在

16、統(tǒng)計(jì)學(xué)生記錄操作中,系統(tǒng)會統(tǒng)計(jì)學(xué)生人數(shù)總數(shù),并打印輸出統(tǒng)計(jì)結(jié)果。void 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("【統(tǒng)計(jì)結(jié)果】n"); fprintf(fp,"【統(tǒng)計(jì)結(jié)果】n"); printf("學(xué)生總?cè)藬?shù)為:10人n",num); f

17、printf(fp,"學(xué)生總?cè)藬?shù)為:10人n",num); printf("其中男生5人,女生5人n",num_b,num_g); fprintf(fp,"其中男生%d人,女生%d人n",num_b,num_g); fclose(fp);3.1.6 排序?qū)W生記錄在排序?qū)W生記錄操作中,系統(tǒng)會利用插入排序法實(shí)現(xiàn)單鏈表的按總分字段的降序排序,并打印出排序前和排序后的結(jié)果。void sort()/*按學(xué)號排序*/int i,j,*p,*q,s; char temp10;for(i=0;i<n-1;i+)for(j=n-1;j>i;

18、j-)if(strcmp(stuj-1.code,stuj.code)>0)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);strc

19、py(stuj-1.date,stuj.date);strcpy(stuj.date,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 測試與調(diào)試3.2.1 概述一般情況下,為解決一個(gè)問題所編寫的程序代碼較長,可能包括幾百條甚至成千上萬條語句。在檢查并排除所有語法錯(cuò)誤后,還會有不易發(fā)現(xiàn)的邏輯錯(cuò)誤,因此要對程序進(jìn)行認(rèn)真仔細(xì)的測試與調(diào)試。測試是通過運(yùn)行程序發(fā)現(xiàn)錯(cuò)誤的過程,常見

20、的錯(cuò)誤有數(shù)據(jù)溢出、數(shù)組越界、進(jìn)入死循環(huán)、語句順序顛倒、多加“;”或少加“”等等。調(diào)試則是確定測試中找到的錯(cuò)誤性質(zhì)并改正錯(cuò)誤的過程。測試與調(diào)試通常交替進(jìn)行,即測試調(diào)試再測試再調(diào)試。能檢查出尚未發(fā)現(xiàn)的、各種不同類型錯(cuò)誤的測試才是成功的測試。測試程序需要測試用例,測試用例可用如下公式表示:測試用例測試數(shù)據(jù)預(yù)期結(jié)果。好的測試用例應(yīng)該是用盡可能少的測試數(shù)據(jù)發(fā)現(xiàn)盡可能多的錯(cuò)誤,即發(fā)現(xiàn)錯(cuò)誤的概率要大。要選擇合適的測試數(shù)據(jù),使系統(tǒng)在運(yùn)行時(shí)盡量能執(zhí)行到每條語句,以測試各指令是否正確。還應(yīng)分別測試輸入合法數(shù)據(jù)與非法數(shù)據(jù)時(shí),程序的運(yùn)行情況,。對于合法數(shù)據(jù),還要考慮數(shù)據(jù)的一般性與特殊性,如求最大值的問題,應(yīng)測試最大值在最前面、最后面、中間某一位置的情況。測試程序

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論