ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

职工信息管理系统(c语言完成)新手**

2020-12-04 21:01:00  阅读:246  来源: 互联网

标签:head 职工 struct scanf 新手 p1 printf 信息管理系统 works


职工信息管理系统c语言完成

(包含增删查改 排序 保存文件)(注明:**读取文件只能读取一个文件)

链表学习不太好点击链接 超详细解读不要忘了收藏

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<windows.h>
#define N sizeof(struct works)
struct works
{

int   number;
char  name[20];
char  sex[5];
char  birth[11];
char  xueli[20];
char  position[15];
char  gongzi[20];
char  addr[20];
char  tel[11];

// works()
// {
// // memset(name,0);
// next=NULL;
//
// }
struct works *next;
};

//添加职工的信息
struct works *add() // 建立链表
{
struct works *head,*p1,*p2;
int n=1;
char a;
printf(“输入职工信息:\n”);
do
{
p1=(struct works *)malloc(N); /为p1开辟一个新单元/
printf("\n职工号:");
scanf("%d",&p1->number);
printf(“姓名:”);
scanf("%s",p1->name);
printf(“性别:”);
scanf("%s",p1->sex);
printf(“出生年月:”);
scanf("%s",p1->birth);
printf(“学历:”);
scanf("%s",p1->xueli);
printf(“职务:”);
scanf("%s",p1->position);
printf(“工资:”);
scanf("%s",p1->gongzi);
printf(“住址:”);
scanf("%s",p1->addr);
printf(“电话号码:”);
scanf("%s",p1->tel);
p1->next=NULL;
if(n==1)
{
head=p1;
}
p2->next=p1;
p2=p1;
n++;

    printf("\n是否输入下一个员工信息?输入 y 继续\n");
    getchar();//吸收空格 
    a=getchar();
}while(a=='y');
 //执行是否输入下一个数据
return head;

}
//删除职工信息
struct works *Delete(struct works *head) // 删除
{
struct works *p1,*p2;
int k;//输入删除的职工号是否存在
printf(“输入要删除职工的职工号:\n”);
scanf("%d",&k);
p1=head;

if(p1->number==k)/*找到了*/
{
    if(head==p1)
    {
        head=head->next;
    }
    else
    {
        p2->next=p1->next;
    }
    free(p1);
    printf("\n删除%d职工成功!\n",k);
}
else/*没找到*/
{
    printf("\n未找到职工号为%d职工!\n",k);
}
return head;

}

//插入职工信息
struct works *insert(struct works *head) // 插入
{
struct works *p1,*p3;
works *p2=new works();
int k;
printf("\n插入某个职工之后:");
scanf("%d", &k);
printf("\n输入将要插入职工的数据:\n");
p3=(struct works *)malloc(N);
p1=head;
while(p1->number != k&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1->number!=k)
{
printf(“没有该职工\n”);
}
else
{
printf("\n职工号:");
scanf("%d",&p3->number);
printf(“姓名:”);
scanf("%s",p3->name);
printf(“性别:”);
scanf("%s",p3->sex);
printf(“出生年月:”);
scanf("%s",p3->birth);
printf(“学历:”);
scanf("%s",p3->xueli);
printf(“职务:”);
scanf("%s",p3->position);
printf(“工资:”);
scanf("%s",p3->gongzi);
printf(“住址:”);
scanf("%s",p3->addr);
printf(“电话号码:”);
scanf("%s",p3->tel);
p2=p1->next;
p1->next=p3;
p3->next=p2;
}

return head;

}
//通过职工号查找职工信息
struct works *seek1(struct works *head) // 查找
{
struct works *p;
int k;
p=head;
printf("\n输入查找职工的职工号:\n");
scanf("%d", &k);
while(p->number!=k&&p->next!=NULL)
{
p=p->next;
}
if(p->number==k)/找到了/
{
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->birth,p->xueli,p->position,p->gongzi,p->addr,p->tel);

}
else/*没有找到*/
{
    printf("\n未找到该职工!\n");
}
return p;

}

//通过姓名查找职工信息
struct works *seek2(struct works *head)
{
struct works *p;
char M[20];
p=head;
printf(“请输入要查找的职工姓名:\n”);
scanf("%s",M);
while(strcmp(p->name,M)!=0&&p->next!=NULL)
{
p=p->next;
}
if(strcmp(p->name,M)!=0)
{
printf("\n未找到该职工!\n");
}
else
{
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->birth,p->xueli,p->position,p->gongzi,p->addr,p->tel);
}
return p;
}

//修改职工信息
struct works *xiugai(struct works *head) // 修改
{
struct works *p;
int k;
p=head;
printf("\n输入要修改职工的职工号:");
scanf("%d",&k);
while(p->number!=k&&p->next!=NULL)
{
p=p->next;/后一一个结点/
}
if(p->number==k)/找到了/
{
printf("\n职工号:");
scanf("%d",&p->number);
printf(“姓名:”);
scanf("%s",p->name);
printf(“性别:”);
scanf("%s",p->sex);
printf(“出生年月:”);
scanf("%s",p->birth);
printf(“学历:”);
scanf("%s",p->xueli);
printf(“职务:”);
scanf("%s",p->position);
printf(“工资:”);
scanf("%s",p->gongzi);
printf(“住址:”);
scanf("%s",p->addr);
printf(“电话号码:”);
scanf("%s",p->tel);
printf("\n修改成功!\n");
}
else/未找到/
{
printf("\n未找到该职工 !\n");
}
return head;
}

//职工信息的排序
struct works *sort(struct works *head)
{
struct works *p1,*p2,*p3;

char a[20];
p3=(struct works *)malloc(N);
for(p1=head; p1!=NULL; p1=p1->next)
{
    for(p2=p1->next; p2!=NULL; p2=p2->next)
    {
        if(p1->number>p2->number)
        {
            p3->number=p2->number;
            p2->number=p1->number;
            p1->number=p3->number;
            strcpy(a,p1->name);
            strcpy(p1->name,p2->name);
            strcpy(p2->name,a);
            strcpy(a,p1->sex);
            strcpy(p1->sex,p2->sex);
            strcpy(p2->sex,a);
            strcpy(a,p1->birth);
            strcpy(p1->birth,p2->birth);
            strcpy(p2->birth,a);
            strcpy(a,p1->xueli);
            strcpy(p1->xueli,p2->xueli);
            strcpy(p2->xueli,a);
            strcpy(a,p1->position);
            strcpy(p1->position,p2->position);
            strcpy(p2->position,a);
            strcpy(a,p1->gongzi);
            strcpy(p1->gongzi,p2->gongzi);
            strcpy(p2->gongzi,a);
            strcpy(a,p1->addr);
            strcpy(p1->addr,p2->addr);
            strcpy(p2->addr,a);
            strcpy(a,p1->tel);
            strcpy(p1->tel,p2->tel);
            strcpy(p2->tel,a);
        }
    }

}
return head;

}

//将职工信息保存到文件中

void save(struct works *head) // 保存
{
FILE *fp;
struct works *p;
p=head;
if((fp=fopen(“D:\职工.txt”,“a+”))==NULL)
{
printf(“打开失败\n”);
exit(0);
}
while(p!=NULL)
{
fprintf(fp,"%d %s %s %s %s %s %s %s %s\n",p->number,p->name,p->sex,p->birth,p->xueli,
p->position,p->gongzi,p->addr,p->tel);
p=p->next;
}
printf(“保存成功\n”);
fclose(fp);
printf("\n");
}

//读取一组数据(就是一组数据)
void Du_qu(struct works *head)
{
FILE *fp;
// int count[];
struct works p=(struct works)malloc(N);

if((fp=fopen("D:\\职工.txt","r"))==NULL)
{
	printf("没有此文件!");
}
fscanf(fp,"%d %s %s %s %s %s %s %s %s\n",&p->number,p->name,p->sex,p->birth,p->xueli,
p->position,p->gongzi,p->addr,p->tel);

	printf("%d %s %s %s %s %s %s %s %s\n",p->number,p->name,p->sex,p->birth,p->xueli,
p->position,p->gongzi,p->addr,p->tel);
p=p->next;

fclose(fp);

}
//输出员工信息
void Disp(struct works *head)
{
struct works *p;
p=head;
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
while(p!=NULL)
{

    printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->birth,p->xueli,
	p->position,p->gongzi,p->addr,p->tel);
    p=p->next;
}

}

void menu1()
{

printf("*********欢迎进入查询系统***********\n");
printf("\t\t《《《1.按职工号查找》》》\n");
printf("\t\t《《《2.按姓名查找》》》\n");
printf("\t\t  《《《3.退出》》》  \n");
printf("************谢谢使用*******************\n");

}
void seek(struct works *head)
{
int i;
char ch;
printf(“请选择查找方式\n”);
scanf("%d",&i);
do
{
switch(i)
{
case 1:
seek1(head);
break;
case 2:
seek2(head);
break;
case 3:
printf(“成功退出\n”);
break;
default:
printf(“请输入正确指令!\n”);
break;

    }
    printf("是否继续查询是(Y/y)否(N/n)\n");
    getchar();
    ch=getchar();
}
while(ch=='Y'||ch=='y');

}

//主菜单显示
void menu() // 菜单
{
//请亲爱的测试者请按照本系统的指引,来进行职工信息系统的使用,如若出现报错等现象,作者一概不负责 (并将追究其法律责任)
printf(“\n");
printf("\t\t\t 欢迎使用职工管理系统\n");
printf("\t
\n");
printf("\t\t\t 1.录入职工信息。\n");
printf("\t\t\t 2.查询职工信息。\n");
printf("\t\t\t 3.删除职工信息。\n");
printf("\t\t\t 4.插入职工信息。\n");
printf("\t\t\t 5.修改职工信息。\n");
printf("\t\t\t 6.输出职工信息。\n");
printf("\t\t\t 7.按职工号排序。\n");
printf("\t\t\t 8.保存职工信息。\n");
printf("\t\t\t 9.读取职工信息。\n");
printf("\t\t\t 0.退出系统。\n");
printf("
**************************************************************\n”);
printf("\t\t\t 选择对应编号:");
}
int main()
{
struct works *head;
system(“color 0B”);
char ch;
int flag;
while(1)
{
menu();
scanf("%d",&flag);
switch(flag)
{
case 1:
head= add();

        break;
    case 2:
        menu1();
        seek(head);
        break;
    case 3:
        head=Delete(head);
        break;
    case 4:
        head=insert(head);
        break;
    case 5:
        head=xiugai(head);
        break;
    case 6:
    	Disp(head);
    	break;
    case 7:
       head= sort(head);
       Disp(head) ;
        break;
    case 8:
        save(head);
        break;
	case 9: 
		Du_qu(head); 
		break;
    case 0:          
        printf("                            谢谢对本系统的使用!\n");
		 exit(0);
        break;
    }
}
printf("************************************谢谢使用************************************\n");
return 0;

}

注释****

  1. strcpy函数
    其一般形式为:strcpy(字符数组1,字符串2)
    strcpy是“字符串复制函数”。
    作用:是将字符串2复制到字符数组1中去。例如:
    char str1[10],str2[]={″China″};
    strcpy(str1,”china”);

(1)字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。
(2)“字符数组1”必须写成数组名形式(如str1),
“字符串2”可以是字符数组名,也可以是一个字符串常量。如:strcpy(str1,″China″);
(3)复制时连同字符串后面的′\0′一起复制到字符数组1中。
(4)可以用strncpy函数将字符串2中前面若干个字符复制到字符数组1中去。
例如:strncpy(str1,str2,2);作用是将str2中前面2个字符复制到str1中去,然后再加一个‘\0’。

(5)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如:
str1=″China″; 不合法
str1=str2; 不合法
用strcpy函数只能将一个字符串复制到另一个字符数组中去。
用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。
下面是合法的使用:
char a[5],c1,c2;
c1=′A′; c2=′B′;
a[0]=′C′; a[1]=′h′; a[2]=′i′;
a[3]=′n′; a[4]=′a′;

2.strcmp函数
其一般形式为:strcmp(字符串1,字符串2)
strcmp的作用是比较字符串1和字符串2。
例如:strcmp(str1,str2);
strcmp(″China″,″Korea″);
strcmp(str1,″Beijing″);
比较的结果由函数值带回
(1) 如果字符串1=字符串2,函数值为0。
(2) 如果字符串1>字符串2,函数值为一正整数。
(3) 如果字符串1<字符串2,函数值为一负整数。
注意:对两个字符串比较,不能用以下形式:
if(str1>str2)
printf(″yes″);
而只能用
if(strcmp(str1,str2)>0)
printf(″yes″)。

标签:head,职工,struct,scanf,新手,p1,printf,信息管理系统,works
来源: https://blog.csdn.net/qq_51909272/article/details/110672507

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有