2019-12-29 18:02

按要求调不出来了，求修改

,排序板块改成升序
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define MAX 30 // 最多30人
void mima();//密码
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);//保存
typedef struct date // 定义日期类型
{
int year;
int month;
int day;
}DATE;
typedef struct person // 定义教师类型
{
int ID; // 工号
char Name[10]; // 姓名
char studentSex; // 性别
DATE birthday; // 出生日期
float salary; // 基本工资
} Teacher;
int main()
{

``````mima();
Teacher num[MAX];
// main()内定义结构体数组
return 0;
``````

}
void mima()//密码
{
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');
displaymain();
scanf("%d", &choice);
if (choice >= 1 && choice <= 8)
switch (choice)
{
case 1:printf("录入的老师人数:");
scanf("%d",&n);
if(t==0)
{
printf("输入结束!\n");
}
else
{
}
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);
break;
case 7:Save(num,n);
break;
default:printf("选项输入错误!\n");
}
}
}
{
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 {
for(j=i+1; j {
if(p[j].salary>p[i].salary)
{
temp=p[j];
p[j]=p[i];
p[i]=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=0;
float t;
for(i=0; i {
*max=num[0].salary;
*min=num[0].salary;
if(*max {
*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++;
}
}
printf("男老师有%d人\n",a);
printf("女老师有%d人\n",b);
}
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");
}

• 写回答
• 好问题 提建议
• 关注问题
• 收藏
• 邀请回答

1条回答默认 最新

• threenewbee 2019-12-29 18:38
已采纳

改动的地方比较多，不一一说了，看下面的代码

``````// Q1049485.cpp : Defines the entry point for the console application.
//

#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();//密码
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);
Teacher num[MAX];

int main()
{
mima();

// main()内定义结构体数组
return 0;
}
void mima()//密码
{
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');
scanf("%d", &choice);
if (choice >= 1 && choice <= 8)
switch (choice)
{
case 1:printf("录入的老师人数:");
scanf("%d",&n);
if(t==0)
{
printf("输入结束!\n");
}
else
{
}
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);
break;
case 7:printf("按工资查询老师信息!\n");
printf("查询的工资:");
scanf("%f",&teachersalary);
salarySearch(num,n,teachersalary);
break;
case 8:Save(num,n);
break;
default:printf("选项输入错误!\n");
}
}
}
{
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=0;
float t;
for(i=0; i < n; i++) {
*max=num[0].salary;
*min=num[0].salary;
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++;
}
}
printf("男生有%d人\n",a);
printf("女生有%d人\n",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");
}

``````

已采纳该答案
评论
解决 无用
打赏 举报