加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

C語言程序設(shè)計-通訊錄

08/22 13:19
1817
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

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

  1. 問題定義與描述

1.1問題定義

創(chuàng)建一個學(xué)生通訊錄管理系統(tǒng)。系統(tǒng)中每個學(xué)生信息包括學(xué)號、姓名、性別、出生日期、家庭地址、學(xué)號、電話、QQ。程序的運(yùn)行效果如下圖所示,選擇任意菜單后,實現(xiàn)相應(yīng)功能。

圖1.1? 學(xué)生通訊錄管理系統(tǒng)功能需求

1.2問題描述

在問題定義與描述階段要考慮題目的可行性和需求分析,接下來進(jìn)入開發(fā)階段,完成系統(tǒng)設(shè)計和系統(tǒng)實現(xiàn)的任務(wù)。

2、系統(tǒng)設(shè)計

總體設(shè)計

采用模塊化的程序設(shè)計方法,即將較大的任務(wù)按照一定的原則分為一個個較小的任務(wù),然后分別設(shè)計各個小任務(wù)。需要注意的是劃分出來的模塊應(yīng)該相對獨立但又相關(guān),且容易理解。可以用模塊化層次結(jié)構(gòu)圖(即模塊圖)來分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述。

2.1主要功能模塊

添加:添加通訊錄記錄。

顯示:顯示通訊錄記錄。

刪除:刪除通訊錄記錄。

查詢:查詢通訊錄記錄。

修改:修改通訊錄記錄。

保存:將信息保存到文件。

2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計

結(jié)構(gòu)體

s struct addr???????????? /*通訊地址結(jié)構(gòu)定義*/

{?? char post_num[10];? /*郵編*/

char addr[40];????? /*家庭地址*/

};

struct birth????? /*出生年月結(jié)構(gòu)定義*/

{?? int year;???? /*年份*/

int month;??? /*月份*/

int day;????? /*日期*/

};

struct friend1???? /*電子通訊錄結(jié)構(gòu)定義*/

{?? int number;?????? /*序號*/

char name[20];???? /*姓名*/

char sex;???????????? /*性別*/

struct birth birth;?? /*出生年月*/

struct addr addr;???? /*通信地址*/

char telephone[13];?? /*聯(lián)系電話*/

}friends[50];

FILE *fp;

int i;

2.3輸入記錄模塊

輸入記錄模塊主要實現(xiàn)將數(shù)據(jù)存入結(jié)構(gòu)體中。,用戶應(yīng)選擇2,調(diào)用Data_Inpu ()函數(shù),進(jìn)行朋友姓名、電話、地址、性別的輸入,即完成在結(jié)構(gòu)體中添加記錄的操作。

2.4查詢記錄模塊

查詢記錄模塊主要實現(xiàn)了在結(jié)構(gòu)體中按姓名查找滿足相關(guān)條件的信息記錄。在查詢函數(shù)search()中,找到相同名字則打印出記錄。

2.5刪除記錄模塊

該操作完成刪除指定姓名的記錄,

輸入要刪除的序號,輸入后調(diào)用函數(shù)若找到該記錄,詢問是否繼續(xù)尋找相同姓名的記錄。

2.6顯示所有記錄模塊

該操作完成顯示所有記錄信息,它分兩步完成。

第一步,按照數(shù)組中序號進(jìn)行排序。

第二步,逐條顯示出來。

3、系統(tǒng)實現(xiàn)

3.1 編碼

3.1.1 部分程序源代碼

#include<stdlib.h>

#include<string.h>

#include<conio.h>

#include<stdio.h>

#include<dos.h>

struct addr???????????? /*通訊地址結(jié)構(gòu)定義*/

{?? char post_num[10];? /*郵編*/

char addr[40];????? /*家庭地址*/

};

struct birth????? /*出生年月結(jié)構(gòu)定義*/

{?? int year;???? /*年份*/

int month;??? /*月份*/

int day;????? /*日期*/

};

struct friend1???? /*電子通訊錄結(jié)構(gòu)定義*/

{?? int number;?????? /*序號*/

char name[20];???? /*姓名*/

char sex;???????????? /*性別*/

struct birth birth;?? /*出生年月*/

struct addr addr;???? /*通信地址*/

char telephone[13];?? /*聯(lián)系電話*/

}friends[50];

FILE *fp;

int i;

void Data_Show(int j)??? /*打印記錄的詳細(xì)資料*/

{

printf("nntNo:%3dn",friends[j].number);

printf("ntBirthday(y/m/d):%4d%2d%2d",friends[j].birth.year,friends[j].birth.month,friends[j].birth.day);

printf("ntPostnum:%-10s",friends[j].addr.post_num);

printf("ntaddress:%-40s",friends[j].addr.addr);

printf("ntTele%-13s",friends[j].telephone);

}

void Data_Input(int j)??? /*記錄插入函數(shù)*/

{

fflush(stdin);

friends[j].number=j;

printf("nnntNo %d record",j);

printf("nntName:");????? /*讀入姓名*/

scanf("%s",friends[j].name);

fflush(stdin);

printf("ntSex(m/f):");??? /*讀入性別*/

scanf("%c",&friends[j].sex);

printf("nt---birthday---");?? /*讀入出生年月*/

printf("ntyear:");

scanf("%d",&friends[j].birth.year);

printf("nttmonth:");

scanf("%d",&friends[j].birth.month);

printf("nttday:");

scanf("%d",&friends[j].birth.day);

printf("ntPost_number:");?? /*讀入郵編*/

scanf("%s",friends[j].addr.post_num);

printf("ntAddress:");??? /*讀入家庭地址*/

scanf("%s",friends[j].addr.addr);

printf("nttelephone:");??? /*讀入聯(lián)系電話*/

scanf("%s",friends[j].telephone);

printf("y/n");

if( getch()=='n')

main();

}

void Data_Save()

{

int j;

fp=fopen("friend.txt","w");

for(j=1;j<=i;j++)

{?? fwrite(&friends[j],sizeof(struct friend1),1,fp);

}

}

void main()

{

int j,k;

char ch;

char *search_name;

clrscr();

Data_Load();

i--;

do

{?? printf("nnntFunction choose:");

printf("nt1.Read");

printf("nt2.Append");

printf("nt3.Delete");

printf("nt4.Search");

printf("nt5.Insert");

printf("nt6.Save and Exit");

printf("nt7.Quit");

printf("nn");

printf("tChoice:");

ch=getche();

switch(ch)

{?? case '1': j=1;???? /*顯示通訊錄中的所有記錄*/

while(getch()!=0x1b&&j<=i) Data_Show(j++);

if(j>i) printf("ntEnd of e_noten");

break;

case '2':????????? /*增加通訊錄中的記錄*/

while(getch()!=0x1b&&i<50)

{?? i++;

Data_Input(i);

}

if(i==50)printf("nte_note is filledn");

break;

case '3':?????????? /*刪除通訊錄中的記錄*/

if(i<1)

{?? printf("ntNo recordsn");

break;

}

printf("ntDelete No:");??? /*讀入刪除位置*/

scanf("%d",&k);

for(j=k;j<i;j++)?? /*刪除位置前的元素順序前移*/

{?? strcpy(friends[j].name,friends[j+1].name);

friends[j].sex=friends[j=1].sex;

friends[j].birth.year=friends[j+1].birth.year;

friends[j].birth.month=friends[j+1].birth.month;

friends[j].birth.day=friends[j+1].birth.day;

strcpy(friends[j].addr.post_num,friends[j+1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j+1].addr.addr);

strcpy(friends[j].telephone,friends[j+1].telephone);

}

i--;????? /*元素總數(shù)減1*/

break;

case '4':????? /*通訊錄查詢功能*/

printf("ntPlease input name:");

gets(search_name);

for(j=1;j<=i;j++)

{

if(strcmp(search_name,friends[j].name)==0)? /*比較字符串*/

{?? Data_Show(j);? /*查詢成功,打印記錄結(jié)束循環(huán)*/

break;

}

}

if(j>1)???? /*查詢失敗*/

printf("nt No such records")? ;

break;

case '5':

printf("ntInsert No:");???? /*錄入插入位置*/

scanf("%d",&k);

for(j=i+1;j<k;j++)? /*插入位置后的元素順序后移*/

{?? strcpy(friends[j].name,friends[j-1].name); /*交換元素內(nèi)容*/

friends[j].sex=friends[j-1].sex;

friends[j].birth.year=friends[j-1].birth.year;

friends[j].birth.month=friends[j-1].birth.month;

friends[j].birth.day=friends[j-1].birth.day;

strcpy(friends[j].addr.post_num,friends[j-1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j-1].addr.addr);

strcpy(friends[j].telephone,friends[j-1].telephone);

}

Data_Input(k);

i++;

break;

case '6': Data_Save();

exit(0);? break;

case '7': printf("ntDo you want to save e_note:(y/n)");

ch=getch();

if(ch=='y') Data_Save();

fclose(fp);

exit(0);

default: printf("Please choose num 1-4n"

);

}

}while(1);

}

3.1.2 主函數(shù)main()

main()函數(shù)主要實現(xiàn)了對整個程序的運(yùn)行控制,以及相關(guān)功能模塊的調(diào)用。

void main()

{

int j,k;

char ch;

char *search_name;

clrscr();

Data_Load();

i--;

do

{?? printf("nnntFunction choose:");

printf("nt1.Read");

printf("nt2.Append");

printf("nt3.Delete");

printf("nt4.Search");

printf("nt5.Insert");

printf("nt6.Save and Exit");

printf("nt7.Quit");

printf("nn");

printf("tChoice:");

ch=getche();

switch(ch)

{?? case '1': j=1;??? ?/*顯示通訊錄中的所有記錄*/

while(getch()!=0x1b&&j<=i) Data_Show(j++);

if(j>i) printf("ntEnd of e_noten");

break;

case '2':????????? /*增加通訊錄中的記錄*/

while(getch()!=0x1b&&i<50)

{?? i++;

Data_Input(i);

}

if(i==50)printf("nte_note is filledn");

break;

case '3':?????????? /*刪除通訊錄中的記錄*/

if(i<1)

{?? printf("ntNo recordsn");

break;

}

printf("ntDelete No:");??? /*讀入刪除位置*/

scanf("%d",&k);

for(j=k;j<i;j++)?? /*刪除位置前的元素順序前移*/

{?? strcpy(friends[j].name,friends[j+1].name);

friends[j].sex=friends[j=1].sex;

friends[j].birth.year=friends[j+1].birth.year;

friends[j].birth.month=friends[j+1].birth.month;

friends[j].birth.day=friends[j+1].birth.day;

strcpy(friends[j].addr.post_num,friends[j+1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j+1].addr.addr);

strcpy(friends[j].telephone,friends[j+1].telephone);

}

i--; ?????/*元素總數(shù)減1*/

break;

case '4':????? /*通訊錄查詢功能*/

printf("ntPlease input name:");

gets(search_name);

for(j=1;j<=i;j++)

{

if(strcmp(search_name,friends[j].name)==0)? /*比較字符串*/

{?? Data_Show(j);? /*查詢成功,打印記錄結(jié)束循環(huán)*/

break;

}

}

if(j>1)???? /*查詢失敗*/

printf("nt No such records")? ;

break;

case '5':

printf("ntInsert No:");???? /*錄入插入位置*/

scanf("%d",&k);

for(j=i+1;j<k;j++)? /*插入位置后的元素順序后移*/

{?? strcpy(friends[j].name,friends[j-1].name); /*交換元素內(nèi)容*/

friends[j].sex=friends[j-1].sex;

friends[j].birth.year=friends[j-1].birth.year;

friends[j].birth.month=friends[j-1].birth.month;

friends[j].birth.day=friends[j-1].birth.day;

strcpy(friends[j].addr.post_num,friends[j-1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j-1].addr.addr);

strcpy(friends[j].telephone,friends[j-1].telephone);

}

Data_Input(k);

i++;

break;

case '6': Data_Save();

exit(0);? break;

case '7': printf("ntDo you want to save e_note:(y/n)");

ch=getch();

if(ch=='y') Data_Save();

fclose(fp);

exit(0);

default: printf("Please choose num 1-4n"

);

}

}while(1);

}

3.1.3 主菜單界面

用戶進(jìn)入通訊錄系統(tǒng)時,需要顯示主菜單,提示用戶進(jìn)行選擇,完成相應(yīng)任務(wù)。此代碼被main()函數(shù)調(diào)用。

void main()

{

printf("nt1.Read");

printf("nt2.Append");

printf("nt3.Delete");

printf("nt4.Search");

printf("nt5.Insert");

printf("nt6.Save and Exit");

printf("nt7.Quit");

printf("nn");

printf("tChoice:");

ch=getche();

switch(ch)

3.1.4讀取文件中的記錄

檢查文件是否存在,建立student.txt文檔,用于保存通訊錄中的記錄。

void Data_Load()

{?? int j;

long k;

fp=fopen("friend.txt","r+t");?? /*打開文件friend.txt*/

if(fp!=NULL)

{?? for(i=1;i<50;i++)

{?? j=fgetc(fp);

if(j==EOF)??? /*判斷是否到了文件尾*/

return;

k=i-1;

fseek(fp,k*sizeof(struct friend1),SEEK_SET);

fread(&friends[i],sizeof(struct friend1),1,fp);/*從文件中讀取一條記錄

*/

}

}

else

{?? fp=fopen("friend.txt","w");

i=1;

}

}

}3.1.5 顯示所有記錄

由于記錄顯示操作經(jīng)常進(jìn)行,所以將這部分由獨立的函數(shù)來完成,減少代碼的重復(fù)。排序后更加方便查找所需要的朋友信息,為用戶減少不必要的麻煩。

case '1': j=1;???? /*顯示通訊錄中的所有記錄*/

while(getch()!=0x1b&&j<=i)

Data_Show(j++);

if(j>i) printf("ntEnd of e_noten");

break;

3.1.6 刪除學(xué)生記錄

在刪除操作中,系統(tǒng)會按用戶要求先找到該學(xué)生記錄,然后從將后一條記錄覆蓋過來。

case '3':?????????? /*刪除通訊錄中的記錄*/

if(i<1)

{?? printf("ntNo recordsn");

break;

}

printf("ntDelete No:");??? /*讀入刪除位置*/

scanf("%d",&k);

for(j=k;j<i;j++)?? /*刪除位置前的元素順序前移*/

{?? strcpy(friends[j].name,friends[j+1].name);

friends[j].sex=friends[j=1].sex;

friends[j].birth.year=friends[j+1].birth.year;

friends[j].birth.month=friends[j+1].birth.month;

friends[j].birth.day=friends[j+1].birth.day;

strcpy(friends[j].addr.post_num,friends

[j+1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j+1].addr.addr);

strcpy(friends[j].telephone,friends[j+1].telephone);

}

i--;????? /*元素總數(shù)減1*/

break;

3.1.7查找學(xué)生記錄

當(dāng)通訊記錄較多的時候,全部羅列出所有記錄太浪費(fèi)精力,查找則能精確快速的完成這項工作。

case '4':????? /*通訊錄查詢功能*/

printf("ntPlease input name:");

gets(search_name);

for(j=1;j<=i;j++)

{

if(strcmp(search_name,friends[j].name)==0)? /*比較字符串

*/

{?? Data_Show(j);? /*查詢成功,打印記錄結(jié)束循環(huán)*/

break;

}

}

if(j>1)???? /*查詢失敗*/

printf("nt No such records")? ;

break;

3.1.8 插入記錄

插入通訊錄中的朋友詳細(xì)信息。

case '5':

printf("ntInsert No:");???? /*錄入插入位置*/

scanf("%d",&k);

for(j=i+1;j<k;j++)? /*插入位置后的元素順序后移*/

{?? strcpy(friends[j].name,friends[j-1].name); /*交換元素內(nèi)

容*/

friends[j].sex=friends[j-1].sex;

friends[j].birth.year=friends[j-1].birth.year;

friends[j].birth.month=friends[j-1].birth.month;

friends[j].birth.day=friends[j-1].birth.day;

strcpy(friends[j].addr.post_num,friends[j-

1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j-1].addr.addr);

strcpy(friends[j].telephone,friends[j-1].telephone);

}

Data_Input(k);

i++;

break;

3.1.9寫入記錄到文件中。

將所輸入的朋友信息保存到frieng.txt中,防止信息丟失。

void Data_Input(int j)??? /*記錄插入函數(shù)*/

{

fflush(stdin);

friends[j].number=j;

printf("nnntNo %d record",j);

printf("nntName:");????? /*讀入姓名*/

scanf("%s",friends[j].name);

fflush(stdin);

printf("ntSex(m/f):");??? /*讀入性別*/

scanf("%c",&friends[j].sex);

printf("nt---birthday---");?? /*讀入出生年月*/

printf("ntyear:");

scanf("%d",&friends[j].birth.year);

printf("nttmonth:");

scanf("%d",&friends[j].birth.month);

printf("nttday:");

scanf("%d",&friends[j].birth.day);

printf("ntPost_number:");?? /*讀入郵編*/

scanf("%s",friends[j].addr.post_num);

printf("ntAddress:");??? /*讀入家庭地址*/

scanf("%s",friends[j].addr.addr);

printf("nttelephone:");??? /*讀入聯(lián)系電話*/

scanf("%s",friends[j].telephone);

printf("y/n");

if( getch()=='n')

main();

}

4程序測試與系統(tǒng)維護(hù)

4.1測試主菜單界面

主界面如圖4.1


圖4.1主界面

4.2測試添加界面

進(jìn)入添加界面,如圖4.2。

圖4.2添加界面

4.3測試顯示界面

進(jìn)入顯示界面,如圖4.3。


圖4.3顯示界面

4.4測試刪除界面

進(jìn)入刪除界面,如圖4.4。


圖4.4刪除界面
4.5測試查詢界面

進(jìn)入查詢界面,如圖4.5。

圖4.5查詢界面

4.6測試修改界面

進(jìn)入修改界面,如圖4.6。

圖4.6修改界面

4.7測試保存界面

進(jìn)入保存界面,如圖4.7。

圖4.7保存界面

需要完整的資料以及源程序可在我的資源里下載。

需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。

紛傳?點擊用微信打開即可,過程有點繁瑣請見諒。

  • 有需要資料的可了解一下.docx

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
EPCQ64ASI16N 1 Intel Corporation Memory Circuit, 8MX8, CMOS, PDSO16, SOIC-16

ECAD模型

下載ECAD模型
暫無數(shù)據(jù) 查看
AQY282S 1 Panasonic Electronic Components Solid State Relay,
$1.69 查看
ABM3C-25.000MHZ-D4Y-T 1 Abracon Corporation CRYSTAL 25.0000MHZ 18PF SMD

ECAD模型

下載ECAD模型
$2.57 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜