生活随笔
收集整理的這篇文章主要介紹了
C语言通讯录制作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
要求:
有完整的界面,增刪改查功能。人員信息包括編號、姓名、聯系方式、住址、工作單位、職位。
使用文本文檔保存和讀取。
主要知識:結構體,文件的操作,字符串數組的比較等
代碼實現:
#include<stdio.h>
#include<stdlib>
#include<string.h>typedef struct{long id; //編號char name[10]; //姓名char pnum[15]; //電話char address[20]; //住址char workspace[20]; //工作單位char job[20]; //職位
}Person;void Menu(); //菜單
void AddPerson(Person *p); //添加聯系人,結構體指針
void Delete(Person *p); //刪除聯系人
void Display(Person* p); //顯示所有聯系人
void Check(Person* p);//查詢某個聯系人
void Change(Person* p); //修改信息
void WriteFile(Person* p); //寫入文件
void ReadFile(Person*p);//讀取文件int main(){Menu();return 0;
}
Person p[50]; //通訊錄支持存入最大50人的信息
static int n = 0; //靜態計數,n只初始化一次,利于增刪改查計數型void Menu(){ReadFile(p); //打開文件int choice;printf("\t\t***********************************************\n");printf("\t\t***********************************************\n");printf("---------------------------歡迎進入圖書管理系統------------------\n");printf("\t\t------------------1.顯示所有聯系人 ------\n");printf("\t\t------------------2.添加聯系人 ------\n");printf("\t\t------------------3.刪除聯系人 ------\n");printf("\t\t------------------4.修改聯系人 ------\n");printf("\t\t------------------5.查詢聯系人 ------\n");printf("\t\t------------------6.退出 ------\n");
for(::)
{printf("請輸入您的選擇:");scanf("%d", &choice);switch(choice){case 1:Display(p); //顯示所有聯系人break;case 2:AddPerson(p); break;case 3:Delete(p);break;case 4:Change(p);break;case 5:Check(p);break;case 6:WriteFile(p);exit(0);default:break; }}
}
void AddPerson(Person *p)
{char sign;do{printf("編號:");scanf("%ld", &p[n].id);printf("姓名:");scanf("%s", p[n].name); printf("電話號碼:");scanf("%s", p[n].pnum);printf("家庭住址:");scanf("%s", p[n].address);printf("工作單位:");scanf("%s", p[n].workspace);printf("職位:");scanf("%s", p[n].job);printf("繼續添加(a)回主菜單(b)");getchar();sign = getchar();n++;
}while(sign == 'a' || sign == 'A');
}void Delete(Person *p){long id;printf("請輸入聯系人的編號:");scanf("%ld", &id);int i = 0;int j;while(p[i].id != id && i < n) i++;if(i == n)printf("無此人通訊錄\n");else{for(j = i; j < n -1; j++){p[j].id = p[j+1].id;strcpy(p[j].name, p[j+1.name]);strcpy(p[j].pnum, p[j+1].pnum);strcpy(p[j].address,p[j+1].address);strcpy(p[j].workspace,p[j+1].workspace);strcpy(p[j].job,p[j+1].job);}printf("成功刪除!");n--;}
}void Display(Person *p)
{int i = 0;printf("-----------------------------------------\n");printf("\t\t 學號 姓名 電話號碼 家庭住址 工作單位 職位 \n", p[i].id, p[i].name, p[i].pnum, p[i].address, p[i].workspace, p[i].job);for(i = 0; i < n; i++){printf("\t\t 學號 姓名 電話號碼 家庭住址 工作單位 職位 \n",p[i].id, p[i].name, p[i].pnum, p[i].address, p[i].workspace, p[i].job);
}
}void Check(Person*p){char name[20];scanf("%s", name);int i = 0;while(strcmp(p[i].name, name) != 0 && i < n) i++;if(i == n)printf("無此人通訊錄!\n");else{printf(" 學號 姓名 電話號碼 家庭住址 工作單位 職位 \n");printf("%ld %s %s %s %s %s\n"int, p[i].ld, p[i].name, p[i].pnum, p[i].address, p[i].workspace, p[i].job );
}
}void Change(Person *p)
{int flag = 0;int i;char name[20];printf("請輸入你想修改的人的名字:");scanf("%s", name);for(i = 0; i < n; i++){if(strcmp(p[i].name, name) == 0){flag = 1;printf("請修改:\n");printf("請輸入新編號");scanf("%ld", &p[i].id);printf("請輸入新號碼:");scanf("%s", p[i].pnum);printf("請輸入新家庭地址:");scanf("%s", p[i].adress);printf("請輸入新工作單位");scanf("%s", p[i].worksoace);printf("請輸入新的職位");scanf("%s", p[i].job);printf("修改成功!");}elseprintf("無此人通訊錄!");
}
}
void WriteFile(Person* p)
{File * fp;int i;if(!(fp = fopen("通訊錄.txt", "a"));{printf("\t 無法打開文件\n");exit(0);}for(i = 0; i < n; i++){fprintf(fp, "%ld%s%s%s%s%s", p[i].id, p[i].name, p[i].pnum, p[i].address, p[i].workspace, p[i].job);
}fclose(fp);
}void ReadFile(Person *p)
{FILE* fp;int i = 0;if(!(fp = fopen("通訊錄.txt", 'r'))){printf("\t 無法打開文件!\n");exit(0);}fscanf(fp, "%ld%s%s%s%s%s", &p[i].id, p[i].name, p[i].pnum, p[i].address, p[i] .workspace, p[i].job);while(!feof(fp)){n++;fscanf(fp,"%ld%s%s%s%s%s", &p[i].id, p[i].name, p[i].pnum, p[i].address, p[i].workspace, p[i].job);
}fclose(fp);
}
-```
#如果運行出現無法打開文件的情況,就在當前目錄下新建一個"通訊錄.txt" ,應該就能正常運行。
總結
以上是生活随笔為你收集整理的C语言通讯录制作的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。