📄 tel.c
字号:
/******************通讯录********************************************
*********************************************************************
***编一个通讯录管理系统,分为录入、查询、修改、删除、退出几部分。
***先将通讯录中的资料读入结构体变量中,以便查询等操作
***录入名字、地址、电话、电子邮箱、QQ号码。
*********************************************************************/
#include <stdio.h>
#include <dos.h>
#include <string.h>
#include <stdlib.h>
#include <alloc.h>
#define N 6
#define Esc 27
#define InitAmount 20
struct Infomation{
char name[10];
char QQ[12];
char phone[15];
char Email[20];
char address[30];
}record[InitAmount];
int cnt=0;
char buffer[N*14*2];
/*---1输入通讯资料---*/
void Add_Create()
{
int row=N;
char key;
struct Infomation temp;
gotoxy(1,row+1);
printf("\n输入姓名: ");
gets(temp.name);
printf("输入 QQ 号: ");
gets(temp.QQ);
printf("输入电话号码: ");
gets(temp.phone);
printf("输入 E-mail: ");
gets(temp.Email);
printf("输入地址: ");
gets(temp.address);
printf("\n记录下这个人的资料吗 ? (Y/N)");
while(1){
if((key=getch())=='Y'||key=='y'){
record[cnt++]=temp;
printf("\n记录成功!!!");
getch();
break;
}
if(key=='N'||key=='n'){
printf("\n你已放弃这份资料!!!");
getch();
break;
}
}
kbhit();
clrscr();
puttext(1,1,14,N,buffer);
}
/*---2显示所有人的资料---*/
void List()
{
int i;
clrscr();
printf("所有人的资料:\n");
printf("\n姓名 QQ 电话 E-mail 地址\n");
for(i=0;i<cnt;i++){
printf("%-10s",record[i].name);
printf("%-12s",record[i].QQ);
printf("%-15s",record[i].phone);
printf("%-20s",record[i].Email);
printf("%s\n",record[i].address);
}
getch();
clrscr();
puttext(1,1,14,N,buffer);
}
/*---3搜索某个人的资料---*/
void Find()
{
clrscr();
printf("1.根据姓名搜索\n2.根据 QQ 号搜索\n(按 Esc 键可以退出这个功能区)");
while(1){
int i,status=0;
char *temp=(char *)malloc(sizeof(char));
switch(getch()){
case '1':
printf("\n输入要搜索的姓名: ");
scanf("%s",temp);
printf("\n");
printf("\n姓名 QQ 电话 E-mail 地址\n");
for(i=0;i<cnt;i++)
if(!strcmp(temp,record[i].name)){
printf("%-10s",record[i].name);
printf("%-12s",record[i].QQ);
printf("%-15s",record[i].phone);
printf("%-20s",record[i].Email);
printf("%s\n",record[i].address);
status=1;
}
getch();
break;
case '2':
printf("\n输入要搜索的 QQ 号: ");
scanf("%s",temp);
printf("\n");
printf("\n姓名 QQ 电话 E-mail 地址\n");
for(i=0;i<cnt;i++)
if(!strcmp(temp,record[i].QQ)){
printf("%-10s",record[i].name);
printf("%-12s",record[i].QQ);
printf("%-15s",record[i].phone);
printf("%-20s",record[i].Email);
printf("%s\n",record[i].address);
status=1;
break;
}
getch();
break;
case Esc: status=1;
}
if(status) break;
else{
clrscr();
printf("1.根据姓名搜索\n2.根据 QQ 号搜索\n");
}
}
kbhit();
clrscr();
puttext(1,1,14,N,buffer);
}
/*---4修改某个人的资料---*/
void Alter()
{
int i,status=0,position=-1;
char *temp=(char *)malloc(sizeof(char)),key;
gotoxy(1,N+2);
printf("输入姓名: ");
scanf("%s",temp);
for(i=0;i<cnt;i++)
if(!strcmp(temp,record[i].name)){
status++;
if(status==1) position=i;
}
if(status>1){
printf("\n不止一个人叫这个名字,请输入 QQ 号确认身份\n");
printf("\n否则将把找到的第一个人作为你要修改其资料的人");
printf("\n输入 QQ 号: ");
scanf("%s",temp);
for(i=0;i<cnt;i++)
if(!strcmp(temp,record[i].QQ)){
status=1;
position=i;
}
}
if(!status) printf("\n没有找到这个人的资料!");
else{
char key;
clrscr();
printf("你想要修改 %s 的哪部分资料:\n",record[position].name);
printf(" 1. QQ 2. 电话 3. E-mail 4. 地址\n\n");
printf(" (按 Esc 键才能退出这个功能区)\n\n");
while((key=getch())!=Esc)
switch(key){
case '1':
printf("输入新的 QQ 号: ");
scanf("%s",record[position].QQ);
break;
case '2':
printf("输入新的电话号码: ");
scanf("%s",record[position].phone);
break;
case '3':
printf("输入新的 E-mail: ");
scanf("%s",record[position].Email);
break;
case '4':
printf("输入新的地址: ");
scanf("%s",record[position].address);
}
printf("\n修改成功!");
}
getch();
clrscr();
puttext(1,1,14,N,buffer);
}
/*---5删除某个人的资料---*/
void Delete()
{
int i=N,status=0,position=-1;
char *temp=(char *)malloc(sizeof(char)),key;
gotoxy(1,i+1);
printf("\n输入姓名: ");
scanf("%s",temp);
for(i=0;i<cnt;i++)
if(!strcmp(temp,record[i].name)){
status++;
if(status==1) position=i;
}
if(status>1){
printf("\n不止一个人叫这个名字,请输入 QQ 号确认身份\n");
printf("\n否则将把找到的第一个人作为你要删除其资料的人");
printf("\n输入 QQ 号: ");
scanf("%s",temp);
for(i=0;i<cnt;i++)
if(!strcmp(temp,record[i].QQ)){
status=1;
position=i;
}
}
if(!status) printf("\n没有找到这个人的资料!");
else{
record[position]=record[(cnt--)-1];
printf("\n删除成功!");
}
getch();
clrscr();
puttext(1,1,14,N,buffer);
}
/*---6将通讯录里的资料以文件形式保存起来---*/
void Save()
{
int i;
FILE *fp=fopen("D:\\record.bat","wb");
if(cnt!=0){
FILE *fp_seen=fopen("D:\\record.txt","w");
fprintf(fp_seen,"姓名 QQ 电话 E-mail 地址\n");
for(i=0;i<cnt;i++){
fprintf(fp_seen,"%-10s",record[i].name);
fprintf(fp_seen,"%-12s",record[i].QQ);
fprintf(fp_seen,"%-15s",record[i].phone);
fprintf(fp_seen,"%-20s",record[i].Email);
fprintf(fp_seen,"%s\n",record[i].address);
}
fclose(fp_seen);
}
for(i=0;i<cnt;i++) fwrite(&record[i],sizeof(record),1,fp);
_chmod("D:\\record.bat",1,FA_HIDDEN);
fclose(fp);
}
/*---Main function---*/
void main()
{
int i;
FILE *fp;
char *index[N]={"1.输入通讯资料",
"2.显示所有资料",
"3.搜索某人资料",
"4.修改某人资料",
"5.删除某人资料",
"6.退出系统"};
clrscr();
if((fp=fopen("D:\\record.bat","rb"))!=NULL){ /*write old infomation*/
while(fread(&record[cnt++],sizeof(record),1,fp)!=0); /*null statement*/
cnt--;
fclose(fp);
}
for(i=0;i<N;i++) printf("%s\n",index[i]);
gettext(1,1,14,N,buffer);
while(1)
switch(getch()){
case '1': Add_Create();break;
case '2': List();break;
case '3': Find();break;
case '4': Alter();break;
case '5': Delete();break;
case '6': Save();exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -