版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、題目:學生信息管理系統(tǒng)一、需求分析任務要求:自學C語言中有關(guān)鏈表及外部文件的內(nèi)容,設計學生信息管理系統(tǒng)。具體要求如下: 建立學生信息,信息至少包括名字、性別、年齡、學號、系別、家庭信息等內(nèi)容; 能夠提供添加、刪除和修改學生信息等功能; 能將通訊錄保存在文件中; 能夠按指定方式輸出學生信息。系統(tǒng)功能需求分析: 1、為存儲學生信息,需定義一個結(jié)構(gòu)體類型,成員名字、性別、年齡、學號、系別、家庭信息等,并建立鏈表,定義該結(jié)構(gòu)體類型的指針,用于指向各結(jié)點; 2、分別建立具有添加、刪除、修改、查詢等功能的子函數(shù),完成相應功能,對程序?qū)崿F(xiàn)模塊化。這其中要用到對鏈表的刪除、插入等知識。刪除時用一結(jié)構(gòu)體指針指向
2、鏈表的第一個結(jié)點,檢查該節(jié)點的值是否等于輸入的要刪除的學號,若相等就刪除,不相等則后移指針,直至表尾。插入時也要先找到相應結(jié)點,再添加。3、為實現(xiàn)存儲功能,需用到文件的相關(guān)函數(shù),打開文件,將添加、修改或刪除的信息存入磁盤中。4、為以表格的形式輸出文件,宏定義格式化輸出語句,指定輸出學生信息。二、概要設計系統(tǒng)總體設計框架: 對程序進行模塊化,建立添加、修改、刪除、查找和顯示功能的子函數(shù),各子函數(shù)中運用鏈表存儲數(shù)據(jù)。從主函數(shù)開始執(zhí)行,調(diào)用各個子函數(shù),并運用文件相關(guān)知識將信息存入磁盤中。系統(tǒng)功能模塊圖: 主菜單學生形象查詢學生信息添加學生信息刪除學生信息添加是否保存 關(guān)閉文件三、詳細設計主要功能模塊
3、的算法設計思路如下:1、查詢通訊錄信息(void chakan())(1)為開辟一個新單元(2)輸入查詢關(guān)鍵字:(3)讀取保存的文件數(shù)據(jù)輸入ASCLL字符:(4)在鏈表中尋找相應結(jié)點;(5)調(diào)用輸出函數(shù),輸出結(jié)點信息。2、添加信息函數(shù)(void add())(1)定義指向結(jié)構(gòu)體變量的指針;(2)移動指針,找到插入結(jié)點;(3)在要插入的結(jié)點輸入信息;(4)調(diào)用保存函數(shù),打開文件,保存輸入信息。3、刪除信息函數(shù)(void del())(1)定義指向結(jié)構(gòu)體變量的指針;(2)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù);(3)根據(jù)要修改的編號查找要刪除的結(jié)點;(4)修改鏈表,刪除對應結(jié)點。4、修改
4、信息函數(shù)(void xiugai())(1)定義指向結(jié)構(gòu)體變量的指針;(2)讀取保存的文件數(shù)據(jù)輸入ASCLL字符:(3)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù);(4)根據(jù)要修改的編號查找對應結(jié)點;(5)修改信息;(6)打開文件,保存修改記錄。 5、保存信息函數(shù)(baocun())(1)定義指向結(jié)構(gòu)體變量的指針;(2)用文件指針指向要讀寫的磁盤文件名,若沒有則新建此文件名:(3)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù):(4)打開文件,保存記錄:6、屏幕操作函數(shù)(void stubent187())(1)以一定格式輸出所想要的圖形:四、主要源程序代碼定義變量:(對整個程序定義全
5、局變量)#include "stdio.h"#include "conio.h" #define STUDENT ID /*所有STUDENT都用ID來代替*/ typedef struct node /*定義結(jié)構(gòu)體*/ char ming50; /*名字*/ char xing50; /*性別*/ char nian50; /*年齡*/ int xuehao; /*學號*/ char xibie50; /*專業(yè)*/ char sushe50; /*宿舍號*/ char jia50; /*家庭地址*/ struct node *next; ID; /*學
6、生信息(變量名)*/ ID *head=NULL; /*定義一個頭指針*/FILE *zhi; /*定義一個文件指針*/主菜單界面:(進入屏幕界面的形式)void stubent187() /*屏幕格式函數(shù)*/ printf("*n"); printf("* 學生信息管理系統(tǒng) *n"); printf("* *n"); printf("* 請選擇:1:查看; 2:添加; 3:刪除; *n"); printf("* 4:修改; 0:退出系統(tǒng) *n"); printf("* *n"
7、;); printf("*n"); printf(">>>>>>>>>>>>>輸入 04 數(shù)字<<<<<<<<<<<<<n"); return ; 查看學生信息記錄:(對以保存在磁盤文件的學生信息進行查詢)void chakan() /* 查看*/ ID *t; t=head; t=(ID *)malloc(sizeof(ID); /*為t開辟一個新單元*/ if(zhi=fopen("yi
8、hu1.txt","rb")=NULL) printf("沒有此文件n"); else printf("%10s%10s%10s%10s%10s%10s%10sn","ming","xing","nian","xuehao","eng","sushe","jia"); /*輸出一個屏幕格式*/ while (!feof(zhi) fscanf(zhi,"%10s%10s%10s
9、%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); /*以這
10、形式輸出各個學生信息*/ t->next=(ID *)malloc(sizeof(ID);t=t->next; ; 添加學生信息記錄:()void add() char i; /*添加*/ ID *t1,*t2; t1=t2=NULL; loop: t1=(ID *)malloc(sizeof(ID); /*為t1開辟一個新單元*/ printf("請輸入姓名:");scanf("%s",&t1->ming); /* 姓名 */ printf("請輸入性別:");scanf("%s",&a
11、mp;t1->xing); /* 性別 */ printf("請輸入年齡:");scanf("%s",&(t1->nian); /* 年齡 */ printf("請輸入學號:");scanf("%d",&(t1->xuehao); /* 學號 */ printf("請輸入系別:");scanf("%s",&(t1->xibie); /*系別*/ printf("請輸入宿舍號:");scanf("%s
12、",&(t1->sushe); /*宿舍號*/ printf("請輸入家庭地址:");scanf("%s",&(t1->jia); /*家庭地址*/ t1->next=NULL; if (head=NULL) /*如果頭結(jié)點為空*/ head=t1; /*t1指向頭結(jié)點*/ t2=t1; else t2=head; while (t2->next!=NULL) t2=t2->next; /*沒有成立則指向下個結(jié)點*/ t2->next=t1; getchar(); printf("是
13、否繼續(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ù)*/ p
14、rintf("保存成功"); else if(i='n'|i='N') clrscr(); /*清屏*/ stubent187(); /*調(diào)用屏幕函數(shù)*/ return ;刪除學生信息操作:(對以存的學生信息進行刪除)void del() /*刪除*/ ID *A,*B; /*定義指針*/ char t,i;int xuehao; /*定義整型變量與字符型變量*/ A=B=NULL; if(zhi=fopen("yihu1.txt","a+")=NULL) printf("沒有此信息文件n&q
15、uot;); else loop: printf("請輸入要刪除的學生學號:");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
16、(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(
17、"是否保存此次刪除(Y/N)n");scanf("%s",&i); if(i='y'|i='Y') baocun(); else clrscr(); stubent187(); else printf("無法找到此編號n"); 修改學生信息操作:(對保存的學生信息進行修改) void xiugai() /*修改*/ ID *t1,*t2; /*定義指針*/ int i;char xuehao; /*定義整型變量與字符型變量*/ t1=head; if(zhi=fopen("yihu1.
18、txt","a+")=NULL) printf("沒有此信息文件n");loop: printf("請輸入要修改的學號:");scanf("%s",&xuehao); /* 輸入編號*/ while (!feof(zhi) fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10sn",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibi
19、e,&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->ji
20、a); printf("輸入名字:");scanf("%s",&t1->ming); /*名字*/ printf("輸入性別:");scanf("%s",&(t1->xing); /*性別*/ printf("輸入年齡:");scanf("%s",&(t1->nian); /*年齡*/ printf("輸入學號:");scanf("%s",&t1->xuehao); /*學號*/
21、printf("輸入系別:");scanf("%s",&(t1->xibie); /*系別*/ printf("輸入專業(yè):");scanf("%s",&(t1->sushe); /* 宿舍號 */ printf("輸入家庭地址:");scanf("%s",&(t1->jia); /* 家庭地址*/ printf("成功!n"); printf("是否繼續(xù)修改(Y/N)");scanf("
22、;%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(); else clrscr(); /*清屏*/ stubent187(); /*調(diào)用屏幕函數(shù)*/ else printf("沒有此編號n"); return; 保
23、存添加,刪除,修改學生的信息:(操作過后是否保存)baocun() /*保存*/ ID *t=head; /*定義指針*/ zhi=fopen("yihu1.txt","a+"); /*(讀寫 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為文件指針保存*/
24、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)用刪除
25、函數(shù)*/ case 4:xiugai();break; /*調(diào)用修改函數(shù)*/ case 0:exit(0); /*結(jié)束*/ default:printf("輸入錯誤,請在此輸入n");continue; /*輸入不是04的,則返回*/ 源函數(shù)代碼:void chakan() /* 查看*/ ID *t; t=head; t=(ID *)malloc(sizeof(ID); /*為t開辟一個新單元*/ if(zhi=fopen("yihu1.txt","rb")=NULL) printf("沒有此文件n"); els
26、e printf("%10s%10s%10s%10s%10s%10s%10sn","ming","xing","nian","xuehao","eng","sushe","jia"); /*輸出一個屏幕格式*/ while (!feof(zhi) fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10sn",&t->ming,&t->xing,&t->
27、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); /*以這形式輸出各個學生信息*/ t->next=(ID *)malloc(sizeof(ID);t=t->next; ; voi
28、d add() char i; /*添加*/ ID *t1,*t2; t1=t2=NULL; loop: t1=(ID *)malloc(sizeof(ID); /*為t1開辟一個新單元*/ printf("請輸入姓名:");scanf("%s",&t1->ming); /* 姓名 */ printf("請輸入性別:");scanf("%s",&t1->xing); /* 性別 */ printf("請輸入年齡:");scanf("%s",&
29、;(t1->nian); /* 年齡 */ printf("請輸入學號:");scanf("%d",&(t1->xuehao); /* 學號 */ printf("請輸入系別:");scanf("%s",&(t1->xibie); /*系別*/ printf("請輸入宿舍號:");scanf("%s",&(t1->sushe); /*宿舍號*/ printf("請輸入家庭地址:");scanf("%
30、s",&(t1->jia); /*家庭地址*/ t1->next=NULL; if (head=NULL) /*如果頭結(jié)點為空*/ head=t1; /*t1指向頭結(jié)點*/ t2=t1; else t2=head; while (t2->next!=NULL) t2=t2->next; /*沒有成立則指向下個結(jié)點*/ t2->next=t1; getchar(); printf("是否繼續(xù)添加(Y/N):n"); scanf("%s",&i); /*輸入Y/N*/ if(i='y'|
31、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(); /*清屏*/
32、 stubent187(); /*調(diào)用屏幕函數(shù)*/ return ;void del() /*刪除*/ ID *A,*B; /*定義指針*/ char t,i;int xuehao; /*定義整型變量與字符型變量*/ A=B=NULL; if(zhi=fopen("yihu1.txt","a+")=NULL) printf("沒有此信息文件n"); else loop: printf("請輸入要刪除的學生學號:");scanf("%d",&xuehao); while (!feof(zh
33、i) 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-&
34、gt;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(); e
35、lse clrscr(); stubent187(); else printf("無法找到此編號n"); void xiugai() /*修改*/ ID *t1,*t2; /*定義指針*/ int i;char xuehao; /*定義整型變量與字符型變量*/ t1=head; if(zhi=fopen("yihu1.txt","a+")=NULL) printf("沒有此信息文件n");loop: printf("請輸入要修改的學號:");scanf("%s",&x
36、uehao); /* 輸入編號*/ 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) t1=t1->next; el
37、se 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",&
38、amp;(t1->xing); /*性別*/ printf("輸入年齡:");scanf("%s",&(t1->nian); /*年齡*/ printf("輸入學號:");scanf("%s",&t1->xuehao); /*學號*/ printf("輸入系別:");scanf("%s",&(t1->xibie); /*系別*/ printf("輸入專業(yè):");scanf("%s",&am
39、p;(t1->sushe); /* 宿舍號 */ 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(); else clrscr(); /*清屏*/ stubent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來商業(yè)空間設計趨勢與挑戰(zhàn)應對
- 國慶節(jié)中秋快樂活動方案
- 16《朱德扁擔》第二課時 說課稿-2024-2025學年語文二年級上冊統(tǒng)編版
- Unit 2 Healthy Lifestyle Reading and Thinking 說課稿-2023-2024學年高二英語人教版(2019)選擇性必修第三冊
- Module4 Unit1 It's red!(說課稿)-2024-2025學年外研版(一起)英語一年級上冊
- Unit 2 Different families Lesson 6(說課稿)-2024-2025學年人教PEP版(2024)英語三年級上冊
- 1《天地人》說課稿-2024-2025學年語文一年級上冊統(tǒng)編版
- 2024-2025學年高中信息技術(shù) 會考知識點說課稿
- 2024年六年級品社下冊《站在國際舞臺上》說課稿 遼師大版001
- 6 推動社會發(fā)展的印刷術(shù)(說課稿)-2024-2025學年六年級上冊科學教科版(2017版)
- 2024年常德職業(yè)技術(shù)學院單招職業(yè)適應性測試題庫完整
- 天津市河東區(qū)2023-2024學年九年級上學期期末數(shù)學試題
- 工程防滲漏培訓課件
- 黑龍江省哈爾濱市2024年數(shù)學八年級下冊期末經(jīng)典試題含解析
- 克羅恩病的外科治療
- 牛津3000核心詞匯表注釋加音標1-4 完整版
- 高中英語以讀促寫教學策略與實踐研究課件
- 金屬表面處理中的冷噴涂技術(shù)
- 河北省石家莊市2023-2024學年高一上學期期末教學質(zhì)量檢測化學試題(解析版)
- 黑龍江省齊齊哈爾市2023-2024學年高一上學期1月期末英語試題(含答案解析)
- 綜合素質(zhì)能力提升培訓
評論
0/150
提交評論