📄 modnum.cpp
字号:
//modnum 修改学生信息
#include "modnum.h"
void ModifyByNumber()
{
int i;
long modnum;
//输入各项修改后信息
long Number;
char Name[20];
float chinesescore;
float mathscore;
float heji;
Student Tmps;
Student s[SIZE];
int recNumber;
char DataFile[40] = "", next;
FILE *fp;
printf("\nplease input the name of file where data is stored,end with enter key.\n");
gets(DataFile);
//提示教师输入要进行修改记录的文件名
while (*DataFile == ('\0'))
{
printf("\nplease input the name of file where data is stored,end with enter key.\n");
gets(DataFile);
}
begin:
//以二进制读的方式发开文件
fp = fopen(DataFile, "rb");
if (fp == NULL)
{
printf("\nopen file %s fail! end with any key\n", DataFile);
perror("open file fail");
getch();
exit(1);
}
//输入要修改的学生的学号
printf("please input the employee'seatnum which you will modify:");
scanf("%ld", &modnum);
printf("the Student you will modify is:%ld\n", modnum);
//输入要修改记录的各项内容值
Number = modnum;
printf("name=");
scanf("%s", Name);
printf("chinesescore:");
scanf("%f", &chinesescore);
printf("mathscore:");
scanf("%f", &mathscore);
//用公式自动计算学生总分
heji = chinesescore + mathscore;
//将文件中要修改的信息存入结构体数组
//与要修改的学生学号相匹配的项不写入数组,否则就根据教师输入的各项修改内容重新赋值,即修改,并写入数组
recNumber = 0;
while ((fread(&Tmps, sizeof(Student), 1, fp)))
{
if (Tmps.Number != modnum)
{
s[recNumber].Number = Tmps.Number;
strcpy(s[recNumber].Name, Tmps.Name);
s[recNumber].chinesescore = Tmps.chinesescore;
s[recNumber].mathscore = Tmps.mathscore;
s[recNumber].heji = Tmps.heji;
recNumber++;
}
else
{
s[recNumber].Number = Number;
strcpy(s[recNumber].Name, Name);
s[recNumber].chinesescore = chinesescore;
s[recNumber].mathscore = mathscore;
s[recNumber].heji = heji;
recNumber++;
}
}
fclose(fp);
//===将修改后的剩余结构体记录写入文件=====
fp = fopen(DataFile, "wb+");
if (fp == NULL)
{
printf("\nset up file %s fail ! end with any key.\n", DataFile);
perror("set up fail");
getch();
exit(1);
}
for (i = 0;i < recNumber;i++)
{
if (fwrite(&s[i], sizeof(Student), 1, fp) != 1)
{
printf("\nwrite file %s fail! end any key", DataFile);
perror("write file fail");
getch();
exit(1);
}
}
fclose(fp);
//显示删除后的文件
fp = fopen(DataFile, "rb");
if (fp == NULL)
{
printf("\nopen file %s fail! end any key", DataFile);
perror("open file fail");
getch();
exit(1);
}
printf("\nthe file after delete is:\n");
printf("\nNumber\tName\tchinesescore\tmathscore\tzongfen\n");
while (fread(&Tmps, sizeof(Student), 1, fp))
{
if (Tmps.Number != 0)
printf("\n%ld\t%s\t%4.1f\t%4.1f\t%4.1f\t\n", Tmps.Number, Tmps.Name, Tmps.chinesescore, Tmps.mathscore, Tmps.heji);
}
fclose(fp);
printf("\ngo on ?(y/n)");
next = getche();
putchar('\n');
if (next == 'y' || next == 'Y')
goto begin;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -