Be in hell 2019-12-29 20:57 采纳率: 43.8%
浏览 209
已结题

如下代码功能7不能正常实现保存功能,想把 case后面只保留简单的函数调用语句,其他的语句放到被调函数里,把功能3,4,5换一下方法

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define MAX 30 // 最多30人
typedef struct date // 定义日期类型
{
int year;
int month;
int day;
}DATE;
typedef struct person // 定义教师类型
{
int ID; // 工号
char Name[10]; // 姓名
char Sex; // 性别
DATE birthday; // 出生日期
float salary; // 基本工资
} Teacher;
void mima(Teacher num[]);//密码
void displayMenu();//菜单
int Read(Teacher num[],int n);//录入
void Print(Teacher num[],int n);//输出
float SearchByID(Teacher num[],int n,int xID);//按工号查询工资
void Sort(Teacher num[],int n);//工资排序
float avg(Teacher num[],int n,float max,float *min);//统计工资的最大值、最小值、平均值
void count(Teacher num[],int n,int *nan,int *nu);//按性别统计教师人数
void Save(Teacher num[],int n);//保存
void tuichu();//退出
int main()
{
Teacher num[MAX];
mima(num);
return 0;
}
void mima(Teacher num[])//密码
{
int i,m,t,n,xID,man,women;
i=0;
float aver,max,min,teachersalary;
char mima[10]={0};
printf("请输入密码:\n");
for(i=1;i<2;i++)
{
scanf("%s",mima);
if(strcmp(mima,"*a123a
")==0)
{
printf("登陆成功!\n");
break;
}
else
{
printf("密码输入错误,请重新输入(你还有两次机会):\n");
}
}
if(i==2)
{
for(i=2;i<3;i++)
{
scanf("%s",mima);
if(strcmp(mima,"*a123a*")==0)
{

            printf("登陆成功!\n");
            break;
        }
        else
        {
            printf("密码输入错误,请重新输入(你还有一次机会):\n");
            scanf("%s",mima);
        }
    }
}
if(i==3)
{
    if(strcmp(mima,"*a123a*")==0)
    {
        printf("登陆成功!\n");
    }
    else
        printf("登陆失败,程序退出。\n");
}
int choice, flag = 0;
while (flag == 0)
{
    putchar('\n');
    displayMenu();
    printf("please input a digital(1-9)\n");
    scanf("%d", &choice);
    if (choice >= 1 && choice <= 8)
        switch (choice)
    {
        case 1:printf("录入的老师人数:");
               scanf("%d",&n);
               t=Read(num,n);
               if(t==1)
               {
                    t=Read(num,n);
               }
               else
               {
                    printf("输入结束!\n");
               }
               break;
        case 2:Print(num,n);
               break;
        case 3:printf("按工号查询工资!\n");
            printf("请输入教师工号:");
            scanf("%d",&xID);
            t=SearchByID(num,n,xID);
            if(t!=-1)
            {
                printf("%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[t].ID
                    , num[t].Name
                    , num[t].Sex
                    , num[t].birthday.year
                    , num[t].birthday.month
                    , num[t].birthday.day
                    , num[t].salary);
            }
            else
            {
                printf("没有该教师!\n");
            }
            break;
        case 4:Sort(num,n);
            break;
        case 5:aver=avg(num,n,&max,&min);
            printf("aver=%f\n",aver);
            printf("max=%f\n",max);
            printf("min=%f\n",min);
            break;
        case 6:count(num,n,&man,&women);
                printf("男老师有%d人\n",man);
                printf("女老师有%d人\n",women);
            break;
        case 7:Save(num,n);
        break;
        case 8:tuichu();
            break;
        default:printf("选项输入错误!\n");
    }
}

}
void displayMenu()//菜单
{
printf("***********************\n");
printf("教师基本信息管理系统\n");
printf("***********************\n");
printf("请选择:\n");
printf("1: 录入 \n");
printf("2:输出 \n");
printf("3:按工号查询工资 \n");
printf("4:工资排序 \n");
printf("5:统计工资的最大值、最小值、平均值\n");
printf("6:按性别统计教师人数 \n");
printf("7:保存 \n");
printf("8:退出 \n");
}
int Read(Teacher num[],int n) // 录入模块:输入教师的基本信息
{
int i;
for(i=0; i<=n; i++)
{
printf("输入教师的基本信息:(ID 姓名 性别 (出生日期)年 月 日 基本工资:)");
scanf("%ld", &num[i].ID);
if(num[i].ID==-1)
{
return 0;
exit(0);
}
scanf("%s", num[i].Name);//姓名
scanf(" %c", &num[i].Sex); //性别,注意%c前有空格
scanf("%d", &num[i].birthday.year);//出生年
scanf("%d", &num[i].birthday.month);//月
scanf("%d", &num[i].birthday.day);//日
scanf("%f", &num[i].salary);//基本薪资
}
return 1;
}
void Print(Teacher num[],int n) // 输出模块:输出实际的教师基本信息
{
int i;
printf("输出教师的基本信息:\n");
for(i=0; i {
printf("%10ld%8s%3c %ld/%02d/%02d%10.2f\n",num[i].ID
, num[i].Name
, num[i].Sex
, num[i].birthday.year
, num[i].birthday.month
, num[i].birthday.day
, num[i].salary);
}
}
float SearchByID(Teacher num[],int n,int xID) // 按工号查询工资模块:查询与指定值xID相同的教师工资
{
int i;
for(i=0; i {
if(num[i].ID ==xID)
{
return i;
}
}
return -1;
}
void Sort(Teacher *p,int n) // 工资排序:按工资升序序排列
{
int i,j;
Teacher t;
for(i=0; i for(j=0; j if(p[j].salary>p[j+1].salary)
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
for(i=0; i {
printf("%10d%8s%6c%6d/%02d/%02d%10.2f\n",p[i].ID
,p[i].Name
,p[i].Sex
,p[i].birthday.year
,p[i].birthday.month
,p[i].birthday.day
,p[i].salary);
}
}
float avg(Teacher num[],int n,float *max,float *min) // 统计工资的最大值、最小值、平均值模块:
{
int i;
float aver,sum=0;
for(i=0;i {
*max=num[0].salary;
*min=num[0].salary;
if(num[i].salary>*max)
{
*max=num[i].salary;
}
if(num[i].salary<*min)
{
*min=num[i].salary;
}
sum+=num[i].salary;
}
aver=sum/n;
return aver;
}
void count(Teacher num[],int n,int *man,int *women) // 按性别统计教师人数模块:分别统计
{
int i;
for(i=0;i<n;i++)
{

    if(num[i].Sex=='M')
        (*man)++;
    else (*women)++;

}

}
void Save(Teacher num[],int n) // 保存模块:将教师信息写到数据文件中
{
FILE *fp;
int i,j;
if((fp=fopen("teacherjibenxinxi.txt","a")) == NULL) //以添加方式打开文本文件
{
printf("Failure to open teacher.txt!\n");
exit(0);
}
fprintf(fp,"教师工号 教师姓名 教师性别 出生日期 教师工资\n");
for(i=0; i<n; i++)
{
fprintf(fp,"%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID
, num[i].Name
, num[i].Sex
, num[i].birthday.year
, num[i].birthday.month
, num[i].birthday.day
, num[i].salary);
}
fclose(fp);
if((fp=fopen("teacherjibenxinxi.txt","r")) == NULL) //以读方式打开文本文件
{
printf("Failure to open teacher.txt!\n");
exit(0);
}
for(i=0; i<n; i++)
{
fprintf(fp,"%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID
, num[i].Name
, num[i].Sex
, num[i].birthday.year
, num[i].birthday.month
, num[i].birthday.day
, num[i].salary);
}
fclose(fp);
printf("保存成功!\n");
}
void tuichu()
{
printf("已退出");
exit(0);
}

  • 写回答

3条回答 默认 最新

  • threenewbee 2019-12-29 22:27
    关注

    之前实在不好意思,最近不采纳拿着回答就跑路的人太多。
    了解你是有诚信的。
    等问题解决再采纳。

    排序目前是正确的,用的是最基础的冒泡排序(或者你要换什么,请指出),已经将num写入main里面,mima调用了displaymenu,所以无需再调用。
    7 8已经完善,另有些小问题我就手帮你修改了

    // Q1049643.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    
    #include"stdio.h"
    #include"string.h"
    #include"stdlib.h"
    #define MAX 30 // 最多30人
    
    typedef struct date // 定义日期类型
    {
        int year;
        int month;
        int day;
    }DATE;
    typedef struct person // 定义教师类型
    {
        int ID; // 工号
        char Name[10]; // 姓名
        char Sex; // 性别
        DATE birthday; // 出生日期
        float salary; // 基本工资
    } Teacher;
    
    void mima(Teacher num[]);//密码
    void displayMenu();//菜单
    int Read(Teacher num[],int n);//录入
    void Print(Teacher num[],int n);//输出
    float SearchByID(Teacher num[],int n,int xID);//按工号查询工资
    void Sort(Teacher num[],int n);//工资排序
    float avg(Teacher num[],int n,float *max,float *min);//统计工资的最大值、最小值、平均值
    void count(Teacher num[],int n,int *nan,int *nu);//按性别统计教师人数
    void Save(Teacher num[],int n);//保存
    void salarySearch(Teacher num[],int n,float teachersalary);
    
    
    int main()
    {
        Teacher num[MAX];
        mima(num);
        //displayMenu();
        return 0;
    }
    void mima(Teacher num[])//密码
    {
        int m,t,n,xID,male,female;
        float aver,max,min,teachersalary;
        char mima[10]={0};
        int i=0;
        printf("请输入密码:\n");
        for(i=1;i<2;i++)
        {
            scanf("%s",mima);
            if(strcmp(mima,"*a123a*")==0)
            {
                printf("登陆成功!\n");
                break;
            }
            else
            {
                printf("密码输入错误,请重新输入(你还有两次机会):\n");
            }
        }
        if(i==2)
        {
            for(i=2;i<3;i++)
            {
                scanf("%s",mima);
                if(strcmp(mima,"*a123a*")==0)
                {
                    printf("登陆成功!\n");
                    break;
                }
                else
                {
                    printf("密码输入错误,请重新输入(你还有一次机会):\n");
                    scanf("%s",mima);
                }
            }
        }
        if(i==3)
        {
            if(strcmp(mima,"*a123a*")==0)
            {
                printf("登陆成功!\n");
            }
            else
                printf("登陆失败,程序退出。\n");
        }
        int choice, flag = 0;
        while (flag == 0)
        {
            putchar('\n');
            displayMenu();
            printf("please input a digital(1-9)\n");
            scanf("%d", &choice);
            if (choice >= 1 && choice <= 8)
                switch (choice)
            {
                case 1:printf("录入的老师人数:");
                    scanf("%d",&n);
                    t=Read(num,n);
                    //if(t==0)
                    //{
                    //  printf("输入结束!\n");
                    //}
                    //else
                    //{
                    //  t=Read(num,n);
                    //}
                    break;
                case 2:Print(num,n);
                    break;
                case 3:printf("按工号查询工资!\n");
                    printf("Input the searching ID:");
                    scanf("%d",&xID);
                    t=SearchByID(num,n,xID);
                    if(t!=-1)
                    {
                        printf("%10d%8s%6c%6d/%02d/%02d%10.0f\n",num[t].ID
                            , num[t].Name
                            , num[t].Sex
                            , num[t].birthday.year
                            , num[t].birthday.month
                            , num[t].birthday.day
                            , num[t].salary);
                    }
                    else
                    {
                        printf("没有该教师!\n");
                    }
                    break;
                case 4:Sort(num,n);
                    break;
                case 5:aver=avg(num,n,&max,&min);
                    printf("aver=%.2f\n",aver);
                    printf("max=%.2f\n",max);
                    printf("min=%.2f\n",min);
                    break;
                case 6:count(num,n,&male,&female);
                        printf("男生有%d人\n",male);
                        printf("女生有%d人\n",female);
                    break;
                case 7:printf("按工资查询老师信息!\n");
                    printf("查询的工资:");
                    scanf("%f",&teachersalary);
                    salarySearch(num,n,teachersalary);
                    break;
                case 8:Save(num,n);
                    break;
                default:printf("选项输入错误!\n");
            }
        }
    }
    void displayMenu()//菜单
    {
        printf("***********************\n");
        printf("教师基本信息管理系统\n");
        printf("***********************\n");
        printf("请选择:\n");
        printf("1: 录入 \n");
        printf("2:输出 \n");
        printf("3:按工号查询工资 \n");
        printf("4:工资排序 \n");
        printf("5:统计工资的最大值、最小值、平均值\n");
        printf("6:按性别统计教师人数 \n");
        printf("7:保存 \n");
        printf("8:退出 \n");
    }
    int Read(Teacher num[],int n) // 录入模块:输入教师的基本信息
    {
        int i;
        for(i=0; i<n; i++)
        {
            printf("输入教师的基本信息:");
            scanf("%ld", &num[i].ID);
            if(num[i].ID==-1)
            {
                return 0;
                break;
            }
            scanf("%s", num[i].Name);
            scanf(" %c", &num[i].Sex); //%c前有一个空格
            scanf("%d", &num[i].birthday.year);
            scanf("%d", &num[i].birthday.month);
            scanf("%d", &num[i].birthday.day);
            scanf("%f", &num[i].salary);
        }
        return 1;
    }
    void Print(Teacher num[],int n) // 输出模块:输出实际的教师基本信息
    {
        int i;
        printf("输出教师的基本信息:\n");
        for(i=0; i<n; i++)
        {
            printf("%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID
                , num[i].Name
                , num[i].Sex
                , num[i].birthday.year
                , num[i].birthday.month
                , num[i].birthday.day
                , num[i].salary);
        }
    }
    float SearchByID(Teacher num[],int n,int xID) // 按工号查询工资模块:查询与指定值xID相同的教师工资
    {
        int i;
        for(i=0; i<n; i++)
        {
            if(num[i].ID ==xID)
            {
                return i;
            }
        }
        return -1;
    }
    void Sort(Teacher *p,int n) // 工资排序模块:按工资降序排列
    {
        int i,j;
        Teacher temp;
        for(i=0; i < n - 1; i++){
            for(j=0; j < n - i - 1; j++) {
                if(p[j].salary>p[j+1].salary)
                {
                    temp=p[j];
                    p[j]=p[j+1];
                    p[j+1]=temp;
                }
            }
        }
        for(i=0; i<n; i++)
        {
            printf("%10d%8s%6c%6d/%02d/%02d%10.2f\n",p[i].ID
                ,p[i].Name
                ,p[i].Sex
                ,p[i].birthday.year
                ,p[i].birthday.month
                ,p[i].birthday.day
                ,p[i].salary);
        }
    }
    float avg(Teacher num[],int n,float *max,float *min) // 统计工资的最大值、最小值、平均值模块:
    {
        int i,sum=num[0].salary;
        float t;
        *max=num[0].salary;
        *min=num[0].salary;
        for(i=1; i < n; i++) {
            if(*max < num[i].salary){
                *max=num[i].salary;
            }
            if(*min>num[i].salary)
            {
                *min=num[i].salary;
            }
            sum=sum+num[i].salary;
        }
        t=(float)sum/n;
        return t;
    }
    void count(Teacher num[],int n,int *male,int *female) // 按性别统计教师人数模块:分别统计
    {
        int a=0,b=0,i;
        for(i=0; i<n; i++)
        {
            if(num[i].Sex=='M')
            {
                a++;
            }
            else if(num[i].Sex=='F')
            {
                b++;
            }
        }
        *male=a;
        *female=b;
    }
    void salarySearch(Teacher num[],int n,float teachersalary) //按工资查找教师信息模块:输入查询的工资 找出对应的老师信息
    {
        int i,j=0;
        for(i=0; i<n; i++)
        {
            if( num[i].salary==teachersalary)
            {
                printf("%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID
                    , num[i].Name
                    , num[i].Sex
                    , num[i].birthday.year
                    , num[i].birthday.month
                    , num[i].birthday.day
                    , num[i].salary);
                j++;
            }
        }
        if(j==0)
            printf("无该工资的教师信息");
    }
    void Save(Teacher num[],int n) // 保存模块:将教师信息写到数据文件中
    {
        FILE *fp;
        int i,j;
        if((fp=fopen("teacher.txt","a")) == NULL) //以添加方式打开文本文件
        {
            printf("Failure to open teacher.txt!\n");
            exit(0);
        }
        fprintf(fp,"教师工号 教师姓名 教师性别 出生日期 教师工资\n");
        for(i=0; i<n; i++)
        {
            fprintf(fp,"%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID
                , num[i].Name
                , num[i].Sex
                , num[i].birthday.year
                , num[i].birthday.month
                , num[i].birthday.day
                , num[i].salary);
        }
        fclose(fp);
        if((fp=fopen("teacher.txt","r")) == NULL) //以读方式打开文本文件
        {
            printf("Failure to open teacher.txt!\n");
            exit(0);
        }
        for(i=0; i<n; i++)
        {
            fprintf(fp,"%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID
                , num[i].Name
                , num[i].Sex
                , num[i].birthday.year
                , num[i].birthday.month
                , num[i].birthday.day
                , num[i].salary);
        }
        fclose(fp);
        printf("保存成功!\n");
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试