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

职工信息管理系统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″)。

上一篇:执行Socket socket = new Socket(ip, port);时抛出个异常:android.os.NetworkOnMainThreadException解决办法


下一篇:javamail接收邮件(较全代码)