版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、題目:學(xué)生信息管理系統(tǒng)一、需求分析任務(wù)要求:自學(xué)C語(yǔ)言中有關(guān)鏈表及外部文件的內(nèi)容,設(shè)計(jì)學(xué)生信息管理系統(tǒng)。具體要求如下: 建立學(xué)生信息,信息至少包括名字、性別、年齡、學(xué)號(hào)、系別、家庭信息等內(nèi)容; 能夠提供添加、刪除和修改學(xué)生信息等功能; 能將通訊錄保存在文件中; 能夠按指定方式輸出學(xué)生信息。系統(tǒng)功能需求分析: 1、為存儲(chǔ)學(xué)生信息,需定義一個(gè)結(jié)構(gòu)體類型,成員名字、性別、年齡、學(xué)號(hào)、系別、家庭信息等,并建立鏈表,定義該結(jié)構(gòu)體類型的指針,用于指向各結(jié)點(diǎn); 2、分別建立具有添加、刪除、修改、查詢等功能的子函數(shù),完成相應(yīng)功能,對(duì)程序?qū)崿F(xiàn)模塊化。這其中要用到對(duì)鏈表的刪除、插入等知識(shí)。刪除時(shí)用一結(jié)構(gòu)體指針指向
2、鏈表的第一個(gè)結(jié)點(diǎn),檢查該節(jié)點(diǎn)的值是否等于輸入的要?jiǎng)h除的學(xué)號(hào),若相等就刪除,不相等則后移指針,直至表尾。插入時(shí)也要先找到相應(yīng)結(jié)點(diǎn),再添加。3、為實(shí)現(xiàn)存儲(chǔ)功能,需用到文件的相關(guān)函數(shù),打開(kāi)文件,將添加、修改或刪除的信息存入磁盤(pán)中。4、為以表格的形式輸出文件,宏定義格式化輸出語(yǔ)句,指定輸出學(xué)生信息。二、概要設(shè)計(jì)系統(tǒng)總體設(shè)計(jì)框架: 對(duì)程序進(jìn)行模塊化,建立添加、修改、刪除、查找和顯示功能的子函數(shù),各子函數(shù)中運(yùn)用鏈表存儲(chǔ)數(shù)據(jù)。從主函數(shù)開(kāi)始執(zhí)行,調(diào)用各個(gè)子函數(shù),并運(yùn)用文件相關(guān)知識(shí)將信息存入磁盤(pán)中。系統(tǒng)功能模塊圖: 主菜單學(xué)生形象查詢學(xué)生信息添加學(xué)生信息刪除學(xué)生信息添加是否保存 關(guān)閉文件三、詳細(xì)設(shè)計(jì)主要功能模塊
3、的算法設(shè)計(jì)思路如下:1、查詢通訊錄信息(void chakan())(1)為開(kāi)辟一個(gè)新單元(2)輸入查詢關(guān)鍵字:(3)讀取保存的文件數(shù)據(jù)輸入ASCLL字符:(4)在鏈表中尋找相應(yīng)結(jié)點(diǎn);(5)調(diào)用輸出函數(shù),輸出結(jié)點(diǎn)信息。2、添加信息函數(shù)(void add())(1)定義指向結(jié)構(gòu)體變量的指針;(2)移動(dòng)指針,找到插入結(jié)點(diǎn);(3)在要插入的結(jié)點(diǎn)輸入信息;(4)調(diào)用保存函數(shù),打開(kāi)文件,保存輸入信息。3、刪除信息函數(shù)(void del())(1)定義指向結(jié)構(gòu)體變量的指針;(2)用指針檢驗(yàn)鏈表中是否有記錄,若沒(méi)記錄,返回主函數(shù);(3)根據(jù)要修改的編號(hào)查找要?jiǎng)h除的結(jié)點(diǎn);(4)修改鏈表,刪除對(duì)應(yīng)結(jié)點(diǎn)。4、修改
4、信息函數(shù)(void xiugai())(1)定義指向結(jié)構(gòu)體變量的指針;(2)讀取保存的文件數(shù)據(jù)輸入ASCLL字符:(3)用指針檢驗(yàn)鏈表中是否有記錄,若沒(méi)記錄,返回主函數(shù);(4)根據(jù)要修改的編號(hào)查找對(duì)應(yīng)結(jié)點(diǎn);(5)修改信息;(6)打開(kāi)文件,保存修改記錄。 5、保存信息函數(shù)(baocun())(1)定義指向結(jié)構(gòu)體變量的指針;(2)用文件指針指向要讀寫(xiě)的磁盤(pán)文件名,若沒(méi)有則新建此文件名:(3)用指針檢驗(yàn)鏈表中是否有記錄,若沒(méi)記錄,返回主函數(shù):(4)打開(kāi)文件,保存記錄:6、屏幕操作函數(shù)(void stubent187())(1)以一定格式輸出所想要的圖形:四、主要源程序代碼定義變量:(對(duì)整個(gè)程序定義全
5、局變量)#include stdio.h#include conio.h #define STUDENT ID /*所有STUDENT都用ID來(lái)代替*/ typedef struct node /*定義結(jié)構(gòu)體*/ char ming50; /*名字*/ char xing50; /*性別*/ char nian50; /*年齡*/ int xuehao; /*學(xué)號(hào)*/ char xibie50; /*專業(yè)*/ char sushe50; /*宿舍號(hào)*/ char jia50; /*家庭地址*/ struct node *next; ID; /*學(xué)生信息(變量名)*/ ID *head=NULL
6、; /*定義一個(gè)頭指針*/FILE *zhi; /*定義一個(gè)文件指針*/主菜單界面:(進(jìn)入屏幕界面的形式)void stubent187() /*屏幕格式函數(shù)*/ printf(*n); printf(* 學(xué)生信息管理系統(tǒng) *n); printf(* *n); printf(* 請(qǐng)選擇:1:查看; 2:添加; 3:刪除; *n); printf(* 4:修改; 0:退出系統(tǒng) *n); printf(* *n); printf(*n); printf(輸入 04 數(shù)字ming,&t-xing,&t-nian,&t-xuehao,&t-xibie,&t-sushe,&t-jia); /*讀取保存的
7、文件數(shù)據(jù)輸入ASCLL字符:*/ printf(%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia); /*以這形式輸出各個(gè)學(xué)生信息*/ t-next=(ID *)malloc(sizeof(ID);t=t-next; ; 添加學(xué)生信息記錄:()void add() char i; /*添加*/ ID *t1,*t2; t1=t2=NULL; loop: t1=(ID *)malloc(sizeof(ID); /*為t1開(kāi)辟一個(gè)新單元*/ printf(請(qǐng)輸入姓名:);scanf(%
8、s,&t1-ming); /* 姓名 */ printf(請(qǐng)輸入性別:);scanf(%s,&t1-xing); /* 性別 */ printf(請(qǐng)輸入年齡:);scanf(%s,&(t1-nian); /* 年齡 */ printf(請(qǐng)輸入學(xué)號(hào):);scanf(%d,&(t1-xuehao); /* 學(xué)號(hào) */ printf(請(qǐng)輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(請(qǐng)輸入宿舍號(hào):);scanf(%s,&(t1-sushe); /*宿舍號(hào)*/ printf(請(qǐng)輸入家庭地址:);scanf(%s,&(t1-jia); /*家庭地址*/ t1-nex
9、t=NULL; if (head=NULL) /*如果頭結(jié)點(diǎn)為空*/ head=t1; /*t1指向頭結(jié)點(diǎn)*/ t2=t1; else t2=head; while (t2-next!=NULL) t2=t2-next; /*沒(méi)有成立則指向下個(gè)結(jié)點(diǎn)*/ t2-next=t1; getchar(); printf(是否繼續(xù)添加(Y/N):n); scanf(%s,&i); /*輸入Y/N*/ if(i=y|i=Y) clrscr(); goto loop; /* 清屏 在 循環(huán)*/ else printf(是否保存此次添加(Y/N)n);scanf(%s,&i); if(i=y|i=Y) /*是
10、否要保存*/ baocun(); /*調(diào)用保存*/ clrscr(); /*清屏*/ stubent187();/*調(diào)用屏幕函數(shù)*/ printf(保存成功); else if(i=n|i=N) clrscr(); /*清屏*/ stubent187(); /*調(diào)用屏幕函數(shù)*/ return ;刪除學(xué)生信息操作:(對(duì)以存的學(xué)生信息進(jìn)行刪除)void del() /*刪除*/ ID *A,*B; /*定義指針*/ char t,i;int xuehao; /*定義整型變量與字符型變量*/ A=B=NULL; if(zhi=fopen(yihu1.txt,a+)=NULL) printf(沒(méi)有此信
11、息文件n); else loop: printf(請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):);scanf(%d,&xuehao); while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&A-ming,&A-xing,&A-nian,&A-xuehao,&A-xibie,&A-sushe,&A-jia); /*讀取保存的文件數(shù)據(jù)輸入ASCLL字符:*/ if(A!=NULL & A-xuehao!=xuehao) A=A-next; else break; if (A-xuehao=xuehao) head=A-next; free(*A); p
12、rintf(成功!n); printf(是否繼續(xù)刪除(Y/N);scanf(%s,&i); if(i=y|i=Y) clrscr(); goto loop; if(i=n|i=N) printf(是否保存此次刪除(Y/N)n);scanf(%s,&i); if(i=y|i=Y) baocun(); else clrscr(); stubent187(); else printf(無(wú)法找到此編號(hào)n); 修改學(xué)生信息操作:(對(duì)保存的學(xué)生信息進(jìn)行修改) void xiugai() /*修改*/ ID *t1,*t2; /*定義指針*/ int i;char xuehao; /*定義整型變量與字符型變
13、量*/ t1=head; if(zhi=fopen(yihu1.txt,a+)=NULL) printf(沒(méi)有此信息文件n);loop: printf(請(qǐng)輸入要修改的學(xué)號(hào):);scanf(%s,&xuehao); /* 輸入編號(hào)*/ while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&t1-ming,&t1-xing,&t1-nian,&t1-xuehao,&t1-xibie,&t1-sushe,&t1-jia); *讀取保存的文件數(shù)據(jù)輸入ASCLL字符:*/ if(t1!=NULL & t1-xuehao!=xuehao)
14、t1=t1-next; else break; if (t1-xuehao=xuehao) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,t1-ming,t1-xing,t1-nian,t1-xuehao,t1-xibie,t1-sushe,t1-jia); printf(輸入名字:);scanf(%s,&t1-ming); /*名字*/ printf(輸入性別:);scanf(%s,&(t1-xing); /*性別*/ printf(輸入年齡:);scanf(%s,&(t1-nian); /*年齡*/ printf(輸入學(xué)號(hào):);scanf(%s,&t1
15、-xuehao); /*學(xué)號(hào)*/ printf(輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(輸入專業(yè):);scanf(%s,&(t1-sushe); /* 宿舍號(hào) */ printf(輸入家庭地址:);scanf(%s,&(t1-jia); /* 家庭地址*/ printf(成功!n); printf(是否繼續(xù)修改(Y/N);scanf(%d,&i); if(i=y|i=Y) clrscr(); goto loop; if(i=n|i=N) printf(是否保存此次修改(Y/N)n);scanf(%c,&i); if(i=y|i=Y) baocun(
16、); else clrscr(); /*清屏*/ stubent187(); /*調(diào)用屏幕函數(shù)*/ else printf(沒(méi)有此編號(hào)n); return; 保存添加,刪除,修改學(xué)生的信息:(操作過(guò)后是否保存)baocun() /*保存*/ ID *t=head; /*定義指針*/ zhi=fopen(yihu1.txt,a+); /*(讀寫(xiě) yihu.txt文本) */ while (t!=NULL) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia);
17、/*以zhi為文件指針保存*/ t=t-next; fclose(zhi); /*關(guān)閉此文件*/ printf(成功!n); return ; 主菜單操作:(選擇所需要的操作)main() /*主函數(shù)*/ int i; /*定義整形變量i*/ stubent187(); /*調(diào)用屏幕函數(shù)*/ while(1) scanf(%d,&i); /*輸入要執(zhí)行的操作*/ switch(i) case 1:chakan();break; /*調(diào)用查看函數(shù)*/ case 2:add();break; /*調(diào)用添加函數(shù)*/ case 3:del();break; /*調(diào)用刪除函數(shù)*/ case 4:xiug
18、ai();break; /*調(diào)用修改函數(shù)*/ case 0:exit(0); /*結(jié)束*/ default:printf(輸入錯(cuò)誤,請(qǐng)?jiān)诖溯斎雗);continue; /*輸入不是04的,則返回*/ 源函數(shù)代碼:void chakan() /* 查看*/ ID *t; t=head; t=(ID *)malloc(sizeof(ID); /*為t開(kāi)辟一個(gè)新單元*/ if(zhi=fopen(yihu1.txt,rb)=NULL) printf(沒(méi)有此文件n); else printf(%10s%10s%10s%10s%10s%10s%10sn,ming,xing,nian,xuehao,eng
19、,sushe,jia); /*輸出一個(gè)屏幕格式*/ while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&t-ming,&t-xing,&t-nian,&t-xuehao,&t-xibie,&t-sushe,&t-jia); /*讀取保存的文件數(shù)據(jù)輸入ASCLL字符:*/ printf(%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia); /*以這形式輸出各個(gè)學(xué)生信息*/ t-next=(ID *)malloc(si
20、zeof(ID);t=t-next; ; void add() char i; /*添加*/ ID *t1,*t2; t1=t2=NULL; loop: t1=(ID *)malloc(sizeof(ID); /*為t1開(kāi)辟一個(gè)新單元*/ printf(請(qǐng)輸入姓名:);scanf(%s,&t1-ming); /* 姓名 */ printf(請(qǐng)輸入性別:);scanf(%s,&t1-xing); /* 性別 */ printf(請(qǐng)輸入年齡:);scanf(%s,&(t1-nian); /* 年齡 */ printf(請(qǐng)輸入學(xué)號(hào):);scanf(%d,&(t1-xuehao); /* 學(xué)號(hào) */
21、printf(請(qǐng)輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(請(qǐng)輸入宿舍號(hào):);scanf(%s,&(t1-sushe); /*宿舍號(hào)*/ printf(請(qǐng)輸入家庭地址:);scanf(%s,&(t1-jia); /*家庭地址*/ t1-next=NULL; if (head=NULL) /*如果頭結(jié)點(diǎn)為空*/ head=t1; /*t1指向頭結(jié)點(diǎn)*/ t2=t1; else t2=head; while (t2-next!=NULL) t2=t2-next; /*沒(méi)有成立則指向下個(gè)結(jié)點(diǎn)*/ t2-next=t1; getchar(); printf(是
22、否繼續(xù)添加(Y/N):n); scanf(%s,&i); /*輸入Y/N*/ if(i=y|i=Y) clrscr(); goto loop; /* 清屏 在 循環(huán)*/ else printf(是否保存此次添加(Y/N)n);scanf(%s,&i); if(i=y|i=Y) /*是否要保存*/ baocun(); /*調(diào)用保存*/ clrscr(); /*清屏*/ stubent187();/*調(diào)用屏幕函數(shù)*/ printf(保存成功); else if(i=n|i=N) clrscr(); /*清屏*/ stubent187(); /*調(diào)用屏幕函數(shù)*/ return ;void del()
23、 /*刪除*/ ID *A,*B; /*定義指針*/ char t,i;int xuehao; /*定義整型變量與字符型變量*/ A=B=NULL; if(zhi=fopen(yihu1.txt,a+)=NULL) printf(沒(méi)有此信息文件n); else loop: printf(請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):);scanf(%d,&xuehao); while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&A-ming,&A-xing,&A-nian,&A-xuehao,&A-xibie,&A-sushe,&A-jia); /*讀
24、取保存的文件數(shù)據(jù)輸入ASCLL字符:*/ if(A!=NULL & A-xuehao!=xuehao) A=A-next; else break; if (A-xuehao=xuehao) head=A-next; free(*A); printf(成功!n); printf(是否繼續(xù)刪除(Y/N);scanf(%s,&i); if(i=y|i=Y) clrscr(); goto loop; if(i=n|i=N) printf(是否保存此次刪除(Y/N)n);scanf(%s,&i); if(i=y|i=Y) baocun(); else clrscr(); stubent187(); el
25、se printf(無(wú)法找到此編號(hào)n); void xiugai() /*修改*/ ID *t1,*t2; /*定義指針*/ int i;char xuehao; /*定義整型變量與字符型變量*/ t1=head; if(zhi=fopen(yihu1.txt,a+)=NULL) printf(沒(méi)有此信息文件n);loop: printf(請(qǐng)輸入要修改的學(xué)號(hào):);scanf(%s,&xuehao); /* 輸入編號(hào)*/ while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&t1-ming,&t1-xing,&t1-nian,&t
26、1-xuehao,&t1-xibie,&t1-sushe,&t1-jia); *讀取保存的文件數(shù)據(jù)輸入ASCLL字符:*/ if(t1!=NULL & t1-xuehao!=xuehao) t1=t1-next; else break; if (t1-xuehao=xuehao) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,t1-ming,t1-xing,t1-nian,t1-xuehao,t1-xibie,t1-sushe,t1-jia); printf(輸入名字:);scanf(%s,&t1-ming); /*名字*/ printf(輸入性別:);s
27、canf(%s,&(t1-xing); /*性別*/ printf(輸入年齡:);scanf(%s,&(t1-nian); /*年齡*/ printf(輸入學(xué)號(hào):);scanf(%s,&t1-xuehao); /*學(xué)號(hào)*/ printf(輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(輸入專業(yè):);scanf(%s,&(t1-sushe); /* 宿舍號(hào) */ printf(輸入家庭地址:);scanf(%s,&(t1-jia); /* 家庭地址*/ printf(成功!n); printf(是否繼續(xù)修改(Y/N);scanf(%d,&i); if(i=y
28、|i=Y) clrscr(); goto loop; if(i=n|i=N) printf(是否保存此次修改(Y/N)n);scanf(%c,&i); if(i=y|i=Y) baocun(); else clrscr(); /*清屏*/ stubent187(); /*調(diào)用屏幕函數(shù)*/ else printf(沒(méi)有此編號(hào)n); return; baocun() /*保存*/ ID *t=head; /*定義指針*/ zhi=fopen(yihu1.txt,a+); /*(讀寫(xiě) yihu.txt文本) */ while (t!=NULL) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia); /*以zhi為文件
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年張家港市第一人民醫(yī)院自主招聘編外合同制衛(wèi)技人員備考題庫(kù)完整答案詳解
- 2026年慶陽(yáng)職業(yè)技術(shù)學(xué)院公開(kāi)引進(jìn)高層次急需緊缺人才12人備考題庫(kù)及一套完整答案詳解
- 2026年華南師范大學(xué)環(huán)境學(xué)院非事業(yè)編制人員招聘?jìng)淇碱}庫(kù)參考答案詳解
- 2026年廈門(mén)市前埔南區(qū)小學(xué)非在編人員招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 2026年分子細(xì)胞卓越中心孟飛龍組招聘實(shí)驗(yàn)室技術(shù)員備考題庫(kù)附答案詳解
- 2026年中北大學(xué)招聘?jìng)淇碱}庫(kù)及1套參考答案詳解
- 2026年中船黃岡貴金屬有限公司招聘?jìng)淇碱}庫(kù)及答案詳解參考
- 2026年中國(guó)安能集團(tuán)第二工程局有限公司招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 2026年平潭綜合實(shí)驗(yàn)區(qū)公開(kāi)招聘高端人才備考題庫(kù)及完整答案詳解一套
- 2026年中外運(yùn)物流投資控股有限公司招聘?jìng)淇碱}庫(kù)及一套完整答案詳解
- 2025年國(guó)資委主任年終述職報(bào)告
- 大學(xué)教學(xué)督導(dǎo)與課堂質(zhì)量監(jiān)控工作心得體會(huì)(3篇)
- 2025年下半年國(guó)家教師資格幼兒園《綜合素質(zhì)》考試真題及參考答案
- 項(xiàng)目專家評(píng)審意見(jiàn)書(shū)標(biāo)準(zhǔn)模板
- 評(píng)審委托協(xié)議書(shū)
- 黑龍江中醫(yī)藥大學(xué)《無(wú)機(jī)化學(xué)》2025 學(xué)年第二學(xué)期期末試卷
- 2025年高中計(jì)算機(jī)操作試題題庫(kù)及答案
- 研學(xué)基地課程書(shū)籍或課件
- 杭州市西湖區(qū)人民政府西溪街道辦事處公開(kāi)招聘編外合同制工作人員5人考試筆試備考試題及答案解析
- 日本所有番號(hào)分類
- 2024年江蘇省普通高中學(xué)業(yè)水平測(cè)試小高考生物、地理、歷史、政治試卷及答案(綜合版)
評(píng)論
0/150
提交評(píng)論