C語言課程設計報告-通訊錄管理系統(tǒng)-_第1頁
C語言課程設計報告-通訊錄管理系統(tǒng)-_第2頁
C語言課程設計報告-通訊錄管理系統(tǒng)-_第3頁
C語言課程設計報告-通訊錄管理系統(tǒng)-_第4頁
C語言課程設計報告-通訊錄管理系統(tǒng)-_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGE19C語言課程設計名稱:通信錄管理系統(tǒng)學院:機電學院班級:075102-23姓名:閔德順學號:20101003082指導老師:谷老師前言課程設計目的:C語言編程實踐是學習C語言的一個重要環(huán)節(jié),為提高學生的程序設計能力,通過課堂和上機實踐使學生的程序設計能力有一個上升的臺階。通過前四單元的溫故而知新、庖丁解牛、舉一反三、熟能生巧等過程的練習之后能夠解決一些簡單的實際問題。題目要求具有數據的插入、修改、刪除、顯示和查詢功能的電話簿管理程序。數據包括:人名、工作單位、電話號碼和E-MAIL地址。可對記錄中的姓名和電話號碼進行修改??稍黾雍蛣h除記錄??娠@示所有的保存記錄。(5)可按人名或電話號碼進行查詢2、需求分析根據題目要求,建立文件,應選擇結構體數組來存放數據,再定義一個全局變量和文件指針進行程序的運行,然后把數據信息存入文件中,所以要提供結構體和文件的輸入輸出等操作;在程序中要進行數據的插入、刪除、更新、查詢等操作,所以需要建立相應的模塊來實現,為簡便起見,還應建立一個主菜單,在每個模塊中建立相應的副菜單;另外,還要提供鍵盤式選擇菜單來實現選擇功能,使程序在運行時達到要求。3、總體設計根據題目要求,可以將系統(tǒng)分為:輸入數據模塊;查看數據模塊刪除數據模塊;增加數據模塊修改數據模塊查找數據模塊;系統(tǒng)功能模塊圖通訊錄管理系統(tǒng)通訊錄管理系統(tǒng)插入數據模塊查看數據模塊刪除數據模塊增加數據模塊修改數據模塊查找數據模塊4、詳細設計1、主函數;主函數一般設計得比較簡潔,只提供輸入,處理和輸出部分的函數調用。其中各功能模塊用菜單方式選擇。流程圖顯示一系列功能選項開始輸入顯示一系列功能選項開始輸入n,判斷是否是0~6根據n的值調用各模塊函數結束YN程序代碼:voidmenu(){intn;intw1;voidadd();puts("\n\t\t\t\t歡迎使用通訊錄管理系統(tǒng)\n\n"); puts("\t\t**********************菜單**********************");puts("\t\t\t\t1.輸入聯(lián)系人");puts("\t\t\t\t2.查看聯(lián)系人"); puts("\t\t\t\t3.刪除聯(lián)系人"); puts("\t\t\t\t4.增加聯(lián)系人"); puts("\t\t\t\t5.修改聯(lián)系人信息"); puts("\t\t\t\t6.查找聯(lián)系人");puts("\t\t\t\t0.退出系統(tǒng)"); puts("\n\n\t\t************************************************"); printf("請你選擇(0-6):[]\b\b");do{ scanf("%d",&n); if(n<0||n>6) {printf("你的選擇有誤!請重新選擇:\n"); w1=1;getchar();} elsew1=0; }while(w1==1);switch(n){ case1:shuru();break; case2:chakan();break; case3:del();break; case4:zj();break; case5:xiugai();break; case6:cz();break; case0:{printf("\n\t\t\t謝謝使用!\n");exit(0);}}}2.輸入數據模塊這個模塊的功能是輸入并保存聯(lián)系人的信息,輸入是輸入到全局結構體數組變量里的,調用save函數儲存到文件里,然后調用back函數提示使用者進行下一步操作。流程圖開始開始輸入要輸入的聯(lián)系人個數n調用save函數保存聯(lián)系人信息結束調用back函數i=ni=0YNi++程序代碼:voidshuru(){inti,n; printf("你想添加多少個聯(lián)系人?"); scanf("%d",&n); printf("\n現在開始增加聯(lián)系人\n\n"); for(i=0;i<n;i++) { printf("\n輸入第%d個聯(lián)系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作單位\n"); scanf("%s",per[i].adr); printf("電話號碼\n"); scanf("%s",per[i].pho); printf("電子郵件\n"); scanf("%s",per[i].email);}j=i ; save(); printf("\n已經添加完成并保存。"); back();}3瀏覽數據模塊這個模塊的功能是查看所有文件中保存的聯(lián)系人信息,直接調用show函數,然后調用back函數提示使用者進行下一步操作。流程圖開始開始調用show函數調用back函數結束程序代碼:chakan(){ show(); back();}4.數據刪除模塊這個模塊的功能是刪除通訊錄中的聯(lián)系人,先調用show函數,然后提示用戶選擇要刪除的聯(lián)系人的序號,然后修改結構體數組的數據,調用save函數保存。流程圖:開始開始調用show函數,得到人數j輸入序號n,判斷是否0~j刪除結構體數組里的數據調用back函數結束調用save函數保存YN程序代碼:voiddel(){inta,l,w; printf("\n你想刪除哪個聯(lián)系人?\n\n"); show(); printf("\n請輸入你要刪除的聯(lián)系人的序號:"); scanf("%d",&a); do{ if(a<0||a>j){w=0; printf("\n你的輸入有誤,請重新輸入:"); scanf("%d",&a);} elsew=1;}while(w==0); for(l=a-1;l<j;l++) per[l]=per[l+1]; j=j-1;save();printf("\n已經刪除完成并保存。"); back();}5增加數據模塊這個模塊的功能是向通訊錄中增加聯(lián)系人信息,和程序與輸入模塊類似,先通過load函數讀取文件中的信息,然后增加數據,最后調用save函數保存流程圖開始開始:調用load函數調用load函數輸入增加的個數n輸入增加的個數n調用load函數i=j調用back函數i=j調用back函數結束結束i++i++Ni=n+jYNi=n+jY調用save函數保存聯(lián)系人信息調用save函數保存聯(lián)系人信息程序代碼:voidzj(){inti,n=0;load();printf("你想增加多少個聯(lián)系人?");scanf("%d",&n); printf("\n現在開始增加聯(lián)系人\n\n");for(i=j;i<n+j;i++) { printf("\n輸入第%d個聯(lián)系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作單位\n"); scanf("%s",per[i].adr); printf("電話號碼\n"); scanf("%s",per[i].pho); printf("電子郵件\n"); scanf("%s",per[i].email); }j=i;save(); printf("\n已經增加完成并保存。"); back();}6修改數據模塊這個模塊的功能是修改通訊錄中聯(lián)系人的信息,調用show函數讓用戶確定要修改的聯(lián)系人,然后用戶直接輸入要修改的聯(lián)系人的序號,在依次輸入修改過后的信息最后調用save函數保存。流程圖開始開始調用show函數調用show函數輸入要修改的聯(lián)系人的序號輸入要修改的聯(lián)系人的序號輸入修改后的聯(lián)系人的信息輸入修改后的聯(lián)系人的信息調用save函數保存聯(lián)系人信息調用save函數保存聯(lián)系人信息結束結束程序代碼:voidxiugai(){inti=0,w; show(); printf("\n請輸入你要修改的聯(lián)系人的序號:");scanf("%d",&i); do{ if(i<0||i>j){w=0; printf("\n你的輸入有誤,請重新輸入:"); scanf("%d",&i);} elsew=1; }while(w==0); i--;printf("\n請輸入修改后的聯(lián)系人的信息\n:"); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作單位\n"); scanf("%s",per[i].adr); printf("電話號碼\n"); scanf("%s",per[i].pho); printf("電子郵件\n"); scanf("%s",per[i].email); save(); printf("\n已經修改完成并保存。"); back();}7查找數據模塊這個模塊的功能是查找聯(lián)系人信息,可以通過姓名和電話號碼查找,先調用load函數從文件中讀取聯(lián)系人信息,然后通過循環(huán)查找聯(lián)系人,找到后輸出聯(lián)系人信息。-程序代碼:voidcz(){intn,w=1;printf("你想通過什么方式查找?\t\t1.姓名\t\t2.電話號碼\n"); scanf("%d",&n); do{ if(n==1){czxm();back();} if(n==2){czdh(); back();} else{w=0;printf("\n你的輸入有誤,請重新輸入:");scanf("%d",&n);}}while(w==0); }流程圖開始開始輸入n,判斷n=1調用czxm函數調用czdh函數結束Y調用back函數通過姓名查找流程圖開始開始輸入要查找的姓名調用load函數i=0文件中存在輸入的姓名輸出查找到的聯(lián)系人信息i++結束YN通過電話號碼查找流程圖開始開始輸入要查找的姓名調用load函數i=0文件中存在輸入的電話號碼輸出查找到的聯(lián)系人信息i++結束YN(1)通過姓名查找程序代碼:voidczxm(){inti;chara[20]; printf("\n請輸入你要查找的聯(lián)系人的姓名:"); scanf("%s",a);load(); for(i=0;i<j;i++) { if(strcmp(per[i].nam,a)==0) {printf("\n你要查的聯(lián)系人的信息是:\n"); printf("\n姓名\t\t工作單位\t電話號碼\t電子郵件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} } if(i==j)printf("\n\n找不到你要查看的聯(lián)系人!!!");}(2)通過電話號碼查找程序代碼voidczdh() {inti;chara[20]; printf("請輸入你要查找的聯(lián)系人的號碼:");scanf("%s",a);load();for(i=0;i<j;i++) { if(strcmp(per[i].pho,a)==0) {printf("\n你要查的聯(lián)系人的信息是:\n"); printf("姓名\t\t工作單位\t電話號碼\t電子郵件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} }if(i==j)printf("\n\n找不到你要查看的聯(lián)系人!!!");}8公共函數:(1)save函數save函數的功能是把存放到結構體數組里的數據寫入文件中,用于直接查看和下次讀取。程序代碼:voidsave(){inti;FILE*fq;if((fp=fopen("15.txt","w"))==NULL){ printf("打開文件出錯!!\n"); return;}for(i=0;i<j;i++)fwrite(&per[i],sizeof(structperson),1,fp);fclose(fp);if((fq=fopen("通訊錄.txt","w"))==NULL){ printf("打開文件出錯!!\n"); return;}for(i=0;i<j;i++){ fprintf(fq,"%d\t%-16s%-16s%-16s%-16s\n", i+1,per[i].nam,per[i].adr,per[i].pho,per[i].email);}fclose(fq);}(2)load函數load函數的功能是從已經保存的文件中讀數據,把數據存入結構體數組中。同時把聯(lián)系人個數存放到全局變量j中。程序代碼:voidload(){inti;if((fp=fopen("15.txt","r"))==NULL)printf("打開文件出錯!!\n"); for(i=0;!feof(fp);i++) fread(&per[i],sizeof(structperson),1,fp); fclose(fp); j=i;}(3)show函數:show函數的功能是從文件中讀取聯(lián)系人信息,然后輸出到屏幕上。程序代碼:voidshow(){inti;printf("序號\t姓名\t\t工作單位\t電話號碼\t電子郵件\n");load();for(i=0;i<j;i++) { printf("%d\t%-16s%-16s%-16s%-16s\n", i+1,per[i].nam,per[i].adr,per[i].pho,per[i].email);} }(4)back函數back函數的功能是在每次完成一個指令后提示用戶進行下一步操作。程序代碼:voidback(){inti,w;puts("\n\n"); printf("\t\t\t現在你要做什么??\n\n\t1.返回菜單\t2.瀏覽聯(lián)系人\t3.退出系統(tǒng)\n\n"); printf("請你選擇1-3:[]\b\b"); scanf("%d",&i); printf("\n\n"); do{ if(i==1){w=1;menu();} if(i==2){w=1;chakan();} if(i==3){w=1;printf("\n\t\t\t謝謝使用!\n");exit(0);} else{w=0;printf("\n你的輸入有誤,請重新輸入:");scanf("%d",&i);} } while(w==0);}5、運行結果1、輸入數據模塊;出現菜單后,輸入1按Enter結果如下:輸入完成后出現下圖:輸入數據模塊出現菜單后,輸入2按Enter結果如下:刪除數據模塊;出現菜單后,輸入3按Enter結果如下:增加數據模塊;出現菜單后,輸入4按Enter結果如下:修改數據模塊;出現菜單后,輸入5按Enter結果如下:查找數據模塊;出現菜單后,輸入6按Enter通訊錄中不存在要查找的聯(lián)系人時結果如下:通訊錄中存在要查找的聯(lián)系人時結果如下:6、總結與體會在老師的帶領下進行了C語言程序實踐學習。在短短八天的實習期間使我獲取了不少新知識也鞏固了許多老知識。在這之前,我們已經對C語言這門課程學習了一個學期,對其有了一定的了解,但是也僅僅是停留在學習了解的范圍,對里面的好多東西還是很陌生,并不是很熟練,有著許多欠缺,更多的在運用起來的時候還是感到很不好動手。C語言是需要有一定基礎、而且動手能力強的學科。上機實驗是學習程序設計語言必不可少的實踐環(huán)節(jié),特別是C語言靈活、簡潔,更需要通過編程的實踐來真正掌握它。對于程序設計語言的學習目的,可以概括為學習語法規(guī)定、鞏固貫穿系統(tǒng)知識、掌握程序設計方法、提高程序設計能力,這些都必須通過充分的實際上機操作才能完成。課堂上許多關于C語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用C語言這個工具解決實際問題,又必須掌握它。通過多次上機練習,對于語法知識有了感性的認識,加深對它的理解,在理解的基礎上就會自然而然地掌握C語言的語法規(guī)定。對于一些內容自己認為在課堂上聽懂了,但上機實踐中會發(fā)現原來理解的偏差,更加鞏固了學過的知識,而且在設計的時候學要系統(tǒng)的知識,也是一個較大的挑戰(zhàn),某一方面知識的欠缺都將影響到整個程序的設計。這次上機實習讓我學到了很多有用的東西,鞏固了之前的學習,讓我學到了在教室和做題中學不到的一些知識,通過這個程序的學習,使我進一步理解和運用結構化程序設計的思想和方法。相信對以后初步掌握開發(fā)一個小型實用系統(tǒng)的基本方法,學會調試一個比較長程序的基本方法,學會利用流程圖表示算法,進一步掌握和提高利用C語言進行程序設計的能力。程序設計的過程,實際上是確定解決問題的詳細步驟,而這個步驟通常稱為流程,設計好如何進行程序的細編在程序量很大的情況下解決問題是很重要的。一個大的程序,一般是經過很多步才完成,不斷的進行程序的調試來完成它。現在程序基本上是完成了,里面或多或少的存在問題。其中在對數據進行輸入的時候,不太方便,可以設計一個程序使在完成一個的輸入后返回副菜單而不是主菜單;刪除模塊可以加上一些程序使刪除的時候有選擇性而不是直接刪除,沒有后悔的余地??偟膩碚f,這次課程設計還是比較成功的,雖然不是達到很完美。附錄:源程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>FILE*fp;intj;structperson{ charnam[11];charadr[20]; charpho[15]; charemail[20];};structpersonper[50];voidmenu();voidsave();voidshow();voidchakan();voidshuru();voidcz();voiddel();voidzj();voidczxm();voidxiugai();voidczdh();voidback();voidload();voidmain(){menu();}voidmenu(){intn;intw1;voidadd();puts("\n\t\t\t\t歡迎使用通訊錄管理系統(tǒng)\n\n"); puts("\t\t**********************菜單**********************");puts("\t\t\t\t1.輸入聯(lián)系人");puts("\t\t\t\t2.查看聯(lián)系人"); puts("\t\t\t\t3.刪除聯(lián)系人"); puts("\t\t\t\t4.增加聯(lián)系人"); puts("\t\t\t\t5.修改聯(lián)系人信息"); puts("\t\t\t\t6.查找聯(lián)系人");puts("\t\t\t\t0.退出系統(tǒng)"); puts("\n\n\t\t************************************************"); printf("請你選擇(0-6):[]\b\b");do{ scanf("%d",&n); if(n<0||n>6) {printf("你的選擇有誤!請重新選擇:\n"); w1=1;getchar();} elsew1=0; }while(w1==1);switch(n){ case1:shuru();break; case2:chakan();break; case3:del();break; case4:zj();break; case5:xiugai();break; case6:cz();break; case0:{printf("\n\t\t\t謝謝使用!\n");exit(0);}}}voidshuru(){inti,n; printf("你想添加多少個聯(lián)系人?"); scanf("%d",&n); printf("\n現在開始增加聯(lián)系人\n\n"); for(i=0;i<n;i++) { printf("\n輸入第%d個聯(lián)系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作單位\n"); scanf("%s",per[i].adr); printf("電話號碼\n"); scanf("%s",per[i].pho); printf("電子郵件\n"); scanf("%s",per[i].email); } j=i ; save(); printf("\n已經添加完成并保存。"); back();}voidcz(){intn,w=1;printf("你想通過什么方式查找?\t\t1.姓名\t\t2.電話號碼\n"); scanf("%d",&n); do{ if(n==1){czxm();back();} if(n==2){czdh(); back();} else{w=0;printf("\n你的輸入有誤,請重新輸入:");scanf("%d",&n);}}while(w==0); }voidczxm(){inti;chara[20]; printf("\n請輸入你要查找的聯(lián)系人的姓名:"); scanf("%s",a);load(); for(i=0;i<j;i++) { if(strcmp(per[i].nam,a)==0) {printf("\n你要查的聯(lián)系人的信息是:\n"); printf("\n姓名\t\t工作單位\t電話號碼\t電子郵件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} } if(i==j)printf("\n\n找不到你要查看的聯(lián)系人!!!");}voidczdh() {inti;chara[20]; printf("請輸入你要查找的聯(lián)系人的號碼:");scanf("%s",a);load();for(i=0;i<j;i++) { if(strcmp(per[i].pho,a)==0) {printf("\n你要查的聯(lián)系人的信息是:\n"); printf("姓名\t\t工作單位\t電話號碼\t電子郵件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} }if(i==j)printf("\n\n找不到你要查看的聯(lián)系人!!!");}voidchakan(){ show(); back();}voiddel(){inta,l,w; printf("\n你想刪除哪個聯(lián)系人?\n\n"); show(); printf("\n請輸入你要刪除的聯(lián)系人的序號:"); scanf("%d",&a); do{ if(a<0||a>j){w=0; printf("\n你的輸入有誤,請重新輸入:"); scanf("%d",&a);} elsew=1; }while(w==0); for(l=a-1;l<j;l++) per[l]=per[l+1]; j=j-1; save();printf("\n已經刪除完成并保存。"); back(); }voidxiugai(){inti=0,w; show(); printf("\n請輸入你要修改的聯(lián)系人的序號:");scanf("%d",&i); do{ if(i<0||i>j){w=0; printf("\n你的輸入有誤,請重新輸入:"); scanf("%d",&i);} elsew=1; }while(w==0); i--;printf("\n請輸入修改后的聯(lián)系人的信息\n:"); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作單位\n"); scanf("%s",per[i].adr); printf("電話號碼\n"); scanf("%s",per[i].pho); printf("電子郵件\n"); scanf("%s",per[i].email); save(); printf("\n已經修改完成并保存。"); back();}voidzj(){inti,n=0;load();printf("你想增加多少個聯(lián)系人?");scanf("%d",&n); printf("\n現在開始增加聯(lián)系人\n\n");for(i=j;i<n+j;i++) { printf("\n輸入第%d個聯(lián)系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作單

溫馨提示

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

評論

0/150

提交評論