#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
#include<Ctime>
#include<Cstdlib>
#include<iostream>
using namespace std;
#define M 100 /*定義常數表示記錄數*/
struct record
{ char name[20];
char sex[2];
char age[2];
char phone[20];
char unit[40];
char post[20];
char address[40];
char e_mail[30];
}personl[M];
int num=0;
FILE *fp; //外部變量num為文件中的紀錄數
/******以下是函數原型*******/
void readfromfile(); //讀取文件
void enter();//輸入
void showall(); //顯示所有
void search();
void delet();
void add(); //插入
int mainmenu();
void searchbyunit(); //按單位查詢
void searchbyname(); //按姓名查詢
void searchbye_mail(); //按郵箱查詢
void deletemenu(); //刪除菜單
void deleteall();
void deletebyname(); //按姓名刪除
void deletebyunit() ; //按單位刪除
void deletebye_mail(); //按郵箱刪除
int suijishu();
void save(); //保存文件
/******主函數開始*******/
void main()
{
readfromfile();
while(1)
{
switch(mainmenu())
{
case 0:enter();break;
case 1:showall();break;
case 2:search();break;
case 3:delet();break;
case 4:add(); break;
case 5:save();break;
}
}
}
void readfromfile()//從文件導入
{
if((fp=fopen("personl.txt","rb"))==NULL)//無法打開只讀的文件
{
printf("\n\t\t通訊錄文件不存在");
if ((fp=fopen("personl.txt","wb"))==NULL)//無法打開只寫的文件
{
printf("\n\t\t建立失敗");
exit(0);
}
else
{
printf("\n\t\t通訊錄文件已建立");
printf("\n\t\t按任意鍵進入菜單");
getch();
return;
}
exit(0);
}
fseek(fp,0,2); /*文件位置指針移動到文件末尾*/
if (ftell(fp)>0) /*文件不為空*/
{
rewind(fp); /*文件位置指針移動到文件開始位置*/
for (num=0;!feof(fp) && fread(&personl[num],sizeof(struct record),1,fp);num++);
printf("\n\t\t ************************");
printf("\n\t\t * Hello...... *");
printf("\n\t\t * 歡迎進入通訊錄 *");
printf("\n\t\t ************************");
printf("\n\t\t 按任意鍵進入菜單......\n\n");
getch();
return;
}
printf("\n\t\t文件導入成功");
printf("\n\t\t通訊錄文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單\n");
getch();
return;
}
int mainmenu()
{
int c;
printf("*****************菜單************\n");
printf("************ 0.輸入記錄**********\n");
printf("************ 1.顯示記錄**********\n");
printf("************ 2.查詢菜單**********\n");
printf("************ 3.刪除菜單**********\n");
printf("************ 4.添加記錄**********\n");
printf("************ 5.保存文件**********\n");
printf("*********************************\n");
printf("\n Enter you choice(0~5):");
while(1)
{
scanf("%d",&c);
if(c>=0&&c<6)
break;
else
printf("輸入錯誤,請重新輸入");
}
return c;
}
void enter() //輸入
{
printf("\n\t\t**************** 請輸入信息 ****************\n");
printf("\n\t\t輸入姓名:");
scanf("%s",&personl[num].name);
printf("\n\t\t輸入性別:");
scanf("%s",&personl[num].sex);
printf("\n\t\t輸入年齡:");
scanf("%s",&personl[num].age);
printf("\n\t\t輸入電話號碼:");
scanf("%s",&personl[num].phone);
printf("\n\t\t輸入單位:");
scanf("%s",&personl[num].unit);
printf("\n\t\t輸入職位:");
scanf("%s",&personl[num].post);
printf("\n\t\t輸入地址:");
scanf("%s",&personl[num].address);
printf("\n\t\t輸入e-mail:");
scanf("%s",&personl[num].e_mail);
num++;
printf("\n\t\t是否繼續添加?(Y/N):\n");
getchar();
if (getchar()=='y')
{ enter();
num++;
}
return;
if(getchar()=='n')
return;
}
void showall()
{
int i;
if(num!=0)
{
printf("\n\t\t*************** 以下為通訊錄所有信息************\n");
for (i=0;i<num;i++)
{
printf("\n\t\t姓名: %s",personl[i].name);
printf("\n\t\t性別: %s",personl[i].sex);
printf("\n\t\t年齡: %s",personl[i].age);
printf("\n\t\t電話: %s",personl[i].phone);
printf("\n\t\t單位: %s",personl[i].unit);
printf("\n\t\t職位: %s",personl[i].post);
printf("\n\t\t地址: %s",personl[i].address);
printf("\n\t\te-mail:%s",personl[i].e_mail);
printf("\t\t");
}
printf("\n\t\t************************************************\n");
}
else
printf("\n\t\t通訊錄中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單:\n");
getch();
return;
}
void search() //查詢菜單//
{char choic;
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單\n");
getch();
return;
}
else
{printf("\n\t\t******************* 查詢菜單 *******************");
printf("\n\t\t***********1-按姓名查詢 2-按單位查詢***********");
printf("\n\t\t***********3-按郵箱查詢 4-返回主菜單**********");
printf("\n\t\t************************************");
printf("\n\t\t************************************************");
printf("\n Enter you choice(1~4):");
choic=getch();
switch(choic)
{
case '1':searchbyname();break;
case '2':searchbyunit();break;
case '3':searchbye_mail();break;
case '4':mainmenu();break;
default: search();break;
}
}
}
void searchbyname() //按姓名查詢//
{ int mark=0;
int i;
printf("\n\t\t***************** 按姓名查找 *******************");
char name[20];
printf("\n\t\t請輸入姓名:");
scanf("%s",name);
for(i=0;i<num;i++)
{
if (strcmp(personl[i].name,name)==0)
{
printf("\n\t\t************* 以下是您查找的信息 ***********");
printf("\n\t\t姓名: %s",personl[i].name);
printf("\n\t\t性別: %s",personl[i].sex);
printf("\n\t\t年齡: %s",personl[i].age);
printf("\n\t\t電話: %s",personl[i].phone);
printf("\n\t\t單位: %s",personl[i].unit);
printf("\n\t\t職位: %s",personl[i].post);
printf("\n\t\t地址: %s",personl[i].address);
printf("\n\t\te-mail:%s",personl[i].e_mail);
printf("\n\t\t*******************************************\n");
mark++;
}
}
if(mark==0)
{
printf("\n\t\t通訊錄中無該姓名");
printf("\n\t\t按任意鍵返回主菜單:\n");
}
printf("\n\t\t是否繼續查找?(Y/N):\n");
getchar();
if (getchar()=='y')
searchbyname();
return;
if(getchar()=='n')
return;
}
void searchbyunit() //按單位查詢
{
int mark=0;
int i;
printf("\n\t\t****************** 按單位查找 ******************");
char unit[40];
printf("\n\t\t請輸入單位:");
scanf("%s",unit);
for(i=0;i<num;i++)
{
if (strcmp(personl[i].unit,unit)==0)
{
printf("\n\t\t************** 以下是您查找的信息 **********");
printf("\n\t\t姓名: %s",personl[i].name);
printf("\n\t\t性別: %s",personl[i].sex);
printf("\n\t\t年齡: %s",personl[i].age);
printf("\n\t\t電話: %s",personl[i].phone);
printf("\n\t\t單位: %s",personl[i].unit);
printf("\n\t\t職位: %s",personl[i].post);
printf("\n\t\t地址: %s",personl[i].address);
printf("\n\t\te-mail:%s",personl[i].e_mail);
printf("\n\t\t*******************************************");
mark++;
printf("\n\t\t是否繼續查找?(Y/N):\n");
getchar();
if (getchar()=='y')
searchbyunit();
return;
if(getchar()=='n')
return;
}
}
if (mark==0)
{
printf("\n\t\t沒有該信息");
printf("\n\t\t按任意鍵返回主菜單\n");
getch();
return;
}
}
void searchbye_mail() //按郵箱查詢
{
int mark=0;
int i;
printf("\n\t\t****************** 按郵箱查找 ******************");
char e_mail[40];
printf("\n\t\t請輸入郵箱:");
scanf("%s",e_mail);
for(i=0;i<num;i++)
{
if (strcmp(personl[i].e_mail,e_mail)==0)
{
printf("\n\t\t************** 以下是您查找的信息 **********");
printf("\n\t\t姓名: %s",personl[i].name);
printf("\n\t\t性別: %s",personl[i].sex);
printf("\n\t\t年齡: %s",personl[i].age);
printf("\n\t\t電話: %s",personl[i].phone);
printf("\n\t\t單位: %s",personl[i].unit);
printf("\n\t\t職位: %s",personl[i].post);
printf("\n\t\t地址: %s",personl[i].address);
printf("\n\t\te-mail:%s",personl[i].e_mail);
printf("\n\t\t******************************************");
mark++;
printf("\n\t\t是否繼續查找?(Y/N):\n");
getchar();
if (getchar()=='y')
searchbye_mail();
return;
if(getchar()=='n')
return;
}
}
if (mark==0)
{
printf("\n\t\t沒有該信息");
printf("\n\t\t按任意鍵返回主菜單\n");
getch();
return;
}
}
void delet()//刪除菜單
{
char choic;
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
else
{
printf("\n\t\t******************* 刪除菜單 *******************");
printf("\n\t\t*********** 1-刪除所有 2-按單位刪除***********");
printf("\n\t\t*********** 3-按姓名刪除 4- 按郵箱刪除**********");
printf("\n\t\t************5-返回主菜單************************");
printf("\n\t\t************************************************");
printf("\n Enter you choice(1~5):\n");
choic=getch();
switch(choic)
{
case '1':deleteall();break;
case '2':deletebyunit();break;
case '3':deletebyname();break;
case '4':deletebye_mail();break;
case '5':mainmenu();break;
default: delet();break;
}
}
}
void deleteall()//刪除所有
{
printf("\n\t\t確認刪除?(y/n)\n");
getchar();
if (getchar()=='y')
{
fclose(fp);
if ((fp=fopen("personl.txt","wb"))==NULL)
{
printf("\n\t\t不能打開文件,刪除失敗");
readfromfile();
}
num=0;
printf("\n\t\t紀錄已刪除,按任意鍵返回主菜單");
getch();
return;
}
else
delet();
}
void deletebyname()//按姓名刪除
{
int i,j;
int deletemark=0;
char name[20];
printf("\n\t\t請輸入要刪除姓名:");
scanf("%s",name);
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(personl[i].name,name)==0)
{
printf("\n\t\t以下是您要刪除的紀錄:");
printf("\n\t\t________________________________");
printf("\n\t\t姓名: %s",personl[i].name);
printf("\n\t\t性別: %s",personl[i].sex);
printf("\n\t\t年齡: %s",personl[i].age);
printf("\n\t\t電話: %s",personl[i].phone);
printf("\n\t\t單位: %s",personl[i].unit);
printf("\n\t\t職位: %s",personl[i].post);
printf("\n\t\t地址: %s",personl[i].address);
printf("\n\t\te-mail:%s",personl[i].e_mail);
printf("\n\t\t________________________________");
printf("\n\t\t是否刪除?(y/n)\n");
getchar();
if (getchar()=='y')
{
for (j=i;j<num-1;j++) /*紀錄移動,從person數組中刪除之*/
personl[j]=personl[j+1];
num--;
deletemark++;
printf("\n\t\t刪除成功");
printf("\n\t\t是否繼續刪除?(y/n)\n");
getchar();
if (getchar()=='y')
deletebyname();
else
delet();
}
else
deletebyname();
}continue;
}
if (deletemark==0)
{
printf("\n\t\t沒有該紀錄");
printf("\n\t\t是否繼續刪除?(y/n)\n");
getchar();
if (getchar()=='y')
deletebyname();
else
delet();
}
}
void deletebyunit()//按單位刪除
{
int i,j;
int deletemark=0;
char unit[40];
printf("\n\t\t請輸入要刪除的單位:");
scanf("%s",unit);
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(personl[i].unit,unit)==0)
{
printf("\n\t\t以下是您要刪除的紀錄:");
printf("\n\t\t姓名: %s",personl[i].name);
printf("\n\t\t性別: %s",personl[i].name);
printf("\n\t\t年齡: %s",personl[i].age);
printf("\n\t\t電話: %s",personl[i].phone);
printf("\n\t\t單位: %s",personl[i].unit);
printf("\n\t\t職位: %s",personl[i].post);
printf("\n\t\t地址: %s",personl[i].address);
printf("\n\t\te-mail:%s",personl[i].e_mail);
printf("\n\t\t是否刪除?(y/n)\n");
getchar();
if (getchar()=='y')
{
for (j=i;j<num-1;j++) /*紀錄移動,從stud數組中刪除之*/
personl[j]=personl[j+1];
num--;
deletemark++;
printf("\n\t\t刪除成功");
printf("\n\t\t是否繼續刪除?(y/n)\n");
getchar();
if (getchar()=='y')
deletebyunit();
return;
}
else
deletebyunit();
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t沒有該紀錄");
printf("\n\t\t是否繼續刪除?(y/n)\n");
getchar();
if (getchar()=='y')
deletebyunit();
else
delet();
}
}
void deletebye_mail()//按郵箱刪除
{
int i,j;
int deletemark=0;
char e_mail[30];
printf("\n\t\t請輸入要刪除的郵箱");
scanf("%s",e_mail);
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(personl[i].e_mail,e_mail)==0)
{
printf("\n\t\t以下是您要刪除的紀錄:");
printf("\n\t\t姓名: %s",personl[i].name);
printf("\n\t\t性別: %s",personl[i].name);
printf("\n\t\t年齡: %s",personl[i].age);
printf("\n\t\t電話: %s",personl[i].phone);
printf("\n\t\t單位: %s",personl[i].unit);
printf("\n\t\t職位: %s",personl[i].post);
printf("\n\t\t地址: %s",personl[i].address);
printf("\n\t\te-mail:%s",personl[i].e_mail);
printf("\n\t\t是否刪除?(y/n)");
getchar();
if (getchar()=='y')
{
for (j=i;j<num-1;j++) /*紀錄移動,從person數組中刪除之*/
personl[j]=personl[j+1];
num--;
deletemark++;
printf("\n\t\t刪除成功");
printf("\n\t\t是否繼續刪除?(y/n)\n");
getchar();
if (getchar()=='y')
deletebye_mail();
return;
}
else
deletebye_mail();
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t沒有該紀錄");
printf("\n\t\t是否繼續刪除?(y/n)\n");
getchar();
if (getchar()=='y')
deletebye_mail();
else
delet();
}
}
void add()
{
int i,j;
i=suijishu();
if(num==0) enter();
else
{
for(j=num-1;j>=i;j--)
{
strcpy(personl[j+1].name,personl[j].name);
strcpy(personl[j+1].sex,personl[j].sex);
strcpy(personl[j+1].age,personl[j].age);
strcpy(personl[j+1].phone,personl[j].phone);
strcpy(personl[j+1].unit,personl[j].unit);
strcpy(personl[j+1].post,personl[j].post);
strcpy(personl[j+1].address,personl[j].address);
strcpy(personl[j+1].e_mail,personl[j].e_mail);
}
printf("\n\t\t**************** 請輸入要添加的信息 ****************\n");
printf("\n\t\t輸入姓名:");
scanf("%s",&personl[i].name);
printf("\n\t\t輸入性別:");
scanf("%s",&personl[i].sex);
printf("\n\t\t輸入年齡:");
scanf("%s",&personl[i].age);
printf("\n\t\t輸入電話號碼:");
scanf("%s",&personl[i].phone);
printf("\n\t\t輸入單位:");
scanf("%s",&personl[i].unit);
printf("\n\t\t輸入職位:");
scanf("%s",&personl[i].post);
printf("\n\t\t輸入地址:");
scanf("%s",&personl[i].address);
printf("\n\t\t輸入e-mail:");
scanf("%s",&personl[i].e_mail);
}
}
int suijishu()
{
int t;
srand(time(0));
t=rand()%num+1;
cout<<t<<endl;
return t;
}
void save()//寫入文件
{
int i;
if ((fp=fopen("personl.txt","wb"))==NULL)
{
printf("\n\t\t文件打開失敗");
}
for (i=0;i<num;i++)
{
if (fwrite(&personl[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t寫入文件錯誤!\n");
}
}
fclose(fp);
printf("\n\t\t通訊錄文件已保存");
printf("\n\t\t按任意鍵退出程序\n\t\t");
exit(0);
}