教师信息管理系统

1.题目

教师信息包括:记录编号、教师工号、姓名、出生日期(年、月)、学院、住址,联系方式
功能要求:

  • 从教师信息文件中读取已有的教师信息,并实现屏幕显示。
  • 能通过教师工号对已有的教师信息进行修改,要求工号不能修改,其他信息内容都可改,修改的结果保存至教师信息文件。
  • 实现对教师信息的统计(分学院统计教师数量)并排序显示。
  • 实现对教师信息的查询显示(查询条件分为工号、出生年、学院)。
  • 新教师信息的添加并保存至教师信息文件。
  • 教师信息的删除,根据工号,删除指定教师生信息,并将结果写入文件。
  • 每增加一条记录,记录编号自动加1。

2.总体设计

在这里插入图片描述

3.系统详细设计

  • 文件读/写模块:首先创建一个文件指针,然后以读/写的方式打开文件并设置完全缓存模式,然后利用while(i < n)该循环逐一对每组数据进行读/写的操作,最后再关闭文件即可。
  • 查询模块:为了更人性化一些,可根据教师的任意信息进行查询。首先定义根据该信息查询全部该教师信息的变量,然后调用文件读模块(打开程序后,要查询以前的数据,要先读入),接着用printf打印出每个数字对应各个查询方式的一个菜单。当然,当输入的指令不在范围内的话会提示出错并关闭窗口然后用continue语句可继续输入指令。语句如下:
if(num < '0' || num > '9')
        {
            printf("错误指令!\n\n");
            system("pause");//这将要求“按任意键....”关闭窗口
            continue;       //重新执行条件判断
        }

然后会根据指令多次调用类似于下面的语句进行查询。利用for循环以及条件语句if逐一筛选出要查找的信息,而if里面的条件判断句是利用比较字符串strcmp,符合后会调用显示模块来显示出要查找的信息,语句如下:

 if(num == '1')      //按工号查询
    {
        printf("\t\t请输入您要查询教师的工号:");
        scanf("%s",q_id);
        for(i = 0 ; i < n ;i ++)
        {
            if( strcmp(work[i].ID,q_id) == 0)
            {
                output_inf(i);
                flag = 1;//标记
                break;
            }
        }
    }

利用下面这条语句可确定是否查找出要查找的教师信息(因为如果成功查找,flag会被赋值为一)。

if(!flag)//判断是否有该教师信息
{
     printf("\n\n无该教师信息!\n\n");
}

接着会提示是否继续查询,若要继续查询则重复上面所说的步骤,如果不,则会强制跳出,语句如下:

printf("\n\n是否继续查询(Y/N):");
scanf("%*c%c",&c);    //%*c作用是读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符跳过一个字符
    if(c == 'N' || c == 'n')
        break;          //强制跳出

4.源码

//文件读写模块
void read(void)//读文件
{
    FILE *fp;
    int i = 0;
    if( (fp = fopen("d:\\date.txt","r")) == NULL )//以读的方式打开文件
    {
        printf("请在D盘根目录下新建一个文本文件,文件名为date\n\n\n");
        system("pause");                         //这将要求“按任意键....”关闭窗口
        system("cls");                           //这将清除运行的任何文本的屏幕
        return;
    }
	setvbuf(fp,NULL,_IOFBF,BUFSIZ);              //设置完全缓存模式
    fscanf(fp,"%d\n",&n);                        //从输入流中读取并保存到文件中
    while(i < n)
    {
        fscanf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].sex,work[i].born,work[i].edu,work[i].dep,work[i].position,work[i].wage,work[i].address,work[i].tel);
        i++;
    }
    fclose(fp);
}

void write(void)//写入数据
{
    FILE *fp;
    int i = 0;
    if( (fp = fopen("d:\\date.txt","w")) == NULL )//以写的方式打开文件
    {
        printf("无法打开文件!\n");
        return ;
    }
	setvbuf(fp,NULL,_IOFBF,BUFSIZ);              //设置完全缓存模式
    fprintf(fp,"%d\n",n);                        //输出到文件中
    while(i < n)
    {
        fprintf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].sex,work[i].born,work[i].edu,work[i].dep,work[i].position,work[i].wage,work[i].address,work[i].tel);
        i ++;
    }
    fclose(fp);
}
//查询模块
void que(void)
{
	char num;           //1-9
	int flag,i;
	char q_id[20];      //查询工号
	char q_name[20];    //查询姓名
	char q_edu[20];     //查询学历
	char q_position[20];//查询职务
    char q_dep[20];     //查询学院
    char q_tel[20];     //查询电话
    char q_sex[20];     //查询性别
    char q_wage[20];    //查询工资
    char q_address[20]; //查询地址
    char q_born[20];    //查询生日
	char c;             //指令Y?N
    read();             //打开程序后,要查询以前的数据,要先读入
    while(1)
    {
        system("cls");  //这将清除运行的任何文本的屏幕
        printf("\t\t******************查询********************\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             1.按工号查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             2.按姓名查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             3.按学历查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             4.按职务查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             5.按性别查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             6.按住址查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             7.按电话查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             8.按工资查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             9.按学院查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*             0.按生日查询               *\n");
        printf("\t\t*                                        *\n");
        printf("\t\t*       输入其他任意键退出本模块         *\n");
        printf("\t\t******************************************\n");
        printf("\t\t请输入指令(0-9):");
        scanf("%*c%c",&num);//%*c作用是读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符跳过一个字符
        if(num < '0' || num > '9')
        {
            printf("错误指令!\n\n");
            system("pause");//这将要求“按任意键....”关闭窗口
            continue;       //重新执行条件判断
        }
        system("cls");      //这将清除运行的任何文本的屏幕
        flag = 0;           //用来标记教师信息是否存在
        if(num == '1')      //按工号查询
        {
            printf("\t\t请输入您要查询教师的工号:");
            scanf("%s",q_id);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].ID,q_id) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                    break;
                }
            }
        }
        else if(num == '2')//按姓名查询
        {
            printf("\t\t请输入您要查询教师的姓名:");
            scanf("%s",q_name);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].name,q_name) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '3')//按学历查询
        {
            printf("\t\t请输入您要查询教师的学历:");
 
            scanf("%s",q_edu);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].edu,q_edu) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '4')//按职务查询
        {
            printf("\t\t请输入您要查询教师的职务:");
            scanf("%s",q_position);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].position,q_position) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '5')//按性别查询
        {
            printf("\t\t请输入您要查询教师的性别:");
            scanf("%s",q_sex);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].sex,q_sex) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '6')//按住址查询
        {
            printf("\t\t请输入您要查询教师的住址:");
            scanf("%s",q_address);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].address,q_address) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '7')//按电话查询
        {
            printf("\t\t请输入您要查询教师的电话:");
            scanf("%s",q_tel);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].tel,q_tel) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '8')//按工资查询
        {
            printf("\t\t请输入您要查询教师的工资:");
            scanf("%s",q_wage);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].wage,q_wage) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '9')//按学院查询
        {
            printf("\t\t请输入您要查询教师的学院:");
            scanf("%s",q_dep);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].dep,q_dep) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '0')//按生日查询
        {
            printf("\t\t请输入您要查询教师的生日:");
            scanf("%s",q_born);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(work[i].born,q_born) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        if(!flag)//判断是否有该教师信息
        {
            printf("\n\n无该教师信息!\n\n");
        }
        printf("\n\n是否继续查询(Y/N):");
 
        scanf("%*c%c",&c);//%*c作用是读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符跳过一个字符
        if(c == 'N' || c == 'n')
          break;          //强制跳出
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值