C语言 通讯录设计

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize (20)
#include <errno.h>;
#include <sys/stat.h>;
#include <dirent.h>;
#include <cstdlib>
#include <time.h>;

int i;
void menu();
void read();
void add();
void hold(struct student *s);
void del();
void rev();
void Allsee();
void see();
void quit();

struct student
{
	char name[maxsize];
	char gender[5];
	int age;
	char mov[15];
	char QQ[15];
	char number[20];
}ch[maxsize];

int main()
{
	int choice;
	read();
	printf("已存在%d条记录",i);
	while(1)
	{
		menu();
		scanf("%d",&choice);
		switch(choice)
		{
			case 1:add();break;
			case 2:del();break;
			case 3:rev();break;
			case 4:Allsee();break;
			case 5:see();break;
			case 0:quit();break;
			default:
			{
				system("cls");
				printf("\n");
				printf("\n");
				printf("\n");
				printf("选择错误,请输入0到5以内的正确选项!");
				printf("\n");
				printf("\n");
				printf("\n");
				system("PAUSE");
			}
		}
	}
	return 0;
}

void menu()
{
	printf("\n欢迎使用宿舍管理系统!\n");
	printf("=========菜单栏=========\n");
	printf(" 1.增加 2.删除 \n");
	printf(" 3.修改 4.显示 \n");
	printf(" 5.查找 0.退出 \n");
	printf("========================\n");
	printf("请输入你的选择:");
}

void read()
{
	i=0;
	FILE *fp;
	fp=fopen("a","rb");
	while((fread(ch+i,sizeof(struct student),1,fp)) == 1)
	{
		i++;
	}
	fclose(fp);
}

void add()
{
	struct student *s;
	 s=(struct student*)malloc(sizeof(struct student));
	 printf("姓名:");
	 scanf("%s",s->name);
	 printf("性别:");
	 scanf("%s",s->gender);
	 printf("年龄:");
	 scanf("%d",&s->age);
	 printf("电话:");
	 scanf("%s",s->mov);
	 printf("QQ:");
	 scanf("%s",s->QQ);
	 printf("寝室号:");
	 scanf("%s",s->number);
	 hold(s);
	 free(s);
	 system("PAUSE");
}

void hold(struct student *s)
{
	FILE *fp;
	if((fp=fopen("a","ab")) != NULL)
	if((fwrite(s,sizeof(struct student),1,fp))!=1)
	{
		printf("数据写入文件失败");
	}
	fclose(fp);
}

void del()
{
	FILE *fp;
	int j,k;
	char del_name[20];
	printf("请输入需要删除的人的姓名:");
	scanf("%s",del_name);
	read();
	for(j = 0;j < i; j++)
	{
		if((strcmp(ch[j].name,del_name))==0)
		k=j;
		for(j = k;j < i-1; j++)
		{
			strcpy(ch[j].name,ch[j+1].name);
			strcpy(ch[j].gender,ch[j+1].gender);
			ch[j].age = ch[j+1].age;
			strcpy(ch[j].mov,ch[j+1].mov);
			strcpy(ch[j].QQ,ch[j+1].QQ);
			strcpy(ch[j].number,ch[j+1].number);
		}
	}
	fp = fopen("a","wb");
	if(fwrite(ch,sizeof(struct student),i-1,fp) != i-1)
	{
		printf("写入文件失败");
	}
	fclose(fp);
	system("PAUSE");
}


void rev()
{
	FILE *fp;
	int j,k;
	char change_name[20];
	printf("请输入需要修改的名字:");
	scanf("%s",change_name);
	for(j = 0;j < i; j++)
	{
		if((strcmp(ch[j].name,change_name)) == 0)
		{
			k=j;
			printf("请重新输入该联系人性别:");
			scanf("%s",ch[k].gender);
			printf("请重新输入该联系人的年龄:");
			scanf("%d",&ch[k].age);
			printf("请重新输入该联系人的电话:");
			scanf("%s",ch[k].mov);
			printf("请重新输入该联系人的QQ:");
			scanf("%s",ch[k].QQ);
			printf("请重新输入该联系人的email:");
			scanf("%s",ch[k].number);
		}
	}
	fp = fopen("a","wb");
	fwrite(ch,sizeof(struct student),i,fp);
	fclose(fp);
	system("PAUSE");
}

void Allsee()
{
	int j;
	read();
	for(j = 0;j < i; j++)
	printf("姓名:%s\n性别:%s\n年龄:%d\n电话:%s\nQQ:%s\nemail:%s\n",ch[j].name,ch[j].gender,ch[j].age,ch[j].mov,ch[j].QQ,ch[j].number);
}

void see()
{
	int j;
	printf("请输入要查找的人的名字:");
	char search_name[20];
	scanf("%s",search_name);
	read();
	for(j=0;j<i;j++)
	{
		if(strcmp(ch[j].name,search_name)==0)
		{
			printf("姓名:%s\n性别:%s\n年龄:%d\n电话:%s\nQQ:%s\nemail:%s\n",ch[j].name,ch[j].gender,ch[j].age,ch[j].mov,ch[j].QQ,ch[j].number);
		}
	}
	system("PAUSE");
}

void quit()
{
	system("cls");
	printf("\n");
	printf("感谢使用本通讯录\n");
	printf("\n");
	exit(1);
}

有人提醒我系统退不出去,所以改进如上。

接下来原先PO的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize (20)
int i;
void menu();
void read();
void add();
void hold(struct student *s);
void del();
void rev();
void Allsee();
void see();
void quit();




struct student
{
char name[maxsize];
    char gender[5];
    int  age;
    char mov[15];
    char QQ[15];
    char number[20];
}ch[maxsize];
int main()
{
int choice;
read();
printf("已存在%d条记录",i);
while(1)
{
menu();
scanf("%d",&choice);
switch(choice)
{
case 1:add();break;
case 2:del();break;
case 3:rev();break;
case 4:Allsee();break;
case 5:see();break;
case 0:quit();break;
default:
{
system("cls");
printf("\n");
printf("\n");
printf("\n");
printf("选择错误,请输入0到5以内的正确选项!");
printf("\n");
printf("\n");
printf("\n");
system("PAUSE");
}
}
}
return 0;
}
void menu()
{
printf("\n欢迎使用宿舍管理系统!\n");
printf("=========菜单栏=========\n");
printf("  1.增加        2.删除 \n");
printf("  3.修改        4.显示 \n");
printf("  5.查找        0.退出 \n");
printf("========================\n");
printf("请输入你的选择:");
}
void read()
{
i=0;
FILE *fp;
fp=fopen("a","rb");
while((fread(ch+i,sizeof(struct student),1,fp)) == 1)
{
    i++;
}
fclose(fp);
}
void add()
{
struct student *s;
    s=(struct student*)malloc(sizeof(struct student));
    printf("姓名:");
    scanf("%s",s->name);
    printf("性别:");
    scanf("%s",s->gender);
    printf("年龄:");
    scanf("%d",&s->age);
    printf("电话:");
    scanf("%s",s->mov);
    printf("QQ:");
    scanf("%s",s->QQ);
    printf("寝室号:");
    scanf("%s",s->number);
    hold(s);
    free(s);
    system("PAUSE");
}
void hold(struct student *s)
{
FILE *fp;
if((fp=fopen("a","ab")) != NULL)
if((fwrite(s,sizeof(struct student),1,fp))!=1)
{
printf("数据写入文件失败"); 
}
fclose(fp);
}
void del()
{
FILE *fp; 
int j,k;
char del_name[20];
printf("请输入需要删除的人的姓名:");
scanf("%s",del_name);
read();
for(j = 0;j < i; j++)
{
if((strcmp(ch[j].name,del_name))==0)
           k=j;
               for(j = k;j < i-1; j++)
               {
                strcpy(ch[j].name,ch[j+1].name);
                strcpy(ch[j].gender,ch[j+1].gender);
                ch[j].age = ch[j+1].age;
                strcpy(ch[j].mov,ch[j+1].mov);
                strcpy(ch[j].QQ,ch[j+1].QQ);
                strcpy(ch[j].number,ch[j+1].number);
                }
}
fp = fopen("a","wb");
if(fwrite(ch,sizeof(struct student),i-1,fp) != i-1)
{
printf("写入文件失败");
}
fclose(fp);
system("PAUSE");
}


void rev()
{
FILE *fp;
int j,k;
char change_name[20];
printf("请输入需要修改的名字:");
scanf("%s",change_name);
for(j = 0;j < i; j++)
{
if((strcmp(ch[j].name,change_name)) == 0)
           {
             k=j;
printf("请重新输入该联系人性别:");
scanf("%s",ch[k].gender);
printf("请重新输入该联系人的年龄:");
scanf("%d",&ch[k].age);
printf("请重新输入该联系人的电话:");
scanf("%s",ch[k].mov);
printf("请重新输入该联系人的QQ:");
scanf("%s",ch[k].QQ);
printf("请重新输入该联系人的email:");
scanf("%s",ch[k].number);
           }         
}
fp = fopen("a","wb");
fwrite(ch,sizeof(struct student),i,fp);
fclose(fp);
system("PAUSE");
}
void Allsee()
{
int j;
read();
for(j = 0;j < i; j++)
printf("姓名:%s\n性别:%s\n年龄:%d\n电话:%s\nQQ:%s\nemail:%s\n",ch[j].name,ch[j].gender,ch[j].age,ch[j].mov,ch[j].QQ,ch[j].number);
}
void see()
{
int j;
printf("请输入要查找的人的名字:"); 
char search_name[20];
scanf("%s",search_name);
read();
for(j=0;j<i;j++)
{
if(strcmp(ch[j].name,search_name)==0)
{
printf("姓名:%s\n性别:%s\n年龄:%d\n电话:%s\nQQ:%s\nemail:%s\n",ch[j].name,ch[j].gender,ch[j].age,ch[j].mov,ch[j].QQ,ch[j].number);
}
}
system("PAUSE");
}


void quit()
{
system("cls");
printf("\n");
printf("感谢使用本通讯录\n");
printf("\n");
system("PAUSE");
}

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值