用C语言写一个人员文件管理系统(一)

题目如下:
1.输入三个人的信息(姓名,年龄。性别。家庭住址),并保存到txt文件中。再从文件中读取信息显示在屏幕上;
2.实现人员信息重复显示功能;
3.实现人员信息的添加。
过程如下:
首先建立一个结构体 message

#include<stdio.h>
#include<stdlib.h>
#define N 3   //定义三个人
struct message{    //结构体定义
	char name[20];
	int age;
	char sex[20];
	char add[50];
};

主函数中,首先实现信息录入功能,并使用函数fprintf保存到文件中,我这里提前在D盘建立了一个123.txt文件


FILE *fp;   //定义文件指针
 int i,c,b,a;
 struct message me[20];   //定义结构体数组
 if((fp=fopen("d:\\123.txt","r+"))==NULL)   //打开文件
 {
	printf("error");
	exit(0);
 }
 for(i=0;i<N;i++)     //输入信息
 {
	printf("请输入第%d个人的信息:",i+1);
	scanf("%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);
	fprintf(fp,"%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add); //向文件中写数据
 }
 fclose(fp);   //关闭文件

信息录入文件后,在从文件中读出来,使用函数fscanf

printf("姓名\t年龄\t性别\t家庭住址\n");
 fp=fopen("d:\\123.txt","w+"); //打开文件
 for(i=0;i<N;i++)
 {
 fscanf(fp,"%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);  //从文件中读数据
 printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );   //显示数据

 }
fclose(fp);  //关闭文件

之后进行人员信息重复显示,首先输入要显示的人是第几个,然后其相关信息便可以显示在屏幕上

printf("请输入要显示第几个人:\n");
scanf("%d",&c);
for(i=0;i<N;i++)  
if (i+1==c)
printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );  //显示数据
}  

最后可以进行人员添加,这里定义了一个函数add,功能是信息输入并保存到文件中类似,再将所有的信息显示在屏幕上。注意打开文件,要改为可追加方式

/*写入文件*/
void add(FILE *fp,struct message me[20])
{
	int i;
	int a;
	fopen("d:\\123.txt","a+");
	printf("请输入要追加人数:");
	scanf("%d",&a);
	for(i=N;i<a+N;i++){
    printf("请输入第%d个人的信息:",i+1);
	scanf("%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);
	fprintf(fp,"%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add); //向文件中写数据

}
fclose(fp);

printf("姓名\t年龄\t性别\t家庭住址\n");
 //fp=fopen("d:\\123.txt","r+");
 for(i=0;i<a+N;i++)
 {
 //fscanf(fp,"%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);  //从文件中读数据
 printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );

 }
//fclose(fp);
}

显示如下:
首先输入信息:
在这里插入图片描述
然后查看信息复显:在这里插入图片描述
最后添加信息:
在这里插入图片描述

程序结束。
txt文件内容如图

代码附录

#include<stdio.h>
#include<stdlib.h>
#define N 3
struct message{
	char name[20];
	int age;
	char sex[20];
	char add[50];
};
void add(FILE *fp,struct message me[20]);
void main()
{
 FILE *fp;
 int i,c,b;
 int a,D;
 struct message me[20];
 if((fp=fopen("d:\\123.txt","w"))==NULL)
 {
	printf("error");
	exit(0);
 }
 for(i=0;i<N;i++)
 {
	printf("请输入第%d个人的信息:",i+1);
	scanf("%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);
	fprintf(fp,"%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add); //向文件中写数据
 }
 fclose(fp);
printf("姓名\t年龄\t性别\t家庭住址\n");
 fopen("d:\\123.txt","r");
 for(i=0;i<N;i++)
 {
 fscanf(fp,"%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);  //从文件中读数据
 printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );

 }
fclose(fp);

printf("请输入要显示第几个人:\n");
scanf("%d",&c);
for(i=0;i<N;i++)
{
   
if (i+1==c)
{
printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );

}
}  


 
printf("请输入是否追加:(1:追加,0:不追加)");
scanf("%d",&b);
if(b==1){
  add(fp,me);
}
}

void add(FILE *fp,struct message me[20])
{
	int i;
	int a;
	fopen("d:\\123.txt","a+");
	printf("请输入要追加人数:");
	scanf("%d",&a);
	
	for(i=N;i<a+N;i++){
    printf("请输入第%d个人的信息:",i+1);
	scanf("%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);
	fprintf(fp,"%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add); //向文件中写数据

}
fclose(fp);

printf("姓名\t年龄\t性别\t家庭住址\n");
 //fp=fopen("d:\\123.txt","r+");
 for(i=0;i<a+N;i++)
 {
 //fscanf(fp,"%s%d%s%s",me[i].name ,&me[i].age ,me[i].sex ,me[i].add);  //从文件中读数据
 printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );

 }
//fclose(fp);
}
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值