职工信息管理系统
来源:互联网 发布:淘宝查隐形降权 编辑:程序博客网 时间:2024/04/28 19:02
// 职工管理系统.cpp : Defines the entry point for the console application.
/*
题目一: 职工信息管理系统设计
问题描述:试设计一职工信息管理系统,职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
实现功能:1、系统以菜单方式工作?
2、职工信息录入功能(职工信息用文件保存)--输入?
3、职工信息浏览功能 --输出?
4、查询和排序功能:(至少一种查询方式) --算法?
? 按工资查询
? 按学历查询等
5、职工信息删除、修改功能
知 识 点:结构体、数组、函数、文件等的应用
说 明:系统可录入的职工最大数值为50,要求界面友好,易于操作
程序代码如下:
*/
// 职工信息管理.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
int shouldsave=1;//用于职工信息的保存
struct worker
{
char num[15];//职工号
char name[15];//职工的姓名
int age;//职工的年龄
char graduate[15];//职工的学历
int money;//职工的工资
char address[15];//职工的住址
char tele[15];//职工的电话
};
struct node
{
struct worker data;
struct node *next;//结构体指针
};
///////////////////////////////////////////////////主菜单////////////////////////////////////////////////////////
void menu()
{
printf("/n/n/n");
printf("*************************************欢迎光临***********************************/n");
printf("/n/n");
printf("/t/t 0 退出职工系统/n");
printf("/t/t 1 录入职工信息/t/t 2 删除职工信息/n");
printf("/t/t 3 查询职工信息/t/t 4 修改职工信息/n");
printf("/t/t 5 保存职工信息/t/t 6 显示职工信息/n");
printf("/n/n");
printf("********************************************************************************/n");
printf(" 电信10709 tianmo /n");
printf(" 时候: 2009年7月9日 /n");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void printstart()
{
printf("--------------------------------------------------------------------------------/n");
}
void wrong()
{
printf("/n======>提示:输入错误!/n");
}
void nofind()
{
printf("/n=====>提示:没有找到相应的职工!/n");
}
void printc()//用于输出职工的相关中文信息
{
printf("职工编号 职工姓名 职工年龄 职工学历 职工工资 职工住址 职工电话/n");
}
void printe(struct node *p)//用于输出职工信息
{
printf("%-s/t%s/t %d/t%s %d %s %s/n",p->data.num,p->data.name,p->data.age,p->data.graduate,p->data.money,p->data.address,p->data.tele);
}
////////////////////////////////////////////查找满足要求的节点////////////////////////////////////////////////////////////////
struct node *Locate(struct node *head,char findmess[],char nameornum[]) //该函数用于定位连表中符合要求的接点,并返回该指针
{
struct node *r;
if(strcmp(nameornum,"num")==0) // 按职工编号查询
{
r=head->next; //把r链接在头指针里面
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;//返回结点
r=r->next; //结点向后移动1
}
}
else if(strcmp(nameornum,"name")==0) //按职工姓名查询
{
r=head->next; //把r链接在头指针里面
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r; //返回结点
r=r->next; //结点向后移动1
}
}
return 0;
}
////////////////////////////////////////////////////录入职工信息/////////////////////////////////////////////////////////
void Add(struct node *head)
{
struct node *p,*p1,*p2;
char num[20];
p1=head;//把头指针付给p1
p2=p1->next;//把p2连接在p1后面
while(p1->next !=NULL)//把p1放在最后
{
p1=p1->next; //结点向后移动一
}
while(1)//利用无穷循环
{
printf("/n");
printf("请您输入职工号(以0返回上一级菜单):");
scanf("%s",num);
if(strcmp(num,"0")==0)//技术性处理返回主菜单
{
break;
}
while(p2)//利用循环在记录里面查找,看该职工号是否已经存在
{
if(strcmp(p2->data.num,num)==0)
{
printf("/n");
printf("====>提示职工号为'%s'已经存在,若要修改,请选择'4'/n",num);
printf("/n");
printstart();//调用函数
printf("/n");
printc();//调用函数
printf("/n");
printe(p2);//调用函数
printstart();//调用函数
printf("/n");
}
p2=p2->next;//结点向后移动1
}
p=(struct node *)malloc(sizeof(struct node));//申请一个动态存储区域,它的大小为sizeof(struct node)
strcpy(p->data.num,num);
printf("请您输入职工的姓名:");
scanf("%s",p->data.name); //注意:因为name是首地址,故不用加上'&'
getchar(); //用于接收enter
printf("请你输入职工的年龄:");
scanf("%d",&p->data.age); //注意:因为age是整型数值,必须用上'&'
getchar(); //用于接收enter
printf("请你输入职工的学历:");
scanf("%s",p->data.graduate); //注意:因为graduate是首地址,故不用加上'&'
getchar(); //用于接收enter
printf("请输入职工的工资:");
scanf("%d",&p->data.money);
getchar(); //用于接收enter
printf("请输入职工的住址:");
scanf("%s",p->data.address);//注意:因为address是首地址,故不用加上'&'
getchar(); //用于接收enter
printf("请输入职工的电话号码:");
scanf("%s",p->data.tele);
getchar(); //用于接收enter
p->next =NULL;//将p后面指空
p1->next =p;//把p连接在p1的后面
p1=p;//把p赋给p1
shouldsave=1;//用于后面的保存
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Qur(struct node *head) // 查询职工信息
{
int sel;
char findmess[20];
struct node *p;
if(head->next==NULL) //判断head后面是否连接有内容
{
printf("/n=====>提示:没有职工信息可以查询!/n");
}
printf("/n=====>1按职工编号查找/n=====>2按职工姓名查找/n");
scanf("%d",&sel);
if(sel==1)//按职工编号查询
{
printf("请你输入要查找的书籍的编号:");
scanf("%s",findmess);
p=Locate(head,findmess,"num"); //调用locate函数,并且返回指向要查找职工编号的指针
if(p)
{
printf("/t/t/t/t查找结果/n");
printstart(); //调用函数
printc();//调用函数
printe(p); //调用函数
printstart(); //调用函数
}
else
nofind();
}
else if(sel==2) //按职工姓名查询
{
printf("请你输入要查找的职工名字:");
scanf("%s",findmess);
p=Locate(head,findmess,"name"); //调用locate函数,并且返回指向要查找职工名字的指针
if(p)
{
printf("/t/t/t/t查找结果/n");
printstart(); //调用函数
printc(); //调用函数
printe(p); //调用函数
printstart(); //调用函数
}
else
nofind();
}
else
wrong();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Delete(struct node *head) //删除职工信息
{
int sel;
struct node *p1,*p2;
char findmess[20];
if(head->next==NULL) //判断head后面是否连接有内容
{
printf("/n提示:没有职工信息可以删除!/n");
}
printf("/n=====>1按职工编号删除/n=====>2按职工姓名删除/n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的职工编号:");
scanf("%s",findmess);
p1=Locate(head,findmess,"num"); //调用locate函数,并且返回指向要查找职工编号的指针
if(p1)
{
p2=head;
while(p2->next!=p1) //利用循环找到要指向删除职工编号的指针p1
{
p2=p2->next;
}
p2->next=p1->next; //将p1后面的一个指针连接在p2->next,从而删除了p1->data.num
free(p1); //释放p1所占的内存
printf("/n提示:该书籍已经成功删除!/n");
shouldsave=1; //用于后面的保存
}
else
{
nofind();
}
}
else if(sel==2)
{
printf("请你输入要删除的职工姓名:");
scanf("%s",findmess);
p1=Locate(head,findmess,"name"); //调用locate函数,并且返回指向要查找职工姓名的指针
if(p1)
{
p2=head;
while(p2->next!=p1) //利用循环找到要指向删除的职工编号的指针p1
{
p2=p2->next;
}
p2->next=p1->next; //将p1后面的一个指针连接在p2->next,从而删除了p1->data.name
free(p1); //释放p1所占的内存
printf("/n提示:该书籍已经成功删除!/n");
shouldsave=1;//用于后面的保存
}
else
{
nofind();
}
}
else
wrong();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Modify(struct node *head) //职工信息的修改
{
struct node *p;
char findmess[20];
if(head->next==NULL)
{
printf("/n=====>提示:没有资料可以修改!/n");
}
printf("请你输入要修改的职工编号:");
scanf("%s",findmess);
p=Locate(head,findmess,"num"); //调用locate函数,并且返回指向要修改职工编号的指针
if(p)
{
printf("请您输入新的职工编号:");
scanf("%s",p->data.num); //注意:因为num是首地址,故不用加上'&'
getchar(); //用于接收enter
printf("请您输入新的职工姓名:");
scanf("%s",p->data.name); //注意:因为name是首地址,故不用加上'&'
getchar(); //用于接收enter
printf("请您输入新的职工年龄:");
scanf("%d",&p->data.age); //注意:因为age是整型数值,必须用上'&'
getchar(); //用于接收enter
printf("请您输入新的职工学历:");
scanf("%s",p->data.graduate);
getchar(); //用于接收enter
printf("请您输入新的职工工资:");
scanf("%d",&p->data.money);
printf("请您输入新的职工住址:");
scanf("%s",p->data.address);
printf("请您输入新的职工电话:");
scanf("%ld",p->data.tele);
printf("/n=====>提示:资料修改成功!/n");
shouldsave=1;
}
else
nofind();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Save(struct node *head) //保存职工的相关信息
{
FILE* fp;
struct node *p;
int flag=1,count=0;
fp=fopen("D://worker","wb"); //为输出打开一个二进制的文件
if(fp==NULL)
{
printf("/n=====>提示:重新打开文件时发生错误!/n");
exit(1); //注意:逃离函数,它在stdlib库里面
}
p=head->next; //将p连接在head的后面
while(p) //判断p是否为空,以便进行循环
{
if(fwrite(p,sizeof(struct node),1,fp)==1) //把p中的内容写到fp中
{
p=p->next; //p向后移动一
count++;//用于统计保存职工信息记录的数目
}
else
{
flag=0;
break; //如果fwrite(p,sizeof(struct node),1,fp)返回值不是一,提前跳出循环
}
}
if(flag==1)
{
printf("/n=====>提示:文件保存成功.(有%d条记录已经保存)./n",count);
shouldsave=0;
}
fclose(fp); //关闭fp文件
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Display(struct node *head) //用于显示保存的职工相关信息
{
int count=0;
struct node *p;
p=head->next; //将p连接在head的后面
if(p==NULL)
{
printf("/n=====>提示:没有资料可以显示!/n");
}
printf("/t/t/t/t显示结果/n");
printstart();
printc();
printf("/n");
while(p) //利用循环把职工的所有信息全部显示
{
printe(p);
p=p->next; //p向后移动一
}
printstart();
printf("/n");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
printf("/n/n/n/t/t/t/t职工信息管理系统/n");
FILE *fp;
int count=0,n;
char jian,ch;
struct node *head,*p1,*p2;
head=p1=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
p1=head;
if((fp=fopen("D://worker","rb"))==NULL)
{
printf("文件还不存在,是否新建?(Y/N):");
scanf("%c",&jian);
if(jian=='Y'||jian=='y')
{
fp=fopen("D://worker","wb");
}
else
{
exit(0);
}
}
while(!feof(fp))//判断文件是否全部读完
{
p2=(struct node *)malloc(sizeof(struct node));
if(fread(p2,sizeof(struct node),1,fp))//把文件中的内容接入链表
/************************注意:是把读取的文件中的内容接入p2中,所以要借助p1把p2记录下来************************/
{
p2->next=NULL;
p1->next=p2;
p1=p2;//关键的技术处理部分,否则会出现覆盖的问题
count++;
}
}
fclose(fp);
while(1)
{
menu();
printf("请您选择:");
scanf("%d",&n);
if(n==0)
{
getchar();
printf("/n====>提示:资料已改动,是否将改动保存到文件中?(y/n)/n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(head); //调用函数
printf("/n=====>提示:您已经推出系统 !/n");
break;
}
switch(n)
{
case 1:Add(head);break;
case 2:Delete(head);break;
case 3:Qur(head);break;
case 4:Modify(head);break;
case 5:Save(head);break;
case 6:Display(head);break;
default:wrong();break;
}
}
return 0;
}
- 职工信息管理系统
- 职工信息管理系统
- 职工信息管理系统实验设计
- 职工信息管理系统
- 职工信息管理系统:
- 职工信息管理系统
- 职工信息管理系统
- 【C语言】职工信息管理系统
- C语言职工信息管理系统
- 课程设计之职工信息管理系统
- 课程设计之职工信息管理系统
- 数据结构课程设计、职工信息管理系统
- 职工信息管理系统(未完成)
- 职工信息管理系统(课程设计)
- C语言课程设计职工信息管理系统
- 《c语言课程设计》---职工信息管理系统
- C语言课程设计之职工信息管理系统
- C++课程设计(职工信息管理系统)
- ubuntu10.10 安装 sun jdk
- 杨辉三角(经典)
- getNumValue
- curl 抓取google简体中文
- Linux RPM 命令参数使用详解[介绍和应用]
- 职工信息管理系统
- D3D中的设备丢失
- Android应用程序模块详解
- 腾讯邮箱的内部访问导致的激活问题及其解决
- [电影]老男孩,给有梦想的你
- DLLImport引用的dll的路径能写成相对路径
- 向量化异常处理程序 继续处理程序 veh 例子
- android launchmode小结
- 头文件 库文件 搜索路径