【c語言通訊錄管理實驗報告與源程序代碼】c語言實驗報告_第1頁
【c語言通訊錄管理實驗報告與源程序代碼】c語言實驗報告_第2頁
【c語言通訊錄管理實驗報告與源程序代碼】c語言實驗報告_第3頁
【c語言通訊錄管理實驗報告與源程序代碼】c語言實驗報告_第4頁
【c語言通訊錄管理實驗報告與源程序代碼】c語言實驗報告_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

【c語言通訊錄管理實驗報告與源程序代碼】c語言實驗報告【c語言通訊錄管理實驗報告與源程序代碼】c語言實驗報告語言程序設(shè)計實訓報告課程名稱C語言程序設(shè)計實訓課題名稱通訊錄管理軟件工程K軟件151指導教師2023年1月1日湖北汽車工業(yè)學院科技學院語言程序設(shè)計實訓任務(wù)書課程名稱C語言程序設(shè)計實訓課題通訊錄管理專業(yè)班級軟件工程學生姓名指導老師一、設(shè)計內(nèi)容與設(shè)計要求1.設(shè)計內(nèi)容:設(shè)計課題:通訊錄管理一、問題描述:該設(shè)計實現(xiàn)對通訊錄得管理功能,具體包括從鍵盤輸入通訊錄的信息、從指定的文件中讀入通訊錄的信息、按姓名查詢通訊錄的信息、按分類查詢通訊錄的信息、刪除指定姓名的通訊錄的信息、將通訊錄信息保存在指定的文件中等。二、功能要求:在,如果存在,需要詢問是否是覆蓋還是增加,需要判斷輸入的類型是否存在)能從指定的文件中讀入通訊錄的信息能按姓名查詢通訊錄的信息能按分類查詢通訊錄的信息能刪除指定姓名的通訊錄的信息能將通訊錄信息保存在指定的文件中所有數(shù)據(jù)符合實際應(yīng)用要求2.設(shè)計要求:1)設(shè)計正確,方案合理。2)界面友好,使用方便。3)程序精煉,結(jié)構(gòu)清晰。4)上機演示。3.設(shè)計報告要求:課程設(shè)計報告格式如下:1)正文的格式:一級標題用3號黑體,二級標題用四號宋體加粗,正文用小四號宋體,行距為22.2)正文的內(nèi)容:課題的主要功能、課題的功能模塊的劃分、主要功能的實現(xiàn)、程序調(diào)試、總結(jié)、附件(所有程序的源代碼,要求對程序?qū)懗霰匾淖⑨專?)課程設(shè)計報告裝訂順序:封面、任務(wù)書、目錄、正文、評分、程序清單附件。二、進度安排K軟件151熟悉課題的任務(wù)和要求,6:30-8:30查閱相關(guān)資料,做好編碼6:30-8:30K軟件151程序編碼、調(diào)K軟件151程序編碼、調(diào)6:30-8:30試和測試,書寫報告K軟件151答辯、檢查、6:30-8:30驗收、提交設(shè)計報告2601260126012601湖北汽車工業(yè)學院科技學院2015年12月20日1系統(tǒng)需求分析62概要設(shè)計63詳細設(shè)計64系統(tǒng)測試145課程設(shè)計總結(jié)15系統(tǒng)需求分析本系統(tǒng)首先設(shè)計出了主函數(shù),然后根據(jù)去要實現(xiàn)的功能分別設(shè)計,添加、顯示、刪除、查找、修改功能的子函數(shù)。在現(xiàn)實的函數(shù)設(shè)計過程中首先運用文件的讀取等必要的知識通過把文件的內(nèi)容讀取到內(nèi)存然后打印出來。添加函數(shù)在設(shè)計時通過申請一片空間,然后通過指針將需要添加進去,從而實現(xiàn)添加功能。刪除函數(shù)的設(shè)計是首先從文件找到要刪除的人,然后通過寫一個實現(xiàn)刪除目的的for循環(huán)將人從內(nèi)存里面刪除,然后在用寫的方式打開文件,將內(nèi)存的信息寫入文件,實現(xiàn)刪除。查找也是先打開文件,用一個字符串對比的方法找出用戶要查找的人,然后打印出來。修改也大體和刪除相同。概要設(shè)計系統(tǒng)功能模塊圖:主菜單添加查詢刪除修改退出編號、姓名、編號、姓名、輸入姓名輸入編號,重新輸入編號、電話號碼電話號碼姓名、電話號碼詳細設(shè)計3.1數(shù)據(jù)結(jié)構(gòu)本系統(tǒng)主要采用鏈表結(jié)構(gòu)類型來表示儲存在“通訊錄管理系統(tǒng)”中的信息。其中,鏈表結(jié)點由四個分量構(gòu)成:編號、聯(lián)系人姓名、電話號碼、指向該結(jié)構(gòu)體的指針。3.2主菜單模塊:本系統(tǒng)設(shè)置了5個子功能菜單,5個子功能的設(shè)計描述如下。(1)通訊錄信息的輸入??梢砸淮屋斎攵鄠€通訊成員的信息,建立通訊錄。該功能由insert()函數(shù)實現(xiàn)。(2)通訊錄信息的顯示??梢圆榭赐ㄓ嶄浿兴械耐ㄓ嶄洺蓡T記錄。該功能由output()函數(shù)實現(xiàn)。(3)通訊錄信息的保存??梢詫⑤斎氲耐ㄓ嶄洺蓡T的信息進行保存。該功能由save()函數(shù)實現(xiàn)。(4)通信記錄的刪除??梢詫νㄓ嶄浿胁辉傩枰男畔⑦M行刪除。該功能由del()函數(shù)實現(xiàn)。(要徹底刪除,必須要刪除counter.txt和通訊錄.txt中的內(nèi)容。如下圖:)(5)通信記錄的修改??梢詫⑼ㄓ嶄浿械穆?lián)系成員的信息進行修改,并保存。該功能modify()函數(shù)實現(xiàn)。(6)通信記錄的查找??梢酝ㄟ^3種方式進行對通訊信息進行查找。該功能由found(found_code()、found_name()、found_tele())函數(shù)實現(xiàn)。structtele//定義數(shù)據(jù)結(jié)構(gòu)charcode[8];//編號charname[20];//姓名chartele[16];//電話號碼/*********************函數(shù)聲明********************/voidcreat();創(chuàng)建通訊錄voidload();加載數(shù)據(jù)voidmenu();菜單顯示voidchoose_1(int);//選擇功能voidinsert();//1、通訊錄信息的輸入voidoutput();//2、通訊錄信息的顯示voidsave();//3、通訊錄信息的保存voiddel();//4、通信記錄的刪除voidmodify();//5、通信記錄的修改voidfound();//6、記錄的查找(3種方式)voidchoose_2(int);選擇查詢的方式voidfound_code();//6.1、按編號查詢voidfound_name();//6.2、按姓名查詢voidfound_tele();//6.3、按電話號碼查詢voidquit();//7、退出系統(tǒng)3.3添加模塊此模塊為添加信息模塊,添加后再調(diào)用保存所添加的數(shù)據(jù),支持多條信息的添加。0~6調(diào)用insertk=1?保存調(diào)用save函返回主菜單【程序】/*************************通訊信息錄入函數(shù)**********************//**************將函數(shù)寫入內(nèi)存中,由person[N]數(shù)組保存著**********/voidinsert()structtele*p;system("cls");p=(structtele*)malloc(sizeof(structtele));//將動態(tài)分配的內(nèi)存首地址賦給pprintf("\n\n\n\n\n\n");printf("\t*******************************\n\n");printf("\t編號:");scanf("%s",p->code);strcpy(person[counter+1].code,p->code);printf("\t姓名:");scanf("%s",p->name);strcpy(person[counter+1].name,p->name);printf("\t電話:");scanf("%s",p->tele);strcpy(person[counter+1].tele,p->tele);printf("\n\t************************************");counter++;free(p);//釋放空getchar();getchar();system("cls");menu();3.4顯示模塊此模塊為顯示所有記錄,流程圖如下:選擇顯示功能顯示所有記錄返回主菜單【程序】/**********************通訊信息顯示函數(shù)****************************//***********從內(nèi)存中將數(shù)據(jù)顯示在屏幕上,不用打開文件***************/voidoutput()inti=1;system("cls");if(counter)for(i=0;i<=counter;i++)printf("\n\t%-8s%-20s%-16s\n",person[i].code,person[i].name,person[i].tele);printf("\t");elseprintf("\n\n\n\n\n\t\t記錄為空,請輸入聯(lián)系人信息!");getchar();getchar();system("cls");menu();3.5刪除模塊此模塊先利用查找模塊找到所要刪除的信息,然后根據(jù)用戶的選擇來確定是否刪除信息,此種調(diào)用到save函數(shù)。其流程圖如下:輸入要刪除信息的姓是否找到信顯示找到的信息沒有找到信息是否刪刪除成功提示未刪除【程序】/***************************信息刪除函數(shù)***************************/voiddel()//根據(jù)姓名刪除,根據(jù)顯示選擇要刪除的內(nèi)容intk=1;intc=0;charm;charnamekey[20];system("cls");printf("\n\n\n\n\n\n\t\t\t請輸入要刪除的姓名:");scanf("%s",namekey);while(k<=counter)if(!strcmp(namekey,person[k++].name))c=k-1;break;if(c)printf("\t\t\t已查到,記錄為:\n\n\n");printf("\t%-10s%-20s%-20s\n",person[0].code,person[0].name,person[0].tele);printf("\t%-10s%-20s%-20s\n",person[c].code,person[c].name,person[c].tele);printf("\n\n\t\t\t確定要刪除嗎?(Y/N):");scanf("%s",&m);if(c==counter)strcpy(person[counter].code,"\0");strcpy(person[counter].name,"\0");strcpy(person[counter].tele,"\0");counter--;elsefor(k=c;k<=counter;k++)//后面的信息將前面的信息覆蓋掉strcpy(person[k].code,person[k+1].code);strcpy(person[k].code,person[k+1].name);strcpy(person[k].code,person[k+1].tele);strcpy(person[counter].code,"\0");//最后的信息strcpy(person[counter].name,"\0");strcpy(person[counter].tele,"\0");counter--;printf("\t\t\t刪除成功!");getchar();getchar();system("cls");save();//用sava()函數(shù)將刪除后的信息重新保存menu();elsesystem("cls");menu();elseprintf("\n\t\t\t對不起沒有此人記錄!");getchar();getchar();system("cls");menu();系統(tǒng)測試4.1菜單顯示主菜單具有所有函數(shù)的功能實現(xiàn)的選擇功能,通過主菜單的操作進入各個功能。主菜單主要由主函數(shù)提供,其功能由子函數(shù)實現(xiàn)。運行結(jié)果如下圖所示:4.2添加在主菜單界面,用戶輸入1并回車,然后按照提示建立通訊錄,分別輸入通訊錄成員的編號,姓名,電話號碼,運行結(jié)果如下圖所示:4.3顯示在主菜單下,用戶輸入2并回車,可以查看通訊錄中所有成員信息。運行結(jié)果如下圖所示:課程設(shè)計總結(jié)數(shù),我也明白了編寫軟件的基本過程和方法。在這個過程中我學會了很多平時編程不會使用的函數(shù),還有編寫的方法。特別是文件的開啟和關(guān)閉,讀與寫,總的來說,這次課程設(shè)計讓我受益匪淺其實在編寫軟件的過程中也遇到了很多的困難,每一個自定義函數(shù)都是經(jīng)過多次的調(diào)試和改正錯誤,曾經(jīng)想過要放棄的,但是為了完成這個任務(wù)還是拼命的堅持了下來,毫不畏懼困難才是真正的我,還有就是編寫和改錯的過程中受到許多同學的幫助,在一番折騰之后,我總算是順利的完成了這次的《通訊錄管理》的程序設(shè)計。雖然在調(diào)試程序的過程中,遇到過很多很多的困難,但是當軟件調(diào)試成功時那種喜悅的感覺沒有什么東西可以代替。譯,發(fā)現(xiàn)了好多的錯誤,所以我需要進一步的來完善我自己。在這幾天的編寫過程中,對我而言,我的C語言是有了很大的進步和了解。在此次的編寫過程中,我知道和掌握了很多的經(jīng)驗,它們肯定是能夠促進我學習的。此次的課程設(shè)計不僅給了我很多很好的經(jīng)驗,也讓我到了失敗時的焦慮、無助和難受,當然我更喜歡成功后的興奮和喜悅咯~~~啦啦啦~~~附錄:源程序代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#defineN35structtelecharcode[8];charname[20];chartele[16];/*********************FILE*fp;structteleperson[N];intcounter;/*********************voidcreat();voidload();voidmenu();voidchoose_1(int);voidinsert();voidoutput();voidsave();voiddel();voidmodify();voidfound();voidchoose_2(int);voidfound_code();voidfound_name();voidfound_tele();voidquit();改變N的值,就可以改變記錄的聯(lián)系人個數(shù)//定義數(shù)據(jù)結(jié)構(gòu)//編號電話號碼定義全局變量*********************/文件指針記錄聯(lián)系人信息//統(tǒng)計記錄個數(shù)(聯(lián)系人個數(shù))函數(shù)聲明********************///創(chuàng)建通訊錄//加載數(shù)據(jù)//菜單顯示//選擇功能//1、通訊錄信息的輸入//2、通訊錄信息的顯示//3、通訊錄信息的保存//4、通信記錄的刪除//5、通信記錄的修改//6、記錄的查找(3種方式)//選擇查詢的方式//6.1、按編號查詢//6.2、按姓名查詢//6.3、按電話號碼查詢//7、退出系統(tǒng)/***********************MAIN函數(shù)*******************/intmain()system("cls");//清屏creat();//為程序創(chuàng)建文件fp=fopen("counter.txt","r");//r只讀(打開)fscanf(fp,"%d",&counter);//將數(shù)據(jù)賦值給counterfclose(fp);//關(guān)閉打開的文件load();//數(shù)據(jù)裝載至內(nèi)存中menu();return0;/***********************創(chuàng)建通訊錄******************/voidcreat()if((fp=fopen("通訊錄.txt","r"))==NULL)//r只讀(打開)fp=fopen("通訊錄.txt","w");//w為只寫建立一個新的文件fprintf(fp,"%-10s%-20s%-20s\n","編號","姓名","電話");//寫入基本信息person【0】fclose(fp);if((fp=fopen("counter.txt","r"))==NULL)//r只讀(打開)fp=fopen("counter.txt","w");fprintf(fp,"%d",0);//寫入初值(自有文件新建時才有)fclose(fp);voidload()inti;if((fp=fopen("通訊錄.txt","r"))!=NULL)//r只讀(打開),打開文件成功for(i=0;i<=counter;i++)fscanf(fp,"%s%s%s",person[i].code,person[i].name,person[i].tele);//將文件中的信息加載到內(nèi)存中,供操作使用elseprintf("打開文件失??!\n");fclose(fp);/*************************界面菜單顯示函數(shù)************************/voidmenu()intk;printf("\n");printf("\n");printf("\t*********************************************\n");printf("\t**********MENU*************\n");printf("\t*********************************************\n");printf("\t**********、通訊錄信息的輸入:**********\n");printf("\t**********、通訊錄信息的顯示:**********\n");printf("\t**********、通訊錄信息的保存:**********\n");printf("\t**********、通信記錄的刪除:************\n");printf("\t**********5、通信記錄的修改:************\n");printf("\t**********、通信記錄的查找:************\n");printf("\t**********、退出系統(tǒng):************\n");printf("\t*********************************************\n");printf("\tNowPleaseEnteryourchoose(0-6):");scanf("%d",&k);choose_1(k);/***************************函數(shù)功能選擇函數(shù)***************************/voidchoose_1(intk)switch(k)case1:insert();break;case2:output();break;case3:save();system("cls");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t保存成功!");getchar();getchar();system("cls");menu();break;case4:del();break;case5:modify();break;case6:found();break;case0:quit();break;default:;break;/*******************************OK******************************//*************************通訊信息錄入函數(shù)**********************//**************將函數(shù)寫入內(nèi)存中,由person[N]數(shù)組保存著**********/voidinsert()structtele*p;system("cls");p=(structtele*)malloc(sizeof(structtele));//將動態(tài)分配的內(nèi)存首地址賦printf("\n\n\n\n\n\n");printf("\t*******************************\n\n");printf("\t編號:");scanf("%s",p->code);strcpy(person[counter+1].code,p->code);printf("\t姓名:");scanf("%s",p->name);strcpy(person[counter+1].name,p->name);printf("\t電話:");scanf("%s",p->tele);strcpy(person[counter+1].tele,p->tele);printf("\n\t************************************");counter++;free(p);//釋放空間getchar();getchar();system("cls");menu();/**********************通訊信息顯示函數(shù)****************************//***********從內(nèi)存中將數(shù)據(jù)顯示在屏幕上,不用打開文件***************/voidoutput()inti=1;system("cls");if(counter)for(i=0;i<=counter;i++)printf("\n\t%-8s%-20s%-16s\n",person[i].code,person[i].name,person[i].tele);printf("\t");elseprintf("\n\n\n\n\n\t\t記錄為空,請輸入聯(lián)系人信息!");getchar();getchar();system("cls");menu();/************保存、修改、刪除只針內(nèi)存中的數(shù)組進行操作*************//************************通訊信息保存函數(shù)*************************/voidsave()inti;system("cls");if((fp=fopen("counter.txt","w"))==NULL)//w只寫覆蓋原來的數(shù)printf("\n\n\n\t\t\t操作失敗.");exit(1);fprintf(fp,"%d",counter);//向磁盤寫入現(xiàn)在的值,即保存fclose(fp);if((fp=fopen("通訊錄.txt","w"))!=NULL)fprintf(fp,"%s","\0");fclose(fp);if((fp=fopen("通訊錄.txt","a"))!=NULL)for(i=0;i<=counter;i++)fprintf(fp,"%-10s%-20s%-20s",person[i].code,person[i].name,person[i].tele);fclose(fp);system("cls");/***************************信息刪除函數(shù)***************************/voiddel()//根據(jù)姓名刪除,根據(jù)顯示選擇要刪除的內(nèi)容intk=1;intc=0;charm;charnamekey[20];system("cls");printf("\n\n\n\n\n\n\t\t\t請輸入要刪除的姓名:");scanf("%s",namekey);while(k<=counter)if(!strcmp(namekey,person[k++].name))c=k-1;break;if(c)printf("\t\t\t已查到,記錄為:\n\n\n");printf("\t%-10s%-20s%-20s\n",person[0].code,person[0].name,person[0].tele);printf("\t%-10s%-20s%-20s\n",person[c].code,person[c].name,person[c].tele);printf("\n\n\t\t\t確定要刪除嗎?(Y/N):");scanf("%s",&m);if(c==counter)strcpy(person[counter].code,"\0");strcpy(person[counter].name,"\0");strcpy(person[counter].tele,"\0");counter--;elsefor(k=c;k<=counter;k++)//后面的信息將前面的信息覆蓋掉strcpy(person[k].code,person[k+1].code);strcpy(person[k].code,person[k+1].name);strcpy(person[k].code,person[k+1].tele);strcpy(person[counter].code,"\0");//最后的信息為空strcpy(person[counter].name,"\0");strcpy(person[counter].tele,"\0");counter--;printf("\t\t\t刪除成功!");getchar();getchar();system("cls");save();//用sava()函數(shù)將刪除后的信息重新保存menu();elsesystem("cls");menu();elseprintf("\n\t\t\t對不起沒有此人記錄!");getchar();getchar();system("cls");menu();/**************************信息修改函數(shù)*************************/voidmodify()//可以設(shè)定編號唯一,通過編號來確定記錄位置,進而進行修改intk=1;charm;charcodekey[20];system("cls");printf("\n\n\t\t\t請輸入要修改的編號:");scanf("%s",codekey);while(k<=counter)if(!strcmp(codekey,person[k].code))break;k++;if(k<=counter)printf("\n\t\t\t已查到,記錄為:\n");printf("\n%-10s%-20s%-20s","編號","姓名","電話號碼");printf("\t\t\n%-10s%-20s%-20s\n",person[k].code,person[k].name,person[k].tele);printf("\t\t\t確定要修改嗎?(Y/N):");scanf("%s",&m);printf("\n\t\t\t請輸入新的信息:\n\n");printf("\t******************************\n\n");printf("\t編號:");scanf("%s",person[k].code);printf("\t姓名:");scanf("%s",person[k].name);printf("\t電話:");scanf("%s",person[k].tele);printf("\n\t**********************************");printf("\n\n\t\t\t修改成功!");getchar();getchar();system("cls");save();//用sava()函數(shù)將修改完后的信息立馬保menu();elseprintf("\n\n\t\t\t對不起,沒有此人記錄!");getchar();getchar();system("cls");menu();/*************************信息查詢************************/voidfound()//調(diào)試合適intk;system("cls");printf("\n");printf("\n");printf("\n\t\t************************************\n");printf("\n\t\t、按編號查詢:\n");printf("\n\t\t、按姓名查詢:\n");printf("\n\t\t、按電話號碼查詢:\n");printf("\n\t\t、返回:\n");printf("\n\t\t***********************************\n\n");printf("\t\tPleaseEnterYourChoosenow:");scanf("%d",&k);choose_2(k);voidchoose_2(intk)switch(k)case1:found_code();break;case2:found_name();break;case3:found_tele();break;case0:system("cls");menu();break;default:system("cls");menu();break;system("cls");menu();voidfound_code()//按編號查詢intk=0;charcodekey[8];structtele*p;p=(structtele*)malloc(sizeof(structtele));printf("\n\t\t請輸入要查詢的編號:");scanf("%s",codekey);if((fp=fopen("通訊錄.txt","r"))==NULL)printf("\n不能打開通訊錄!\n");exit(0);while(!feof(fp))//當文件結(jié)束時,feof()返回值為fscanf(fp,"%s%s%s\n",p->code,p->name,p->tele);if(!strcmp(codekey,p->code))k=1;break;//k=1,說明已經(jīng)查到if(k)printf("\n\t\t%-10s%-20s%-20s\n","編號","姓名","電話號碼");printf("\n\t\t%-10s%-20s%-20s",p->code,

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論