「已注销」 2021-05-09 21:41 采纳率: 33.3%
浏览 110
已采纳

急救 vc代码应该怎样修改

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<dos.h>
#define LEN sizeof(struct teacher)				/*宏定义自定义结构体类型的长度*/
#define FORMAT "%-15s%-15s%-5s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n"		/*定义数据元素输出的格式*/
#define DATA &tea[i].name,&tea[i].number,&tea[i].sex,&tea[i].title,&tea[i].project1,&tea[i].project2,&tea[i].project3,&tea[i].degree,&tea[i].effectiveness,&tea[i].schoolterm
/*定义结构体类型的数组引用成员的输出列表*/

struct teacher			/*定义教师结构体*/
{
char name[15];			/*教师姓名*/
char number;			/*职工号*/
char sex;				/*性别*/
char title[15];			/*职称*/
char project1[15];		/*主讲科目1*/
char project2[15];		/*主讲科目2*/
char project3[15];		/*主讲科目3*/
char degree[15];		/*学位性质*/
char effectiveness;		/*教学效果评分*/
char  schoolterm[15];	/*办学日期*/
};

struct teacher tea[20];
int n;
void menu();
void in();
void search();
void del();
void modify();
void insert();
void order();
void show();


void menu()/*声明功能模板的函数,自定义函数实现菜单功能*/
{
	system("cls");		/*调用系统命令cls完成清屏操作,即清空屏幕*/
	printf("\n\n");
	printf("\t\t|----------学院教学信息管理系统---------|\n");
	printf("\t\t|\t     				|\n");
	printf("\t\t|\t  1.录入教师信息		|\n");
	printf("\t\t|\t  2.查找教师信息		|\n");
	printf("\t\t|\t  3.删除教师信息		|\n");
	printf("\t\t|\t  4.修改教师信息		|\n");
	printf("\t\t|\t  5.插入教师信息		|\n");
    printf("\t\t|\t  6.按教学效果评分排序\t	|\n");
    printf("\t\t|\t  7.显示所有教师信息\t	|\n");
    printf("\t\t|\t  0.退出系统			|\n");
    printf("\t\t|\t     				|\n"); 
    printf("\t\t|---------------------------------------|\n");
    printf("\t\t|   请选择(0~7):                      |\n");
}

void main()/*主函数*/
{
	system("color f0\n");
	/*发出一个DOS命令,用于执行系统命令,颜色属性由两个十六进制数字指定(前景后字),“f”代表亮白色,“0”代表黑色,即“白地黑字”*/
	menu();
	scanf("%d",&n);	
	/*输入选择功能的编号,程序会根据该数字调用不同的函数*/
	while(n)
	{
		switch(n)
		{case 1: in();break;		/*录入教师信息*/
		 case 2: search();break;	/*查找教师信息*/
         case 3: del();break;		/*删除教师信息*/
		 case 4: modify();break;	/*修改教师信息*/
		 case 5: insert();break;	/*插入教师信息*/
         case 6: order();break;		/*按教学效果成绩排序*/
		 case 7: show();break;		/*显示教师信息*/
		 default: break;			/*退出程序*/	
		}
		getch();
		menu();/*执行完功能再次显示菜单界面*/
		scanf("%d",&n);
	}
}

void in()		/*定义in函数,录入教师信息*/
{
	char i,m=0;								/*m是记录的条数*/
	char ch[2];								/*定义字符型一维数组ch*/
	FILE *fp;								/*定义一个指向文件的指针变量fp*/
	if((fp=fopen("data.txt","a+"))==NULL)	
	/*对磁盘文件进行操作处理需要首先打开指定文件,如果指定文件不存在便会出错*/
	/*将fopen函数的返回值赋给指针变量fp,打开一个文本文件进行读写*/
	{printf("文件不存在!\n");return;}
	while(!feof(fp))						/*当检查到文件未结束时*/
{
	if(fread(&tea[m],LEN,1,fp)==1)	
	/*从fp所指文件中读取长度为LEN的1个数据项,存到地址为&teacher[m]的内存区中*/
	{m++;}									/*统计当前记录条数*/
}
fclose(fp);									/*保存文件后关闭fp所指文件,释放文件缓冲区*/
		if(m==0)	/*判断磁盘文件是否有存储记录,m如果等于0即无存储记录*/
		{printf("文件中没有记录!\n");}
		else
		{show();}		
/*如果录入信息时,查询到文件data中有数据,会首先调用show函数显示原有信息,再询问是否插入数据以添加信息*/
		if((fp=fopen("data.txt","wb"))==NULL)/*判断读写的文本文件是否存在*/
		{printf("文件不存在!\n");return;}
		printf("输入教师信息(y/n):");
		scanf("%s",ch);
	while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息,Y/y即要录入*/
{
	printf("请输入职工号number:");
	scanf("%s",&tea[m].number);/*输入要插入的职工号*/
	for(i=0;i<m;i++)
		if(tea[i].number==tea[m].number)
		{
			printf("该职工号number已存在,按任意键继续!\n");	
/*如果选择插入数据,系统首先会对输入的职工号进行检查,只有在输入的职工号与已存在的职工号不重复的情况下,才能继续输入其他老师的信息*/
			getch();
			fclose(fp);
			return;
		}
		printf("不存在该教师信息,请继续!\n");	
		printf("姓名:\n");
		scanf("%s",&tea[m].name);
 		printf("职工号:\n");
		scanf("%s",&tea[m].number);
		printf("性别(F/M):\n");
		scanf("%s",&tea[m].sex);
		printf("职称(正高级senior、副高级deputy senior、中级intermediate、助理级assistant、员级member):\n");
		scanf("%s",&tea[m].title);
		printf("主讲科目1:\n");
		scanf("%s",&tea[m].project1);
		printf("主讲科目2:\n");
		scanf("%s",&tea[m].project2);
		printf("主讲科目3:\n");
		scanf("%s",&tea[m].project3);
		printf("学位性质(学位degree/非学位non degree):\n");
		scanf("%s",&tea[m].degree);
		printf("教学效果综合评分(0~100分):\n");
		scanf("%s",&tea[m].effectiveness);
		printf("办学日期:\n");
		scanf("%s",&tea[m].schoolterm);
		if(fwrite(&tea[m],LEN,1,fp)!=1)		/*将录入的信息写入指定的磁盘文件*/
		/*将&tea[m]所指的1*LEN个字节输出到fp所指文件中*/
		{printf("不能保存!");getch();}
		else
		{printf("\t%s\t已被保存!\n ",tea[m].name);
		m++;}									/*统计当前记录条数*/
	printf("继续?(y/n):");						/*询问是否继续*/
	scanf("%s",ch);
	}
	fclose(fp);									/*保存文件后关闭fp所指文件,释放文件缓冲区*/
	printf("OK!\n");
}


void search()			/*定义search函数,根据职工号查找教师信息*/
{
	FILE *fp;			/*定义文件指针*/
	char snum,i,m=0;
	if((fp=fopen("data.txt","rb"))==NULL)		/*查询的文件中不存在该职工号*/
	{printf("文件不存在!\n");return;}
	while(!feof(fp))							/*当文件指针没有到达文件结尾(文件读取尚未结束)时执行*/
		if(fread(&tea[m],LEN,1,fp)==1)
		/*从fp所指文件中读取长度为LEN的1个数据项,存到地址为&teacher[m]的内存区中*/
		m++;									/*统计当前记录条数*/
		fclose(fp);								/*保存文件后关闭fp所指文件,释放文件缓冲区*/
		if(m==0)								/*判断磁盘文件是否有存储记录,m如果等于0即无存储记录*/
		{printf("文件不存在!\n");return;}	
	printf("请输入职工号number:");
	scanf("%s",&snum);							/*将输入的职工号赋给snum*/
	for(i=0;i<m;i++)
	if(snum==tea[m].number)			/*查找输入的职工号是否在记录中*/
	{
		printf("name    number  sex	  title	   project1		project2	project3	degree	effectiveness	schoolterm\t\t\n");
		printf(FORMAT,DATA);					
		/*将查找出的结果按指定格式输出*/
		break;
	}
	if(i==m) printf("没有查询到该教师!\n");
}


void del()			/*定义del函数*/
{
	FILE *fp;		/*定义文件指针*/
	char snum,i,j,m=0;
	char ch[2];
	if((fp=fopen("data.txt","r+"))==NULL)	/*打开一个文本文件进行读写*/
	{printf("文件不存在!\n");return;}
	while(!feof(fp))						/*当文件指针没有到达文件结尾(文件读取尚未结束)时执行*/
	if(fread(&tea[m],LEN,1,fp)==1)
	/*从fp所指文件中读取长度为LEN的1个数据项,存到地址为&teacher[m]的内存区中*/
	m++;									/*统计当前记录条数*/
	fclose(fp);								/*保存文件后关闭fp所指文件,释放文件缓冲区*/
	printf("请输入教师的职工号number:");	
	scanf("%s",&snum);						/*将输入的职工号赋给snum*/
	for(i=0;i<m;i++)
	if(snum==tea[m].number)					/*匹配查找教师信息*/
	{	
		printf("查询到该教师,是否删除?(y/n)");		/*是否删除该信息*/
		scanf("%s",ch);
		if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)	/*判断是否删除该信息*/
		{
			for(j=i;j<m;j++)
			tea[j]=tea[j+1];		/*将后一个记录移到前一个记录的位置,以删除匹配查找出的教师信息*/
			m--;							/*记录的总数减1*/
			if((fp=fopen("data.txt","wb"))==NULL)
			{printf("文件不存在!\n");return;}
			for(j=0;j<m;j++)				/*将更改后的记录重新写入指定的磁盘文件中*/
			if(fwrite(&tea[m],LEN,1,fp)!=1)
			{printf("can not save!\n");getch();}
		fclose(fp);
		printf("删除成功!\n");
		}
	else
		{printf("找到了记录,选择不删除!");}/**/
	break;
	}
}


void modify()			/*自定义修改函数*/
{
	FILE *fp;			/*定义文件指针*/
	char snum,i=0,j=0,m=0;
	if((fp=fopen("data.txt","r+"))==NULL)	/*打开一个文本文件进行读写*/
	{printf("文件不存在!\n");return;}
	while(!feof(fp))						/*当文件指针没有到达文件结尾(文件读取尚未结束)时执行*/
	if(fread(&tea[m],LEN,1,fp)==1)
	/*从fp所指文件中读取长度为LEN的1个数据项,存到地址为&teacher[m]的内存区中*/
	m++;									/*统计当前记录条数*/
	if(m==0)
	{printf("文件中没有记录!\n");fclose(fp);return;}
	show();
	printf("请输入要修改的教师的number: ");
	scanf("%s",&snum);
	for(i=0;i<m;i++)
		if(snum==tea[i].number)
		{
		printf("找到该名教师,可修改信息!\n");
		printf("姓名:");
		scanf("%s",&tea[i].name);
 		printf("职工号:");
		scanf("%s",&tea[i].number);
		printf("性别(F/M):");
		scanf("%s",&tea[i].sex);
		printf("职称(正高级senior、副高级deputy senior、中级intermediate、助理级assistant、员级member):");
		scanf("%s",&tea[i].title);
		printf("主讲科目1:");
		scanf("%s",&tea[i].project1);
		printf("主讲科目2:");
		scanf("%s",&tea[i].project2);
		printf("主讲科目3:");
		scanf("%s",&tea[i].project3);
		printf("学位性质(学位/非学位):");
		scanf("%s",&tea[i].degree);
		printf("教学效果综合评分(0~100分):");
		scanf("%s",&tea[i].effectiveness);
		printf("办学日期:");
		scanf("%s",&tea[i].schoolterm);
		if((fp=fopen("data.txt","wb"))==NULL)
		{printf("不能打开文件!\n");return;}
		for(j=0;j<m;j++)				/*将新修改的信息写入指定的磁盘文件中*/
		if(fwrite(&tea[j],LEN,1,fp)!=1)
		{printf("不能保存文件!\n");getch();}
	fclose(fp);
	break;
		}
		if(m==0)
	{printf("没有找到这名学生!\n");}
}


void insert()			/*自定义插入函数*/
{
	FILE *fp;			/*定义文件指针*/
	char snum,i,j,k,m=0;
	if((fp=fopen("data.txt","r+"))==NULL)
	{printf("文件不存在!\n");return;}
	while(!feof(fp))							/*当文件指针没有到达文件结尾(文件读取尚未结束)时执行*/
	if(fread(&tea[m],LEN,1,fp)==1)
	m++;
	if(m==0)
	{printf("文件中没有记录!\n");fclose(fp);return;}
	printf("请输入要插入的位置(number)");		/*即插在该职工号后面*/
	scanf("%s",&snum);
	for(i=0;i<m;i++)
	if(snum==tea[i].number)						/*查找该职工号*/
		break;
	for(j=m-1;j>i;j--)
		tea[j+1]=tea[j];				/*从最后一条记录开始均向后移一位*/
	printf("现在请输入要插入的位置\n");
	printf("number: ");
	scanf("%s",&tea[i+1].number);
	for(k=0;k<m;k++)
	if(tea[k].number==tea[m].number)
	{
		printf("该教师的number已存在,请按任意键继续!");
		getch();
		fclose(fp);
		return;
	}
	printf("姓名:");
	scanf("%s",&tea[i+1].name);
	printf("职工号:");
	scanf("%s",&tea[i+1].number);
	printf("性别(F/M):");
	scanf("%s",&tea[i+1].sex);
	printf("职称(正高级senior、副高级deputy senior、中级intermediate、助理级assistant、员级member):");
	scanf("%s",&tea[i+1].title);
	printf("主讲科目1:");
	scanf("%s",&tea[i+1].project1);
	printf("主讲科目2:");
	scanf("%s",&tea[i+1].project2);
	printf("主讲科目3:");
	scanf("%s",&tea[i+1].project3);
	printf("学位性质(学位degree/非学位non degree):");
	scanf("%s",&tea[i+1].degree);
	printf("教学效果综合评分(0~100分):");
	scanf("%s",&tea[i+1].effectiveness);
	printf("办学日期:");
	scanf("%s",&tea[i+1].schoolterm);

	printf("插入成功!按任意键返回主界面!");
	if((fp=fopen("data.txt","wb"))==NULL)
	{printf("不能打开!\n");return;}
	for(k=0;k<=m;k++)
	if(fwrite(&tea[k],LEN,1,fp)!=1)			/*将新修改的信息写入指定的磁盘文件中*/
	{printf("不能保存!");getch();}
	fclose(fp);
}


void order()			/*自定义排序函数,首先读出已录入的教师信息,将信息按照教学效果成绩排序*/
{
	FILE *fp;			/*定义文件指针*/
	struct teacher t;
	char i=0,j=0,m=0;
	if((fp=fopen("data.txt","r+"))==NULL)
	{printf("文件不存在!\n");return;}
	while(!feof(fp))	/*当文件指针没有到达文件结尾(文件读取尚未结束)时执行*/
	if(fread(&tea[m],LEN,1,fp)==1)
	m++;
	fclose(fp);
	if(m==0)
	{printf("文件中没有记录!\n");return;}
	if((fp=fopen("data.txt","wb"))==NULL)
	{printf("文件不存在!\n");return;}
	for(i=0;i<m-1;i++)						/*教学效果成绩从高到低排列*/
		for(j=i+1;j<m;j++)
		if(tea[i].effectiveness<tea[j].effectiveness)
		{
		 t.effectiveness=tea[i].effectiveness;
		 tea[i].effectiveness=tea[j].effectiveness;
		 tea[j].effectiveness=t.effectiveness;	
		}
	if((fp=fopen("data.txt","wb"))==NULL)
	{printf("文件不存在!\n");return;}
	for(i=0;i<m;i++)
	if(fwrite(&tea[i],LEN,1,fp)!=1)		/*将重新排序后的信息写入指定的磁盘文件中*/
	{printf("%s 不能保存文件!\n");getch();}
	fclose(fp);
	printf("保存成功!\n");
}


void show()
{
	FILE *fp;
	char i,m=0;
	fp=fopen("data.txt","rb");			/*打开一个文本文件只读*/
	while(!feof(fp))					/*当文件指针没有到达文件结尾(文件读取尚未结束)时执行*/
	{
		if(fread(&tea[m],LEN,1,fp)==1)
		m++;
	}
	fclose(fp);
	printf("name    number  sex	  title	   project1		project2	project3	degree	effectiveness	schoolterm\t\t\n");
	for(i=0;i<m;i++)
	{
		printf(FORMAT,DATA);
	}
}


教师信息管理系统

程序正常运行,选择1(录入教师信息),依次输入数据

然后再enter,选择不继续--n,然后退出程序

数据存入到程序运行时新建的data.txt,打开查看却发现10001变成1,91变成9

选择7(显示所有教师信息),却又变成这样

求解,是字节存储的问题吗

但char number;   /*职工号*/改成char number[15];   /*职工号*/

char effectiveness;  /*教学效果评分*/改成char effectiveness[15];  /*教学效果评分*/

程序变得无法运行

  • 写回答

10条回答 默认 最新

  • 正在学C++ 2021-05-10 16:04
    关注
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    #define LEN sizeof(struct teacher)				/*宏定义自定义结构体类型的长度*/
    #define FORMAT "%-15s%-15d%-15c%-15s%-15s%-15s%-15s%-15s%-15d%-15s\n"		/*定义数据元素输出的格式*/
    #define DATA tea[i].name,tea[i].number,tea[i].sex,tea[i].title,tea[i].project1,tea[i].project2,tea[i].project3,tea[i].degree,tea[i].effectiveness,tea[i].schoolterm
    /*定义结构体类型的数组引用成员的输出列表*/
    struct teacher			/*定义教师结构体*/
    {
        char name[15];			/*教师姓名*/
        int number;				/*职工号*/
        char sex;				/*性别*/
        char title[15];			/*职称*/
        char project1[15];		/*主讲科目1*/
        char project2[15];		/*主讲科目2*/
        char project3[15];		/*主讲科目3*/
        char degree[15];		/*学位性质*/
        int effectiveness;		/*教学效果评分*/
        char  schoolterm[15];	/*办学日期*/
    };
    struct teacher tea[20];
    int n;
    void menu();
    int in();
    int search();
    int del();
    void modify();
    void insert();
    void order();
    int show();
    int readintea();
    int writetotxt(int);
    void scanfdata(int);
    
    void menu()/*声明功能模板的函数,自定义函数实现菜单功能*/
    {
        system("cls");		/*调用系统命令cls完成清屏操作,即清空屏幕*/
        printf("\n\n");
        printf("\t\t|----------学院教学信息管理系统---------|\n");
        printf("\t\t|\t     				|\n");
        printf("\t\t|\t  1.录入教师信息		|\n");
        printf("\t\t|\t  2.查找教师信息		|\n");
        printf("\t\t|\t  3.删除教师信息		|\n");
        printf("\t\t|\t  4.修改教师信息		|\n");
        printf("\t\t|\t  5.插入教师信息		|\n");
        printf("\t\t|\t  6.按教学效果评分排序\t	|\n");
        printf("\t\t|\t  7.显示所有教师信息\t	|\n");
        printf("\t\t|\t  0.退出系统			|\n");
        printf("\t\t|\t     				|\n");
        printf("\t\t|---------------------------------------|\n");
        printf("\t\t|   请选择(0~7):                      |\n");
    }
    int main()/*主函数*/
    {
        system("color f0\n");
        /*发出一个DOS命令,用于执行系统命令,颜色属性由两个十六进制数字指定(前景后字),“f”代表亮白色,“0”代表黑色,即“白地黑字”*/
        menu();
        scanf("%d",&n);
        /*输入选择功能的编号,程序会根据该数字调用不同的函数*/
        while(n)
        {
            switch(n)
            {case 1: in();break;		/*录入教师信息*/
                case 2: search();break;	/*查找教师信息*/
                case 3: del();break;		/*删除教师信息*/
                case 4: modify();break;	/*修改教师信息*/
                case 5: insert();break;	/*插入教师信息*/
                case 6: order();break;		/*按教学效果成绩排序*/
                case 7: show();break;		/*显示教师信息*/
                default: break;			/*退出程序*/
            }
            menu();/*执行完功能再次显示菜单界面*/
            scanf("%d",&n);
        }
        return 0;
    }
    int in()		/*定义in函数,录入教师信息*/
    {
        FILE *fp = fopen("F:\\CCCCCCCCCCCCCCC\\clion_work\\Test\\data.txt","a");
        char ch[15];
        int m = show(); //读入数据
        printf("输入教师信息(y/n):");
        scanf("%s",ch);
        while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息,Y/y即要录入*/
        {
            printf("请输入职工号number:");
            scanf("%d",&tea[m].number);/*输入要插入的职工号*/
            for(int i=0;i<m;i++)
                if(tea[i].number==tea[m].number)
                {
                    fclose(fp);
                    printf("该职工号number已存在,按任意键继续!\n");
    /*如果选择插入数据,系统首先会对输入的职工号进行检查,只有在输入的职工号与已存在的职工号不重复的情况下,才能继续输入其他老师的信息*/
                    getch();
                    return 0;
                }
            printf("不存在该教师信息,请继续!\n");
            scanfdata(m);
            if(fwrite(&tea[m],LEN,1,fp)!=1)		/*将录入的信息写入指定的磁盘文件*/
                /*将&tea[m]所指的1*LEN个字节输出到fp所指文件中*/
                {printf("不能保存!");getch();}
            else{
                printf("\t%s\t已被保存!\n ",tea[m].name);
                m++;
            }									/*统计当前记录条数*/
            printf("继续?(y/n):");						/*询问是否继续*/
            scanf("%s",ch);
        }
        fclose(fp);									/*保存文件后关闭fp所指文件,释放文件缓冲区*/
        printf("OK!\n");
    }
    
    int search()			/*定义search函数,根据职工号查找教师信息*/
    {
        int m = readintea(), i;
        int snum;
        printf("请输入职工号number:");
        scanf("%d",&snum);							/*将输入的职工号赋给snum*/
    
        for(i=0;i<m;i++)
            if(snum==tea[i].number)			/*查找输入的职工号是否在记录中*/
            {
                printf("%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n","name","number","sex","title","project1","project2","project3","degree","effectiveness","schoolterm");
                printf(FORMAT,DATA);
                /*将查找出的结果按指定格式输出*/
                break;
            }
        if(i==m) {
            printf("没有查询到该教师!\n");
            printf("按任意键返回菜单!\n");
            getch();
            return 0;
        }
        printf("按任意键返回菜单!\n");
        getch();
        return 1;
    }
    
    int del()			/*定义del函数*/
    {
        int snum,i,j;
        char ch[2];
        int m = readintea();
        printf("请输入教师的职工号number:");
        scanf("%d",&snum);						/*将输入的职工号赋给snum*/
    
        for(i=0;i<m;i++)
            if(snum==tea[i].number)					/*匹配查找教师信息*/
            {
                printf(FORMAT,DATA);
                printf("查询到该教师,是否删除?(y/n)");		/*是否删除该信息*/
                scanf("%s",ch);
                if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)	/*判断是否删除该信息*/
                {
                    for(j=i+1;j<m;j++)
                        tea[j-1]=tea[j];		/*将后一个记录移到前一个记录的位置,以删除匹配查找出的教师信息*/
                    m--;							/*记录的总数减1*/
                    writetotxt(m);
                    printf("删除成功!\n");
                }
                else printf("找到了记录,选择不删除!\n");
                break;
            }
        show();
        return 1;
    }
    
    void modify()			/*自定义修改函数*/
    {
        int m = readintea(),snum,i;
        show();
        printf("请输入要修改的教师的number: ");
        scanf("%d",&snum);
        for(i=0;i<m;i++)
            if(snum==tea[i].number)
            {
                printf("找到该名教师,可修改信息!\n");
                printf(FORMAT,DATA);
                scanfdata(i);
                writetotxt(m);
                printf("修改成功\n");
                printf(FORMAT,DATA);
                break;
            }
        if(i==m)
        {printf("没有找到这条记录!\n");}
        printf("按任意键继续!\n");
        getch();
    }
    
    void insert()			/*自定义插入函数*/
    {
        int snum,i,j,k,number;
        int m = readintea();
        printf("现在请输入要教师number:\n");
        scanf("%d",&number);
        for(k=0;k<m;k++)
            if(number==tea[k].number)
            {
                i = k;
                printf(FORMAT,DATA);
                printf("该教师的number已存在,按任意键返回菜单!");
                getch();
                return;
            }
        printf("请输入要插入的位置:");		/*即插在该位置*/// 1<=snum<=m+1
        scanf("%d",&snum);
        if (snum<0 || snum>m+1){
            printf("位置不合法,按任意键返回菜单!\n");
            getch();
            return;
        }
        for(j=m-1;j>=snum-1;j--)
            tea[j+1]=tea[j];				/*从最后一条记录开始均向后移一位*/
        i = snum-1; //插入位置下标
        scanfdata(i);
        writetotxt(m+1);
        show();
    }
    
    void scanfdata(int i){
        printf("姓名:");
        scanf("%s",tea[i].name);
        printf("职工号:");
        scanf("%d",&tea[i].number);
        printf("性别(F/M):");
        scanf("%s",&tea[i].sex);
        printf("职称(正高级senior、副高级deputy_senior、中级intermediate、助理级assistant、员级member):");
        scanf("%s",tea[i].title);
        printf("主讲科目1:");
        scanf("%s",tea[i].project1);
        printf("主讲科目2:");
        scanf("%s",tea[i].project2);
        printf("主讲科目3:");
        scanf("%s",tea[i].project3);
        printf("学位性质(学位degree/非学位non_degree):");
        scanf("%s",tea[i].degree);
        printf("教学效果综合评分(0~100分):");
        scanf("%d",&tea[i].effectiveness);
        printf("办学日期:");
        scanf("%s",tea[i].schoolterm);
    }
    void order()			/*自定义排序函数,首先读出已录入的教师信息,将信息按照教学效果成绩排序*/
    {
        FILE *fp;			/*定义文件指针*/
        struct teacher t;
        int i=0,j=0;
        int m = readintea();
        if(m==0) {printf("There si no data.!\n");return;}
        for(i=0;i<m-1;i++)						/*教学效果成绩从高到低排列*/
            for(j=0;j<m-1-i;j++)
                if(tea[j].effectiveness<tea[j+1].effectiveness)
                {
                    tea[m]=tea[j];
                    tea[j]=tea[j+1];
                    tea[j+1]=tea[m];
                }
        writetotxt(m);
        printf("排序成功!\n");
        show();
        printf("按任意键返回主界面!");
        getch();
    }
    
    int readintea(){    //把数据从文本读入结构体
        FILE *fp=fopen("F:\\CCCCCCCCCCCCCCC\\clion_work\\Test\\data.txt","r");			/*打开一个文本文件只读*/
        int m=0;
        while(!feof(fp))					/*当文件指针没有到达文件结尾(文件读取尚未结束)时执行*/
        {
            if(fread(&tea[m],LEN,1,fp)==1)
                m++;
        }
        fclose(fp);
        return m;
    }
    int writetotxt(int m){  //把结构体前m个数据写入文本
        FILE *fp = fopen("F:\\CCCCCCCCCCCCCCC\\clion_work\\Test\\data.txt","w");		/*定义文件指针*/
        for(int j=0;j<m;j++){ /*将更改后的记录重新写入指定的磁盘文件中*/
            if(fwrite(&tea[j],LEN,1,fp)!=1)
                printf("can not save!\n");
        }
        fclose(fp);
        return 1;
    }
    int show()
    {
        int m = readintea(), i;
        printf("%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n","name","number","sex","title","project1","project2","project3","degree","effectiveness","schoolterm");
        if(m==0) {
            printf("There is no data.\n");
            printf("按任意键继续!\n");
            getch();
            return 0;
        }
        else for(i=0;i<m;i++) printf(FORMAT,DATA);
        printf("按任意键继续!\n");
        getch();
        return m;
    }
    
    

    给你修改了一下。程序运行没有问题了,各种功能实现也没问题啦。

    但是data.txt内部还会存在乱码,因为你的这个fwrite的原因,我也没有换用其他函数输出。fwrite函数写入没有问题,但是写入的编码格式不是一般的格式,转来转去都看不了。反正系统能识别能读入读出是没有问题的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果