C语言程序设计:职工信息管理系统

1.从键盘输入n名职工的信息包括(职工姓名、职工工号、性别、年龄、住址、工资、健康状况、文化程度)保存至磁盘文件"employee"。

2.从磁盘文件"employee"中读取职工姓名、工资的信息保存至磁盘文件"employee_wages"。

3.从磁盘文件"employee_wages"中删除一名职工信息,存回磁盘文件"employee_wages"。

1.声明结构体类型

struct Employeedata//声明结构体类型 struct Employeedata
{
	char name[20];//姓名 
	int num;//工号 
	char sex;//性别 
	int age;//年龄 
	char addr[30];//住址 
	float wages;//工资 
	char health;//健康状况 
	char level[20];	//文化程度	
}; 

struct Employee//声明结构体类型 struct Employee
{
    struct Employeedata data; //data为 struct Employeedata类型 
	struct Employee *next;    //结构体指针用于指向下一结点 
};

2.用动态链表存储每位职工信息

定义结构体指针head、p1、p2,利用malloc开辟sizeof(struct Employee)大小的空间。

struct Employee *head,*p1,*p2;//定义结构体变量p1、p2、head
p2=p1=(struct Employee *)malloc(sizeof(struct Employee));//p1、p2、指向新开辟的结点位置 

从键盘输入结点信息(职工姓名、职工工号、性别、年龄、住址、工资、健康状况、文化程度),N为链表结点个数初值为0,每创建一个结点,N值加1。如果当前结点为头结点,则头指针指向该结点;不为头结点时,将结点成员next指向新开辟的结点。结构体指针p2也指向新开辟的结点。不断用p1开辟新的结点,若当前结点为最后一个结点时,将NULL赋给结构体成员next。

gets(p1->data.name);//输入姓名
scanf("%d",&p1->data.num);//输入工号
scanf("%c",&p1->data.sex);//输入性别
scanf("%d",&p1->data.age);//输入年龄
gets(p1->data.addr);//输入住址
scanf("%f",&p1->data.wages);//输入工资
scanf("%c",&p1->data.health);//输入健康状况
gets(p1->data.level);//输入文化程度
	N=N+1;            //结点数加1
	if(N==1) head=p1;//头指针指向新开辟的结点
	else p2->next=p1;//结点成员next指向新开辟的结点
	p2=p1;           //将p1赋给p2 ,p2也指向新开辟的结点

p2->next=NULL;//最后一个结点,NULL赋给结构体成员next

3.将职工信息保存至文件"employee"

定义结构体指针,指向链表表头。

	struct Employee *p;//定义结构体指针
	p=head;//p指向链表表头

每次从地址p开始的存储区写长度为sizeof(struct Employeedata)的数据到文件中,直至表尾。

	do
	{
		fwrite(p,sizeof(struct Employeedata),1,fp);
		p=p->next;
	}while(p!=NULL);

 4.从文件"employee"中读取职工姓名、工资的信息保存至文件"employee_wages"

定义结构体指针,指向链表表头。

	struct Employee *p;//定义结构体指针
	p=head;//p指向链表表头

 每次将链表结点中职工姓名、职工工资信息写入文件,直至表尾。

	  do
	  {
	  	fprintf(fp,"%-20s%.2f\n",p->data.name,p->data.wages);//写入职工姓名、工资到文件
	  	p=p->next;//p指向下一结点
	  }while(p!=NULL);

 5.从文件"employee_wages"删去一名职工信息存回文件employee_wages

声明结构体类型,定义结构体数组 

	struct Employee_wages//声明结构体类型 struct Employee_wages
	{
		char name[20];//职工姓名 
		float wages;//工资 
	}; 
	struct Employee_wages wag[N];//定义结构体数组 

从文件employee_wages读取职工信息存入结构体数组

    for(i=0;i<N;i++)
      fscanf(fp,"%s%f",wag[i].name,&wag[i].wages);//从文件输入职工姓名、工资到结构体数组元素

 从键盘输入删除职工的姓名,与存入结构体数组的职工姓名比较,判断是否写入文件employee_wages

	scanf("%s",name);//输入删除职工的姓名
	for(i=0;i<N;i++)
	{
	 if(strcmp(name,wag[i].name)==0)continue;//如果相同跳过本次循环
	 else
	 fprintf(fp,"%-20s%.2f\n",wag[i].name,wag[i].wages);//如果不同写入原文件	
	} 

注:以上仅为部分代码,具体代码已以文本的形式上传,用户可以自行下载。

6.运行结果

1.运行界面

2.输入职工信息保存到文件employee

3.从文件employee提取职工姓名、工资信息保存到文件employee_wages

4.从文件employee_wages中删去一名职工信息

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值