c语言课设-试设计一个职工信息管理系统

1.要求:/*要求职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、
电话等(职工号不重复)。试设计一个职工信息管理系统,包括以下功能:
a) 系统以菜单方式工作;000
b) 职工信息录入功能(职工信息用文件保存)--输入;000
c) 职工信息浏览功能 --输出;000
d) 查询或排序功能:(至少一种查询方式)  --算法;
  e) 按工资查询;
  f) 按学历查询。*/

2.代码:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h> 
//结点类型定义
typedef struct{
int id;//职工号 
char name[00];//名字 
char sex[10];//性别 
char birthday[15];//出生年月 
char wages[15];//工资
char address[60];//住址 
char education[10];//学历
char positions[10];//职务
} ElemType;
typedef struct node{
ElemType data;
struct node* next;
}LNode,* LinkList;

//函数声明 
void ListCreate(LinkList &L,int n);  //创建员工基本信息链表 
void ListPrint(LinkList L); //浏览员工基本信息 
void LocateElem(LinkList L,char *x); //查找 某个员工基本信息 
void ListInsert(LinkList &L,ElemType e); //添加员工信息到单链表 
void ListDelete(LinkList &L,int x); //删除一个员工信息 
void welcome();
//主函数 
int main()
{system("color 3f");
int control;           // 循环中控制操作 
int x;                 //查找的员工职工号 
int n;                 //欲创建的员工个数 
char w[20]; 
ElemType e={0};            //员工信息
LinkList p=NULL;            //工作指针 
LinkList L=NULL;            //链表头指针
while(1){
welcome();
//主循环
scanf("%d", &control);
while(control)
{
switch(control)

case 1:
{printf("请输入要创建的员工个数n=");
scanf("%d", &n);
printf("请依次输入员工职工号,姓名,出生年月日,性别,住址,学历,工资。\n数据中间请用空格连接\n");
ListCreate(L,n); 
};
break;
case 2:
ListPrint(L);
break;//输出链表内容 

case 3:
{
printf("请输入要查找的员工工资\n");
scanf("%s",&w);
LocateElem(L,w);
};
break;
case 4:
{
printf("请输入欲插入的员工信息\n");
 scanf("%d%s%s%s%s%s%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资 
ListInsert(L,e);
};
break;
case 5:
{
printf("请输入欲删除员工的职工号\n");
scanf("%d",&x);
ListDelete(L,x);
};
break;
default:
{
printf("程序结束\n");
exit(0);
}
break;//结束程序 
}
printf("0结束程序 1创造链表 2输出链表 3查找 4插入 5删除\n");
scanf("%d",&control);
}
}
return 0;
}
void welcome()//菜单 
{
    printf("\t\t\t=====================================================\n");
    printf("\t\t\t*****************************************************\n");
    printf("\t\t\t                                                     \n");
    printf("\t\t\t                                                     \n");
    printf("\t\t\t************                             ************\n");
    printf("\t\t\t******     欢迎使用(﹡^o^﹡ )(﹡^o^﹡ )        ******\n");
    printf("\t\t\t************                             ************\n");
    printf("\t\t\t                                                     \n");
    printf("\t\t\t                                                     \n");
    printf("\t\t\t*****************************************************\n");
    printf("\n\n\n");
    printf("\t\t\t正在为您跳转到主菜单,请耐心稍等  ( ̄_ ̄ ) ( ̄_ ̄ ).......\n\n\n");
    Sleep(1000);//1000毫秒;头文件#include <windows.h> 
    while(1) {
        system("color 3f");
        system("date/t");
        system("time/t");
        printf(" \t\t=============================================================================\n");
        printf("\t\t||            ( ̄▽ ̄) ( ̄▽ ̄)(*选择功能*)( ̄▽ ̄)( ̄▽ ̄)                ||\n");
        printf("\t\t||============================================================================||\n");
        printf("\t\t||============================================================================||\n");
        printf("\t\t||                     【1】--- 录入员工信息                                  ||\n");
        printf("\t\t||                     【2】--- 输出员工信息                                  ||\n");
        printf("\t\t||                     【3】--- 进行查找                                      ||\n");
        printf("\t\t||                     【4】--- 插入信息                                      ||\n");
        printf("\t\t||                     【5】--- 删除信息                                      ||\n");
        printf("\t\t||                     【6】--- 退出                                          ||\n");
        printf("\t\t ==============================================================================\n");
        printf("\n\n\n");
        printf("请输入对应数字选择功能:");
        break; 
}
}
//录入信息 
void ListCreate(LinkList &L,int n){ 
      //正位序输入n个元素的值,建立带表头结点的单链表L 
     LinkList p,r;
     int i; 
FILE *fp;//文件 
fp=fopen("employee.txt","a+"); 
    if (fp == NULL)                    //判断文件是否成功打开
    {
        printf("File open failed!\n");
        exit(0);
    }  
  L = (LinkList) malloc (sizeof(LNode));
      L->next=NULL;  
      r=L;                                  //尾指针r指向头结点 
      for(i=0;i<n;++i){ 
         p = (LinkList) malloc (sizeof(LNode));      //生成新结点 
            scanf("%d %s %s %s %s %s %s", &p->data.id, p->data.name, p->data.birthday, p->data.sex,p->data.address, p->data.education, p->data.wages); 
        //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
            p->next=NULL; r->next=p;       //插入到表尾 
            r=p;                        //r指向新的尾结点 
      } 
    for (p = L->next; p; p = p->next) {
        fprintf(fp, "姓名:%s\n性别:%s\n职工号:%d\n", p->data.name, p->data.sex, p->data.id);
        fprintf(fp, "出生年月日:%s\n", p->data.birthday);
        fprintf(fp, "工资:%s\n住址:%s\n学历:%s\n职务:%s\n\n", p->data.wages, p->data.address,p->data.education, p->data.positions);
    }
    fclose(fp);
}

//输出链表的值
void ListPrint(LinkList L)
{
if (!L || !L->next)  return;
LinkList p=L->next;
if(!p)
printf("没有元素输出\n"); 
while (p)
{
printf("%d%s%s%s%s%s%s\n",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资 
p=p->next;
}
}


//工资定位 
void LocateElem(LinkList L,char *x)
{   int buff[255];
    char c;
    int i=0;
if (!L || !L->next)  return;
LinkList p=L->next;
int j=0;
FILE*fp=NULL;
fp=fopen("employee.txt","r");
fscanf(fp,"%d", &buff[i]);
while ((p)&&strcmp(p->data.wages,x)!=0)
{p=p->next; j++;}
if(!p)
printf("没有该信息\n");  
else
printf("%d %s %s %s %s %s %s\n",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资 

}

//插入
void ListInsert(LinkList &L,ElemType e)
{
// 在带头结点的单链线性表L表尾插入元素e
LinkList q,p=L;
while (p->next)
{p=p->next;} 
q=(LinkList)malloc(sizeof(LNode));
p->next=q;
q->data=e;
q->next=NULL;
}
//删除 
void ListDelete(LinkList &L,int x)
{
LinkList q,p=L;
while ((p->next)&& (p->next->data.id != x))
p=p->next;
if(!p->next)
printf("没有找到学号为%d的学生信息\n",x);
else
{
q=p->next;
p->next=p->next->next;
free(q);
}
}
3.需要改进的地方,不能第二次在文件中直接搜索。

或者用面向对象的写法。新手初试,期间问题感谢

qzjhjxj ,浪客 ,快乐鹦鹉 大佬们的帮助。代码仍有很多不足,望指正。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偏正北海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值