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

在(一)的基础上进一步优化功能

此篇文章在(一)的基础上,进一步扩大了人员文件管理系统的两个功能,修改人员信息和删除人员。
至此,简单的增删查改功能全部实现。
代码没有用到链表(主要是刚学,还不熟QAQ),用的是结构体数组,下面直接给出实现功能的函数代码,纯手打:
首先四个函数声明:

int add(FILE *fp,struct message me[20]);
void see(FILE *fp,struct message me[20]);
void modify(FILE *fp,struct message me[20]);
int del(FILE *fp,struct message me[20]);

修改函数:

void modify(FILE *fp,struct message me[20])    //修改某个信息
{
	int j,i,a;
	printf("输入要修改第几个人的信息及信息标号(1年龄,2性别,3地址):");
	scanf("%d%d",&a,&j);
	printf("输入修改后的信息:");
	if(j==1)                 //修改年龄
	{
		printf("输入新年龄:"); 
	scanf("%d",&me[a-1].age );
	}
	else if(j==2)             //修改性别
	{
		printf("输入新性别:");
		scanf("%s",me[a-1].sex );
	}
	else if(j==3)			//修改地址
	{
		printf("输入新地址:");
		scanf("%s",me[a-1].add );
	}
	else printf("未修改\n");  

	fopen("d:\\123.txt","w+");  //打开文件
	 for(i=0;i<sum;i++)
 {
	fprintf(fp,"%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add); //更新文件
 }
	  for(i=0;i<sum;i++)
 {
  //读数据到屏幕
 printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );

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

删除函数:

int del(FILE *fp,struct message me[20])
{
	int i,a;
	printf("请输入要删除第几个人:");  //每次只能删除一个人
	scanf("%d",&a);
	if(a<=sum){
		for(i=a-1;i<sum;i++){   //用循环方式,将第i+1个人的信息赋给第i个人
	strcpy(me[i].name ,me[i+1].name) ;  //将逗号后字符串赋给逗号前
	me[i].age =me[i+1].age;
	strcpy(me[i].sex ,me[i+1].sex);
	strcpy(me[i].add ,me[i+1].add);
		}
	printf("删除成功\n");
	}
	else printf("没有此人\n");
	 fopen("d:\\123.txt","w+");
	 for(i=0;i<sum-1;i++) 
 {
		 printf("%s\t%d\t%s\t%s\n",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);
   return sum-1;  //返回人员总数
}

代码运行演示图片在此不再展示,下面附上源码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N =3;  //定义开始录入的人数
int sum;   //定义总人数,包括后来添加,删除的人
struct message{
	char name[20];
	int age;
	char sex[20];
	char add[50];
};
int add(FILE *fp,struct message me[20]);
void see(FILE *fp,struct message me[20]);
void modify(FILE *fp,struct message me[20]);
int del(FILE *fp,struct message me[20]);
void main()
{
 FILE *fp;
 int i,b;
 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);

 see(fp,me);

 
printf("请输入是否追加:(1:追加,0:不追加)");
scanf("%d",&b);
if(b==1){
  sum=N+add(fp,me);
}
	modify(fp,me);
sum=del(fp,me);
printf("现有总人数%d\n",sum);
}


void see(FILE *fp,struct message me[20])
{
	int i,c;
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 );

}
}  
	

}

int 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 );

 }
return a;
}

void modify(FILE *fp,struct message me[20])    //修改某一个信息
{
	int j,i,a;
	printf("输入要修改第几个人的信息及信息标号(1年龄,2性别,3地址):");
	scanf("%d%d",&a,&j);
	printf("输入修改后的信息:");
	if(j==1)
	{
		printf("输入新年龄:");
	scanf("%d",&me[a-1].age );
	}
	else if(j==2)
	{
		printf("输入新性别:");
		scanf("%s",me[a-1].sex );
	}
	else if(j==3)
	{
		printf("输入新地址:");
		scanf("%s",me[a-1].add );
	}
	else printf("输入错误\n");

	fopen("d:\\123.txt","w+");
	 for(i=0;i<sum;i++)
 {
		
	fprintf(fp,"%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add); //向文件中写数据
 }
	  for(i=0;i<sum;i++)
 {
  //读数据
 printf("%s\t%d\t%s\t%s\n",me[i].name ,me[i].age ,me[i].sex ,me[i].add );

 }
   fclose(fp);
}


int del(FILE *fp,struct message me[20])
{
	int i,a;
	
	printf("请输入要删除第几个人:");
	scanf("%d",&a);
	if(a<=sum){
		for(i=a-1;i<sum;i++){
	strcpy(me[i].name ,me[i+1].name) ;
	me[i].age =me[i+1].age;
	strcpy(me[i].sex ,me[i+1].sex);
	strcpy(me[i].add ,me[i+1].add);
		}
	printf("删除成功\n");
	}
	else printf("没有此人\n");
	 fopen("d:\\123.txt","w+");
	 for(i=0;i<sum-1;i++)
 {
		 printf("%s\t%d\t%s\t%s\n",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);
   return sum-1;
}

预告:
在(三)中,会进一步完善代码,包括一些功能的优化,系统主页面的建立等等,但函数功能基本确定,应该就是一个完整的人员管理系统了。相应的可以修改成学生,职工,工厂等等人员的管理系统。
对于初学C的我来讲,现在就先考虑代码功能的实现,至于内部存储以及节省空间等等,还是等我以后学习深入后在慢慢理解吧~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值