📄 pro.c
字号:
if(indx<n&&strcmp(temp.name,psn[indx].name)==0)
{
temp=psn[indx];
printf("\n\nPlease input new information,Esc back to menu:\n\n");
printf("name:");
cnt=rtnstr(psn[indx].name,2,13);if(cnt==0){psn[indx]=temp;clrscr();return;}
printf("\n\nphonenumber:");
cnt=rtnstr(psn[indx].tel,7,12);if(cnt==0){psn[indx]=temp;clrscr();return;}
printf("\n\nemail:");
cnt=rtnstr(psn[indx].eml,7,21);if(cnt==0){psn[indx]=temp;clrscr();return;}
printf("\n\ndepartment:");
cnt=rtnstr(psn[indx].dpmnt,2,21);if(cnt==0){psn[indx]=temp;clrscr();return;}
}
else {clrscr(); printf(" Index error!"); return;}
}
clrscr();
if(num>0){printf(" Modified a record! name:%s->%s",temp.name,psn[indx].name);savstate=0;n--;}
else printf(" The name %s do not exist!",str);
}
void print(struct person psn[],int n) /*显示所有记录。由pgup、pgdn、home、end及上下键控制*/
{
int i,k=0,l=0,j=n/10+(n%10?1:0); char ch;
do
{
printf("\n name:: phonenumber:: email:: department::\n\n");
for(i=k*10+l;i<(k+1)*10+l;i++)
{ if(i==n)break;
printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
}
if(l%10==0) {gotoxy(1,24);cprintf(" Press Esc back to menu. page %d / %d ",k+l/10+1,j);}
else {gotoxy(1,24);cprintf(" Press Esc back to menu. (%d pages)",j);}
do
{ ch=getch();
if(ch==0)
{ ch=getch();
if(ch==pgdn&&((k+1)*10+l<n))k++;
if(ch==pgup&&(k*10+l>=10))k--;else if(ch==pgup)ch=home;
if(ch==home){k=0;l=0;}
if(ch==end){k=j-1;l=0;}
if(ch==upkey&&(k*10+l>0))l--;
if(ch==dnkey&&(k*10+l<n-1))l++;
break;
}
}while(ch!=Esc);
if(ch==Esc) break;clrscr();
}while(1);clrscr();
}
void find(struct person psn[],int n) /*查找记录。直接输入姓名或电话,则显示匹配内容,姓名为纯数字者不显示*/
{
int i,num=0,cnt=1; char str[15];
printf("\n\n\n Please input the name or phonenumber you want to find:\n\n");
printf(" name or phone:");
cnt=rtnstr(str,2,14);str[14]='\0'; if(cnt==0)return;
for(i=0;str[i]!='\0';i++)
if(str[i]<48||str[i]>57)
{
for(i=0;i<n;i++)
if(strcmp(psn[i].name,str)==0)
{ num++;
if(num==1)printf("\n\n name:: phonenumber:: email:: department::\n\n");
printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
}
if(num==0) {clrscr();printf("Can't find any record in accordance with %s!",str);return;}
gotoxy(2,24); cprintf("Press any key to cotinue.");
getch(); clrscr(); return;
}
for(i=0;i<n;i++)
if(strcmp(psn[i].tel,str)==0)
{ num++;
if(num==1)printf("\n\n name:: phonenumber:: email:: department::\n\n");
printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
}
if(num==0) {clrscr();printf("Can't find any record in accordance with %s!",str);return;}
gotoxy(2,24); cprintf("Press any key to cotinue.");
getch(); clrscr(); return;
}
void save(struct person psn[],int n) /*保存记录。若磁盘故障或已满则退出*/
{ FILE *fp; int i;
if(savstate==1)return;
if((fp=fopen("C:\\zhyx.c","wb"))==NULL)
{
printf(" Cannot open file!");return;
}
for(i=0;i<=n;i++) if(fwrite(&psn[i],sizeof(struct person),1,fp)!=1) /*多保存了一项,但没必要*/
{printf(" File error!");fclose(fp);return;}
savstate=1;printf(" Records saved!");
fclose(fp);
}
main() /*主函数。有两重循环,第一重打印菜单,第二重处理按键*/
{
int i,n=0,ex=0,y=8; char ch;
struct person psn[100];
for(i=0;i<100;i++)
{ strcpy(psn[i].name,"\0");
strcpy(psn[i].tel,"\0");
strcpy(psn[i].eml,"\0");
strcpy(psn[i].dpmnt,"\0");
}
n=readrecord(psn,n);
do
{
gotoxy(2,4); cprintf("#################################");
gotoxy(2,5); cprintf("# #");
gotoxy(2,6); cprintf("# A: add new records. #");
gotoxy(2,7); cprintf("# #");
gotoxy(2,8); cprintf("# D: delete certain records. #");
gotoxy(2,9); cprintf("# #");
gotoxy(2,10);cprintf("# O: order them. #");
gotoxy(2,11);cprintf("# #");
gotoxy(2,12);cprintf("# M: modify a record. #");
gotoxy(2,13);cprintf("# #");
gotoxy(2,14);cprintf("# P: print all. #");
gotoxy(2,15);cprintf("# #");
gotoxy(2,16);cprintf("# F: find certaen records. #");
gotoxy(2,17);cprintf("# #");
gotoxy(2,18);cprintf("# S: save. #");
gotoxy(2,19);cprintf("# #");
gotoxy(2,20);cprintf("# Esc: exit. #");
gotoxy(2,21);cprintf("# #");
gotoxy(2,22);cprintf("#################################");
y=8;y=barup(y);
gotoxy(2,24);cprintf("Please choose a menu form the table above.");
do
{ ch=getch();
if(ch==0) /*若按部分非字符键,可能是移动光条,y值跟踪光条改变*/
{
ch=getch();
switch(ch)
{
case upkey:
y=barup(y);ch=0;break;
case dnkey:
y=bardn(y);ch=0;
}
}
if(ch==Enter)
{
switch(y) /*光条对应y值,y值对应字符*/
{
case 6: ch='a';break;
case 8: ch='d';break;
case 10: ch='o';break;
case 12: ch='m';break;
case 14: ch='p';break;
case 16: ch='f';break;
case 18: ch='s';break;
case 20: ch=Esc;break;
}
}
switch(ch) /*对不同字符调用相应函数或其它操作*/
{ case 'a':
case 'A':
{ clrscr(); n=add(psn,n);
ch=Enter; break;
}
case 'd':
case 'D':
{ clrscr(); n=delete(psn,n);
ch=Enter; break;
}
case 'o':
case 'O':
{ clrscr(); order(psn,n);
ch=Enter; break;
}
case 'm':
case 'M':
{ clrscr(); modify(psn,n);
ch=Enter; break;
}
case 'p':
case 'P':
{ clrscr(); print(psn,n);
ch=Enter; break;
}
case 'f':
case 'F':
{ clrscr(); find(psn,n);
ch=Enter; break;
}
case 's':
case 'S':
{ clrscr(); save(psn,n);
ch=Enter; break;
}
case Esc: /*退出时的处理。按Y保存后退出,N直接退出,Esc返回程序*/
{ clrscr();ex=1;
if(savstate==0)
{ gotoxy(5,5); cprintf("Records not saved! save(y/n)? Cancel: Esc");
do{ ch=getch();
if(ch=='n'||ch=='N')savstate=1;
if(ch=='y'||ch=='Y')save(psn,n);
if(ch==Esc){ex=0;break;}
}while(savstate!=1);
}
clrscr(); ch=Enter; break;
}
}
}while(ch!=Enter);
if(ex==1)break;
}while(1);
clrscr();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -