欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言鏈表實現(xiàn)通訊錄系統(tǒng)課程設(shè)計

 更新時間:2022年06月21日 09:01:47   作者:洞·爺·湖  
這篇文章主要為大家詳細介紹了C語言鏈表實現(xiàn)通訊錄系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言鏈表實現(xiàn)通訊錄系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

流程圖

概要設(shè)計

1、數(shù)據(jù)結(jié)構(gòu)

選擇單鏈表來完成所有操作,便于插入和刪除,不利于排序。

2、程序模塊

共11個模塊,分別是主函數(shù)模塊實現(xiàn)操作指令和10個子函數(shù)模塊,分別是主菜單界面、新建聯(lián)系人、瀏覽所有聯(lián)系人、修改聯(lián)系人信息、刪除聯(lián)系人、查找聯(lián)系人信息、插入聯(lián)系人、保存聯(lián)系人信息(寫入文件)、讀取文件信息、對所有聯(lián)系人按照姓名進行字典序排序。

詳細設(shè)計

1、數(shù)據(jù)類型定義

定義了一個結(jié)構(gòu)體類型PHONE變量,內(nèi)部有五個字符數(shù)組和一個整型變量分別存放——name(姓名)、home(籍貫)、phone1(電話號碼1)、phone2(電話號碼2)、email(電子郵箱)、sign(防止重名的標(biāo)記,只作用于相互重名的人),還有一個PHONE類型的指針作為next域形成鏈表。此外還有一個全局變量PHONE類型的指針head作為鏈表的頭指針。

2、各個模塊的詳細實現(xiàn)

2.1 新建聯(lián)系人

執(zhí)行這個模塊的前提是沒有檢測到“通訊錄”這個文件,那么需要進行新建通訊錄,實際實現(xiàn)就是尾插法創(chuàng)建鏈表,唯一需要注意的是如何停止輸入返回操作指令界面,這里才用在輸入姓名欄那里輸入“over”來結(jié)束新建通訊錄操作,同時會提示操作者進行保存錄入文件。

2.2 瀏覽所有聯(lián)系人

這個模塊的作用主要是隨時能夠查看所有聯(lián)系人的信息,在每一次操作指令完成后,調(diào)用這個模塊就可以很清晰的看到變化,具體實現(xiàn)只需要利用之前設(shè)定的頭指針傳進來一個副本,然后遍歷一遍循環(huán)輸出即可,利用\t和\n調(diào)一下格式就行。

2.3 修改聯(lián)系人信息

顧名思義這個模塊是用于修改指定聯(lián)系人的某個信息,操作者輸入要修改的人的姓名和序號后,通過遍歷鏈表和strcmp函數(shù),找到指定聯(lián)系人之后讓操作者輸入操作指令來表示自己要修改哪一項信息,然后輸入修改后的信息即可。

2.4 查找聯(lián)系人信息

這個模塊用于查找指定的聯(lián)系人信息,這里分為按姓名查找和按姓氏查找,查找本身的運作原理都一樣,遍歷鏈表,利用strcmp函數(shù)比較,輸出所有滿足該姓名或該姓氏的人的信息即可,唯一要注意的是在按照姓氏查找時可能會輸入單姓也可能會輸入復(fù)姓,所以這里要加個判斷,判斷完后的操作分支都大同小異,如果查找不到那么就輸出查無此人,。

2.5 刪除聯(lián)系人

這個模塊用于刪除某個指定聯(lián)系人的所有信息,在操作者輸入完姓名后,遍歷整個鏈表,利用strcmp函數(shù)輸出所有滿足該條件的人,然后再讓操作者輸入序號,即刪除哪個該姓名的人,之后只需執(zhí)行單鏈表的基本刪除操作模板即可,如果沒有找到操作者輸入的人,那么輸出查無此人。

2.6 添加聯(lián)系人

這個模塊用于添加聯(lián)系人信息,在讓操作者輸入完要添加的聯(lián)系人的所有信息后,會有一個很重要的防重名操作,更新要插入的人的序號sign,在插入指定位置前,先定義一個整型變量max賦初值為0,然后把鏈表遍歷一遍,將目前與他重名的最大值賦值給max,最后將max+1賦值給要插入進來的人序號上,保證了重名的存在。之后會有三個選項——首位置插入、尾位置插入和指定姓名前插入,分別對應(yīng)鏈表插入的兩個特例和一個一般,與之不同的時,指定姓名插入也包含了首位置和尾位置,所以在這個操作內(nèi)部還需要再分支實現(xiàn),如果沒有找到操作者輸入的姓名那么便輸出查無此人。

2.7 保存聯(lián)系人

這個模塊的作用是將信息寫入文件保存,利用FILE創(chuàng)建一個文件指針,然后通過fopen的只寫方式打開,如果打不開可能是內(nèi)存不夠等原因無法創(chuàng)建文件(一般沒這種情況),打開后遍歷鏈表利用fprintf寫入所有信息即可,\t和\n用于調(diào)整格式,最后用fclose關(guān)閉文件。

2.8 讀取聯(lián)系人

這個模塊在主菜單上并沒有顯示出來,他在剛開始便執(zhí)行了,先通過fopen的只讀方式打開,如果打不開就代表不存在“通訊錄這個文件”,此時便提示操作者要新建聯(lián)系人。若能打開便先利用feof遍歷文件,然后利用fscanf讀取信息,尾插法建立單鏈表和新建過程大同小異。

2.9 對所有聯(lián)系人按名字進行字典序排序

這里的名字可以是中文也可以是英文,中文切換到GB 2312簡體中文編碼方式便一樣可以通過strcmp函數(shù)進行比較,才用的排序算法是冒泡排序,因為是單鏈表,無法采用更高級的排序算法,唯一一個需要注意點的是,在交換過程中只交換數(shù)據(jù)域,由于在數(shù)據(jù)定義過程中沒有單獨定義數(shù)據(jù)域的結(jié)構(gòu)體,所以需要一個個交換,不能整體交換結(jié)構(gòu)體的值,否則next域就亂了,如果存在同名現(xiàn)象,采取序號更小的放到前面。

2.10 主菜單界面

利用多個printf打造了一個主菜單函數(shù),將它單獨作為一個模塊是因為,如果操作者執(zhí)行的操作比較多可以輸入相應(yīng)的操作指令再顯示菜單,而不是每次都劃上去看。

2.11 主函數(shù)

主函數(shù)首先執(zhí)行了一個color函數(shù)來調(diào)整背景色和字體顏色,通過查找資料知道,0是底黑色,E是字體淡黃色。然后調(diào)用主菜單模塊與讀取聯(lián)系人模塊,然后定義一個整型變量a,通過while循環(huán)不斷輸入a然后利用swtich檢測a,來執(zhí)行不同的操作。

c代碼:

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<windows.h>
#define len sizeof(phone)
typedef struct PHONE {
? ? char name[20];
? ? char home[40];
? ? char phone1[20];
? ? char phone2[20];
? ? char email[25];
? ? int sign;
? ? struct PHONE *next;
}phone;
phone *head;
void mainmenuface() {
? ? printf("歡迎來到我們的通訊錄系統(tǒng)?。?!\n");
? ? printf("★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
? ? printf("☆********************************************************************★\n");
? ? printf("★ ? ? ? ? ? ? ? ? ? ? ? ? ?通訊錄管理系統(tǒng) ? ? ? ? ? ? ? ? ? ? ? ? ? ?☆\n");
? ? printf("☆ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?★\n");
? ? printf("★ ? ? ? ? ?1.新建聯(lián)系人信息 ? ? ? ? ? ? ? 2.瀏覽所有聯(lián)系人 ? ? ? ? ? ☆\n");
? ? printf("☆ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?★\n");
? ? printf("★ ? ? ? ? ?3.修改聯(lián)系人信息 ? ? ? ? ? ? ? 4.查找聯(lián)系人信息 ? ? ? ? ? ☆\n");
? ? printf("☆ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?★\n");
? ? printf("★ ? ? ? ? ?5.保存聯(lián)系人信息 ? ? ? ? ? ? ? 6.添加聯(lián)系人信息 ? ? ? ? ? ☆\n");
? ? printf("☆ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?★\n");
? ? printf("★ ? ? ? ? ?7.刪除聯(lián)系人信息 ? ? ? ? ? ? ? 8.返回主菜單 ? ? ? ? ? ? ? ☆\n");
? ? printf("☆ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?★\n");
? ? printf("☆ ? ? ? ? ?9.對通訊錄名單按字典序排序 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?★\n");
? ? printf("☆********************************************************************★\n");
? ? printf("★ ? ? ? ? ? ? ? ? ? ? ? ? ?輸入0退出系統(tǒng) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ☆\n");
? ? printf("★ ? ? ? ? ? ? ? ? ?進行完任意一組操作后記得按5保存 ? ? ? ? ? ? ? ? ? ☆\n");
? ? printf("☆ ? ? ? ? ?------------------------------------------- ? ? ? ? ? ? ? ★\n");
}//主菜單?
void show_one(phone *p) {
? ? printf("姓名:%s\t\t",p->name);
? ? printf("序號:%d\n",p->sign);
? ? printf("籍貫:%s\t",p->home);
? ? printf("電話號碼1:%s\t",p->phone1);
? ? printf("電話號碼2:%s\t",p->phone2);
? ? printf("電子郵箱:%s\n",p->email);
}
phone *Lookdata(phone *p1) {
? ? phone *p2;
? ? p2=head;
? ? printf("\n\t\t\t☆☆☆顯示數(shù)據(jù)☆☆☆\n");
? ? printf("----------------------------------------------------------------------\n");
?? ?while(p2!=NULL){
? ? ? ? printf("姓名:%s\t\t",p2->name);
? ? ? ? printf("序號:%d\n",p2->sign);
? ? ? ? printf("籍貫:%s\t",p2->home);
? ? ? ? printf("電話號碼1:%s\t",p2->phone1);
? ? ? ? printf("電話號碼2:%s\t",p2->phone2);
? ? ? ? printf("電子郵箱:%s\t",p2->email);
? ? ? ? printf("\n\n");
? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? p2=p2->next;
? ? }
?? ?return p2;
}
phone *Inputdata(){
? ? phone*p1,*p2;
? ? int flag=1;
? ? int k=1,i=1;
? ? p1=p2=(phone*)malloc(len);
? ? head=NULL;
?? ?printf("\n\t\t\t☆☆☆新建聯(lián)系人信息☆☆☆\n");
? ? if(p1!=NULL){
? ? ? ? head=p1;
? ? ? ? while(flag){
? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? ? ? printf("請輸入要錄入聯(lián)系人的姓名(姓名一欄中輸入over結(jié)束建立聯(lián)系人操作并返回操作指令)\n");
? ? ? ? ? ? scanf("%s",p1->name);
? ? ? ? ? ? if(strcmp(p1->name,"over")!=0) {
? ? ? ? ? ? ? ? printf("請輸入要錄入聯(lián)系人的序號(防重名,做標(biāo)記)\n");
? ? ? ? ? ? ? ? scanf("%d",&p1->sign);
? ? ? ? ? ? ? ? getchar();
? ? ? ? ? ? ? ? printf("請輸入要錄入聯(lián)系人的籍貫\n");
? ? ? ? ? ? ? ? scanf("%s",p1->home);
? ? ? ? ? ? ? ? printf("請輸入要錄入聯(lián)系人的電話1(沒有可輸入“無”)\n");
? ? ? ? ? ? ? ? scanf("%s",p1->phone1);
? ? ? ? ? ? ? ? printf("請輸入要錄入聯(lián)系人的電話2(沒有可輸入“無”)\n");
? ? ? ? ? ? ? ? scanf("%s",p1->phone2);
? ? ? ? ? ? ? ? printf("請輸入要錄入聯(lián)系人的電子郵箱(沒有可輸入“無”)\n");
? ? ? ? ? ? ? ? scanf("%s",p1->email);
? ? ? ? ? ? ? ? p2->next=p1;
? ? ? ? ? ? ? ? p2=p1;
? ? ? ? ? ? ? ? p1=(phone*)malloc(len);
? ? ? ? ? ? ? ? p1->next=NULL;
? ? ? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? ? ? }
? ? ? ? ? ? else {
? ? ? ? ? ? ? ? flag=0;
? ? ? ? ? ? ? ? p1->next=NULL;
? ? ? ? ? ? ? ? free(p1);
? ? ? ? ? ? ? ? printf("-----------------輸入成功!退出時勿忘輸入5保存信息!------------------\n");
? ? ? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return (head);
}
void readfile(){
? ? FILE *fp;
? ? phone *p1,*p2,*p3;
? ? p1=p2=(phone*)malloc(len); ? ? ? ??
? ? int flag=1;
? ? head=NULL;
? ? if((fp=fopen("通訊錄","r"))==NULL)
?? ?{
? ? ? ? printf("未建立通訊錄,請輸入1新建聯(lián)系人!\n");
? ? }
? ? else {
? ? ? ? if(p1!=NULL)head=p1;
? ? ? ? while(1) {
? ? ? ? ? ? if(!feof(fp)) {
? ? ? ? ? ? ? ? fscanf(fp,"%s%d%s%s%s%s",p1->name,&p1->sign,p1->home,p1->phone1,p1->phone2,p1->email);
? ? ? ? ? ? ? ? p2->next=p1;
? ? ? ? ? ? ? ? p3=p2;
? ? ? ? ? ? ? ? p2=p1; ? ? ? ?
? ? ? ? ? ? ? ? p1=(phone*)malloc(len);
? ? ? ? ? ? }
? ? ? ? ? ? else?
?? ??? ??? ?{
? ? ? ? ? ? ? ? p3->next=NULL;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? fclose(fp);
}
void Seek(phone *p2) {
? ? char name[20];
? ? char ch1[10], ch2[10];
? ? memset(ch1,'\0',sizeof(ch1));
? ? memset(ch2,'\0',sizeof(ch2));
? ? int b;
? ? int n;
? ? printf("\n\t\t\t☆☆☆查找數(shù)據(jù)☆☆☆\n");
? ? printf("----------------------------------------------------------------------\n");
? ? printf("---------------------------按姓名請輸入1:-----------------------------\n");
? ? printf("---------------------------按姓氏請輸入2:-----------------------------\n");
? ? printf("請輸入您的選擇:");
?? ?scanf("%d",&n);
? ? getchar();
? ? printf("請輸入需要查找的姓名:");
? ? switch(n) {
? ? ? ? case 1:
? ? ? ? b=0;
? ? ? ? scanf("%s",name);
? ? ? ? while(p2!=NULL) {
? ? ? ? ? ? if(strcmp(name,p2->name)==0) {
? ? ? ? ? ? ? ? printf("你要找到的數(shù)據(jù)\n");
? ? ? ? ? ? ? ? printf("姓名:%s\t\t",p2->name);
? ? ? ? ? ? ? ? printf("序號:%d\n",p2->sign);
? ? ? ? ? ? ? ? printf("籍貫:%s\t",p2->home);
? ? ? ? ? ? ? ? printf("電話號碼1:%s\t",p2->phone1);
? ? ? ? ? ? ? ? printf("電話號碼2:%s\t",p2->phone2);
? ? ? ? ? ? ? ? printf("電子郵箱:%s\n",p2->email);
? ? ? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? ? ? ? ? b=1;
? ? ? ? ? ? }
? ? ? ? ? ? p2=p2->next;
? ? ? ? }
? ? ? ? if(b==0) {
? ? ? ? ? ? printf("\n--------------------您要查找的人不存在!--------------------------------\n");
? ? ? ? }
? ? ? ? break;
? ? ? ? case 2:
? ? ? ? b=0;
? ? ? ? printf("請輸入姓:");
? ? ? ? scanf("%s",ch1);
? ? ? ? while(p2!=NULL)
?? ??? ?{
? ? ? ? if(strlen(ch1)==2)
?? ??? ?{?
? ? ? ? ? ? strncpy(ch2,p2->name,2);
? ? ? ? ? ? if(strcmp(ch1,ch2)==0) {
? ? ? ? ? ? ? ? printf("你要找到的數(shù)據(jù)\n");
? ? ? ? ? ? ? ? printf("姓名:%s\t\t",p2->name);
? ? ? ? ? ? ? ? printf("序號:%d\n",p2->sign);
? ? ? ? ? ? ? ? printf("籍貫:%s\t",p2->home);
? ? ? ? ? ? ? ? printf("電話號碼1:%s\t",p2->phone1);
? ? ? ? ? ? ? ? printf("電話號碼2:%s\t",p2->phone2);
? ? ? ? ? ? ? ? printf("電子郵箱:%s\n",p2->email);
? ? ? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? ? ? ? ? b=1;
? ? ? ? ? ? }
? ? ? ? ? ? p2=p2->next;
? ? ? ? }
? ? ? ? if(strlen(ch1)==4)
? ? ? ? {
? ? ? ? ?? ?strncpy(ch2,p2->name,4);
? ? ? ? ? ? if(strcmp(ch1,ch2)==0) {
? ? ? ? ? ? ? ? printf("你要找到的數(shù)據(jù)\n");
? ? ? ? ? ? ? ? printf("姓名:%s\t\t",p2->name);
? ? ? ? ? ? ? ? printf("序號:%d\n",p2->sign);
? ? ? ? ? ? ? ? printf("籍貫:%s\t",p2->home);
? ? ? ? ? ? ? ? printf("電話號碼1:%s\t",p2->phone1);
? ? ? ? ? ? ? ? printf("電話號碼2:%s\t",p2->phone2);
? ? ? ? ? ? ? ? printf("電子郵箱:%s\n",p2->email);
? ? ? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? ? ? ? ? b=1;
? ? ? ? ? ? }
? ? ? ? ? ? p2=p2->next;
?? ??? ?}
}

? ? ? ? if(b==0) {
? ? ? ? ? ? printf("\n--------------------您要查找的姓不存在!--------------------------------\n");
? ? ? ? }
? ? }
}
void Keepdata(phone*p2) {
? ? FILE *fp;
? ? printf("\n\t\t\t☆☆☆保存數(shù)據(jù)☆☆☆\n");
? ? printf("----------------------------------------------------------------------\n");
? ? if((fp=fopen("通訊錄","w"))==NULL) {
? ? ? ? printf("cannot open this file\n");
? ? ? ? exit(0);
? ? }
? ? while(p2!=NULL) {
? ? ? ? fprintf(fp,"%s\t",p2->name);
? ? ? ? fprintf(fp,"%d\t",p2->sign);
? ? ? ? fprintf(fp,"%s\t",p2->home);
? ? ? ? fprintf(fp,"%s\t",p2->phone1);
? ? ? ? fprintf(fp,"%s\t",p2->phone2);
? ? ? ? fprintf(fp,"%s\t",p2->email);
? ? ? ? p2=p2->next;
? ? ? ? fputc('\n',fp);
? ? }
? ? printf("\n------------------------------保存成功!-----------------------------\n");
? ? printf("---------------------------------------------------------------------\n");
? ? fclose(fp);
}
void Changedata(phone *p) {
? ? char name[20];
? ? int k, flag=1,a;
? ? printf("\n\t\t\t☆☆☆修改數(shù)據(jù)☆☆☆\n");
? ? printf("----------------------------------------------------------------------\n");
? ? printf("---------------------請輸入需要修改的聯(lián)系人姓名:---------------------\n");
? ? scanf("%s",name);
? ? printf("---------------------請輸入需要修改的聯(lián)系人序號:---------------------\n");
? ? scanf("%d",&a);?
? ? while(p!=NULL) {
? ? ? ? if(strcmp(p->name,name)==0&&a==(p->sign))
?? ??? ?{
? ? ? ? ? ? show_one(p);
? ? ? ? ? ? flag=0;
? ? ? ? ? ? printf("\n------------------請選擇要修改的信息:---------------------------\n");
? ? ? ? ? ? printf("+------------------------------------------------+\n");
? ? ? ? ? ? printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? ? ? ? ? printf("| ? ? ? ? ?1.姓名 ? ? ? ? ? ? ?4.手機2 ? ? ? ? ? |\n");
? ? ? ? ? ? printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? ? ? ? ? printf("| ? ? ? ? ?2.戶籍 ? ? ? ? ? ? ?5.電子郵箱 ? ? ? ?|\n");
? ? ? ? ? ? printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? ? ? ? ? printf("| ? ? ? ? ?3.手機1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? ? ? ? ? printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? ? ? ? ? printf("+------------------------------------------------+\n");
? ? ? ? ? ? scanf("%d",&k);
? ? ? ? ? ? switch(k) {
? ? ? ? ? ? ? ? case 1: printf("-------------------輸入修改后的姓名:------------------\n");
? ? ? ? ? ? ? ? scanf("%s",p->name);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2: printf("-------------------輸入修改后的戶籍:------------------\n");
? ? ? ? ? ? ? ? scanf("%s",p->home);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 3: printf("-------------------輸入修改后的手機1:-----------------\n");
? ? ? ? ? ? ? ? scanf("%s",p->phone1);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 4: printf("-------------------輸入修改后的手機2:-----------------\n");
? ? ? ? ? ? ? ? scanf("%s",p->phone2);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 5: printf("--------------------輸入修改后的郵箱:------------------\n");
? ? ? ? ? ? ? ? scanf("%s",p->email);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? printf("-----------------------修改成功!-------------------------------------\n");
? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? else p=p->next;
? ? }
? ? if(flag)printf("------------------------查無此人!------------------------------------\n");
? ? printf("----------------------------------------------------------------------\n");
}
void deletedata() {
? ? phone *p1,*p2;
? ? phone *p3;
? ? char name[20];
? ? int n,k=1;
? ? printf("\n\t\t\t☆☆☆刪除數(shù)據(jù)☆☆☆\n");
? ? printf("----------------------------------------------------------------------\n");
? ? printf("輸入您想刪除的聯(lián)系人姓名:\n");
? ? scanf("%s",name);
? ? p1=head;
? ? if(head==NULL) {
? ? ? ? printf("未建立聯(lián)系人信息,通訊錄為空\n");
? ? ? ? return;
? ? }
? ? printf("請選擇你要刪除的人:\n");
? ? printf("----------------------------------------------------------------------\n");
? ? p3=head;
? ? while(p3!=NULL) {
? ? ? ? if(strcmp(name,p3->name)==0) {
? ? ? ? ? ? printf("姓名:%s\t\t",p3->name);
? ? ? ? ? ? printf("序號:%d\n",p3->sign);
? ? ? ? ? ? printf("籍貫:%s\t",p3->home);
? ? ? ? ? ? printf("電話號碼1:%s\t",p3->phone1);
? ? ? ? ? ? printf("電話號碼2:%s\t",p3->phone2);
? ? ? ? ? ? printf("電子郵箱:%s\n",p3->email);
? ? ? ? ? ? printf("\n\n");
? ? ? ? ? ? k=0;
? ? ? ? ? ? printf("----------------------------------------------------------------------\n");
? ? ? ? }
? ? ? ? p3=p3->next;
? ? }
? ? if(k){
? ? ? ? printf("查無此人!\n");
? ? ? ? return;
? ? }
? ? printf("請輸入您要刪除的人序號:\n");
? ? scanf("%d",&n);
? ? while(p1!= NULL&&(p1->sign!=n||strcmp(p1->name,name)!=0)) {
? ? ? ? p2=p1;
? ? ? ? p1=p1->next;
? ? }
? ? if(p1==NULL) {
? ? ? ? printf("查無此人!\n");
? ? ? ? return;
? ? }
? ? if(p1!=NULL) {
? ? ? ? p1=p1->next;
? ? ? ? p2->next=p1;
? ? ? ? printf("------------------------------刪除成功!------------------------------\n");
? ? ? ? return;
? ? }
? ? printf("----------------------------------------------------------------------\n");
}
void input(phone *p1) {
? ? printf("姓名:");
? ? scanf("%s",&p1->name);
? ? printf("籍貫:");
? ? scanf("%s",&p1->home);
? ? printf("手機號1(沒有可輸入“無”):");
? ? scanf("%s",&p1->phone1);
? ? printf("手機號2(沒有可輸入“無”):");
? ? scanf("%s",&p1->phone2);
? ? printf("郵箱(沒有可輸入“無”):");
? ? scanf("%s",&p1->email);
? ? p1->sign=1;
}
void Insertdata() {
? ? char name2[20];
? ? int flag,max;
? ? phone *p1,*p2,*p3,*p4;
? ? p1=head;
? ? p3=(phone*)malloc(len);
? ? printf("\n\t\t\t☆☆☆添加聯(lián)系人☆☆☆\n");
? ? printf("----------------------------------------------------------------------\n");
? ? printf("-------------------------請輸入相關(guān)的數(shù)據(jù):---------------------------\n");
? ? input(p3);
? ? p4=head;
? ? max=0;
? ? while(p4!=NULL) {
? ? ? ? if(strcmp(p3->name,p4->name)==0)
?? ??? ?{
? ? ? ? ? ? if(p4->sign>max)
?? ??? ??? ?max=p4->sign;
? ? ? ? }
? ? ? ? p4=p4->next;
? ? }
? ? p3->sign=++max;
? ? printf("-------------------------請輸入插入的位置:---------------------------\n");
? ? printf("+---------------------------------------------------------+\n");
? ? printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("| ? ? ? ? ? ? ? ? ? ?1.首位置插入 ? ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("| ? ? ? ? ? ? ? ? ? ?2.尾位置插入 ? ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("| ? ? ? ? ? ? ? ? ? ?3.指定姓名前插入 ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("+---------------------------------------------------------+\n");
? ? scanf("%d",&flag);
? ? switch(flag){
? ? ? ? case 1:
? ? ? ? p3->next=p1;
? ? ? ? head=p3;
? ? ? ? break;
? ? ? ? case 2:
? ? ? ? p2=head;
? ? ? ? while(p2->next!=NULL) {
? ? ? ? ? ? p2=p2->next;
? ? ? ? }
? ? ? ? p2->next=p3;
? ? ? ? p3->next=NULL;
? ? ? ? break;
? ? ? ? case 3:
? ? ? ? printf("請輸入您想插入的姓名前面:\n");
? ? ? ? scanf("%s",name2);
? ? ? ? while(p1->next!=NULL&&strcmp(p1->name,name2)!=0)
?? ??? ?{
? ? ? ? ? ? p2=p1;
? ? ? ? ? ? p1=p1->next;
? ? ? ? }
? ? ? ? if(p1==head) {
? ? ? ? ? ? p3->next=p1;
? ? ? ? ? ? head=p3;
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? if(p1==NULL) {
? ? ? ? ? ? printf("------------------------------查無此人!---------------------------\n");
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? p3->next=p1;
? ? ? ? ? ? p2->next=p3;

? ? ? ? }
? ? ? ? break;
? ? }
? ? printf("------------------------------插入成功!------------------------------\n");
? ? printf("----------------------------------------------------------------------\n");
? ? return;
}
void Sort(phone *p)
{
?? ?phone *p1=p;
?? ?phone *p2=p;
? ? char tname[20];
? ? char thome[40];
? ? char tphone1[20];
? ? char tphone2[20];
? ? char temail[25];
? ? int tsign;
?? ?if(p==NULL||p->next==NULL)
?? ?{
?? ??? ?return;
?? ?}
?? ?else
? ? {
? ? ? ? while(p1!=NULL)
? ? ? ? {
? ? ? ? ? ? p2=p1;
? ? ? ? ? ? while(p2!=NULL)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(strcmp(p1->name,p2->name)>0)
?? ??? ??? ? ? ?{
? ? ? ? ? ? ? ? ? ? strcpy(tname,p1->name);
? ? ? ? ? ? ? ? ? ? strcpy(p1->name,p2->name);
? ? ? ? ? ? ? ? ? ? strcpy(p2->name,tname);
? ? ? ? ? ? ? ? ? ? strcpy(thome,p1->home);
? ? ? ? ? ? ? ? ? ? strcpy(p1->home,p2->home);
? ? ? ? ? ? ? ? ? ? strcpy(p2->home,thome);
? ? ? ? ? ? ? ? ? ? strcpy(tphone1,p1->phone1);
? ? ? ? ? ? ? ? ? ? strcpy(p1->phone1,p2->phone1);
? ? ? ? ? ? ? ? ? ? strcpy(p2->phone1,tphone1);
? ? ? ? ? ? ? ? ? ? strcpy(tphone2,p1->phone2);
? ? ? ? ? ? ? ? ? ? strcpy(p1->phone2,p2->phone2);
? ? ? ? ? ? ? ? ? ? strcpy(p2->phone2,tphone2);
? ? ? ? ? ? ? ? ? ? strcpy(temail,p1->email);
? ? ? ? ? ? ? ? ? ? strcpy(p1->email,p2->email);
? ? ? ? ? ? ? ? ? ? strcpy(p2->email,temail);
? ? ? ? ? ? ? ? ? ? tsign=p1->sign;
? ? ? ? ? ? ? ? ? ? p1->sign=p2->sign;
? ? ? ? ? ? ? ? ? ? p2->sign=tsign;

?? ??? ??? ? ? ?}
?? ??? ??? ? ? ?else if(strcmp(p1->name,p2->name)==0)
?? ??? ??? ? ? ?{
? ? ? ? ? ? ? ? ? ? if(p1->sign>p2->sign)
? ? ? ? ? ? ? ? ? ? {
?? ??? ??? ??? ? ? ?strcpy(tname,p1->name);
? ? ? ? ? ? ? ? ? ? strcpy(p1->name,p2->name);
? ? ? ? ? ? ? ? ? ? strcpy(p2->name,tname);
? ? ? ? ? ? ? ? ? ? strcpy(thome,p1->home);
? ? ? ? ? ? ? ? ? ? strcpy(p1->home,p2->home);
? ? ? ? ? ? ? ? ? ? strcpy(p2->home,thome);
? ? ? ? ? ? ? ? ? ? strcpy(tphone1,p1->phone1);
? ? ? ? ? ? ? ? ? ? strcpy(p1->phone1,p2->phone1);
? ? ? ? ? ? ? ? ? ? strcpy(p2->phone1,tphone1);
? ? ? ? ? ? ? ? ? ? strcpy(tphone2,p1->phone2);
? ? ? ? ? ? ? ? ? ? strcpy(p1->phone2,p2->phone2);
? ? ? ? ? ? ? ? ? ? strcpy(p2->phone2,tphone2);
? ? ? ? ? ? ? ? ? ? strcpy(temail,p1->email);
? ? ? ? ? ? ? ? ? ? strcpy(p1->email,p2->email);
? ? ? ? ? ? ? ? ? ? strcpy(p2->email,temail);
? ? ? ? ? ? ? ? ? ? tsign=p1->sign;
? ? ? ? ? ? ? ? ? ? p1->sign=p2->sign;
? ? ? ? ? ? ? ? ? ? p2->sign=tsign;
?? ??? ??? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? p2=p2->next;
? ? ? ? ? ? }
? ? ? ? ? ? p1=p1->next;
? ? ? ? }
? ? }
? ? printf("------------------------------排序完成!------------------------------\n");
}
int main() {
? ? int a;
? ? system("color 0E");?
? ? mainmenuface();
? ? readfile();
? ? while(1)
?? ?{
? ? ? ? printf("-------------------請選擇您的操作:----------------------\n");
? ? ? ? scanf("%d",&a);
? ? ? ? if(a>=0&&a<=10)
?? ??? ?{
? ? ? ? ? ? switch(a)
?? ??? ??? ?{
?? ??? ??? ??? ?case 0:
? ? ? ? ? ? ? ? exit(1);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? Inputdata();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? Lookdata(head);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 3:
? ? ? ? ? ? ? ? Changedata(head);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 4:
? ? ? ? ? ? ? ? Seek(head);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 5:
? ? ? ? ? ? ? ? Keepdata(head);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 6:
? ? ? ? ? ? ? ? Insertdata();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 7:
? ? ? ? ? ? ? ? deletedata();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 8:
? ? ? ? ? ? ? ? mainmenuface();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 9:
? ? ? ? ? ? ? ? Sort(head);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? printf("---------------選擇的操作不正確!請重新輸入:------------------\n");
? ? ? ? ? ??
? ? ? ? }
? ? }
? ? return 0;
}

備注:只有一個聯(lián)系人的時候不要執(zhí)行瀏覽所有聯(lián)系人,會死循環(huán),就這一個bug

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實現(xiàn)LeetCode(52.N皇后問題之二)

    C++實現(xiàn)LeetCode(52.N皇后問題之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(52.N皇后問題之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 基于C語言實現(xiàn)的掃雷游戲代碼

    基于C語言實現(xiàn)的掃雷游戲代碼

    這篇文章主要介紹了基于C語言實現(xiàn)的掃雷游戲代碼,對于學(xué)習(xí)游戲開發(fā)的朋友有一定的借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C++實現(xiàn)Matlab的zp2tf函數(shù)的示例代碼

    C++實現(xiàn)Matlab的zp2tf函數(shù)的示例代碼

    matlab?的?zp2tf?函數(shù)的作用是將極點形式的?H(s)?函數(shù)的分母展開,本文主要為大家介紹了C++實現(xiàn)Matlab的zp2tf函數(shù)示例代碼,需要的可以參考一下
    2023-04-04
  • C++標(biāo)準模板庫STL深入講解

    C++標(biāo)準模板庫STL深入講解

    STL提供了一組表示容器、迭代器、函數(shù)對象和算法的模板。容器是一個與數(shù)組類似的單元,可以存儲若干個值。STL容器是同質(zhì)的,即存儲的值的類型相同:算法是完成特定任務(wù)(如對數(shù)組進行排序或在鏈表中查找特定值)的處方
    2022-12-12
  • 基于C++實現(xiàn)日期計算器的詳細教程

    基于C++實現(xiàn)日期計算器的詳細教程

    在現(xiàn)代社會中,計算器已經(jīng)進入了每一個家庭,人們在生活和學(xué)習(xí)中經(jīng)常需要使用到計算器,下面這篇文章主要給大家介紹了關(guān)于基于C++實現(xiàn)日期計算器的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 舉例理解C語言二維數(shù)組的指針指向問題

    舉例理解C語言二維數(shù)組的指針指向問題

    這篇文章主要介紹了C語言二維數(shù)組的指針指向問題,文中不建議用二級指針來訪問二維數(shù)組,需要的朋友可以參考下
    2015-12-12
  • 詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用

    詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用

    這篇文章主要介紹了詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • 基于Matlab制作一個不良圖片檢測系統(tǒng)

    基于Matlab制作一個不良圖片檢測系統(tǒng)

    這篇文章主要為大家詳細介紹了如何基于Matlab制作一個不良圖片檢測系統(tǒng),文中的示例代碼講解詳細,感興趣的可以跟隨小編一起了解一下
    2022-07-07
  • C語言算法積累圖的遍歷鄰接表簡單路徑

    C語言算法積累圖的遍歷鄰接表簡單路徑

    這篇文章主要為大家介紹了C語言算法積累圖的遍歷鄰接表簡單路徑實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • C語言MultiByteToWideChar和WideCharToMultiByte案例詳解

    C語言MultiByteToWideChar和WideCharToMultiByte案例詳解

    這篇文章主要介紹了C語言MultiByteToWideChar和WideCharToMultiByte案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論