C語言課程設(shè)計-手機(jī)通信錄管理系統(tǒng)計.doc_第1頁
C語言課程設(shè)計-手機(jī)通信錄管理系統(tǒng)計.doc_第2頁
C語言課程設(shè)計-手機(jī)通信錄管理系統(tǒng)計.doc_第3頁
C語言課程設(shè)計-手機(jī)通信錄管理系統(tǒng)計.doc_第4頁
C語言課程設(shè)計-手機(jī)通信錄管理系統(tǒng)計.doc_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

此文檔收集于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系網(wǎng)站刪除C語言課程設(shè)計課程名稱 C語言課程設(shè)計 教師姓名 本科生姓名 本科生學(xué)號 本科生專業(yè) 所在院系 類別: 日期: 課程設(shè)計評語對課程論文的評語:平時成績:課程論文成績:總 成 績:評閱人簽名:注:1、無評閱人簽名成績無效;2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;3、如有平時成績,必須在上面評分表中標(biāo)出,并計算入總成績。 目 錄課程設(shè)計評語.2目錄.31課程論文題目. 42. 程序設(shè)計思路.43功能模塊圖.44數(shù)據(jù)結(jié)構(gòu)設(shè)計.55算法設(shè)計.56程序代碼157程序運(yùn)行結(jié)果218編程中遇到的問題及解決辦法289總結(jié)心得及良好建議2810致謝291課程論文題目手機(jī)通信錄管理系統(tǒng)設(shè)計模擬手機(jī)通訊錄管理系統(tǒng),實現(xiàn)對手機(jī)中的通訊錄進(jìn)行管理。功能要求下: (1)查看功能:選擇此功能時,列出下列三類選擇。 A 辦公類 B 個人類 C 商務(wù)類 ,當(dāng)選中某類型時,顯示出此類所有數(shù)據(jù)中的姓名和電話號(2)增加功能:能錄入新數(shù)據(jù)一個結(jié)點包括:姓名、電話號碼、分類(可選項有:A 辦公類 B 個人類C商務(wù)類)、電子郵件。例如:楊春商務(wù)類 當(dāng)錄入了重復(fù)的姓名和電話號碼時,則提示數(shù)據(jù)錄入重復(fù)并取消錄入;當(dāng)通信錄中超過15條信息時,存儲空間已滿,不能再錄入新數(shù)據(jù);錄入的新數(shù)據(jù)能按遞增的順序自動進(jìn)行條目編號。 (3)修改功能:選中某個人的姓名時,可對此人的相應(yīng)數(shù)據(jù)進(jìn)行修改 (4)刪除功能:選中某個人的姓名時,可對此人的相應(yīng)數(shù)據(jù)進(jìn)行刪除,并自動調(diào)整后續(xù)條目的編號。2程序設(shè)計思路根據(jù)題目要求,通訊錄中的每一條信息應(yīng)當(dāng)是以文本文件的方式存放,所以要提供文件的輸入輸出等操作;在程序中需要對通訊錄內(nèi)容的管理,應(yīng)提供查看,增加,修改,刪除條目等操作;另外還應(yīng)提供鍵盤是選擇菜單實現(xiàn)功能的選擇。3功能模塊圖手機(jī)通信錄管理系統(tǒng)退 出刪除功能修改功能增加功能 4數(shù)據(jù)結(jié)構(gòu)設(shè)計根據(jù)題目要求,也是為了方便以后調(diào)用,我們選擇應(yīng)用結(jié)構(gòu)體來進(jìn)行該程序的編寫。本程序也可以使用數(shù)組和鏈表完成,但是考慮到,鏈表對于我們還過于復(fù)雜,時間有限,且題目中有所謂“儲存空間”的限制,所以沒有必要應(yīng)用鏈表。沒有應(yīng)用數(shù)組是考慮到結(jié)構(gòu)體能更好的完成調(diào)用工作。而且可以使程序看起來更有條理。程序中應(yīng)用函數(shù)調(diào)用是必須的。這種程序中,應(yīng)用函數(shù)調(diào)用可以使系統(tǒng)更具模塊化。本程序的函數(shù)調(diào)用中,主函數(shù)只是對菜單函數(shù)進(jìn)行了調(diào)用,這樣由于子函數(shù)之間是可以相互調(diào)用的關(guān)系,所以,為后面調(diào)用菜單提供方便。5. 算法設(shè)計1、主函數(shù)主函數(shù)設(shè)計得應(yīng)簡單、直觀,所以我應(yīng)用了大量的函數(shù)調(diào)用。為了方便主菜單也可以調(diào)用,所以把菜單設(shè)計成了一個調(diào)用函數(shù),具體方法流程可見流程圖?!玖鞒虉D】顯示菜單列出功能輸入n選擇需要的功能,判斷n的值是否在15之間 否 是根據(jù)n的值調(diào)用各功能模塊函數(shù)【程序】 /*菜單函數(shù)*/void menu()int n,w1; do puts(ntt*歡迎使用手機(jī)通訊錄管理系統(tǒng)*n); puts(tt*菜單*n); puts(ttt1.查看功能); puts(ttt2.增加功能); puts(ttt3.修改功能); puts(ttt4.刪除功能); puts(ttt5.退出); puts(ntt*n); printf(請選擇你想要的功能序號(1-5):); scanf(%d,&n); if(n5) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1); switch(n) case 1:search();break; case 2:add();break; case 3:modify();break; case 4:del();break; case 5:exit(0);break; /*主函數(shù)*/main()menu();2、各功能模塊設(shè)計(1)查看功能模塊 【需求分析】 該模塊的功能是選擇一個查詢的類別就可以顯示出該類別中的所有信息條目(辦公類,個人類,商務(wù)類),并且其重要考慮到該類中的內(nèi)容是否有為空的情況,以及在選擇類別的過程中是否有輸入錯誤的情況?!玖鞒虉D】顯示已有的種類菜單輸入n選擇想要查看的種類,并判斷n的值是否在1-3之間 根據(jù)n值輸出各種類中所有成員信息是 否 返回主菜單【程序】 /*查看功能*/void search()int n,w1;doputs(tt*查看類別*n);puts(tttA.辦公類tn);puts(tttB.個人類tn);puts(tttC.商務(wù)類tn);puts(tt*n);printf(請輸入類別(辦公類請輸入“1”,個人類請輸入“2”,商務(wù)類請輸入“3”):);scanf(%d,&n);printf(n);if(n3)w1=1;getchar();printf(輸入錯誤返回主菜單n);menu();else w1=0;while(w1=1);switch(n)case 1:putout(1);break; case 2:putout(2);break; case 3:putout(3);break;(2)添加功能模塊 【需求分析】 該模塊的功能是要求增添一個信息條目(其中包括姓名、電話號碼、分類、電子郵件),觀察這種信息條目,很容易就聯(lián)想到用結(jié)構(gòu)體的方式來儲存。在添加之前應(yīng)該先檢查儲存器是否已滿;當(dāng)然在添加過程應(yīng)考慮到是否有姓名或電話號碼重復(fù)的情況,在這種情況下應(yīng)提醒操作者并退出操作。調(diào)用加載函數(shù)n=load();并計算可以記錄個數(shù)n 【流程圖】 判斷儲存器是否已滿 是 否 輸入姓名判斷輸入的姓名是否存在 是 否輸入電話號碼 判斷輸入的電話號碼是否存在 是 否通過n來輸入類別,并判斷n是否在1-3之間 是 輸入電子郵件地址 返回主菜單 【程序】/*添加功能*/void add()int i,n,m,w1;don=load();/*打開文件*/ if(n=N) printf(儲存器已滿返回主菜單n);menu();/*判斷儲存是否已滿*/ if(n!=0) printf(請輸入姓名:); scanf(%s,&); for(i=0;in;i+) if(strcmp(,)=0)printf(已存在返回主菜單n);menu();/*判斷姓名是否存在*/ printf(請輸入電話號碼:); scanf(%s,&an.phone); for(i=0;in;i+) if(strcmp(ai.phone,an.phone)=0)printf(已存在返回主菜單n);menu(); if(n=0) printf(請輸入姓名:); scanf(%s,&); printf(請輸入電話號碼:); scanf(%s,&an.phone); printf(請輸入類別(辦公類請輸入“1”,個人類請輸入“2”,商務(wù)類請輸入“3”):);scanf(%d,&an.zhonglei);m=an.zhonglei;if(m3) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu();else w1=0;while(w1=1);switch(m)case 1:strcpy(an.type,BGL);break; case 2:strcpy(an.type,GRL);break; case 3:strcpy(an.type,SWL);break; default:printf(輸入錯誤返回上一菜單n);menu();printf(請輸入電子郵件地址:);scanf(%s,&an.mail);saveA(n); /*將新的信息添加進(jìn)通訊錄*/choice();(3)修改功能模塊 【需求分析】 該模塊的功能是先判斷通訊錄是否為空,不為空的前提下輸入所想要修改的姓名,如果不存在則提醒操作者輸入錯誤并返回主菜單,如果存在則顯示其信息,并作出提示依次輸入修改后的內(nèi)容并記錄保存。判斷通訊錄是否為空【流程圖】 是 否 輸入想要修改的姓名判斷要修改的姓名是否存在 是 否 輸入新的類別輸入新的姓名輸入新的電話號碼輸入新的電子郵箱地址返回主菜單 【程序】/*修改功能*/void modify()int i,n,k,w1;dochar c100; n=load();if(n=0) printf(n);printf(通訊錄為空返回主菜單nn);menu();printf(請輸入你要修改的人物名稱:);scanf(%s,&c);for(i=0;in;i+)if(strcmp(c,)=0)break;/* 將輸入的名字存入c中,在依次與文件中的名字進(jìn)行比較。*/if(i=n)printf(n);printf(查無此人返回主菜單nn);menu();printf(%-20s %-15s %-5s %sn,,ai.phone,ai.type,ai.mail);printf(請輸入新的類別(辦公類請輸入“1”,個人類請輸入“2”,商務(wù)類請輸入“3”,取消修改請輸入“4”):);scanf(%d,&ai.zhonglei);k=ai.zhonglei;if(k5) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1);switch(k)case 1:strcpy(ai.type,BGL);break; case 2:strcpy(ai.type,GRL);break; case 3:strcpy(ai.type,SWL);break; case 4:printf(取消操作返回上一菜單n);menu(); printf(請輸入新的姓名:); scanf(%s,&(); printf(請輸入新的電話號碼:); scanf(%s,&(ai.phone);printf(請輸入新的郵箱地址:); scanf(%s,&(ai.mail); saveB(n);choice();(4) 刪除功能模塊【需求分析】該模塊的功能是通過輸入某一姓名,判斷改姓名是否存在,如果不存在,返回主菜單;如果存在則輸出該姓名的全部信息,再由操作者判斷是否刪除該條目。刪除后將其他的數(shù)據(jù)保存?!玖鞒虉D】判斷通訊錄是否為空 是 否輸入想要刪除的姓名判斷該姓名是否存在 否 是確定刪除? 是刪除成功,保存數(shù)據(jù) 否返回主菜單【程序】/*刪除功能*/void del()int i,n,j,w1,k;char b100;don=load();if(n=0) printf(n);printf(通訊錄為空返回主菜單nn);menu();printf(請輸入你要刪除的人物名稱:);scanf(%s,&b);for(i=0;in;i+)if(strcmp(b,)=0) break;if(i=N) printf(查無此人返回主菜單n);menu;printf(%-20s%-15s%-5s %sn,,ai.phone,ai.type,ai.mail);printf(確定要刪除此人嗎?(“是”請輸入“1”,“否”請輸入“2”):);scanf(%d,&k);if(k2) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1);switch(k)case 1:for(j=i;jn;j+) aj=aj+1;saveB(j);choice();menu();break; case 2:printf(取消操作返回主菜單n);menu(); 3、公共函數(shù) 下面是在每個功能模塊中都有可能用到的一些公共函數(shù)。(1) 加載函數(shù)load()【說明】 該函數(shù)可以用來加載所有的記錄,并且可以返回所有記錄的個數(shù)。#define MAGE struct messageMAGEint zhonglei; char name20; char phone15; char type5; char mail100; ;(在整個程序的開頭有聲明)【程序】load()FILE *fp;int i;if(fp=fopen(file.txt,ab+)=NULL)printf(n不能打開此文件返回主菜單n); return NULL;for(i=0;!feof(fp);i+) fread(&ai,sizeof(MAGE),1,fp);fclose(fp);return(i-1);(2)用于添加時的保存函數(shù)saveA()【說明】 該函數(shù)用于在將新信息添加至文件尾?!境绦颉縱oid saveA(int i)FILE *fp;if(fp=fopen(file.txt,ab)=NULL)printf(n不能打開此文件n); return NULL;if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(讀寫錯誤n);fclose(fp);(3)用于將修改或刪除之后記錄的保存函數(shù)saveB()【說明】 該函數(shù)與上面的函數(shù)不同在于,它是將原有的文件覆蓋后重新將記錄全部錄入【程序】void saveB(int n)FILE *fp;int i;if(fp=fopen(file.txt,wb)=NULL)/* 以wb的方式打開時,會將原來的文件刪去重建*/printf(n無法打開文件n);return NULL;for(i=0;in;i+)if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(讀寫錯誤返回主菜單n);menu();fclose(fp);(4)用于查看時的輸出函數(shù)putout() 【說明】該函數(shù)用于查看時輸出某一類別所有的信息?!境绦颉縱oid putout(int m)int i,n; int k=0; n=load(); for(i=0;in;i+) if(ai.zhonglei=m) k+; if(k=0) printf(通訊錄中該類別為空,返回主菜單n);printf(n);menu(); for(i=0;in;i+) if(ai.zhonglei=m) printf(%-20s %-15s %-5s %sn,,ai.phone,ai.type,ai.mail); menu();(5)操作成功函數(shù)choice()【說明】 該函數(shù)用于在執(zhí)行完某一操作時讓操作者選擇下一步的操作?!境绦颉縱oid choice()int k,w1;doprintf(操作已成功,請選擇下面的操作(1.返回主菜單 2.退出):); scanf(%d,&k);if(k2) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1); switch(k) case 1:menu();break; case 2:exit(0);break; 6程序代碼#include stdio.h #include string.h#includemalloc.h#define MAGE struct message#define N 15MAGEint zhonglei; char name20; char phone15; char type5; char mail100; aN;load();void saveA();void saveB();void menu();void choice();/*輸出功能*/void putout(int m)int i,n; int k=0; n=load(); for(i=0;in;i+) if(ai.zhonglei=m) k+; if(k=0) printf(通訊錄中該類別為空,返回主菜單n);printf(n);menu(); for(i=0;in;i+) if(ai.zhonglei=m) printf(%-20s %-15s %-5s %sn,,ai.phone,ai.type,ai.mail); menu();/*查看功能*/void search()int n,w1;doputs(tt*查看類別*n);puts(tttA.辦公類tn);puts(tttB.個人類tn);puts(tttC.商務(wù)類tn);puts(tt*n);printf(請輸入類別(辦公類請輸入“1”,個人類請輸入“2”,商務(wù)類請輸入“3”):);scanf(%d,&n);printf(n);if(n3) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0; while(w1=1);switch(n)case 1:putout(1);break; case 2:putout(2);break; case 3:putout(3);break;/*添加功能*/void add()int i,n,m,w1;don=load();/*打開文件*/ if(n=N) printf(儲存器已滿返回主菜單n);menu();/*判斷儲存是否已滿*/ if(n!=0) printf(請輸入姓名:); scanf(%s,&); for(i=0;in;i+) if(strcmp(,)=0)printf(已存在返回主菜單n);menu(); printf(請輸入電話號碼:); scanf(%s,&an.phone); for(i=0;in;i+) if(strcmp(ai.phone,an.phone)=0)printf(已存在返回主菜單n);menu(); if(n=0) printf(請輸入姓名:); scanf(%s,&); printf(請輸入電話號碼:); scanf(%s,&an.phone); printf(請輸入類別(辦公類請輸入“1”,個人類請輸入“2”,商務(wù)類請輸入“3”):);scanf(%d,&an.zhonglei);m=an.zhonglei;if(m3) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1);switch(m)case 1:strcpy(an.type,BGL);break; case 2:strcpy(an.type,GRL);break; case 3:strcpy(an.type,SWL);break; default:printf(輸入錯誤返回上一菜單n);menu();printf(請輸入電子郵件地址:);scanf(%s,&an.mail);saveA(n); /*將新的信息添加進(jìn)通訊錄*/choice();/*修改功能*/void modify()int i,n,k,w1;do char c100; n=load();if(n=0) printf(n);printf(通訊錄為空返回主菜單nn);menu();printf(請輸入你要修改的人物名稱:);scanf(%s,&c);for(i=0;in;i+)if(strcmp(c,)=0)break;if(i=n)printf(n);printf(查無此人返回主菜單nn);menu();printf(%-20s %-15s %-5s %sn,,ai.phone,ai.type,ai.mail);printf(請輸入新的類別(辦公類請輸入“1”,個人類請輸入“2”,商務(wù)類請輸入“3”,取消修改請輸入“4”):);scanf(%d,&ai.zhonglei);k=ai.zhonglei;if(k5) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1);switch(k)case 1:strcpy(ai.type,BGL);break; case 2:strcpy(ai.type,GRL);break; case 3:strcpy(ai.type,SWL);break; case 4:printf(取消操作返回上一菜單n);menu(); printf(請輸入新的姓名:); scanf(%s,&(); printf(請輸入新的電話號碼:); scanf(%s,&(ai.phone);printf(請輸入新的郵箱地址:); scanf(%s,&(ai.mail); saveB(n);choice();/*刪除功能*/void del()int i,n,j,w1,k;char b100;don=load();if(n=0) printf(n);printf(通訊錄為空返回主菜單nn);menu();printf(請輸入你要刪除的人物名稱:);scanf(%s,&b);for(i=0;in;i+)if(strcmp(b,)=0) break;if(i=N)printf(查無此人返回主菜單n);menu;printf(%-20s%-15s%-5s %sn,,ai.phone,ai.type,ai.mail);printf(確定要刪除此人嗎?(“是”請輸入“1”,“否”請輸入“2”):);scanf(%d,&k);if(k2) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1);switch(k)case 1:for(j=i;jn;j+) aj=aj+1;saveB(j);choice();menu();break; case 2:printf(取消操作返回主菜單n);menu(); /*加載函數(shù)*/load()FILE *fp;int i;if(fp=fopen(file.txt,ab+)=NULL)printf(n不能打開此文件返回主菜單n); return NULL;for(i=0;!feof(fp);i+) fread(&ai,sizeof(MAGE),1,fp);fclose(fp);return(i-1);/*保存函數(shù)*/void saveA(int i)FILE *fp;if(fp=fopen(file.txt,ab)=NULL)printf(n不能打開此文件n); return NULL;if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(讀寫錯誤n);fclose(fp);void saveB(int n)FILE *fp;int i;if(fp=fopen(file.txt,wb)=NULL)printf(n無法打開文件n);return NULL;for(i=0;in;i+)if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(讀寫錯誤返回主菜單n);menu();fclose(fp);/*操作成功函數(shù)*/void choice()int k,w1;doprintf(操作已成功,請選擇下面的操作(1.返回主菜單 2.退出):); scanf(%d,&k);if(k2) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1); switch(k) case 1:menu();break; case 2:exit(0);break; /*菜單函數(shù)*/void menu()int n,w1; do puts(ntt*歡迎使用手機(jī)通訊錄管理系統(tǒng)*n); puts(tt*菜單*n); puts(ttt1.查看功能); puts(ttt2.增加功能); puts(ttt3.修改功能); puts(ttt4.刪除功能); puts(ttt5.退出); puts(ntt*n); printf(請選擇你想要的功能序號(1-5):); scanf(%d,&n); if(n5) w1=1;getchar();printf(輸入錯誤返回主菜單n);menu(); else w1=0;while(w1=1); switch(n) case 1:search();break; case 2:add();break; case 3:modify();break; case 4:del();break; case 5:exit(0);break; /*主函數(shù)*/main()menu();7程序運(yùn)行結(jié)果歡迎界面:查看功能:增加功能:修改功能:刪除功能:退出:輸入5,再輸入【enter】,即可退出。8編程中遇到的困難及解決方法此次的編程對于我而言無疑是一件巨大的挑戰(zhàn),因自己的能力的問題,在編程過程中可以說是困難重重,首先便是時間的問題,雖然足足有好幾天

溫馨提示

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

最新文檔

評論

0/150

提交評論