《C語言程序設計》課程設計-學生通訊錄信息管理系統.doc_第1頁
《C語言程序設計》課程設計-學生通訊錄信息管理系統.doc_第2頁
《C語言程序設計》課程設計-學生通訊錄信息管理系統.doc_第3頁
《C語言程序設計》課程設計-學生通訊錄信息管理系統.doc_第4頁
《C語言程序設計》課程設計-學生通訊錄信息管理系統.doc_第5頁
已閱讀5頁,還剩26頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

xxxxxxx高級語言課程設計實驗報告系 別:xxxxxxxx專業班級:xxxxxxxxx學 號:xxxxxxxxxxx班內序號:xx姓 名:xxxx指導老師:xxxxxxxxx 實驗課題:學生通訊信息管理系統實驗時間:2008.6.102008.6.202008年6月17日一、實驗目的1. 熟悉c語言的編譯,鏈接和運行過程;2. 掌握c語言的數據類型,熟悉整型、實型、字符型變量的定義方式及如何給它們賦值,掌握不同的類型數據之間的賦值規律,賦值使用方法;3. 掌握if語句及switch語句的運用方法及嵌套應用方法;4. 掌握實現循環結構的三種語句while、 do-while.、for 的使用;5. 掌握c語言函數的定義,聲名及調用方法和調用過程;6. 掌握c語言主函數和被調用函數之間的參數傳遞方式,學會函數的嵌套調用和遞歸調用的過程和方法;7. 掌握數組的定義,賦值引用及輸入輸出方法,并正確用字符數組儲存字符串,學會字符串的使用;8. 掌握結構體類型變量的定義和使用;9. 掌握指針變量和指向指針的指針變量的定義及使用,進一步了解指向結構體數組的指針變量的概念及使用方法;10. 掌握鏈表的概念及鏈表的操作,并理解鏈表與數組的不同點及優缺點;11. 掌握文件和文件指針的定義及文件建立,打開,關閉,讀寫等的操作方法12. 能夠采用模塊化思想調試程序;二實驗內容1. 編寫程序并進行調試運行;2. 輸入學生通訊信息并保存于文件,每個學生包含信息如:序號,姓名,省份,電話,生日,郵編,大學,班級,qq號信息;3. 對已存入的學生信息進行更新操作,包括添加一個學生信息、刪除某個學生信息和修改某個學生信息;4. 通過輸入姓名,學號的方式查詢學生信息;5. 可以通過省份,生日來統計通訊信息;6. 最后輸出學生信息,供需要時打印。 一、 需求分析1. 該程序可用于對學生的通訊方式基本信息的存儲、更新、查詢、輸出等操作,以實現對學生通訊錄信息的管理,便于同學之間的聯系交往;2. 其中更新功能包括:添加信息,刪除信息,修改信息,可根據需要添加一個或多個學生信息,也可針對個別學生信息進行適當的刪除或修改,以便隨時更新學生通訊信息。3. 程序中設計的查詢功能可根據需要從若干數據中查詢某個學生信息,并且可根據兩種不同的方法查詢:按姓名查詢和按電話查詢,以滿足不同的需要;4. 可以通過輸出的方式查看整個通訊錄;5. 可以通過排序的方式查看同學生日的先后。四、概要設計1、方案設計對系統進行分析,給出結構圖 分析:系統要實現許多功能,因此遵循結構化程序設計思想來進行本系統的設計:,自頂向下逐步細化,將系統設計任務分解出許多子功能模塊來計;結構圖如下:學生通訊錄信息管理系統 選 擇 模 塊退出系統退出模塊統計模塊查詢模塊 更新模塊 輸出模塊輸入模塊排序模塊添加模塊 刪除模塊修改模塊按姓名按電話退出模塊按省份按生日退出模塊保 存 通 訊 信 息2 . 模塊功能說明對各個模塊進行功能的描述(1).輸入模塊:錄入需要管理的通訊信息并將信息保存于文件中,以方便日后進行打印、讀取、更新等操作。(2).添加模塊:可添加一個或多個學生的通訊信息,并將所添加的信息保存,方便查找。(3).刪除模塊:可對失去聯系的學生通訊信息做刪除處理。(4).修改模塊:可對通訊信息發生改變的學生信息進行修改。(5).查詢模塊:可對已建立的學生通訊信息進行查詢,并且可根據需要選擇按姓名查詢或按電話查詢。(6).保存模塊:用于對通訊信息進行保存。(7).輸出模塊:將所有學生通訊信息或想要查詢的學生信息顯示于屏幕,用于打印學生通訊信息或查找某些學生通訊信息。(8).退出系統:選擇該項,自動退出該系統。五、詳細設計及運行結果流程圖, 函數之間相互調用的圖示 ,程序設計及編碼, 運行結果。開 始輸 入 變 量 i判斷i的值統計模塊查詢模塊 更新模塊 輸出模塊輸入模塊退出模塊添加模塊 刪除模塊修改模塊按姓名按電話退出模塊按省份按生日退出模塊排序模塊判斷i值輸入變量退出模塊輸入變量判斷i值輸入變量判斷i值保 存 模 塊結 束 輸入模塊: 輸入模塊:開 始 開 始 i=0i=0isumisum輸入通訊信息輸入通訊信息i+i+m=y si.num!=0結 束sum=i結 束開始開始 排序模塊: 更新模塊:輸入i的值i=0j=i+1判斷i的值i的年齡大于j的年齡 否 退出系統刪除模塊修改模塊添加模塊 是 i=1 i=2 i=3 交換i與j的信息 j=j+1jsum 是 否返回主界面i=i+1 isum-1結束 是 否輸出信息 結束輸入i開始省份統計退出系統判斷i值輸入i開始退出系統判斷i值查詢模塊: 統計模塊:返回主界面結束姓名查詢電話查詢生日統計返回主界面結束六 調試情況及運行結果1.對自己設計進行評價,指出合理和不足之處,提出改進的方案。此次實踐課編寫的是一個應用程序,相對于以前我們見到的程序,它要大得多,運行的結果也沒有預想中的好,數據的輸出格式不太規范,而且各模塊也出現了一些小問題,在同學們的幫助下,我很有耐心的一次又一次的進行修改,最后運行的結果基本上達到了預期的目的??芍吘故堑谝淮为毩⑼瓿蛇@樣的大程序,結果還不是太理想。由于時間很短,在選題報告中設想到的好多功能都沒有實現。已有的那些功能雖已能基本上滿足用戶的需要,但如果還有更多的功能程序就會更加完美。如:再錄入數據時,沒有設計數據輸入出錯的提示。2.在設計過程中的感受。 本次c 語言的實習課讓我對c 語言的學習又有了更深入的了解,也讓我更深刻地領悟到了“實踐出真理”這個道理,在上機實踐過程中學到的知識遠遠超過了在課堂上十幾周學到的,學校組織的這次實習讓我們這些實踐知識匱乏的大學生增添了許多社會經驗,為我們將來走上工作崗位其了不小的鋪墊作用。本次實習中遇到了很多以前沒有遇到過的問題,也曾想過要放棄,但看到那些同學都在那認真的寫程序,給了我繼續的信心。在同學的幫助下,我順利的結束了本次實習,讓我知道原來憑借自己努力取得的成功會讓自己這么欣慰,也讓我知道了友誼和團結的重要性。并且,通過一種題材兩中方式的學習,我掌握了更多的知識,也認識到對比學習的重要性。七參考文獻參考書名 編者姓名 出版社 出版時間c語言程序設計 王曙燕 曹錳 科學出版社 2005年2月c語言程序設計 譚浩強 清華大學出版社 1999年12月 參考書名 編者姓名 出版社 出版時間c語言程序設計 王曙燕 曹錳 科學出版社 2005年2月八。附錄:1. 鏈表方式: #include#include#define n sizeof(struct stud)#include #include #include /*日期結構體類型*/ struct date int y; int m; int d; bir; /*學生信息結構體類型*/ struct stud int num; /*序號*/ char name20; /*姓名*/ char tel40; /*電話*/ char addr40; /*省份*/ char yb20; /*郵編*/ char daxue50; /*大學*/ struct date bir; /*生日*/ struct stud *next; ; char a; struct stud *h; file *fp;/*建立鏈表*/struct stud *creat() int i,k; struct stud *p1,*p2,*head; printf(n請輸入學生數:n); scanf(%d,&k); head=null; head=p1=p2=(struct stud *)malloc(n); /*head,p1,p2指向首結點*/ for(i=0;inum); printf(n請輸入姓名:); scanf(%s,p1-name); printf(n請輸入電話:); scanf(%s,p1-tel); printf(n請輸入籍貫:); scanf(%s,p1-addr); printf(n請輸入郵編:); scanf(%s,p1-yb); printf(n請輸入大學:); scanf(%s,p1-daxue); printf(n請輸入出生日期:(年-月-日); scanf(%d-%d-%d,&p1-bir.y,&p1-bir.m,&p1-bir.d); p2-next=p1; /*將新結點鏈接到表尾*/ p2=p1; /*p2指向新的表尾*/ p2-next=null; head=head-next; /*頭指針后移*/ save_message(head); /*立即保存*/ return head;/*輸入模塊*/input_message()clrscr(); printf(nn*輸入學生信息*n); printf(-n); h=creat(); bioskey(0); printf(輸入完畢,按任意鍵返回主菜單!); bioskey(0);/*輸出模塊*/output_message(struct stud *p)clrscr(); if(p=null) printf(暫無信息!請回主菜單錄入信息!n); else printf(nn=通訊錄信息表=nn); printf(姓名=省份=電話=生日(年-月-日)=郵編=大學n); while(p!=null) printf(-n); printf(%s %s %s %d-%d-%d %s %sn,p-name,p-addr,p-tel,p-bir.y,p-bir.m,p-bir.d,p-yb,p-daxue); printf(-n); printf(n); p=p-next; printf(n); printf(按任意鍵返回主菜單!nn); bioskey(0);/*保存學生信息*/save_message(struct stud *h)file *fp; struct stud *f; f=h; /*保證指針位置*/ if(fp=fopen(zhuyan.txt,wb)=null) printf(不能打開文件!n); return; while(h!=null) if(fwrite(h,sizeof(struct stud),1,fp)!=1) /*向文件寫入數據*/ printf(文件寫入錯誤!); return; h=h-next; h=f; /*保證指針位置*/ printf(已存盤,按任意鍵回上層菜單:n); getch(); fclose(fp); return;/*讀取信息*/read_message()file *fp; if(fp=fopen(zhuyan.txt,rb)=null) printf(nn*暫時還沒有該生信息,請按任意鍵返回上一級菜單.n); return; do if(fread(h,sizeof(struct stud),1,fp)!=1) if(feof(fp) printf(已到文件末尾.n); /*已到文件末尾.*/ else printf(文件讀取錯誤!n); /*文件讀取錯誤.*/ return; h=h-next; while(h!=null); fclose(fp); getch(); bioskey(0);/*添加學生信息*/add_message(struct stud *w) struct stud *p,*q; p=(struct stud*)malloc(n); /*p指向新申請的結點*/ clrscr(); printf(n請輸入學生序號:); scanf(%d,&p-num); printf(n請輸入學生姓名:); scanf(%s,p-name); printf(n請輸入學生電話:); scanf(%s,p-tel); printf(n請輸入學生籍貫:); scanf(%s,p-addr); printf(n請輸入學生郵編:); scanf(%s,p-yb); printf(n請輸入學生大學:); scanf(%s,p-daxue); printf(n請輸入學生出生日期:); scanf(%d-%d-%d,&p-bir.y,&p-bir.m,&p-bir.d); p-next=null; if(w=null) w=p; /*頭指針為空,p作為新頭指針*/ return 1; /*正確插入返回1*/ q=w; /*從頭指針開始*/ if(q-num)(p-num) /*找到插入位置在首結點之前*/ p-next=w; /*將首結點鏈接在新結點之后*/ w=p; /*p作為新的頭指針*/ return 1; while(q-next)!=null & (q-next-num)num) q=q-next; /*繼續查找插入位置*/ if(q-next=null) /*插入位置在尾結點之后*/ q-next=p; /*新結點鏈接到尾結點之后*/ return 1; else if(q-next-num)=(p-num) /*找到重號*/ free(p); /*釋放新結點的存儲空間*/ return 0; /*不插入返回0*/ p-next=q-next; /*后續結點鏈接到新結點之后*/ q-next=p; /*新結點鏈接到前驅結點之后*/ return 1;/*刪除模塊*/del_message(struct stud *w)char name20; struct stud *p,*q; if(w=null) return 0; /*w就是頭指針,空表不能刪除返回0*/ clrscr(); printf(請輸入要刪除的學生姓名:n); scanf(%s,name); q=w; if(strcmp(q-name,name)=0) /*找到要刪除的是第一個結點*/ w=q-next; /*修改頭指針*/ free(q); /*釋放存儲空間*/ return 1; /*正確刪除返回1*/ p=q-next; while(p!=null) if(strcmp(p-name,name)=0) /*找到要刪除的結點*/ q-next=p-next; /*后續結點連接到前驅結點之后*/ free(p); /*釋放存儲空間*/ return 1; q=p; /*推移指針繼續查找*/ p=p-next; return 0; /*未找到要刪除的結點返回0*/*修改模塊*/revise_message(struct stud *g) int choice; char name20,n,m; do clrscr(); printf(n *學生學籍信息* n); printf( 輸入要修改的學生姓名:n); scanf(%s,name); while(g!=null) while(strcmp(g-name,name)!=0) g=g-next; if(g=null) printf(n 該學生不存在!); bioskey(0); else do printf(n 您要修改哪一項?n); printf(n 1序號n); printf(n 2姓名n); printf(n 3籍貫n); printf(n 4電話n); printf(n 5大學n); printf(n 6出生日期n); scanf(%d,&choice); switch(choice) case 1:printf(n 請輸入修改后的序號:); scanf(%d,&g-num);break; case 2:printf(n 請輸入修改后的姓名:); scanf(%s,g-name);break; case 3:printf(n 請輸入修改后的籍貫:); scanf(%s,g-addr); break; case 4:printf(n 請輸入修改后的電話:); scanf(%s,g-tel); break; case 5:printf(n 請輸入修改后的大學:); scanf(%s,g-daxue); break; case 6:printf(n 請輸入修改后的出生日期:); scanf(%d-%d-%d,&g-bir.y,&g-bir.m,&g-bir.d);break; printf(n是否繼續修改此人信息?y/nn) ; getchar(); m=getchar(); while(m=y); printf(nn=通訊錄信息表=nn); printf(姓名=省份=電話=生日(年-月-日)=郵編=大學n); printf(-n); printf(%s %s %s %d-%d-%d %s %sn,g-name,g-addr,g-tel,g-bir.y,g-bir.m,g-bir.d,g-yb,g-daxue); printf(-n); printf(n); getch(); break; printf(n要繼續嗎?(y/n)n); getchar(); n=getchar(); while(n=y); printf(n 按任意鍵返回主菜單!); bioskey(0); /*更新模塊*/ renew_message() int choice=100; while(choice!=0) printf(n*更新同學信息*nn); printf( 1.添加同學信息nn); printf( 2.刪除同學信息nn); printf( 3.修改同學信息nn); printf( 0.返回修改菜單nn); printf( 請選擇(03):n); printf(*nn); scanf(%d,&choice); switch(choice) case 1:add_message(h);break; case 2:del_message(h);break; case 3:revise_message(h);break; case 0:break; default:printf(輸入有誤!n); /*按姓名查詢*/inquire_name( struct stud *p) char name20; struct stud *f; f=p; clrscr(); printf(nn 請輸入要查找的姓名:); scanf(%s,&name); if(p=null) printf(n您要查找的學生暫時不存在,請按任意鍵返回n); bioskey(0); else if (strcmp(p-name,name)!=0|p-name=null) p=p-next; clrscr(); printf(nn該生有關信息為:nnnn); printf(nn=通訊錄信息表=nn); printf(姓名=省份=電話=生日(年-月-日)=郵編=大學n); printf(-n); printf(%s %s %s %d-%d-%d %s %sn,p-name,p-addr,p-tel,p-bir.y,p-bir.m,p-bir.d,p-yb,p-daxue); printf(-n); printf(n); p=f; getch();/*按學號查詢*/inquire_tel(struct stud *p)char tel20; struct stud *f; f=p; clrscr(); printf(n 請輸入要查找的電話:); scanf(%s,&tel); if(p=null) printf(n您要查找的學生暫時不存在,請按任意鍵返回n); bioskey(0); else if(strcmp(p-tel,tel)!=0|p-tel=null) p=p-next; clrscr(); printf(nn該生有關信息為:nnnn); printf(nn=通訊錄信息表=nn); printf(姓名=省份=電話=生日(年-月-日)=郵編=大學n); printf(-n); printf(%s %s %s %d-%d-%d %s %sn,p-name,p-addr,p-tel,p-bir.y,p-bir.m,p-bir.d,p-yb,p-daxue); printf(-n); printf(n); p=f; getch(); /*查詢模塊*/ inquire_message() int choice=100; while(choice!=0) printf(n*查詢同學通訊信息*n); printf( 1.按同學姓名查詢:n); printf( 2.按同學電話查詢:n); printf( 0.返回主菜單:n); printf( 請選擇(02):n); scanf(%d,&choice); switch(choice) case 1:inquire_name(h);break; case 2:inquire_tel(h);break; case 0:break; default:printf(無此類查詢方式!n); /*省份統計*/ count_ad(struct stud *p) int count=0; char count_ad20; printf(n 輸入要統計的省份名稱:n); scanf(%s,count_ad); if(p=null) printf(n 該學生不存在!); bioskey(0); else printf( 在該省份的同學:n); printf(姓名=省份=電話=生日(年-月-日)=郵編=大學n); printf(-n); p=h; /*p指向頭指針!*/ while(p!=null) if(strcmp(p-addr,count_ad)=0) printf(%s %s %s %d-%d-%d %s %sn,p-name,p-addr,p-tel,p-bir.y,p-bir.m,p-bir.d,p-yb,p-daxue); p=p-next; count+; printf(在這個省份的同學共有%d個,count); /*生日統計*/ count_birthday(struct stud *p) int count=0; int count_birthday_month; printf( 請輸入要統計的月份:n); scanf(%d,&count_birthday_month); if(p=null) printf(n 該學生不存在!); bioskey(0); else printf( 在這個月過生日的同學:記得祝賀他們生日快樂!n); printf(姓名=省份=電話=生日(年-月-日)=郵編=大學n); printf(-n); p=h; while(p!=null) if(p-bir.m=count_birthday_month) printf(%s %s %s %d-%d-%d %s %sn,p-name,p-addr,p-tel,p-bir.y,p-bir.m,p-bir.d,p-yb,p-daxue); p=p-next; count+; printf(在這個月過生日的同學有%d個,count); /*統計模塊*/ count_message() int choice=100; while(choice!=0) printf(nn*統計同學通訊信息*n); printf( 1.按省份統計信息;n); printf( 2.按生日統計信息;n); printf( 0.返回主菜單;n); printf( 請選擇(0-2):n); scanf(%d,&choice); switch(choice) case 1:count_ad(h);break; case 2:count_birthday(h);break; case 0:break; default:printf(輸入有誤!n); /*主程序*/main() int b; printf(輸入任意鍵進入。nn); bioskey(0); do clrscr(); printf(nnn *歡迎進入* nn); printf( * 學生通訊錄管理系統 *nn); printf( * 1輸入學生信息 *nn); printf( * 2輸出學生信息 *nn); printf( * 3更新學生信息 *nn); printf( * 4查詢學生信息 *nn); printf( * 5統計學生信息 *nn); printf( * 6保存信息 *nn); printf( * 7讀取信息 *nn); printf( * 0退出系統 *nn); printf( * 請選擇(07) : *nn); scanf(%d,&b); switch(b) case 1: input_message(); break; case 2: output_message(h); break; case 3: renew_message(); break; case 4: inquire_message(); break; case 5: count_message(); break; case 6: save_message(h); break; case 7: read_message(); break; case 0: break; while(b!=0);2數組方式:#include #include #define max 200#define n 9 int sum; /*日期結構體類型*/ struct b_type int year; /*年*/ int month; /*月*/ int day; /*日*/ ; /*通訊錄結構體類型*/ struct s_type int num; /*序號*/ char name20; /*姓名*/ char address20; /*省份*/ char tel

溫馨提示

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

評論

0/150

提交評論