最近比较无聊,又正好上数据结构,就随便写了点,有需要的话,就参考参考吧,基本功能都有。
语言:C
编译环境:VC++6.0
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct TXL{
char Name[20];
char Num[15];
char QQ[15];
}a[500];
/*新建一个成员*/
void xj(int j){
printf("/t/tName:");
scanf("%s",&a[j].Name);
printf("/t/tNum:");
scanf("%s",&a[j].Num);
printf("/t/tQQ:");
scanf("%s",&a[j].QQ);
}
/*修改某个成员*/
void xg(int m){
char N[20];
int i,r=0;
printf("/t/t请输入需要修改的姓名/n/t/t");
getchar();
gets(N);
for(i=0;i<=m;i++){
if(strcmp(N,a[i].Name)==0){
printf("/t/t原信息:/n");
printf("/t/tName:%s/n/t/tNum:%s/n/t/tQQ:%s/n",a[i].Name,a[i].Num,a[i].QQ);
printf("/t/t请输入修改后的完整信息:/n");
printf("/t/tName:");
gets(a[i].Name);
printf("/t/tNum:");
gets(a[i].Num);
printf("/t/tQQ:");
gets(a[i].QQ);
r--;}
}
if(r==0) //判断成员是否搜索完,如果完了,还没有的话,输出
printf("/t/t没有这个人!/n");
}
/*查找通讯录成员*/
void cz(int m){
int i,r=0;
char N[20];
printf("/t/t请输入查找的信息(Name):/n/t/t");
getchar();
gets(N);
for(i=0;i<m;i++){
if(strcmp(N,a[i].Name)==0){
printf("/t/tName:%s/n/t/tNum:%s/n/t/tQQ:%s/n",a[i].Name,a[i].Num,a[i].QQ);
r--;
}
}
if(r==0)
printf("/t/t没有这个人!/n");
}
/*删除通讯录成员*/
int sc(int m){
int i,t,s,f,r=0;
char N[20];
printf("/t/t请输入删除着的信息(Name):/n/t/t");
getchar();
gets(N);
for(i=0;i<m;i++){
if(strcmp(N,a[i].Name)==0){
r--;
printf("/t/t确定删除:/n/t/tName:%s/n/t/tNum:%s/n/t/tQQ:%s/n",a[i].Name,a[i].Num,a[i].QQ);
printf("/t/t1、确定/n/t/t2、取消/n/t/t3、下一个/n/t/t");
scanf("%d",&s);
if(s==1){
t=i;
for(t;t<m;t++){
strcpy(a[t].Name,a[t+1].Name);
strcpy(a[t].Num,a[t+1].Num);
strcpy(a[t].QQ,a[t+1].QQ);
}
printf("/t/tDeleted!/n");
return t-1;
break;
}
if(s==3){
f=0;
continue;
}
else
break;
}
}
if(r==0)
printf("/t/t没有这个人!/n");
if(f==0)
printf("/t/t没有叫%s的了!/n",N);
}
/*显示全部记录,参数为记录数组和记录条数*/
void list(int n)
{
int i;
//clrscr();
printf("/t/t********************TXL**********************/n");
printf("/t/t姓名/t/t电话/t/tQQ/n");
printf("/t/t---------------------------------------------/n");
for(i=0;i<n;i++)
printf("/t/t%-20s%-15s%-15s/n",a[i].Name,a[i].Num,a[i].QQ);
if((i+1)%10==0) /*判断输出是否达到10条记录*/
{
printf("/t/tPress any key continue.../n/t/t"); /*提示信息*/
getchar(); /*压任意键继续*/
}
printf("/t/t********************TXL**********************/n/n");
}
/*保存通讯录成员*/
void save(int n)
{
int i;
FILE *fp;
if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/
{
printf("can not open file/n");/*没打开*/
exit(1); /*退出*/
}
fprintf(fp,"%d",n); /*将记录数写入文件*/
fprintf(fp,"/r/n"); /*将换行符号写入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-20s%-15s%-15s",a[i].Name,a[i].Num,a[i].QQ);/*格式写入记录*/
fprintf(fp,"/r/n"); /*将换行符号写入文件*/
}
fclose(fp);/*关闭文件*/
}
/*读取文件*/
int load()
{
int i,n;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/
{
n=0;
fp=fopen("record.txt","wb");/*新建record.txt文件*/
fprintf(fp,"%d",n);/*向文件中写入n的初值0*/
fprintf(fp,"/r/n");
}
fscanf(fp,"%d",&n); /*读入记录数*/
for(i=0;i<n;i++)
fscanf(fp,"%20s%30s%10s",a[i].Name,a[i].Num,a[i].QQ); /*按格式读入记录*/
fclose(fp); /*关闭文件*/
return n; /*返回记录数*/
}
/*主函数*/
void main(){
int i=0,t=0;
t=load();
while(i!=6){
printf("/t/t_____________________________________________/n");
printf("/t/t********************MENU*********************/n");
printf("/t/t|| 1、新建 ||/n");
printf("/t/t** 2、修改 **/n");
printf("/t/t|| 3、查找 ||/n");
printf("/t/t** 4、删除 **/n");
printf("/t/t|| 5、全部 ||/n");
printf("/t/t** 6、离开 **/n");
printf("/t/t********************MENU*********************/n");
printf("/t/t*********************************************/n/t/t");
scanf("%d",&i);
if(i==1){
xj(t);
t++;
}
if(i==2){
xg(t);
}
if(i==3){
cz(t);
}
if(i==4){
t=sc(t);
}
if(i==5){
list(t);
}
save(t);
}
}