C语言:完整职工系统代码(可运行)

简介: 代码如下

简简单单,包含代码注释:

#include<stdio.h> //输入输出函数
#include<stdlib.h>  //动态开辟一个内存的头文件
#include<string.h>  //字符串函数
#define LEN 1000    /* 学工和姓名最大字符数,实际请更改*/
#define N 1000    /* 最大职工人数,实际请更改*/
#define M sizeof(struct works) //M的值为struct works的长度
#define R 3 //为了方便所以只输入三个信息来测试代码
int n = 0, t = 1;/* n代表当前记录的职工人数,t用于控制整个程序的执行机器退出*/
//使用结构体函数来对职工信息进行保存
struct student
{
    char StuID[LEN]; //职工工号
    char Stuname[LEN];//职工姓名
    char StuAge;//职工年龄
    char Stusex;//职工性别
}stu[N];//结构体变量
//声明函数
void menu();//主菜单函数
void help();//系统帮助及其说明
void increase();//增加职工信息
void seek();//查找职工信息
void de();//删除职工信息
void save();//保存文件
void present();//显示当前信息
void modify();//修改职工信息
void sort();//对职工工号进行排序
void exit();//退出函数
int main()
{
    int num;//num为菜单选项
    while(t)//t是全局变量,用exit函数来控制循环是否继续
        //exit函数的作用为在main函数末尾用于退出应用程序,删除进程使用的内存空间
    {
        menu();//输出主菜单界面
        printf("您好,请输入菜单编号:");
        scanf("%d",&num);
        switch(num)
        {
            case 1: help(); break;
            case 2: increase(); break;
            case 3: seek(); break;
            case 4: de(); break;
            case 5: save(); break;
            case 6: present(); break;
            case 7: modify(); break;
            case 8: sort() ; break;
            case 9: exit(); break;
            default:printf("输入有误,请重新输入!");
        }
    }
    system("pause");  //pause的作用为对程序进行暂停
    return 0;
}
//菜单函数的定义
void menu()
{
    printf("********************系统功能菜单*********************\n");
    printf("----------------------     --------------------------\n");
    printf("*****************************************************\n");
    printf("**          1.系统帮助及说明            **\n");
    printf("*****************************************************\n");
    printf("**    2.增加当前信息   * *   3.查询职工信息        **\n");
    printf("*****************************************************\n");
    printf("**    4.按工号删除信息 * *   5.保存职工信息        **\n");
    printf("*****************************************************\n");
    printf("**    6.显示当前信息   * *   7.修改职工信息        **\n");
    printf("**    8.职工工号排序   * *   9.退出系统        **\n");
    printf("*****************************************************\n");
    printf("----------------------     --------------------------\n");
}
//根据年龄和工号排序
void sort(){
    int i, j,num;
    student temp;
    printf("*****************************\n");
    printf("**-------1.按工号排序------**\n");
    printf("**-------2.按年龄排序------**\n");
    printf("**-------3.退出该菜单------**\n");
    printf("*****************************\n");
    while(1)
    {
        printf("请输入子菜单:");
        scanf("%d",&num);
        switch (num) {
            case 1://冒泡排序
                for (i = 0; i < n - 1; i++) {
                    for (j = 0; j < n - i - 1; j++) {
                        if (stu[j].StuID>stu[j + 1].StuID)
                        {
                            temp = stu[j+1];
                            stu[j+1]=stu[j];
                            stu[j]=temp;
                        }
                    }
                }
                printf("排序已完成");
                present();
                break;
            case 2:
                for (i = 0; i < n - 1; i++) {
                    for (j = 0; j < n - i - 1; j++) {
                        if (stu[j].StuAge>stu[j + 1].StuAge)
                        {
                            temp = stu[j+1];
                            stu[j+1]=stu[j];
                            stu[j]=temp;
                        }
                    }
                }
                printf("排序已完成");
                present();
                break;
            case 3:return;
            }
        }
    }
//系统帮助及说明的函数的定义
void help()
{
    printf("\n这为职工信息管理系统,为了便于您的使用请仔细了解一下帮助及说明:\n");
    printf("\n                  系统帮助及说明:                    \n ");
    printf("\n       1、请根据提示进行操作!\n");
    printf("\n       2、初次使用请先选择增加职工信息!\n");
    printf("\n       3、修改或增加职工信息后一定要保存!\n");
    printf("\n       4、若数据有错误,请先修改完成后再保存!\n");
    printf("\n       5、若您之前使用过,下次进入系统请您先刷新职工信息!\n");
    printf("\n       6、在添加职工时,用两个字符代表不同的性别,如男用‘M’代替,女用‘W’代替!\n");
    printf("\n       7、保存或者刷新时,输入的文件名后缀请使用.txt。如:stu.txt,系统会在源程序\n");
    printf("\n          “职工管理系统.exe”的相同目录建立一个.txt文件来保存职工信息,您可以查看\n");
    printf("\n          该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!\n");
    printf("\n       8、职工信息包括:姓名、工号、性别、年龄\n");
    system("pause");
}
//定义增加职工信息的函数
void increase()
{
    int i=n,j,flag,m=0;//i代表增加职工信息过程中任意时刻的职工人数
    printf("\n请输入待增加的职工人数:\n");
    scanf("%d",&m);
    if(m>0){
        do{
            flag=1;
            while(flag)
            {
                flag=0;
                printf("请输入第%d位职工的工号:\n",i+1);//第几位职工从1开始计数,而stu[]从零开始,所以为i+1
                scanf("%s",stu[i].StuID);
                //判断工号是否重复
                for(j=0;j<i;j++){
                    if(strcmp(stu[i].StuID,stu[j].StuID)==0){
                        printf("该工号已经存在,请您重新输入!\n");
                        flag=1;
                        break;
                    }
                }
            }
            printf("请输入第%d位职工姓名:\n",i+1);
            scanf("%s",stu[i].Stuname);
            printf("请输入第%d位职工年龄:\n",i+1);
            scanf("%d",&stu[i].StuAge);
            getchar();//从键盘接受一个字符
            printf("请输入第%d位职工性别:\n",i+1);
            scanf("%c",&stu[i].Stusex);
            i++;
        }while(i<n+m);//若所增加的职工人数未达到所设置的最大人数,则需继续增加
    }
    n+=m;// 当添加完成,系统人数n的值也要增加
    printf("恭喜您已添加完成\n");
    system("pause");
}
//定义查询职工信息的函数
void seek()
{
    int i,num,flag;
    char s1[LEN+1];
    printf("*****************************\n");
    printf("**-------1.按工号查询------**\n");
    printf("**-------2.按姓名查询------**\n");
    printf("**-------3.退出该菜单------**\n");
    printf("*****************************\n");
    while(1)   //在使用while循环中与switch,case,break一起使用
    {
        flag=0;
        printf("请输入子菜单:");
        scanf("%d",&num);
        switch(num)
        {
            case 1:
                printf("请输入需要查找职工的工号:\n");
                scanf("%s",s1);
                for(i=0;i<n;i++)
                {
                    if(strcmp(stu[i].StuID,s1)==0)
                    {
                        flag=1;
                        printf("工号\t\t姓名\t\t性别\t\t年龄\t\n");
                        printf("%s\t\t%s\t\t%c\t\t%d\t\n",stu[i].StuID,stu[i].Stuname,stu[i].Stusex,stu[i].StuAge);
                    }
                }break;
            case 2:
                printf("请输入您要查找的职工姓名:\n");
                scanf("%s",s1);
                for(i=0;i<n;i++)
                {
                    if(strcmp(stu[i].Stuname,s1)==0)
                    {
                        flag=1;
                        printf("工号\t\t姓名\t\t性别\t\t年龄\t\n");
                        printf("%s\t\t%s\t\t%c\t\t%d\t\n",stu[i].StuID,stu[i].Stuname,stu[i].Stusex,stu[i].StuAge);
                    }
                }break;
            case 3: return;
            default: printf("请在1--3之间输入\n");
        }
        if(flag==0)
            printf("找不到该职工!\n请重新输入!");
    }
}
//定义删除职工信息的函数
void de()
{
    int i,j,flag;
    char s1[LEN];
    printf("请输入需要删除的职工工号:\n");
    scanf("%s",s1);
    flag=0;
    for(i=0;i<n;i++)
    {
        if(strcmp(s1,stu[i].StuID)==0)
        {
            flag=1;
            for(j=i;j<n-1;j++)
            {
                stu[j]=stu[j+1];//把后面的职工都往前移1位
            }
        }
        if(flag==1) break;//表示找到了需要删除的职工并结束循环
    }
    if(0==flag)
    {
        printf("该工号不存在\n");
    }
    if(1==flag)
    {
        printf("恭喜您已删除成功\n");
        n--;
    }
    system("pause");
}
//定义保存职工信息的函数
void save()
{
    int i;
    FILE *fp;
    char filename[LEN+1];
    printf("请您输入您所要保存的文件名:\n");
    scanf("%s",filename);
    if((fp=fopen(filename,"w"))==NULL)
    {
        printf("打开文件失败\n");
        exit(0);
    }
    for(i=0;i<n;i++)
        if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
            printf("保存失败\n");
    printf("恭喜您已保存成功\n");
    fclose(fp);
    system("pause");
}
//定义显示当前信息的函数
void present()
{
    int i;
    if(n==0)
    {
        printf("您好,当前没有职工信息,请您先增加职工信息或者刷新后重试!\n");
    }
    else
    {
        printf("现在共有%d名职工:\n",n);
        printf("工号\t\t姓名\t\t性别\t\t年龄\t\n");
        for(i=0;i<n;i++)
        {
            printf("%s\t\t%s\t\t%c\t\t%d\t\n",stu[i].StuID,stu[i].Stuname,stu[i].Stusex,stu[i].StuAge);
        }
    }
    system("pause");
}
//定义对职工工号大小和姓名进行排序的函数
//定义修改职工信息的函数
void modify()
{
    int i,flag;
    char ID[LEN],name[LEN],sex;
    int age;
    float score;
    printf("请您输入要修改的职工姓名:\n");
    getchar();
    gets(name);
    while(1)
    {
        flag=0;
        for(i=0;i<n;i++)
        {
            if(strcmp(name,stu[i].Stuname)==0)
            {
                flag=1;
                int num;//switch函数的子菜单
                printf("***************************************************\n");
                printf("*----1.修改工号--------  -  -----2.修改性别-------*\n");
                printf("*----3.修改年龄----*\n");
                printf("*-------------------4.退出本菜单------------------*\n");
                printf("***************************************************\n\n");
                printf("请输入子菜单:");
                scanf("%d",&num);
                switch(num)
                {
                    case 1:
                        printf("请您输入新的工号:\n");
                        getchar();
                        gets(ID);
                        strcpy(stu[i].StuID,ID);break;
                    case 2:
                        getchar();
                        printf("请您输入新的性别:\n");
                        scanf("%c",&sex);
                        stu[i].Stusex=sex;break;
                    case 3:
                        printf("请您输入新的年龄:\n");
                        scanf("%d",&age);
                        stu[i].StuAge=age;break;
                    case 4:
                        return;break;
                    default:
                        printf("请您在1~4之间选择!\n");
                }
                if(num>0&&num<4)
                    printf("修改成功,切记保存\n");
                break;//结束循环
            }
        }
        if(flag==0)
        {
            printf("没有找到该名职工,请您重新输入要修改的职工信息的姓名:\n");
            gets(name);
        }
    }
    system("pause");
}
//定义退出系统的函数
void exit()
{
    int h;// h为整形
    printf("即将退出,确认请按0,取消请按1\n");
    scanf("%d",&h);
    if(h==1)
    {
        t=0;//t是main函数中while函数是否继续执行的控制条件,是一个全局变量,程序开头已赋了初值
        printf("恭喜您已成功退出,感谢您本次的使用\n");
    }
    if(h==0)
    {
        printf("退出取消\n");
        system("pause");
    }
}
相关文章
|
19天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
15天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
1月前
|
存储 搜索推荐 C语言
深入C语言指针,使代码更加灵活(二)
深入C语言指针,使代码更加灵活(二)
|
1月前
|
存储 程序员 编译器
深入C语言指针,使代码更加灵活(一)
深入C语言指针,使代码更加灵活(一)
|
1月前
|
C语言
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
|
1月前
|
C语言
C语言练习题代码
C语言练习题代码
|
1月前
|
存储 C语言
手把手教你用C语言实现通讯录管理系统
手把手教你用C语言实现通讯录管理系统
|
1月前
|
测试技术 C语言
【C语言】学生管理系统:完整模拟与实现(三)
【C语言】学生管理系统:完整模拟与实现
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
11天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
27 6