c語言課程設計報告學生信息管理系統(tǒng)_第1頁
c語言課程設計報告學生信息管理系統(tǒng)_第2頁
c語言課程設計報告學生信息管理系統(tǒng)_第3頁
c語言課程設計報告學生信息管理系統(tǒng)_第4頁
c語言課程設計報告學生信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、題目:學生信息管理系統(tǒng)一、需求分析任務要求:自學c語言中有關鏈表及外部文件的內(nèi)容,設計學生信息管理系統(tǒng)。具體要求如下: 建立學生信息,信息至少包括名字、性別、年齡、學號、系別、家庭信息等內(nèi)容; 能夠提供添加、刪除和修改學生信息等功能; 能將通訊錄保存在文件中; 能夠按指定方式輸出學生信息。系統(tǒng)功能需求分析: 1、為存儲學生信息,需定義一個結構體類型,成員名字、性別、年齡、學號、系別、家庭信息等,并建立鏈表,定義該結構體類型的指針,用于指向各結點; 2、分別建立具有添加、刪除、修改、查詢等功能的子函數(shù),完成相應功能,對程序實現(xiàn)模塊化。這其中要用到對鏈表的刪除、插入等知識。刪除時用一結構體指針指向

2、鏈表的第一個結點,檢查該節(jié)點的值是否等于輸入的要刪除的學號,若相等就刪除,不相等則后移指針,直至表尾。插入時也要先找到相應結點,再添加。3、為實現(xiàn)存儲功能,需用到文件的相關函數(shù),打開文件,將添加、修改或刪除的信息存入磁盤中。4、為以表格的形式輸出文件,宏定義格式化輸出語句,指定輸出學生信息。二、概要設計系統(tǒng)總體設計框架: 對程序進行模塊化,建立添加、修改、刪除、查找和顯示功能的子函數(shù),各子函數(shù)中運用鏈表存儲數(shù)據(jù)。從主函數(shù)開始執(zhí)行,調用各個子函數(shù),并運用文件相關知識將信息存入磁盤中。系統(tǒng)功能模塊圖: 主菜單學生形象查詢學生信息添加學生信息刪除學生信息添加是否保存 關閉文件三、詳細設計主要功能模塊

3、的算法設計思路如下:1、查詢通訊錄信息(void chakan())(1)為開辟一個新單元(2)輸入查詢關鍵字:(3)讀取保存的文件數(shù)據(jù)輸入ascll字符:(4)在鏈表中尋找相應結點;(5)調用輸出函數(shù),輸出結點信息。2、添加信息函數(shù)(void add())(1)定義指向結構體變量的指針;(2)移動指針,找到插入結點;(3)在要插入的結點輸入信息;(4)調用保存函數(shù),打開文件,保存輸入信息。3、刪除信息函數(shù)(void del())(1)定義指向結構體變量的指針;(2)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù);(3)根據(jù)要修改的編號查找要刪除的結點;(4)修改鏈表,刪除對應結點。4、修改

4、信息函數(shù)(void xiugai())(1)定義指向結構體變量的指針;(2)讀取保存的文件數(shù)據(jù)輸入ascll字符:(3)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù);(4)根據(jù)要修改的編號查找對應結點;(5)修改信息;(6)打開文件,保存修改記錄。 5、保存信息函數(shù)(baocun())(1)定義指向結構體變量的指針;(2)用文件指針指向要讀寫的磁盤文件名,若沒有則新建此文件名:(3)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù):(4)打開文件,保存記錄:6、屏幕操作函數(shù)(void stubent187())(1)以一定格式輸出所想要的圖形:四、主要源程序代碼定義變量:(對整個程序定義全

5、局變量)#include stdio.h#include conio.h #define student id /*所有student都用id來代替*/ typedef struct node /*定義結構體*/ char ming50; /*名字*/ char xing50; /*性別*/ char nian50; /*年齡*/ int xuehao; /*學號*/ char xibie50; /*專業(yè)*/ char sushe50; /*宿舍號*/ char jia50; /*家庭地址*/ struct node *next; id; /*學生信息(變量名)*/ id *head=null

6、; /*定義一個頭指針*/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); 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); /*以這形式輸出各個學生信息*/ 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(%

8、s,&t1-ming); /* 姓名 */ printf(請輸入性別:);scanf(%s,&t1-xing); /* 性別 */ printf(請輸入年齡:);scanf(%s,&(t1-nian); /* 年齡 */ printf(請輸入學號:);scanf(%d,&(t1-xuehao); /* 學號 */ printf(請輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(請輸入宿舍號:);scanf(%s,&(t1-sushe); /*宿舍號*/ printf(請輸入家庭地址:);scanf(%s,&(t1-jia); /*家庭地址*/ t1-nex

9、t=null; if (head=null) /*如果頭結點為空*/ head=t1; /*t1指向頭結點*/ t2=t1; else t2=head; while (t2-next!=null) t2=t2-next; /*沒有成立則指向下個結點*/ 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(); /*調用保存*/ clrscr(); /*清屏*/ stubent187();/*調用屏幕函數(shù)*/ printf(保存成功); else if(i=n|i=n) clrscr(); /*清屏*/ stubent187(); /*調用屏幕函數(shù)*/ return ;刪除學生信息操作:(對以存的學生信息進行刪除)void del() /*刪除*/ id *a,*b; /*定義指針*/ char t,i;int xuehao; /*定義整型變量與字符型變量*/ a=b=null; if(zhi=fopen(yihu1.txt,a+)=null) printf(沒有此信

11、息文件n); 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(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(無法找到此編號n); 修改學生信息操作:(對保存的學生信息進行修改) void xiugai() /*修改*/ id *t1,*t2; /*定義指針*/ int i;char xuehao; /*定義整型變量與字符型變

13、量*/ t1=head; if(zhi=fopen(yihu1.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-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(輸入學號:);scanf(%s,&t1

15、-xuehao); /*學號*/ printf(輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(輸入專業(yè):);scanf(%s,&(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(

16、); else clrscr(); /*清屏*/ stubent187(); /*調用屏幕函數(shù)*/ else printf(沒有此編號n); return; 保存添加,刪除,修改學生的信息:(操作過后是否保存)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);

17、/*以zhi為文件指針保存*/ t=t-next; fclose(zhi); /*關閉此文件*/ printf(成功!n); return ; 主菜單操作:(選擇所需要的操作)main() /*主函數(shù)*/ int i; /*定義整形變量i*/ stubent187(); /*調用屏幕函數(shù)*/ while(1) scanf(%d,&i); /*輸入要執(zhí)行的操作*/ switch(i) case 1:chakan();break; /*調用查看函數(shù)*/ case 2:add();break; /*調用添加函數(shù)*/ case 3:del();break; /*調用刪除函數(shù)*/ case 4:xiug

18、ai();break; /*調用修改函數(shù)*/ case 0:exit(0); /*結束*/ 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); else printf(%10s%10s%10s%10s%10s%10s%10sn,ming,xing,nian,xuehao,eng

19、,sushe,jia); /*輸出一個屏幕格式*/ 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); /*以這形式輸出各個學生信息*/ 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開辟一個新單元*/ printf(請輸入姓名:);scanf(%s,&t1-ming); /* 姓名 */ printf(請輸入性別:);scanf(%s,&t1-xing); /* 性別 */ printf(請輸入年齡:);scanf(%s,&(t1-nian); /* 年齡 */ printf(請輸入學號:);scanf(%d,&(t1-xuehao); /* 學號 */

21、printf(請輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(請輸入宿舍號:);scanf(%s,&(t1-sushe); /*宿舍號*/ printf(請輸入家庭地址:);scanf(%s,&(t1-jia); /*家庭地址*/ t1-next=null; if (head=null) /*如果頭結點為空*/ head=t1; /*t1指向頭結點*/ t2=t1; else t2=head; while (t2-next!=null) t2=t2-next; /*沒有成立則指向下個結點*/ 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(); /*調用保存*/ clrscr(); /*清屏*/ stubent187();/*調用屏幕函數(shù)*/ printf(保存成功); else if(i=n|i=n) clrscr(); /*清屏*/ stubent187(); /*調用屏幕函數(shù)*/ return ;void del()

23、 /*刪除*/ 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(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(無法找到此編號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,&xuehao); /* 輸入編號*/ 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(輸入學號:);scanf(%s,&t1-xuehao); /*學號*/ printf(輸入系別:);scanf(%s,&(t1-xibie); /*系別*/ printf(輸入專業(yè):);scanf(%s,&(t1-sushe); /* 宿舍號 */ 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(); /*調用屏幕函數(shù)*/ else printf(沒有此編號n); return; 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為文件指針

溫馨提示

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

評論

0/150

提交評論