#include<string.h>
#define P printf
#define MIMA "111"
#define PBT P("%-10s%-12s%-6s%-6s%-13s%-20s\n\n","學號","姓名","性別","年齡"," 手機","住址")
/* 記錄標題輸出 */
#define PJL P("%-10s%-12s%-6c%-6d%-13s%-20s\n\n",s[i].XueHao,s[i].XingMing,s[i].XingBie,s[i].NianLing,s[i].ShouJi,s[i].ZhuZhi)
/* 記錄輸出 */
#define N 20
typedef struct
{
char XueHao[12]; /* 學號 */
char XingMing[15]; /* 姓名 */
char XingBie; /*性別*/
int NianLing; /* 年齡 */
char ShouJi[12]; /* 手機 */
char ZhuZhi[30]; /* 住址 */
}NODE;
void ShuRu(NODE s[]);
void Chaxun(NODE s[]);
void Chaxun_QuanBu(NODE s[]);
void Chaxun_BianHao(NODE s[]);
void Chaxun_XueHao(NODE s[]);
void Chaxun_XingMing(NODE s[]);
void Chaxun_NianLing(NODE s[]);
void Chaxun_ShouJi(NODE s[]);
int daoru(NODE s[]);
void Cunchu(NODE s[]);
void Shanchu(NODE s[]);
void Mimashuru(char[],int);
char WenJian[10];
int t=0;
NODE s[N];
void main()
{
char c;
int i;
char MiMa[10];
for(i=1;i<=3;i++)
{
Mimashuru(MiMa,i);
if(strcmp(MiMa,MIMA)!=0)continue;
P("\n\n\t\t\t 密碼輸入正確,請輸入文件名 : ");
gets(WenJian);
t=daoru(s)-1;
clrscr();
P("\n\n\t\t\t 歡迎進入我的個性化通訊錄");
P("\n\n\t\t\t\t\t\t按任意鍵繼續。。 ");
getch();
for(;;)
{
clrscr();
P("\n\n\n\n\n");
P("\t\t\t ****************************\n");
P("\t\t\t * *\n");
P("\t\t\t * 我的個性化通信錄 *\n");
P("\t\t\t * *\n");
P("\t\t\t * 主菜單 *\n");
P("\t\t\t * *\n");
P("\t\t\t * 增加信息----1 *\n");
P("\t\t\t * 刪除信息----2 *\n");
P("\t\t\t * 查詢信息----3 *\n");
P("\t\t\t * 退出系統----0 *\n");
P("\t\t\t * 儲 存----9 *\n");
P("\t\t\t * *\n");
P("\t\t\t ****************************\n\n");
P("\t\t\t 請選擇妳想要的操作---- ? ");
c=getch();
if (c=='0') break;
switch(c)
{
case '1':ShuRu(s);break;
case '2':Shanchu(s);break;
case '3':Chaxun(s);break;
case '9':Cunchu(s);break;
}
}
i=4;
}
Cunchu(s);
}
void Mimashuru(char a[],int n) /*****密碼輸入*****/
{
int j;
clrscr();
switch(n)
{ case 1:P("\n\n\n\n\t\t\t 密碼(以“0”結束)=? ");
break;
case 2:P("\n\n\n\n\t 密碼錯誤,請重新輸入密碼(以“0”結束)=? ");
break;
case 3:P("\n\n\n\n\t 密碼錯誤,請最後壹次輸入密碼(以“0”結束)=? ");
}
for(j=0;;j++)
{ a[j]=getch();
if(a[j]=='0') { a[j]='\0';break;}
else putchar('*');
}
}
int daoru(NODE s[]) /**** 導入 ****/
{
int i;
FILE *fp;
if((fp=fopen(WenJian,"rb"))==NULL)return 0;
for(i=0;!feof(fp);i++)
fread(&s[i],sizeof(NODE),1,fp);
fclose(fp);
return i;
}
void Cunchu(NODE s[]) /***** 存盤 *****/
{
int i;
FILE *fp;
if((fp=fopen(WenJian,"wb"))==NULL){P("Save Error!!!");getch();exit(1);}
for(i=0;i<t;i++)
fwrite(&s[i],sizeof(NODE),1,fp);
fclose(fp);
}
void ShuRu(NODE s[]) /*****輸入****/
{
float x;
char c;
int i,n;
for(;;)
{
clrscr();
P("\n\n\n\n\n\n");
P("\t\t\t **********************\n");
P("\t\t\t * *\n");
P("\t\t\t * *\n");
P("\t\t\t * 輸入信息----1 *\n");
P("\t\t\t * 增加信息----2 *\n");
P("\t\t\t * 返 回----0 *\n");
P("\t\t\t * *\n");
P("\t\t\t **********************\n");
P("\n\t\t\t 請選擇妳想要的操作---- ? ");
c=getch();
if (c=='0') break;
if(c=='1')t=0;
clrscr();
for(i=t;;i++)
{
P("\n\n學號=? ");
scanf("%s",s[i].XueHao);
P(" 姓名=? "); scanf("%s",s[i].XingMing);
getchar();
P(" 性別=? "); scanf("%c",&s[i].XingBie);
P(" 年齡=? "); scanf("%d",&s[i].NianLing);
P(" 手機=? "); scanf("%s",s[i].ShouJi);
P(" 住址=? "); scanf("%s",s[i].ZhuZhi);
t++;
P("輸入1繼續,輸入0返回!");
scanf("%d",&n);
if(n==0) break;
}
}
}
void Chaxun(NODE s[]) /* 查詢 */
{
char c;
for(;;)
{
clrscr();
P("\n\n\n\n\n\n");
P("\t\t\t ***************************\n");
P("\t\t\t * *\n");
P("\t\t\t * *\n");
P("\t\t\t * 查詢菜單 *\n");
P("\t\t\t * *\n");
P("\t\t\t * *\n");
P("\t\t\t * 按編號查詢---------1 *\n");
P("\t\t\t * 按學號查詢---------2 *\n");
P("\t\t\t * 按姓名查詢---------3 *\n");
P("\t\t\t * 按年齡查詢---------4 *\n");
P("\t\t\t * 按手機查詢---------5 *\n");
P("\t\t\t * 信息全顯示---------9 *\n");
P("\t\t\t * 返 回---------0 *\n");
P("\t\t\t * *\n");
P("\t\t\t * *\n");
P("\t\t\t * *************************\n");
P("\n\t\t\t 請選擇妳想要的操作---- ? ");
c=getch();
if(c=='0')break;
switch(c)
{
case '1':Chaxun_BianHao(s);break;
case '2':Chaxun_XueHao(s);break;
case '3':Chaxun_XingMing(s);break;
case '4':Chaxun_NianLing(s);break;
case '5':Chaxun_ShouJi(s);break;
case '9':Chaxun_QuanBu(s);break;
}
}
}
void Chaxun_BianHao(NODE s[])
{
int i,n1,n2;
clrscr();
P("\n\n\n\t\t\t 請輸入起始記錄號: ");
scanf("%d",&n1);
P("\n\n\n\t\t\t 請輸入結束記錄號: ");
scanf("%d",&n2);
clrscr();
PBT;
for(i=0;i<=t;i++)
{
if((i+1)>=n1&&(i+1)<=n2) PJL;
else
P("未能找到符合條件的記錄");
}
P("\n\n 按任壹鍵繼續....");
getch();
}
void Chaxun_XueHao(NODE s[])
{
int i;
char nl1[20];
clrscr();
P("\n\n\n\n\t\t請輸入學號:");
gets(nl1);
clrscr();
PBT;
for(i=0;i<t;i++)
{
if(strcmp(s[i].XueHao,nl1)==0) PJL;
}
P("\n\n按任壹鍵繼續...");
getch();
}
void Chaxun_XingMing(NODE s[])
{
int i;
char nl1[20];
clrscr();
P("\n\n\n\n\t\t請輸入姓名:");
gets(nl1);
clrscr();
PBT;
for(i=0;i<t;i++)
{
if(strcmp(s[i].XingMing,nl1)==0) PJL;
}
P("\n\n按任壹鍵繼續...");
getch();
}
void Chaxun_NianLing(NODE s[])
{
int i;
int nl1,nl2;
clrscr();
P("\n\n\n\n\t\t 請輸入最低年齡:");
scanf("%d",&nl1);
P("\n\t\t 請輸入最高年齡:");
scanf("%d",&nl2);
clrscr();
PBT;
for(i=0;i<t;i++)
if(s[i].NianLing>=nl1&&s[i].NianLing<=nl2) PJL;
P("\n\n按任壹鍵繼續...");
getch();
}
void Chaxun_ShouJi(NODE s[])
{
int i;
char n1[15];
clrscr();
P("\n\n\n\n\t\t請輸入電話:");
scanf("%s",&n1);
clrscr();
PBT;
for(i=0;i<t;i++)
{
if(strcmp(s[i].ShouJi,n1)==0) PJL;
}
P("\n\n按任壹鍵繼續...");
getch();
}
void Chaxun_QuanBu(NODE s[])
{
int i;
clrscr();
PBT;
for(i=0;i<t;i++)
{
PJL;
}
P("\n\n按任壹鍵繼續...");
getch();
}
void Shanchu() /***刪除***/
{
int i;
char name[10],choice[2];
clrscr();
printf("\n");
printf("請正確輸入妳要刪除的姓名:\n");
scanf("%s",name);
printf("確定刪除?(Y/N)\n");
scanf("%s",choice);
if(strcmp(choice,"Y")==0 || strcmp(choice,"y")==0)
{
for(i=0;i<t;i++)
{
if(strcmp(s[i].XingMing,name)==0)
for(i=i;i<t;i++)
{
strcpy(s[i].XingMing,s[i+1].XingMing);
strcpy(s[i].XueHao,s[i+1].XueHao);
strcpy(s[i].ShouJi,s[i+1].ShouJi);
strcpy(s[i].ZhuZhi,s[i+1].ZhuZhi);
s[i].XingBie=s[i+1].XingBie;
s[i].NianLing=s[i+1].NianLing;
}
}
t=t-1;
}
else
{
printf("按任意鍵返回\n");
getch();
return;
}
}