C語言實現(xiàn)手機電話簿管理系統(tǒng)
本文實例為大家分享了C語言實現(xiàn)手機電話簿管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、任務概述(文章僅供參考)
用c設計出模擬手機通訊錄管理系統(tǒng),實現(xiàn)對手機中的通訊錄進行管理
二、設計功能
查看功能:選擇此功能時,列出下列三類選擇。A辦公類,B個人類,C商務類,當選中某類時,顯示出此類中的所有數(shù)據(jù)。
增加功能:能錄入新數(shù)據(jù),一個結點包括:姓名、電話號碼、分類(可選項有:A 辦公類,B 個人類,C 商務類)、電子郵件。
撥號功能:能顯示出通訊錄中所有人的姓名,當選中某個姓名時,屏幕上模擬打字機的效果依次顯示出此人的電話號碼中的各個數(shù)字,并伴隨相應的撥號聲音。
修改功能:選中某個人的姓名時,可對此人的相應數(shù)據(jù)進行修改。
刪除功能:選中某個人的姓名時,可對此人的相應數(shù)據(jù)進行刪除,并自動調(diào)整后續(xù)條目的編號。
三、功能展示
四、思維導圖
五、程序源碼
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #define N 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //最大容量為15 typedef struct ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//定義一個結構 { ? char name[10]; ? char haoma[15]; ? ? ?char leibie[10]; ? ? ?char dizhi[20]; }ren; //菜單 void menu() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //目錄 { ? system("cls"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清屏 ? ? printf("\n\n\n ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ?┏━━━━━━━━━━┓ ? ? ? ? ? ? ? ? ?┃");? ? ? printf("\n ┃ ? ? ? ? ? ? ?┃ 歡迎使用手機通訊錄 ┃ ? ? ? ? ? ? ? ? ?┃ \n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┗━━━━━━━━━━┛ ? ? ? ? ? ? ? ? ?┃"); ? ? printf(" ┃ ? ? ? ? ? ? ?┏━━━━━━━━━━┓ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? 1.添加聯(lián)系人 ? ┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? 2.查詢聯(lián)系人 ? ┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? 3.修改聯(lián)系人 ? ┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? 4.刪除聯(lián)系人 ? ┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? 5.撥號 ? ? ? ? ┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? 0.退出 ? ? ? ? ┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ? ?┃ ? ? ? ? ? ? ? ? ?┃\n"); ? ? ? printf(" ┃ ? ? ? ? ? ? ?┗━━━━━━━━━━┛ ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┃ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?┃\n"); ? ? printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ? ? ? ? "); ? ? printf("\n"); ? ?printf("請選擇相應的功能:"); }? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//號碼添加 void input() { ? ? ?FILE *fp; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //定義文件指針 ? ? ?ren ry,s; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 定義兩個ren結構體的量 ? ? ?if((fp=fopen("ren.dat","ab+"))==NULL) ? {printf("can't open file!\n");exit(0);} ? ? ?printf("\n錄入格式\n姓名:\n號碼:\n類別:\n郵箱:\n當輸入姓名為#結束錄入\n"); ? ? ?while(1) ? { ?printf("請輸入姓名:"); ? ? ?scanf("%s",ry.name); ? ? ? if(strcmp(ry.name,"#")==0) break; ? ? ? ? ? ? ? //如果輸入#則退出添加 ? ? ? ? ? ?printf("請輸入電話號碼:"); ? ? ? ? ?scanf("%s",ry.haoma); ? ? ? ? ?printf("請輸入類別(A辦公類B個人類C商務類):"); ? ? ? ? ?scanf("%s",ry.leibie); ? ? ? ? ?printf("請輸入郵箱地址:"); ? ? ? ? ?scanf("%s",ry.dizhi); ? ? ? ? ?fseek(fp,0,0); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//指針定位到文件開始位置 ? ? ? ?fread(&s,sizeof(ren),1,fp); ? ? ? ?while(!feof(fp)) ? ? { ? ? ? if(strcmp(s.haoma,ry.haoma)==0) ? ? ? {printf("號碼已經(jīng)存在,不能記錄.\n");break;}//遇到有相同的號碼 ? ? ? ? ? ? fread(&s,sizeof(ren),1,fp); ? } ? ? ? ?if(feof(fp)) ? ? ? ? ? ? ? ? ? ? //讀到自后也沒有相同的號碼 ? ? ? ? ? fwrite(&ry,sizeof(ren),1,fp); //將信息寫入文件 ? } ? ? ?fclose(fp); ? ? ? ? ? ? ? ? ? ? ? ? //關閉文件 ? ? ?getchar(); ? ? ? ? ? ? ? ? ? ? ? ? ?//接受一個輸入 } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void search() ? ? ? ? ? ? ? ? ? ? ? ? ? ? //查詢 { ren ry; FILE *fp; char leibie[10]; system("cls"); printf("\n輸入要查人員的類別: ");scanf("%s",leibie);//要查詢的類別 ? ? if((fp=fopen("ren.dat","rb"))==NULL) {printf("can't open file!\n");exit(0);} ? ? ? ? fread(&ry,sizeof(ren),1,fp); ? ?if(!feof(fp)) ? ?{ ? printf(" ? ?人員的信息如下:\n"); ? ? ? ?printf("說明:(A辦公類B個人類C商務類)"); ? ? printf("\n%10s %15s %10s %20s \n","姓名","號碼","類別","郵箱"); while(!feof(fp)) { ? ? ? if(strcmp(ry.leibie,leibie)==0) ? ? ? ? ? ? ? ?//若為該類別則輸出 ? ?{? ? ? ? printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi); ? ?} ? ?fread(&ry,sizeof(ren),1,fp); } ? ?} ? ?else printf("查找失敗!!!"); ? ?fclose(fp); ? ?getch(); } ? ? ? //修改:輸入人員的姓名,查找該人員,若找到則修改該人員的信息,并顯示修改前后的結果; void modi() { ? ren ry; FILE *fp; char name[10]; system("cls"); if((fp=fopen("ren.dat","rb+"))==NULL) {printf("can't open file!\n");exit(0);} ? ?if(!feof(fp)) ? ?{printf(" ? 修改前全部人員的信息如下:\n"); ? printf("\n%10s %15s %10s %20s \n","姓名","號碼","類別","郵箱");? ? fread(&ry,sizeof(ren),1,fp); ?? while(!feof(fp)) ? ?{? ? ? ? ? ? ?? ? ? ? ?printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi); ? ? ? ? fread(&ry,sizeof(ren),1,fp); ? ? ?} ? ?} printf("\n輸入要修改人員的姓名: ");scanf("%s",name); ? ? if((fp=fopen("ren.dat","rb+"))==NULL) {printf("can't open file!\n");exit(0);} ? ?while(!feof(fp)) ? ?{ ?fread(&ry,sizeof(ren),1,fp); ? ? ? if(strcmp(ry.name,name)==0) ? ? ? ? ? ? ? ?{ ?printf(" ? 修改前人員的信息如下:\n"); ? ? ? printf("\n%10s %15s %10s %20s \n","姓名","號碼","類別","郵箱"); ? ? ? ? ?printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi); ? ? ? ? ?printf("\n請輸入該人的號碼:");scanf("%s",ry.haoma); ? ? ? ? ?printf("\n類別:");scanf("%s",ry.leibie); ? ? ? ? ? ? ? //新信息輸入 ? ? ? ? ?printf("\n郵箱:");scanf("%s",ry.dizhi); ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //修改完畢退出 ? ?} ? ?} ? ?if(!feof(fp)) ? ?{ ? ? ? ? printf(" ?\n 修改后的人的信息如下:\n"); ? ?printf("\n%10s %15s %10s %20s \n","姓名","號碼","類別","郵箱"); ? ? ? printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi); ? ? ? fseek(fp,-sizeof(ren),1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//指針向前一位定位 ? ? ? fwrite(&ry,sizeof(ren),1,fp); ? ?} ? ?else printf("\n此人不存在,修改失敗!!"); ? ?fclose(fp); ? ?getch(); } ? ? ?//刪除:輸入人員姓名,若該人員存在,則刪除,并顯示刪除后余下的人員的信息 void dele() { ? ren ?ry[N]; ? ? FILE *fp; ? ? char name[10]; ? ? int i,len,k=-1; ? ? system("cls"); ? ? printf("\n輸入要刪除的人員姓名: ");scanf("%s",name); ? ? i=0; ? ? if((fp=fopen("ren.dat","rb+"))==NULL) {printf("can't open file!\n");exit(0);} ? ? while(!feof(fp)) { ? ? fread(&ry[i],sizeof(ren),1,fp); ? ? ? ? ? if(feof(fp)) break; ? ? ? ? ? if(strcmp(ry[i].name,name)==0) k=i; ? ? ? ? ? i++; } ? ? fclose(fp); ? ? ? ? ? ? ? ? ? ? ? ? ? //以下是刪除后重新寫文件 ? ?len=i; ? ?if(k>=0) ? ?{ ? ?if((fp=fopen("ren.dat","wb+"))==NULL) {printf("can't open file!\n");exit(0);} ? ? ? ? for(i=0;i<len;i++) ? { ? if(i==k) continue; ? ? ? ? ? ? fwrite(&ry[i],sizeof(ren),1,fp); ? } ? ? ? ? fclose(fp);printf("刪除成功!!!\n"); ? ?} ? ? ? ?else printf("刪除失敗!!!\n"); ? ?getch(); } void bohao() //撥號 { ? ?ren ry; ? ? ?FILE *fp; ? ? ?char name[10]; ? system("cls"); ? printf("\n輸入要撥人員的姓名: ");scanf("%s",name); ? ? ?if((fp=fopen("ren.dat","rb"))==NULL) {printf("can't open file!\n");exit(0);} ? ? ?while(!feof(fp)) ? { ? ? fread(&ry,sizeof(ren),1,fp); ? ? ? ? ? ?if(strcmp(ry.name,name)==0) ? ? ?{ ?printf("\n\a\a\a\a\a\a %15s\a\a\a\a\a\n",ry.haoma); ? //輸出號碼和聲音 ? ? ? ? ? ? break; ? ? ?} ? } ? if(feof(fp)) printf("撥號失敗!!!"); ? ? ?fclose(fp); ? ? ?getch(); } //菜單選擇 void choice() {? char ch; while(1) { ? menu();// 顯示菜單 ? ch=getch();//選擇菜單 if(ch=='0') break; ? switch(ch)//判斷功能項 ? { ? case '1': input();break; ? case '2':search();break; ? case '3':modi();break; ? case '4':dele();break; ? case '5':bohao();break; ? } } printf("\n歡迎使用!!!\n"); } //主函數(shù) main() { choice();//調(diào)用菜單選擇 }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
帶你用C語言實現(xiàn)strtok和字符串分割函數(shù)
下面小編就為大家?guī)硪黄猚語言中字符串分割函數(shù)及實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2021-09-09在Visual Studio Code中配置C++編譯環(huán)境的問題
關于Visual Studio Code對C++環(huán)境的配置方法應該有好多種,我這里用到了其中的兩種,具體內(nèi)容詳情文中給大家詳細介紹,對Visual Studio Code配置C++編譯環(huán)境相關知識感興趣的朋友一起看看吧2021-07-07C++數(shù)據(jù)結構與算法的基礎知識和經(jīng)典算法匯總
終是到了標志著大二結束的期末考試了,對于《算法設計與分析》這門課,我需要總結一下學過的所有算法的思想以及老師補充的關于兩個復雜度和遞歸的概念思想,以及更深層次的理解,比如用畫圖的方式表達出來,我覺得可以用博客記錄總結一下,分享給大家,希望能有所幫助2022-05-05