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

下載本文檔

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

文檔簡介

鄭州A%

課程報告

課程名稱:C語言程序設計

專業(yè)班級:(15)班

學生姓名:謝*

學號:20127611***

任課教師:趙**

學期:2012-2013-2

課程報告任務書

通訊錄管理系統(tǒng)

開發(fā)一個通訊錄管理系統(tǒng),基本信息包括:編號、姓名、性別、出生年月、固定電話、

手機號、電子郵件等基本信息(也可以根據(jù)自己情況進行擴充)?使之能提供以下基

本功能:

(1)通訊錄等信息錄入功能(注:數(shù)據(jù)等要求用文件保存)一一輸入

(2)通訊錄信息的瀏覽功能一一輸出

主要(3)查詢功能(至少一種查詢方式)、排序功能(至少一種排序方式):

內(nèi)容①按電話號碼進行查詢②按姓名查詢等③按照年齡排序④按姓名排序等

(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)過程要求學生養(yǎng)成良好的編碼習慣、完成各個模塊并進行測試,最終

完成系統(tǒng)整體測試:

(4)總結階段按照要求完成系統(tǒng)設計和實現(xiàn)報告,并進行總結、答辯。

報告撰寫情況(30分)系統(tǒng)完成方擎況(30分)答辯情況(40分)

內(nèi)容規(guī)范程度程序測試基本功能擴展功能自述情況答辯情況

成績20分5分5分20分10分10分30分總分

評定

成績評定教師:

需求分析

1,具有數(shù)據(jù)的插入、修改、刪除、顯示和查詢功能的電話簿管理程序。

2,數(shù)據(jù)包括:人名、工作單位、電話號碼和E-MAIL地址。

3,可對記錄中的姓名和電話號碼進行修改。

4,可增加和刪除記錄。

5,可顯示所有的保存記錄。

6,可按人名或電話號碼進行查詢。

分析

建議采用結構體數(shù)組和文件系統(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("cis");

自定義輸入函數(shù):input();

字符輸入函數(shù):getchar();

修改數(shù)據(jù)函數(shù):xiugai();

保存數(shù)據(jù)函數(shù):baocunO;

排序數(shù)據(jù)函數(shù):paixuO;

各函數(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ù)類型的定義:

用戶的狀態(tài)結構

用戶

(

編號:

姓名:

電話;

年齡;

郵箱:

地址;

(3)總體流程圖

根據(jù)上面的分析,可以將程序系統(tǒng)的設計分為如下幾個模塊:插入、顯示、刪除、查詢、修改、保存和退

出。

)

三.詳細設計

(1).主菜單;

主菜單一般設計得比較簡潔,只提供輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方

式選擇。

流程圖

【程序】

Personpe[80];

intmenu_select()

(

charc;

do{

system(MclsM);〃清屏

printf("\t\t\t**********************************************\n");〃窗口初始化

printf(''\t\t\t**********歡迎使用通訊錄管理系統(tǒng)!***********\"”);

printf(''\t\t\t*************.I***************f?

printf("\t\t\t**************1.添力口記錄***************\n");

printf("\t\t\t**************|2.顯示記錄|***********彌);

printf("\t\t\t**************|3.刪除記錄|****************5”);

printf("\t\t\t**************|4.查詢記錄|***************

printfC't't't**************|5.修改記錄|****************W'')?

printf(''\t\t\t**************|6.保存記錄|¥¥************¥亭孝'')?

pi?jntf("\t\t\t**************|7.排序記錄|*****************5”)?

printf("\t\t\t**************|0.退出程序|*****************\n”)?

printf("\t\t\t**************、****************5“)?

printf(H\t\t請您選擇(0?7)嚴);

c=getchar();

}while(c<,0,||c>,7,);

return(c-*O*);

)

(2)顯示模塊

此模塊為顯示所有記錄,流程圖如下:

voidDisplay(Personper[],intn)

(

Inti;

printf("------------------------------------------------------

n");〃格式

printf("編號\t姓名\t年齡\t電話號碼\t通訊地址\t電子郵箱'n");

printf("------------------------------------------------------

n");

for(i=l;i<n+l;i++)

printf(/z%-8d%-8s%-8s%-18s%-18s%-8s\n/z,per[i-l].score,per[i-1].name,per[i-1].age

,per[i-1].num,per[i-1].adds,per[i-l].email);

if(i>l&&i%10==0)

{printf("\t------------------------------------------\n");

printf;

system("pause");

printf("\t------------------------------------------\n");

})

printf("------------------------------------------------------------------------------------\

n");

system("pause");

(3)修改模塊

此模塊先調(diào)用查找函數(shù)查找到所要修改的信息,然后用戶根據(jù)需要修改信息。流程圖如下:

voidxiugai(Personper[],intn)

chars[20];

inti=0;

printf(〃\t請輸入想修改的記錄中的名字:〃);

scanf(〃%s",s);〃輸入修改人的名字

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i==n)

printf("\t通訊錄中沒有此人!\n");

return;

)

printfC\t編號:");

scanf&per[i].score);

printf(*\t姓名:");

scanfper[i].name);

printf(*\t年齡:");

scanf("\t%s",per[i].age);

printff\t電話號碼:");

scanfper[i].num);

printf(*\t通訊住址:");

scanfper[i].adds);

printfC\t電子郵箱;

scanf(*\t%s*,per[i].email);

printf("\t修改成功”);}

(4)插入模塊

此模塊為插入信息模塊,插入后再調(diào)用保存函數(shù)來保存所插入的數(shù)據(jù),支持多條信息的插入。

流程圖

intInput(Personper[],intn)

inti=0;

charsign,x[10];

while(sign!=,n&&sign!=,N')

printf(*\t編號:”);

scanf&per[n+i].score);

printf(*\t姓名:〃);

scanfper[n+i].name);

printf(*\t年齡:");

scanfper[n+i].age);

printf(*\t電話號碼:");

scanfper[n+i].num);

printf("\t通訊住址:");

scanfper[n+i].adds);

printf(*\t電子郵箱:");

scanf(*\t%s^>per[n+i].email);

gets(x);

printf("\n\t是否繼續(xù)添加?(Y/N)”);

scanffesign);

i++;

)

return(n+i);

)

(5)刪除模塊

此模塊先利用查找模塊找到所要刪除的信息,然后根據(jù)用戶的選擇來確定是否刪除信息,此

種調(diào)用到Save函數(shù)。其流程圖如下:

intshanchu(Personper[],intn)

(

chars[20];

inti=0,j;

printfC\t請輸入想刪除記錄中的名字:");

scanfs);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i==n)

printf("\t通訊錄中沒有此人!\n");

return(n);

)

for(j=i;j<n-l;j++)

(

strcpy(per[j].num,per[j+1].num);

strcpy(per[j].name,per[j+1].name);

strcpy(per[j].age,per[j+1].age);

strcpy(per[j].adds,per[j+1].adds);

strcpy(per[j].email,per[j+l].email);

)

printf(*\t\t\t已經(jīng)成功刪除!\n");

return(n-l);

)

(6)查詢模塊

voidchaxun(Personper[],intn)

(

intm;

printf("\t\n請選擇查詢方式:\n");

printf(*\t?------------------1\n");

printf("\t|1-----姓名查詢|\n〃);

printf(*\t12-----電話查詢|\n");

printf("\t|3-----地址查詢|\n");

printf(*\t|4-----返回|\n");

printfC\t1------------------1\n");

printf("請選擇:");

scanf("%d",&m);

while(m!=l&&m!=2&&m!=3&&m!=4)

printf(〃輸入錯誤請重新選擇:〃);

scanf("%d",&m);

)

if(m==l)

(

chars[20];

inti=0;

printfC\t請輸入想查詢的姓名:”);

scanfs);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i=n)

(

printf("\t通訊錄中沒有此人!\n");

return;

)

printf("\t此人編號:%d\n*,per[i].score);〃輸出查詢結果

printf(*\t此人年齡:%s\n",per[i].age);

printf(*\t電話號碼:%s\n*,per[i].num);

printf("\t通訊地址:%s\n*,per[i],adds);

printf(*\t電子郵箱:%s\n*,per[i].email);

);

if(m==2)

(

chars[20];

inti=0;

printf("\t請輸入想查詢的電話:");scanf("\t%s",s);

while(strcmp(per[i].num,s)!=0&&i<n)i++;

if(i==n)

printff\t通訊錄中沒有此人!\n〃);

return;

printf("\t此人編號:%d\n",per[i].score);〃輸出查詢結果

printf("\t此人姓名:%s\n”,per[i].name);

printf(*\t此人年齡:%s\n",per[i].age);

printf("\t通訊地址:%s\n”,per[i].adds);

printf(*\t電子郵箱:%s\n*,per[i].email);

);

if(m==3)

chars[20];

inti=0;

printf(〃\t請輸入想查詢的地址:〃);

scanfC\t%s*,s);

while(strcmp(per[i].adds,s)!=0&&i<n)

i++;

if(i=n)

printf(*\t通訊錄中沒有此人!\n〃);

return;

printf("\t此人編號:%d\n",per[i].score);〃輸出查詢結果

printf("\t此人姓名:%s\n”,per[i].name);

printfC"\t此人年齡:%s\n*,per[i].age);

printf(*\t電話號碼:%s\n*,per[i].num);

printf(*\t電子郵箱:%s\n*,per[i].email);

);

(7)排序模塊

voidpaixu(Personper[],intn)

inti,j;

//printf(〃\t\按編號排序:\n〃);

for(i=l;i<n+l;i++)

(

for(j=l;j<n-l;j++)

if((strcmp(per[j].num,per[j+1].num))>0)

(

strcpy(per->num,per[j].num);

strcpy(per->name,per[j].name);

strcpy(per->age,per[j].age);

strcpy(per->adds,per[j].adds);

strcpy(per->emai1,per[j].email);

strcpy(per[j+1].num,per->num);

strcpy(per[j+1].name,per->name);

strcpy(per[j+1].age,per->age);

strcpy(per[j+1].adds,per->adds);

strcpy(per[j+1].email,per->email);

)

}

printf("排序成功!\n〃);

)

五.測試結果

L主菜單

2.顯示所有信息

通訊錄記錄表

富春一一證互一一洋品一一句詞*函Siw席而藉

蔡福麗£一二一

3.插入信息

歡迎使用通訊錄管理系統(tǒng)?XXXXXXiX

記錄

1添

2錄

.己

3錄

4己

5_己

6己

^錄

7己

0^漳

請您選擇《0-7〉:1

1

號1

碼1

址1

箱1

是否繼續(xù)添加?<Y/N)

4.查找模塊

第一步:

在通訊錄中查找記錄

青選擇查詢方式:

姓春

1查

2查

舞址

3詢

4返回

崗擇

主t

T

RA

主,擇1

想查

詢的

姓名1

。

人1

5:陽1

如1

訊1

郵1

-悵續(xù)

m

里入

^的電話1

編1

(

人1

#4:

人1

^

地1

^訊

^^1

{子

5?:忌

第四步:

請選擇:

千入

詢的

3址

想1

人i

號.

姓.

人.l

年.

話.i

號.

箱.

子l

郵.

續(xù).?

5.刪除模塊

****-***歡迎使用通訊錄管理系統(tǒng)?-*-****-

1記

2錄

3記

4記

5記

6記

7記

0番

請您選擇〈0-7):3

叢通迅錄中刪除記錄…

青輸入想刪徐記錄巾的名字:1

已經(jīng)成功刪除?

6.修改模塊

第一步

XXXXXXXXXX歡迎使用通訊錄管理系統(tǒng),………

1記錄

2錄

3記

4記

5^^記

6記

7錄

^M記

0漳

請您選擇《0-7〉:5

姓^:?

年齡:?

5:?

^訊

^子

改:?

囪中的

訊錄

中的

輸名字

修2

續(xù)

訊史

按忌

???

六.課程心得總結

剛開始學習C語言,總覺得很難理解,也很難學。在這之前,我們已經(jīng)學習了一個學期,

對C語言有了一定的了解,但是也僅僅是停留在學習了解的范圍,對里面的好多東西還是很

陌生,并不是很熟練,有著許多欠缺,更多的在運用起來的時候還是感到很不好動手。

這次的程序設計實驗是對我們進入大學以來學習程序設計語言結果的一次大檢驗。自己

動手發(fā)現(xiàn)和解決問題。通過這,我發(fā)現(xiàn)了自己的許多不足,平時沒有掌握好的知識在這次實

驗中徹底暴露出來,經(jīng)過不斷思考,不斷查閱資料和上機運行解決其中大部分問題。當然,

還存在一些問題沒有解決。我相信在以后的學習能夠解決好它們。

課堂上許多關于C語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是

不可取的。然而要使用c語言這個工具解決實際問題,又必須掌握它。通過上機練習,對于

語法知識有了感性的認識,加深對它的理解,在理解的基礎上就會自然而然地掌握C語言的

語法規(guī)定。對于一些內(nèi)容自己認為在課堂上聽懂了,但上機實踐中會發(fā)現(xiàn)原來理解的偏差,

更加鞏固了學過的知識,而且在設計的時候?qū)W要系統(tǒng)的知識,也是一個較大的挑戰(zhàn),某一方

面知識的欠缺都將影響到整個程序的設計。

這次的大作業(yè)讓我學到了很多有用的東西,鞏固了之前的學習,通過這個程序的學習,

使我進一步理解和運用結構化程序設計的思想和方法。相信對以后初步掌握開發(fā)一個小型實

用系統(tǒng)的基本方法,學會調(diào)試一個比較長程序的基本方法,學會利用流程圖表示算法,進一

步掌握和提高利用C語言進行程序設計的能力。

我認為,這次實習對于我是非常有意義的,對我個人的影響比較大,對我的動手能力

有了很大的提高。通過這次課程設計,我對很多的函數(shù)有了新的認識,也學會了運用多種函

數(shù)。最后感謝完成大作業(yè)過程中幫助過我的老師和同學。

源代碼:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

typedefstruct

(

charscore;/*編號*/

charname[10];/*姓名*/

charnum[15];/*號碼*/

charemai1[20];/*郵箱*/

charage[8];/*年齡*/

charadds[20];/*地址*/

}Person;

Personpe[80];

intmenu_select()

charc;

do(

system("cls");

printf("\t\t\t**********************************************\n");//窗口初始化

printf("\t\t\t**********歡迎使用通訊錄管理系統(tǒng)!***********\n");

printf(\t\t\t*************?-?***************\n),

printf("\t\t\t**************1.添加記錄***************\n");

printf("\t\t\t**************|2.顯示記錄|****************"");

printf("\t\t\t**************|3.刪除記錄|****************\n");

printf("\t\t\t**************|4.查詢記錄|****************\n");

printf("\t\t\t**************|5.修改記錄|****************\n");

printf("\t\t\t**************|6.保存記錄|****************\n");

printf("\t\t\t**************|7.排序記錄|****************\n");

printf("\t\t\t**************|0.退出程序|****************\n");

printf("\t\t\t**************」」****************\n");

printf("\t\t請您選擇(0-7);

c=getchar();

}while(c<J0>||c>>7J);

return(c,O');

}

voidpaixu(Personper[],intn)

inti,j;

//printf(〃\t\按編號排序:\n");

for(i=l;i<n+l;i++)

for(j=l;j<n-l;j++)

if((strcmp(per[j].num,per[j+l].num))>0)

(

strcpy(per->num,per[j].num);

strcpy(per->name,per[j].name);

strcpy(per->age,per[j].age);

strcpy(per->adds,per[j].adds);

strcpy(per->emai1,per[j].email);

strcpy(per[j+1].num,per->num);

strcpy(per[j+1].name,per->name);

strcpy(per[j+1].age,per->age);

strcpy(per[j+1].adds,per->adds);

strcpy(per[j+1].email,per->email);

}

}

printf("排序成功!\n");

)

intInput(Personper[],intn)

(

inti=0;

charsign,x[10];

while(sign!=,n&&sign!=,N')

(

printf(^Xt編號:");

scanf&per[n+i].score);

printfC\t姓名:〃);

scanfper[n+i].name);

printf("\t年齡:");

scanfper[n+i].age);

printf("\t電話號碼:“);

scanfper[n+i].num);

printf("\t通訊住址:“);

scanfper[n+i].adds);

printfC\t電子郵箱:〃);

scanfper[n+i].email);

gets(x);

printfC\n\t是否繼續(xù)添加?(Y/N)");

scanf("\t%c”,&sign);

i++;

)

return(n+i);

)

voidScan(Personper[],intn)

(

inti;

FILE*fp;

if((fp=fopen("record,txt","rb"))==NULL)〃打開文件

(

printf("不能打開文件!\n");

exit(l);

)

fscanf(fp,"%d",&n);〃讀入記錄數(shù)

//fseek(fp,0,1);

for(i=0;i<n;i++)

fscanf(fp,z,%-5d%-8s%-6s%-13s%-15s%-15s\n*,per[i-l].score,per[i-l].name,per[i-l]

.age,per[i-l].num,per[i-l].adds,per[i-l].email);

fclose(fp);

printf(^\t\t*************文件數(shù)據(jù)讀入成功!*************\n*);

)

voidDisplay(Personper[],intn)

(

inti;

printf("------------------------------------------------------------------------------------\

n");/*格式*/

printf(〃編號\t姓名\t年齡\t電話號碼\t通訊地址\t電子郵箱\n");

printf(*------------------------------------------------------------------------------------\

n〃);

for(i=l;i<n+l;i++)

printf-8d%-8s%-8s%-18s%-18s%-8s\n”,per[i-l].score,per[i-l].name,perage

,pernum,per[i-1].adds,per[i-1].email);

if(i>l&&i%10==0)

(

printf("\t-------------------------------------\n");

printf("\t");

system("pause");

printf(^Xt--------------------------------------\n");

)

)

printf("----------------------------------------------------------------------------\

n");

system("pause");

}intshanchu(Personper[],intn)

(

chars[20];

inti=0,j;

printfC\t請輸入想刪除記錄中的名字:");

scanfs);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i==n)

(

printfC\t通訊錄中沒有此人!\n");

return(n);

}

for(j=i;j<n-l;j++)

strcpy(per[j].num,per[j+l].num);

strcpy(per[j].name,per[j+l].name);

strcpy(per[j].age,per[j+l].age);

strcpy(per[j].adds,per[j+l].adds);

strcpy(per[j].email,per[j+l].email);

)

printf(*\t\t\t已經(jīng)成功刪除!\n");

return(n-l);

)

voidchaxun(Personper[],intn)

(

intm;

printf(*\t\n請選擇查詢方式:\n");

printf(*\t?------------------1\n");

printfC\t|1-----姓名查詢|\n〃);

printf(*\t12-----電話查詢|\n");

printf(*\t|3-----地址查詢|\n*);

printf(*\t|4-----返回|\n");

printfC\t1------------------1\n");

printf("請選擇:");

scanf&m);

while(m!=l&&m!=2&&m!=3&&m!=4)

(

printf(〃輸入錯誤請重新選擇:");

scanf(線d",&m);

)

if(m==l)

(

chars[20];

inti=0;

printf(〃\t請輸入想查詢的姓名:");

scanf("\t%s”,s);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i=n)

printf("\t通訊錄中沒有此人!\n");

return;

printf(*\t此人編號:%d\n",per[i].score);

printf("\t此人年齡:%s\n",per[i].age);

printf(*\t電話號碼:%s\n",per[i].num);

printf(*\t通訊地址:%s\n",per[i].adds);

printf(*\t電子郵箱:%s\n*,per[i].email);

);

if(m==2)

chars[20];

inti=0;

printf("\t請輸入想查詢的電話:");scanf('\t%s",s);

while(strcmp(per[i].num,s)!=0&&i<n)i++;

if(i==n)

printfC\t通訊錄中沒有此人!\n");

return;

}

printf(*\t此人編號:%d\n",per[i].score);

printf(*\t此人姓名:%s\n",per[i].name);

printf

溫馨提示

  • 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

提交評論