c語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)_第1頁
c語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)_第2頁
c語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)_第3頁
c語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)_第4頁
c語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

題目:學(xué)生通訊錄管理系統(tǒng)任務(wù)說明:主要利用c語言的文件操作能力設(shè)計開發(fā)一個小型的通訊錄管理系統(tǒng),至少具有如下功能:=1\*GB3①記錄通訊錄內(nèi)的人員的學(xué)號、姓名、地址、號碼。=2\*GB3②顯示所有人員的信息。=3\*GB3③通過輸入姓名查找人員信息。=4\*GB3④通過輸入姓名查找到要刪除的人員信息,然后可以進(jìn)行刪除。=5\*GB3⑤通過輸入姓名查找到要修改的人員信息,然后可以進(jìn)行修改。=6\*GB3⑥添加人員信息。系統(tǒng)功能描述:本程序的功能是為用戶提供簡單的通訊錄進(jìn)行管理,通過該程序存儲聯(lián)系人信息,提供關(guān)鍵字〔只能是英文關(guān)鍵字進(jìn)行查找〕查找功能,可以對數(shù)據(jù)進(jìn)行修改、刪除、添加等操作。各按鈕的功能如下:查找記錄:以姓名為關(guān)鍵字,查找并顯示該記錄。假設(shè)查找不到,那么顯示“好象沒有”;添加記錄:將當(dāng)前記錄按姓名序參加通訊錄,然后顯示第一條記錄;修改記錄:修改當(dāng)前記錄,顯示當(dāng)前記錄。姓名為關(guān)鍵字,不允許修改;刪除記錄:刪除當(dāng)前記錄,然后顯示第一條記錄;第一條記錄:將當(dāng)前記錄指針移動至首節(jié)點,假設(shè)已為首節(jié)點,那么不移動;前一條記錄:將當(dāng)前記錄指針向前移動一個節(jié)點,假設(shè)已為首節(jié)點,那么不移動;后一條記錄:將當(dāng)前記錄指針向后移動一個節(jié)點,假設(shè)已為尾節(jié)點,那么不移動;最后一條記錄:將當(dāng)前記錄指針移動至尾節(jié)點,假設(shè)已為尾節(jié)點,那么不移動;加載:從文件中掉入已保存的通訊錄數(shù)據(jù);保存:保存通訊錄數(shù)據(jù);退出:退出系統(tǒng);設(shè)計思路:根據(jù)要求,錄數(shù)據(jù)以文本文件存放在文件中,故需要提供文件的輸入、輸出等操作;還需要保存記錄以進(jìn)行修改,刪除,查找等操作;另外還應(yīng)提供鍵盤式選擇菜單實現(xiàn)功能選擇。通訊錄管理系統(tǒng)通訊錄管理系統(tǒng)數(shù)據(jù)輸入數(shù)據(jù)修改刪除數(shù)據(jù)添加查找瀏覽圖1系統(tǒng)功能模塊圖軟件中使用的結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組,如:structcallmember{charname[20]; charaddress[20]; charcode[20]; charcallnumber[20];};對用戶的信息進(jìn)行保存,他們都以二進(jìn)制的形式讀寫。其中:charname[20];charaddress[20]; charcode[20]; charcallnumber[20]分別對姓名、地址、、號碼進(jìn)行儲存在子函數(shù)中還使用了結(jié)構(gòu)體數(shù)組:structcallmemberone[100];還使用了exit()、fclose()等庫函數(shù)。還運用了頭文件:#include"stdafx.h"#include"string.h"#include<stdio.h>#include<stdlib.h>其中還使用大量的子函數(shù),例如:voidoutput();voiddel();voidfound();voidmodify();voidinsert();局部子函數(shù)的詳細(xì)代碼:voidoutput(){intb=0,i=0;intj;structcallmemberone[100]; FILE*fp; if((fp=fopen("e:\\通訊錄.txt","r"))==NULL) { printf("無法從已有通訊錄輸入!\n可能是因為原通訊錄不存在或為空!\n建議你檢查你的通訊錄文擋!\n"); exit(1); } while(fscanf(fp,"%s%s%s%s",one[i].name,one[i].address,one[i].code,one[i].callnumber)!=EOF) i++; j=i; for(i=0;i<j;i++) { printf("%s%s%s%s\n",one[i].name,one[i].address,one[i].code,one[i].callnumber); }fclose(fp);}voidinsert(){FILE*fp; structcallmember*p;if((fp=fopen("e:\\通訊錄.txt","a+"))==NULL) { printf("操作失敗."); exit(1); } p=(structcallmember*)malloc(sizeof(structcallmember));printf("************************\n"); printf("姓名:"); scanf("%s",p->name); printf("地址:"); scanf("%s",p->address); printf(":"); scanf("%s",p->code); printf(":"); scanf("%s",p->callnumber); printf("************************\n"); fprintf(fp,"%s%s%s%s",p->name,p->address,p->code,p->callnumber);fclose(fp); free(p);}通過對這些資源的合理利用使系統(tǒng)初步實現(xiàn)了通訊錄管理系統(tǒng)的根本功能。程序流程圖:執(zhí)行printf()退出系統(tǒng)調(diào)用output()函數(shù)調(diào)用insert()函數(shù)調(diào)用modify()函數(shù)調(diào)用found()函數(shù)調(diào)用del()函數(shù)選擇〔a〕執(zhí)行printf()函數(shù)開始執(zhí)行printf()退出系統(tǒng)調(diào)用output()函數(shù)調(diào)用insert()函數(shù)調(diào)用modify()函數(shù)調(diào)用found()函數(shù)調(diào)用del()函數(shù)選擇〔a〕執(zhí)行printf()函數(shù)開始

else

printf("\n對不起,通訊錄中沒有此人的記錄。");

fclose(fp);

}

結(jié)果分析:1運行進(jìn)入程序主菜單主選單具有所有函數(shù)的功能實現(xiàn)的選擇功能,通過主選單的操作進(jìn)入各個功能。主選單主要由主函數(shù)提供,其功能由子函數(shù)實現(xiàn)。2查看所有人員信息界面可以顯示全部的人員的信息??稍?.3參看流程圖。3刪除模塊刪除功能界面4查找模塊進(jìn)入查找記錄界面5修改模塊進(jìn)入修改界面6添加模塊進(jìn)入添加界面可以根據(jù)要求添加用戶想添加的人員信息。7.退出進(jìn)入退出界面:當(dāng)出現(xiàn)沒有查找人員信息時會自動返回主選單總結(jié)1本程序的局限性及改良方法:本程序中包含的信息不夠全面,比方年齡,性別,通訊地址,電子郵箱等,都沒有包含。改良方法就是在設(shè)計程序時把這些內(nèi)容都加進(jìn)去,電子郵箱還可以建立鏈接。2運用本程序還可以編寫比方對學(xué)生信息的管理系統(tǒng),商店、超市里面對商品的管理,倉庫里面對貨物的查詢等等。3在課程設(shè)計過程中遇到的問題,解決的方法1、從文本中寫入數(shù)據(jù)時可能指針指錯位置,導(dǎo)致不能正常進(jìn)行。解決的方法是對指針進(jìn)行必要跟蹤,把該函數(shù)寫入獨立的cpp文件中,單個進(jìn)行檢查。2、從文本文件中載入數(shù)據(jù)時,當(dāng)記錄數(shù)為1的時,出現(xiàn)內(nèi)存不能讀的情況,當(dāng)記錄數(shù)為0時,當(dāng)前記錄數(shù)和總記錄數(shù)以及用戶信息顯示的情況比擬特殊,解決的方法是分三種情況,寫段程序分別進(jìn)行處理。4心得體會與收獲:通過這次課程設(shè)計,我對很多的函數(shù)有了新的認(rèn)識,我對C語言有了更深刻的了解,增強了程序的編寫能力,穩(wěn)固了專業(yè)知識,寫軟件的過程中我又學(xué)到啦曾經(jīng)自己不知道的函數(shù)或是自己不會的函數(shù)的用法。特別是文件的開啟和關(guān)閉,讀與寫。這次課程設(shè)計課總的來說讓我受益匪淺。雖然在調(diào)試程序遇到了很多的困難,但是都一一去把它解決了。從中也讓我知道了要學(xué)好這門課程,僅學(xué)習(xí)書本上的知識是不夠的,還要有較強的實踐能力。因為我們學(xué)習(xí)知識就是為了實踐。而只有多實踐,多編寫程序,才能更好的理解與掌握書本上的東西。程序清單:#include<stdio.h>

/*標(biāo)準(zhǔn)輸入輸出函數(shù)庫*/#include<string.h>

structstudent

{

char

name[8];

char

tel[15];

char

addr[50];

};

char

filename[20];

FILE

*fp;

void

creat();

void

output();

void

search();

void

append();

void

modify();

void

remove();

main()

{

int

m;

creat();

while(1)

{

printf("\n\n添加,請按1");

printf("\n查找,請按2");

printf("\n修改,請按3");

printf("\n刪除,請按4");

printf("\n輸出,請按5");

printf("\n退出,請按0\n");

scanf("%d",&m);

if(m>=0&&m<=5)

{

switch(m)

{

case

1:

append();

break;

case

2:

search();

break;

case

3:

modify();

break;

case

4:

remove();

break;

case

5:

output();

break;

case

0:

break;

}

printf("\n\n操作完畢,請再次選擇!");

}

else

printf("\n\n選擇錯誤,請再次選擇!");

}

}

void

creat()

{

struct

student

one;

long

s1;

printf("\n請輸入通訊錄名:");

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL)

{

printf("\n不能建立通訊錄!");

exit();

}

fprintf(fp,"%-10s%-20s%-50s\n","姓名","號碼","住址");

printf("\n請輸入姓名、號碼及住址〔以0結(jié)束〕\n");

scanf("%s",);

while(strcmp(,"0"))

{

scanf("%s%s",one.tel,one.addr);

fprintf(fp,"%-10s%-20s%-50s\n",,one.tel,one.addr);

scanf("%s",);

}

fclose(fp);

}

void

output()

{

struct

student

one;

if((fp=fopen(filename,"r"))==NULL)

{

printf("\n不能翻開通訊錄!");

exit();

}

printf("\n\n%20s\n","通

錄");

while(!feof(fp))

{

fscanf(fp,"%s%s%s\n",,one.tel,one.addr);

printf("%-10s%-20s%-50s",,one.tel,one.addr);

}

fclose(fp);

}

void

append()

{

struct

student

one;

if((fp=fopen(filename,"a"))==NULL)

{

printf("\n不能翻開通訊錄!");

exit();

}

printf("\n請輸入添加的姓名、號碼及住址\n");

scanf("%s%s%s",,one.tel,one.addr);

fprintf(fp,"%-10s%-20s%-50s\n",,one.tel,one.addr);

fclose(fp);

}

void

search()

{

int

k=0;

char

namekey[8];

struct

student

one;

printf("\n請輸入姓名:");

scanf("%s",namekey);

if((fp=fopen(filename,"rb"))==NULL)

{

printf("\n不能翻開通訊錄!");

exit();

}

while(!feof(fp))

{

fscanf(fp,"%s%s%s\n",,one.tel,one.addr);

if(!strcmp(namekey,))

{

printf("\n\n已查到,記錄為:");

printf("\n%-10s%-18s%-50s",,one.tel,one.addr);

k=1;

}

}

if(!k)

printf("\n\n對不起,通訊錄中沒有此人的記錄。");

fclose(fp);

}

void

modify()

{

int

m,k=0;

long

offset;

char

namekey[8];

struct

student

one;

printf("\n請輸入姓名:");

scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)

{

printf("\n不能翻開通訊錄!");

exit();

}

while(!feof(fp))

{

offset=ftell(fp);

fscanf(fp,"%s%s%s\n",,one.tel,one.addr);

if(!strcmp(namekey,))

{

k=1;

break;

}

}

if(k)

{

printf("\n已查到,記錄為:");

printf("\n%-10s%-18s%-50s",,one.tel,one.addr);

printf("\n請輸入新姓名、號碼及住址:");

scanf("%s%s%s",,one.tel,one.addr);

fseek(fp,offset,SEEK_SET);

printf("%ld",ftell(fp));

fprintf(fp,"%-10s%-20s%-50s\n",,one.tel,one.addr);

}

else

printf("\n對不起,通訊錄中沒有此人的記錄。");

fclose(fp);

}

void

delete()

{

int

m,k=0,flag;

long

offse

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論