C語言課程設計大作業(yè)_第1頁
C語言課程設計大作業(yè)_第2頁
C語言課程設計大作業(yè)_第3頁
C語言課程設計大作業(yè)_第4頁
C語言課程設計大作業(yè)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、鄭 州 大 學課程報告課 程 名 稱: C語言程序設計 專 業(yè) 班 級 : (15)班 學 生 姓 名 : 謝* 學 號 : 20127611* 任 課 教 師 : 趙* 學 期 : 2012-2013-2 課程報告任務書題 目通訊錄管理系統(tǒng)主要內(nèi)容開發(fā)一個通訊錄管理系統(tǒng),基本信息包括:編號、姓名、性別、出生年月、固定電話、手機號、電子郵件等基本信息(也可以根據(jù)自己情況進行擴充)。使之能提供以下基本功能:(1)通訊錄等信息錄入功能 (注:數(shù)據(jù)等要求用文件保存)輸入v(2)通訊錄信息的瀏覽功能輸出(3)查詢功能(至少一種查詢方式)、排序功能(至少一種排序方式): l 按電話號碼進行查詢 按姓名查

2、詢 等 按照年齡排序 按姓名排序等(4)通訊錄條目的刪除與修改等擴展功能:可以按照自己的程度進行擴展。比如(1)簡單的權限處理 (2)報表打印功能(3)模糊查詢,如姓張的人員等;或者給定電子郵件的部分進行查詢等(4)給定指定年齡范圍之內(nèi)的查詢等等。 總之,可以根據(jù)自己需求進行分析功能,成績評定按照難度進行區(qū)分。任務要求一、提交材料應包括:(1)系統(tǒng)源代碼 (2)課程報告二、整個設計過程具體要求(1)需求分析 要求學生對案例系統(tǒng)進行分析,設計出需要完成的功能,完善各個模塊的調(diào)用關系;(2)設計過程 要求學生進一步明確各模塊調(diào)用關系,進一步完善模塊函數(shù)細節(jié)(函數(shù)名、參數(shù)、返回值等)(3)實現(xiàn)過程

3、要求學生養(yǎng)成良好的編碼習慣、完成各個模塊并進行測試,最終完成系統(tǒng)整體測試;(4)總結階段 按照要求完成系統(tǒng)設計和實現(xiàn)報告,并進行總結、答辯。成績評定報告撰寫情況(30分)系統(tǒng)完成情況(30分)答辯情況(40分)總分內(nèi)容20分規(guī)范程度5分程序測試5分基本功能20分擴展功能10分自述情況10分答辯情況30分 成績評定教師: 一. 需求分析1,具有數(shù)據(jù)的插入、修改、刪除、顯示和查詢功能的電話簿管理程序。2,數(shù)據(jù)包括:人名、工作單位、電話號碼和E-MAIL地址。3,可對記錄中的姓名和電話號碼進行修改。4,可增加和刪除記錄。5,可顯示所有的保存記錄。6,可按人名或電話號碼進行查詢。分析 建議采用結構體數(shù)

4、組和文件系統(tǒng)實現(xiàn)。結構體成員包括人名、工作單位、電話號碼和E-MAIL地址。根據(jù)題目的要求程序應該采用結構體數(shù)組和文件系統(tǒng)實現(xiàn)。應該有文件的操作功能;在程序中應該包括輸入、顯示、刪除、查詢、添加、修改、保存、加載和退出的功能。二、概要設計(1)程序的模塊組成及各個函數(shù)的功能:程序的模塊組成:主函數(shù):main();輸出數(shù)據(jù)函數(shù):printf();讀取數(shù)據(jù)函數(shù):scanf();顯示記錄函數(shù):Display();刪除記錄函數(shù):shanchu(); 查找記錄函數(shù):chaxun(); 自定義清屏函數(shù):system(“cls”); 自定義輸入函數(shù):input(); 字符輸入函數(shù):getchar();修改數(shù)

5、據(jù)函數(shù):xiugai();保存數(shù)據(jù)函數(shù):baocun();排序數(shù)據(jù)函數(shù):paixu();各函數(shù)的主要功能:輸出數(shù)據(jù)函數(shù):隨時輸出數(shù)據(jù);讀取數(shù)據(jù)函數(shù):讀取輸入的數(shù)據(jù)信息;顯示菜單函數(shù):顯示可供選擇的主菜單;顯示記錄函數(shù):顯示通訊錄所有輸入的信息;刪除記錄函數(shù):顯示要刪除的通訊錄所有輸入的信息; 查找記錄函數(shù):顯示要查詢的通訊錄所有輸入的信息;自定義清屏函數(shù):清除前面運行留下的信息;自定義輸入函數(shù):輸入通訊錄的成員;;字符輸入函數(shù):從終端輸入一個字符,遇回車鍵返回;修改數(shù)據(jù)函數(shù):修改通訊錄的成員信息;保存數(shù)據(jù)函數(shù):保存通訊錄的成員信息;排序數(shù)據(jù)函數(shù):排序通訊錄的成員信息;(2)程序中的抽象數(shù)據(jù)類型

6、的定義: 用戶的狀態(tài)結構 用戶 編號: 姓名: 電話; 年齡; 郵箱: 地址;(3)總體流程圖根據(jù)上面的分析,可以將程序系統(tǒng)的設計分為如下幾個模塊:插入、顯示、刪除、查詢、修改、保存和退出。 通訊錄管理系統(tǒng)插入顯示刪除查詢保存修改退出 三. 詳細設計(1). 主菜單;主菜單一般設計得比較簡潔,只提供輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方式選擇。 流程圖輸入n,判斷是否是06開始顯示一系列功能選項N根據(jù)n的值調(diào)用各功能模塊函數(shù)結束Y【程序】Person pe80; int menu_select() char c; do system("cls"); /清屏

7、printf("ttt*n");/窗口初始化 printf("ttt* 歡迎使用通訊錄管理系統(tǒng)! *n"); printf("ttt*n"); printf("ttt* 1. 添加記錄 *n"); printf("ttt* 2. 顯示記錄*n"); printf("ttt* 3. 刪除記錄*n"); printf("ttt* 4. 查詢記錄*n"); printf("ttt* 5. 修改記錄*n"); printf("ttt*

8、 6. 保存記錄*n"); printf("ttt* 7. 排序記錄*n"); printf("ttt* 0. 退出程序*n"); printf("ttt*n"); printf("tt請您選擇(0-7):"); c=getchar(); while(c<'0'|c>'7'); return(c-'0'); (2)顯示模塊此模塊為顯示所有記錄,流程圖如下:選擇顯示功能顯示所有數(shù)據(jù)回主菜單void Display(Person per,int n)

9、 Inti;printf("-n"); /格式 printf("編號t姓名t年齡t電話號碼t通訊地址t電子郵箱n"); printf("-n"); for(i=1;i<n+1;i+) printf("%-8d%-8s%-8s%-18s%-18s%-8sn",peri-1.score,,peri-1.age,peri-1.num,peri-1.adds,peri-1.email); if(i>1&&i%10=0) printf("t-n"); pr

10、intf("t"); system("pause"); printf("t-n"); printf("-n"); system("pause"); (3)修改模塊此模塊先調(diào)用查找函數(shù)查找到所要修改的信息,然后用戶根據(jù)需要修改信息。流程圖如下:開始輸入要修改記錄的姓名是否找到信息提示未找到信息顯示要修改的信息修改需要修改的條目,并保存結束NYvoid xiugai(Person per,int n) char s20; int i=0; printf("t請輸入想修改的記錄中的名字:&q

11、uot;); scanf("%s",s); /輸入修改人的名字 while(strcmp(,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return; printf("t編號:"); scanf("t%d",&peri.score); printf("t姓名:"); scanf("t%s",); printf("t年齡:"); scanf(&

12、quot;t%s",peri.age); printf("t電話號碼:"); scanf("t%s",peri.num); printf("t通訊住址:"); scanf("t%s",peri.adds); printf("t電子郵箱:"); scanf("t%s",peri.email); printf("t修改成功"); (4)插入模塊 此模塊為插入信息模塊,插入后再調(diào)用保存函數(shù)來保存所插入的數(shù)據(jù),支持多條信息的插入。 流程圖開始輸入要插入的

13、記錄個數(shù)ni從0到n-1調(diào)用Input函數(shù)i!=0嗎?返回主菜單保存調(diào)用baocun函數(shù)結束NYY int Input(Person per,int n) int i=0; char sign,x10; while(sign!='n'&&sign!='N') printf("t編號:"); scanf("t%d",&pern+i.score); printf("t姓名:"); scanf("t%s",pern+); printf("t年齡

14、:"); scanf("t%s",pern+i.age); printf("t電話號碼:"); scanf("t%s",pern+i.num); printf("t通訊住址:"); scanf("t%s",pern+i.adds); printf("t電子郵箱:"); scanf("t%s",pern+i.email); gets(x); printf("nt是否繼續(xù)添加?(Y/N)"); scanf("t%c&qu

15、ot;,&sign); i+; return(n+i); (5)刪除模塊此模塊先利用查找模塊找到所要刪除的信息,然后根據(jù)用戶的選擇來確定是否刪除信息,此種調(diào)用到Save函數(shù)。其流程圖如下:開始輸入要刪除信息的名字是否找到信息提示沒有找到信息NY顯示找到的信息提示是否刪除NY提示未刪除提示刪除成功結束int shanchu(Person per,int n) char s20; int i=0,j; printf("t請輸入想刪除記錄中的名字:"); scanf("%s",s); while(strcmp(,s)!=0&&

16、amp;i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return(n); for(j=i;j<n-1;j+) strcpy(perj.num,perj+1.num); strcpy(,perj+1.name); strcpy(perj.age,perj+1.age); strcpy(perj.adds,perj+1.adds); strcpy(perj.email,perj+1.email); printf("ttt已經(jīng)成功刪除!n"); return(n-1); (6) 查詢模塊void

17、 chaxun(Person per,int n) int m; printf("tn請選擇查詢方式:n"); printf("t-n"); printf("t1-姓名查詢n"); printf("t2-電話查詢n"); printf("t3-地址查詢n"); printf("t4-返回 n"); printf("t-n"); printf("請選擇:"); scanf("%d",&m); while(m!=

18、1&&m!=2&&m!=3&&m!=4) printf("輸入錯誤請重新選擇:"); scanf("%d",&m); if(m=1) char s20; int i=0; printf("t請輸入想查詢的姓名:"); scanf("t%s",s); while(strcmp(,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return; printf(&

19、quot;t此人編號: %dn",peri.score); /輸出查詢結果 printf("t此人年齡: %sn",peri.age); printf("t電話號碼: %sn",peri.num); printf("t通訊地址: %sn",peri.adds); printf("t電子郵箱: %sn",peri.email); ; if(m=2) char s20; int i=0; printf("t請輸入想查詢的電話:"); scanf("t%s",s); wh

20、ile(strcmp(peri.num,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return; printf("t此人編號: %dn",peri.score); /輸出查詢結果 printf("t此人姓名: %sn",); printf("t此人年齡: %sn",peri.age); printf("t通訊地址: %sn",peri.adds); printf("t電子郵箱: %sn"

21、;,peri.email); ; if(m=3) char s20; int i=0; printf("t請輸入想查詢的地址:"); scanf("t%s",s); while(strcmp(peri.adds,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return; printf("t此人編號: %dn",peri.score); /輸出查詢結果 printf("t此人姓名: %sn",); print

22、f("t此人年齡: %sn",peri.age); printf("t電話號碼: %sn",peri.num); printf("t電子郵箱: %sn",peri.email); ; (7)排序模塊 void paixu(Person per,int n) int i,j; / printf("t按編號排序:n"); for(i=1;i<n+1;i+) for(j=1;j<n-1;j+) if(strcmp(perj.num,perj+1.num)>0) strcpy(per->num,pe

23、rj.num); strcpy(per->name,); strcpy(per->age,perj.age); strcpy(per->adds,perj.adds); strcpy(per->email,perj.email); strcpy(perj+1.num,per->num); strcpy(perj+1.name,per->name); strcpy(perj+1.age,per->age); strcpy(perj+1.adds,per->adds); strcpy(perj+1.email,per->ema

24、il); printf("排序成功!n"); 五.測試結果1.主菜單2. 顯示所有信息3. 插入信息4 查找模塊 第一步:第二步:第三步:第四步:5. 刪除模塊6.修改模塊第一步第二步六. 課程心得總結 剛開始學習C語言,總覺得很難理解,也很難學。在這之前,我們已經(jīng)學習了一個學期,對C語言有了一定的了解,但是也僅僅是停留在學習了解的范圍,對里面的好多東西還是很陌生,并不是很熟練,有著許多欠缺,更多的在運用起來的時候還是感到很不好動手。這次的程序設計實驗是對我們進入大學以來學習程序設計語言結果的一次大檢驗。自己動手發(fā)現(xiàn)和解決問題。通過這,我發(fā)現(xiàn)了自己的許多不足,平時沒有掌握好

25、的知識在這次實驗中徹底暴露出來,經(jīng)過不斷思考,不斷查閱資料和上機運行解決其中大部分問題。當然,還存在一些問題沒有解決。我相信在以后的學習能夠解決好它們。課堂上許多關于C語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用C語言這個工具解決實際問題,又必須掌握它。通過上機練習,對于語法知識有了感性的認識,加深對它的理解,在理解的基礎上就會自然而然地掌握C語言的語法規(guī)定。對于一些內(nèi)容自己認為在課堂上聽懂了,但上機實踐中會發(fā)現(xiàn)原來理解的偏差,更加鞏固了學過的知識,而且在設計的時候學要系統(tǒng)的知識,也是一個較大的挑戰(zhàn),某一方面知識的欠缺都將影響到整個程序的設計。這次的大作業(yè)讓

26、我學到了很多有用的東西,鞏固了之前的學習,通過這個程序的學習,使我進一步理解和運用結構化程序設計的思想和方法。相信對以后初步掌握開發(fā)一個小型實用系統(tǒng)的基本方法,學會調(diào)試一個比較長程序的基本方法,學會利用流程圖表示算法,進一步掌握和提高利用C語言進行程序設計的能力。我認為,這次實習對于我是非常有意義的,對我個人的影響比較大,對我的動手能力有了很大的提高。通過這次課程設計,我對很多的函數(shù)有了新的認識,也學會了運用多種函數(shù)。最后感謝完成大作業(yè)過程中幫助過我的老師和同學。源代碼:#include<stdlib.h> #include<stdio.h>#include<st

27、ring.h> typedef struct char score; /*編號*/ char name10; /*姓名*/ char num15; /*號碼*/ char email20; /*郵箱*/ char age8; /*年齡*/ char adds20; /*地址*/ Person; Person pe80; int menu_select() char c; do system("cls"); printf("ttt*n");/窗口初始化 printf("ttt* 歡迎使用通訊錄管理系統(tǒng)! *n"); printf(

28、"ttt*n"); printf("ttt* 1. 添加記錄 *n"); printf("ttt* 2. 顯示記錄*n"); printf("ttt* 3. 刪除記錄*n"); printf("ttt* 4. 查詢記錄*n"); printf("ttt* 5. 修改記錄*n"); printf("ttt* 6. 保存記錄*n"); printf("ttt* 7. 排序記錄*n"); printf("ttt* 0. 退出程序*n

29、"); printf("ttt*n"); printf("tt請您選擇(0-7):"); c=getchar(); while(c<'0'|c>'7'); return(c-'0'); void paixu(Person per,int n) int i,j; / printf("t按編號排序:n"); for(i=1;i<n+1;i+) for(j=1;j<n-1;j+) if(strcmp(perj.num,perj+1.num)>0) str

30、cpy(per->num,perj.num); strcpy(per->name,); strcpy(per->age,perj.age); strcpy(per->adds,perj.adds); strcpy(per->email,perj.email); strcpy(perj+1.num,per->num); strcpy(perj+1.name,per->name); strcpy(perj+1.age,per->age); strcpy(perj+1.adds,per->adds); strcpy(perj+1

31、.email,per->email); printf("排序成功!n"); int Input(Person per,int n) int i=0; char sign,x10; while(sign!='n'&&sign!='N') printf("t編號:"); scanf("t%d",&pern+i.score); printf("t姓名:"); scanf("t%s",pern+); printf("t年

32、齡:"); scanf("t%s",pern+i.age); printf("t電話號碼:"); scanf("t%s",pern+i.num); printf("t通訊住址:"); scanf("t%s",pern+i.adds); printf("t電子郵箱:"); scanf("t%s",pern+i.email); gets(x); printf("nt是否繼續(xù)添加?(Y/N)"); scanf("t%c&q

33、uot;,&sign); i+; return(n+i); void Scan(Person per,int n) int i; FILE *fp; if(fp=fopen("record.txt","rb")=NULL)/打開文件 printf("不能打開文件!n"); exit(1); fscanf(fp,"%d",&n);/讀入記錄數(shù) /fseek(fp,0,1); for(i=0;i<n;i+) fscanf(fp,"%-5d%-8s%-6s%-13s%-15s%-15sn&

34、quot;,peri-1.score,,peri-1.age,peri-1.num,peri-1.adds,peri-1.email);fclose(fp);printf("tt* 文件數(shù)據(jù)讀入成功 !*n");void Display(Person per,int n) int i; printf("-n"); /*格式*/ printf("編號t姓名t年齡t電話號碼t通訊地址t電子郵箱n"); printf("-n"); for(i=1;i<n+1;i+) printf("

35、%-8d%-8s%-8s%-18s%-18s%-8sn",peri-1.score,,peri-1.age,peri-1.num,peri-1.adds,peri-1.email); if(i>1&&i%10=0) printf("t-n"); printf("t"); system("pause"); printf("t-n"); printf("-n"); system("pause"); int shanchu(Pe

36、rson per,int n) char s20; int i=0,j; printf("t請輸入想刪除記錄中的名字:"); scanf("%s",s); while(strcmp(,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return(n); for(j=i;j<n-1;j+) strcpy(perj.num,perj+1.num); strcpy(,perj+1.name); strcpy(perj.age,per

37、j+1.age); strcpy(perj.adds,perj+1.adds); strcpy(perj.email,perj+1.email); printf("ttt已經(jīng)成功刪除!n"); return(n-1); void chaxun(Person per,int n) int m; printf("tn請選擇查詢方式:n"); printf("t-n"); printf("t1-姓名查詢n"); printf("t2-電話查詢n"); printf("t3-地址查詢n&quo

38、t;); printf("t4-返回 n"); printf("t-n"); printf("請選擇:"); scanf("%d",&m); while(m!=1&&m!=2&&m!=3&&m!=4) printf("輸入錯誤請重新選擇:"); scanf("%d",&m); if(m=1) char s20; int i=0; printf("t請輸入想查詢的姓名:"); scanf(&qu

39、ot;t%s",s); while(strcmp(,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return; printf("t此人編號: %dn",peri.score); printf("t此人年齡: %sn",peri.age); printf("t電話號碼: %sn",peri.num); printf("t通訊地址: %sn",peri.adds); printf("t電子郵

40、箱: %sn",peri.email); ; if(m=2) char s20; int i=0; printf("t請輸入想查詢的電話:"); scanf("t%s",s); while(strcmp(peri.num,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return; printf("t此人編號: %dn",peri.score); printf("t此人姓名: %sn",); pri

41、ntf("t此人年齡: %sn",peri.age); printf("t通訊地址: %sn",peri.adds); printf("t電子郵箱: %sn",peri.email); ; if(m=3) char s20; int i=0; printf("t請輸入想查詢的地址:"); scanf("t%s",s); while(strcmp(peri.adds,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n")

42、; return; printf("t此人編號: %dn",peri.score); printf("t此人姓名: %sn",); printf("t此人年齡: %sn",peri.age); printf("t電話號碼: %sn",peri.num); printf("t電子郵箱: %sn",peri.email); ; void xiugai(Person per,int n) char s20; int i=0; printf("t請輸入想修改的記錄中的名字:&

43、quot;); scanf("%s",s); while(strcmp(,s)!=0&&i<n) i+; if(i=n) printf("t通訊錄中沒有此人!n"); return; printf("t編號:"); scanf("t%d",&peri.score); printf("t姓名:"); scanf("t%s",); printf("t年齡:"); scanf("t%s",peri.age); printf("t電話號碼:"); scanf("t%s",peri.num); printf("t通訊住址:"); scanf("t%s"

溫馨提示

  • 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

提交評論