C語言課程設(shè)計報告-c語言課程設(shè)計
C語言課程設(shè)計論文學(xué)生姓名: 陳丹 學(xué)生學(xué)號: 20091020101 所在班級: 信息與計算科學(xué)一班 任課教師: 馬老師 通訊錄管理系統(tǒng)【設(shè)計目的】設(shè)計“通訊錄管理系統(tǒng)”使其具有數(shù)據(jù)插入、修改、刪除、顯示和查詢等功能。(1) 數(shù)據(jù)包括:人名、工作單位、電話號碼和E-mail地址。(2) 可對記錄中的姓名和電話號碼進(jìn)行修改。(3) 可增加或刪除記錄。(4) 可顯示所有保存的記錄。(5) 可按人名或電話號碼進(jìn)行查詢?!驹O(shè)計思路】根據(jù)要求,電話簿數(shù)據(jù)以文本文件存放在文件中,故需要提供文件的輸入、輸出等操作;還需要保存記錄以進(jìn)行修改,刪除,查找等操作;另外還應(yīng)提供鍵盤式選擇菜單實現(xiàn)功能選擇。 【總體設(shè)計】通訊錄管理系統(tǒng)數(shù)據(jù)輸入數(shù)據(jù)修改刪除數(shù)據(jù)添加查找瀏覽圖1 系統(tǒng)功能模塊圖 【詳細(xì)設(shè)計】1. 主函數(shù)主函數(shù)設(shè)計要求簡潔,只提供部分提示語和函數(shù)的調(diào)用【程序】 顯示一系列功能選項輸入n,判斷n是否是17 ?根據(jù)n的值調(diào)用各功能模塊函數(shù)結(jié)束開始n 圖2. 主函數(shù)流程圖Void menu() /*主界面*/ int n, w1; void enter(); void add(); void modify(); void browse(); void deleter(); void search(); do puts("t*菜單*tnn"); puts("tttt1.新建聯(lián)系人"); puts("tttt2.添加聯(lián)系人"); puts("tttt3.修改"); puts("tttt4.刪除"); puts("tttt5.瀏覽"); puts("tttt6.查找"); puts("tttt7.退出"); puts("nnt*通訊錄*tn"); printf("請選擇服務(wù)種類(1-7) : bb"); scanf("%d",&n); if(n<1|n>7) w1=1;getchar(); else w1=0; while(w1=1); switch(n) case 1: enter(); break; /*輸入模塊*/ case 2: add(); break; /*添加模塊*/附錄:源代碼#define N 50#include<stdio.h>#include<string.h>struct peoplechar name20; char company50; char num15; char mail20;peopN;void printf_face() printf("nt姓名t單位t電話號碼t郵箱n"); void printf_one(int i) printf("t%st%st%st%sn",peopi.name,peopi.company,peopi.num,peopi.mail); void printf_n(int n) int j; for(j=0;j<n;j+) if(j!=0)&&(j%10=0) printf("nnPress any key to continue.:"); getchar(); puts("nn"); printf_one(j); getchar();int load() FILE *fp; int i; if(fp=fopen("file","rb")=NULL) printf("nCan not open filen"); exit(0);for(i=0;!feof(fp);i+) fread(&peopi,sizeof(struct people),1,fp);fclose(fp);return(i-1);int modify_data(int i,int n) int c,w1; void input(int i); void menu(); do puts("n修改選項=>nn 1).姓名 2).單位 3).電話號碼 4).郵箱 5).所有數(shù)據(jù) 6).取消并返回"); printf("請選擇?: bb"); scanf("%d",&c); if(c>6|c<1) puts("nChoose error! Please again!"); getchar(); while(c>6|c<1); do switch(c) case 1: printf("name:"); scanf("%s",peopi.name); break; case 2: printf("company:"); scanf("%s",peopi.company); break; case 3: printf("number:"); scanf("%s",peopi.num); break; case 4: printf("e-mail:"); scanf("%s",peopi.mail); break; case 5: input(i); break; case 6: menu(); puts("nNow:n"); printf_face(); printf_one(i); printf("n確定?nnt1).是 2).不,重新修改 3).返回不保存 bb"); scanf("%d",&w1); while(w1=2); return(w1);void input(int i) printf_face(); printf("t"); scanf("%st%st%st%s",peopi.name,peopi.company,peopi.num,peopi.mail); void save(int n) FILE *fp; int i; if(fp=fopen("file","wb")=NULL) printf("nCan not open filen"); exit(0); for(i=0;i<n;i+) if(peopi.name0!=0) if(fwrite(&peopi,sizeof(struct people),1,fp)!=1) printf("file write errorn"); fclose(fp);void printf_back() int w; void browse(); void menu(); printf("nnt_.Successful. _nn"); printf("What do you want to do?nnt1).瀏覽所有t2).返回: bb"); scanf("%d",&w); if(w=1) browse(); else menu();void main() void menu(); menu();void menu() int n, w1; void enter(); void add(); void modify(); void browse(); void deleter(); void search(); do puts("t*菜單* "); puts("tt*1.新建聯(lián)系人*"); puts("tt*2.添加聯(lián)系人*"); puts("tt*3.修 改*"); puts("tt*4.刪 除*"); puts("tt*5.瀏 覽*"); puts("tt*6.查 找*"); puts("tt*7.退 出*"); puts("nnt*通訊錄* "); printf("請選擇服務(wù)種類(1-7) : bb"); scanf("%d",&n); if(n<1|n>7) w1=1;getchar(); else w1=0; while(w1=1); switch(n) case 1: enter(); break; case 2: add(); break; case 3: modify(); break; case 4: deleter(); break; case 5: browse(); break; case 6: search(); break; case 7: exit(0); void enter() int i,n; printf("How many people(0-%d)?:",N-1); scanf("%d",&n); printf("請輸入數(shù)據(jù):n"); for(i=0;i<n;i+) printf("n輸入第 %d個記錄.n",i+1); input(i); if(i!=0) save(n); printf_back();void add() int i,n,k,t; n=load(); printf("How many people do you want to add(0-%d)?:",N-n-1); scanf("%d",&t); k=n+t; for(i=n;i<k;i+) printf("n輸入第 %d個記錄.n",i-n+1); input(i); save(k); printf_back();void modify() struct people s; int i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; printf_face(); printf_n(n); do printf("nnEnter name that you want to modify!nName:"); scanf("%s",s.name); for(i=0;i<n;i+) if(strcmp(s.name,peopi.name)=0) k=i; s=peopi; if(k=-1) printf("nn沒有記錄請重新輸入!"); while(k=-1); printf_face(); printf_one(k); w1=modify_data(k,n); if(w1=1) printf("nt_.Successful _.nn是否繼續(xù)?nnt1).是 2).保存返回t bb"); scanf("%d",&w0); w2=1; else w0=0; if(w2=0) peopk=s; if(w0!=1)&&(w2=1) save(n); while(w0=1); menu();void browse() int n; n=load(); printf_face(); printf_n(n); printf("t共有 %d 記錄.n",n); printf("nPress any key to back."); getchar(); menu();void search() int w0,k,i,n,w1,w2; struct people s; n=load(); do printf("請選擇查找類別: 1).姓名 2).電話號碼 bb"); scanf("%d",&w1); if(w1<1|w1>2) printf("輸入錯誤!請重新輸入!n"); w2=1; while(w2=1); if(w1=1) do k=-1; do printf("nnEnter name that tou want to search!nName:"); scanf("%s",s.name); for(i=0;i<n;i+) if(strcmp(s.name,peopi.name)=0) k=i; s=peopi; if(k=-1) printf("nn沒有記錄請重新輸入!"); while(k=-1); printf_face(); printf_one(k); printf("nWhat do you want to do?nt1).繼續(xù) 2).返回菜單 bb"); scanf("%d",&w0); while(w0=1); menu(); else do k=-1; do printf("nnEnter number that tou want to search!nNum:"); scanf("%s",s.num); for(i=0;i<n;i+) if(strcmp(s.num,peopi.num)=0) k=i; s=peopi; if(k=-1) printf("nn沒有記錄請重新輸入!"); while(k=-1); printf_face(); printf_one(k); printf("nWhat do you want to do?nt1).繼續(xù) 2).返回菜單 bb"); scanf("%d",&w0); while(w0=1); menu(); void deleter()struct people s; int i,n,k,w0,w1; n=load(); do k=-1; printf_face(); printf_n(n); do printf("nnEnter name that you want to delete!nName:"); scanf("%s",s.name); for(i=0;i<n;i+) if(strcmp(s.name,peopi.name)=0) k=i; s=peopi; if(k=-1) printf("nn沒有記錄請重新輸入!"); while(k=-1); printf_face(); printf_one(k); printf("n確定?nt1).是 2).返回 bb"); scanf("%d",&w0); if(w0=1) peopk.name0=0; save(n); else break; printf("nt_.Successful_.n"); printf("What do you want to do?nt1).繼續(xù) 2).返回 bb"); scanf("%d",&w1); while(w1=1); menu();【設(shè)計體會】通過為期一周的課程設(shè)計,我們對C語言這門課程有了更深一步的了解。它是計算機程序設(shè)計的重要理論技術(shù)基礎(chǔ),在我們信息與計算科學(xué)專業(yè)的學(xué)習(xí)中占據(jù)著十分重要的地位。同時也使我們知道,要學(xué)好這門課程,僅學(xué)習(xí)書本上的知識是不夠的,還要有較強的實踐能力。因為我們學(xué)習(xí)知識就是為了實踐。而只有多實踐,多編寫程序,才能更好的理解與掌握書本上的東西。運用C語言中的算法思想作數(shù)據(jù)結(jié)構(gòu),結(jié)合C語言基本知識,編寫一個通訊錄管理系統(tǒng)。通過完成本課題,進(jìn)一步熟悉C語言的基本知識,并掌握數(shù)據(jù)結(jié)構(gòu)的一些基本算法思想,掌握C語言的文件操作(包括從磁盤讀入和向磁盤寫入內(nèi)容),進(jìn)一步熟悉指針的用法,數(shù)組的建立運用和函數(shù)的調(diào)用等。【參考文獻(xiàn)】朱若愚.數(shù)據(jù)結(jié)構(gòu)M. 北京: 電子工業(yè)出版社, 2006.1:41-65晉良潁.數(shù)據(jù)結(jié)構(gòu)M. 北京:人民郵電出版社, 2007.05: 21-45劉大有.數(shù)據(jù)結(jié)構(gòu)M. 北京: 高等教育出版社, 2006.3: 30-58趙文靜. 數(shù)據(jù)結(jié)構(gòu)與算法M. 北京: 科學(xué)出版社, 2007.8: 41-64徐孝凱.數(shù)據(jù)結(jié)構(gòu)簡明教程.M. 北京: 清華大學(xué)出版社, 2006.04: 102-115嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)M. 北京:清華大學(xué)出版社, 2007.4: 39-43傅清祥,王曉東. 數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計M. 北京: 電子工業(yè)出版社, 2006.3: 31-46王敬華,林萍,.陳靜. C語言程序設(shè)計M. 北京: 清華大學(xué)出版社, 2007.10: 22-39李云清,楊慶紅,揭安全.數(shù)據(jù)結(jié)構(gòu)(C語言版)M. 北京:人民郵電出版社,2006.1: 44-67 10李春葆. 數(shù)據(jù)結(jié)構(gòu)(C語言版)習(xí)題與解析M.北京:清華大學(xué)出版社, 2006.1: 47-55