void input(); //新建聯(lián)系人信息
void (); //查詢聯(lián)系人信息
void alter(); //修改聯(lián)系人信息
void del(); //刪除聯(lián)系人信息
void (); //顯示聯(lián)系人信息
void menu(); //主菜單
void menu()//主菜單函數(shù)
{
("cls");//調(diào)用(“cls”)函數(shù)清空界面
("nnnnn");//控制主功能菜單顯示位置
("tt|***************通訊錄管理系統(tǒng)***************|n");
("tt| 1.新建聯(lián)系人信息 |n");
("tt| 2.查詢聯(lián)系人信息 |n");
("tt| 3.修改聯(lián)系人信息 |n");
("tt| 4.刪除聯(lián)系人信息 |n");
("tt| 5.顯示聯(lián)系人信息 |n");
("tt| 6.退出系統(tǒng) |n");
("tt|********************************************|n");
("請選擇功能(1~6):n");
}
int main()//主函數(shù)
{
int n;
menu();//調(diào)用主菜單
scanf("%d", &n);//用戶選擇功能
while(n)
{
(n)
{
case 1:input(); break;
case 2:(); break;
case 3:alter(); break;
case 4:del(); break;
case 5:(); break;
case 6:exit(0);
}
("請選擇功能(1~6):");
scanf("%d", &n);//用戶選擇功能
}
0;
}
void input() //新建聯(lián)系人
{
int i, = 0;//定義一個循環(huán)變量以及記錄通訊錄中聯(lián)系人個數(shù)的變量
char ch[2];//字符數(shù)組用來記錄用戶的輸入
FILE* fp;//定義指向文件的指針變量
if ((fp=fopen("data.txt", "a+")) == NULL)//調(diào)用fopen函數(shù)創(chuàng)建一個新的文本來保存聯(lián)系人信息
{
("不能打開文件夾!n");
;
}
while (feof(fp) == 0)//判斷文件是否結(jié)束
{
if (fread(&[], LEN, 1, fp) == 1)//使用fresd函數(shù)將文件中的記錄逐條讀取到結(jié)構(gòu)體數(shù)組
++;
}
(fp);//關(guān)閉文件
if ( == 0)//判斷當前通訊錄是否為空
("沒有聯(lián)系人記錄!n");
else
{
("cls");//清屏
();//顯示聯(lián)系人的所有信息
}
if ((fp = fopen("data.txt", "wb")) == NULL)//如果打開文件失敗
{
("不能打開該文件!n");
;
}
//將數(shù)據(jù)重寫入磁盤
for (i = 0; i < ; i++)
(&[i], LEN, 1, fp);
("是否新建聯(lián)系人(y/n)");//提示用戶輸入
scanf("%s", ch);
while ((ch, "Y") == 0 || (ch, "y") == 0)//判斷用戶是否需要新建
{
("姓名:");
scanf("%s", &[].name);
//判斷用戶輸入姓名在通訊錄中是否存在
for (i = 0; i < ; i++)
if (([i].name, [].name) == 0)
{
("名稱已經(jīng)存在,請按任意鍵繼續(xù)。");
getch();
(fp);
;
}
("工作單位:");
scanf("%s", &[].unit);
("電話號碼:");
scanf("%s", &[].phone);
("E-mail:");
scanf("%s", &[].mail);
if ((&[], LEN, 1, fp) != 1)//將新建聯(lián)系人信息保存到磁盤文件
{
("不能保存記錄!");
getch(); //按任意鍵繼續(xù)
}
else
{
("%s 信息保存成功!n", [].name);
++;
}
("是否繼續(xù)新建聯(lián)系人?(y/n):");
scanf("%s", ch);
}
(fp);
("新建完成!n");
}
void () //查詢聯(lián)系人
{
menu();//調(diào)用主菜單
FILE* fp;
int i, n, = 0;
char ch[2], name[20], phone[15];//定義數(shù)組接收用戶的輸入信息
//打開磁盤文件,并將磁盤文件中的通訊錄逐條讀取到內(nèi)存結(jié)構(gòu)體數(shù)組
if ((fp = fopen("data.txt", "rb")) == NULL)
{
("不能打開該文件n");
;
}
while (feof(fp) == 0)//判斷是否到達文件的尾部
if (fread(&[], LEN, 1, fp) == 1)
++;//終值為通訊錄條目
(fp);
if ( == 0)
{
("沒有聯(lián)系人信息!n");
;
}
("按姓名查找輸入1,按手機號查找輸入2:");
scanf("%d", &n);
if (n == 1)
{
("請輸入姓名:");
scanf("%s", name);
}
if (n == 2)
{
("請輸入電話號碼:");
scanf("%s", phone);
}
//通過姓名或電話號查找通訊錄指定信息,運用字符比較函數(shù)
for (i = 0; i < ; i++)
if (((name, [i].name) == 0) || ((phone, [i].phone) == 0))
{
("找到聯(lián)系人,是否顯示?(y/n):");
scanf("%s", ch);
if ((ch, "Y") == 0 || (ch, "y") == 0)
{
("姓名 工作單位 電話號碼 E-mail tn ");
("%-s %-s %-s %-sn", [i].name, [i].unit, [i].phone, [i].mail);
}
break;
}
//判斷循環(huán)結(jié)束是因為沒有找到聯(lián)系人還是因為找到了但是沒有顯示聯(lián)系人信息
if (i == )
("找不到聯(lián)系人!n");
}
void alter() //修改聯(lián)系人信息
{
menu();//調(diào)用主菜單
FILE* fp;
int i, j, = 0;
char name[20];
if ((fp = fopen("data.txt", "r+")) == NULL)
{
("不能打開文件!n");
;
}
while (feof(fp) == 0)
if (fread(&[], LEN, 1, fp) == 1)
++;
if ( == 0)
{
("沒有聯(lián)系人記錄!n");
(fp);
;
}
();
//修改聯(lián)系人信息//
("請輸入您要修改的聯(lián)系人姓名:n");
scanf("%s", &name);
for (i = 0; i < ; i++)
{
if ((name, [i].name) == 0)
{
("找到聯(lián)系人!你可以修改數(shù)據(jù)!n");
("姓名:");
scanf("%s", &[i].name);
("工作單位:");
scanf("%s", &[i].unit);
("電話號碼:");
scanf("%s", &[i].phone);
("E-mail地址:");
scanf("%s", &[i].mail);
("修改成功!");
//打開磁盤c語言通訊錄系統(tǒng),將修改后的聯(lián)系人信息寫入磁盤
if ((fp = fopen("data.txt", "wb")) == NULL)
{
("不能打開文件!n");
;
}
for (j = 0; j < ; j++)
if ((&[j], LEN, 1, fp) != 1)
{
("無法保存!");
getch(); //按任意鍵繼續(xù)
}
(fp);
;
}
}
("沒有找到該聯(lián)系人信息!n");//沒有找到該條聯(lián)系人信息
}
void del() //刪除聯(lián)系人信息
{
menu();//調(diào)用主菜單
FILE* fp;
int i, j, = 0;
char ch[2];
char name[15];
if ((fp = fopen("data.txt", "r+")) == NULL)
{
("不能打開該文件!n");
;
}
while (feof(fp) == 0)
if (fread(&[], LEN, 1, fp) == 1)
++;
(fp);
if ( == 0)
{
("沒有該聯(lián)系人記錄!n");
;
}
();
//刪除聯(lián)系人信息
("請輸入要刪除的聯(lián)系人姓名:");
scanf("%s", &name);
for (i = 0; i < ; i++)
{
if ((name, [i].name) == 0)
{
("找到該聯(lián)系人c語言通訊錄系統(tǒng),要刪除嗎?(y/n)");
scanf("%s", ch);
if ((ch, "Y") == 0 || (ch, "y") == 0)
for (j = i; j < ; j++)
[j] = [j + 1];
--;
//將刪除后的通訊錄寫入對應(yīng)的磁盤文文件
if ((fp = fopen("data.txt", "wb")) == NULL)
{
("不能打開文件!n");
;
}
for (j = 0; j < ; j++)
if ((&[j], LEN, 1, fp) != 1)
{
("無法保存!n");
getch(); //按任意鍵繼續(xù)
}
(fp);
("刪除成功!n");
;
}
}
("沒有該聯(lián)系人記錄!n");
}
void () //顯示聯(lián)系人信息
{
menu();//調(diào)用主菜單
FILE* fp;
int i, = 0;
fp = fopen("data.txt", "rb");//以讀寫的方式打開文件
//讀取通訊錄記錄
while (feof(fp) == 0)
{
if (fread(&[], LEN, 1, fp) == 1)
++;
}
(fp);//關(guān)閉文件
("姓名 工作單位 電話號碼 E-mail tn");
for (i = 0; i < ; i++)
("%-s %-s
%-s %-sn", [i].name, [i].unit, [i].phone, [i].mail);
}
運行截圖