电视剧
c语言成绩管理系统(C语言入门:利用文件实现有保存功能的学生成绩管理程序)

学生成绩管理程序主菜单写出了该程序具备的功能:

我们最初的程序,实现了学生信息的增、删、改、查和打印功能,并没有文件读写功能。程序如下。

我们昨天将学生成绩管理程序的保存功能加上了,就是说我们输入的学生信息在程序结束之前都保存到一个文件里了。

此时读文件的函数readFlie( )还没有写。

程序1的第3部分,在主函数中增加一行代码:saveFlie(a); 调用saveFile( )保存我们从键盘输入的学生信息(即数组变量a的所有元素)。

但是当我们再次运行程序时,发现数据还是空的,为什么呢?因为我们没有把文件里的学生信息读到程序中。

三、如何将文件的内容读出来并保存到程序的变量中?

我们先看文件Student.txt文件里面有什么信息。

程序2:读出文件Student.txt的内容。

number是全局变量,存放学生总人数,虽然在程序2中用不到number,但是每读出文件一行信息,number就加1。

第1句:文件输入函数fscanf( )把文件内容读出来给数组a;

第3句:标准输出函数printf( )把这行信息显示出来让我们看;

如果把函数readFile( )加到学生成绩管理程序中的时候,是不需要每读出一行信息就用printf函数把这行信息输出到显示器上,这里是为了验证,所以加了这行输出信息到显示器上的代码:

如果我们把文件Student.txt删掉,现在这个文件Student.txt不存在,那么程序1是否还能正常运行呢?

出现乱码,不对了。

这是因为:

怎么改呢?

当文件不存在时,程序1运行结果为:

显示“文件不存在!”后程序就结束了,不会出现乱码。

现在我们把函数readFile( )添加到学生成绩管理程序中,在程序运行一开始就调用readFile( )把文件的内容读出到数组变量a中,此时我们把readFlie( )中的输出语句:

程序1的第2部分改为:

第一次运行程序,若文件Student.txt不存在,则先显示“文件不存咋!”以后再出现主菜单。

//

//第1部分:定义结构类型、全局变量

{ int xh; // 学号

int cj; // 成绩

int number=0; // 全局变量,学生总数

void f1(struct STUD a[]);

void f3(struct STUD a[]);

void f5(struct STUD a[]);

void readFile(struct STUD a[]);//读文件

{ FILE *fp;

fp=fopen("Student.txt","w"); //打开方式 w, 清空原有内容,全部重写

{

}

}

{ FILE *fp;

fp=fopen("Student.txt","r"); //打开方式 r, 读文件

{

}

{

{ fscanf(fp,"%d %s %d\n", &a[i].xh, a[i].name, &a[i].cj);

// printf("%d %s %d\n", a[i].xh, a[i].name, a[i].cj);

}

}

}

//第3部分 主函数

{ struct STUD a[100]; int xz, f=1;


{ printf("\n********************\n");

printf(" *3 修改 *\n *4 查询 *\n");

printf("********************\n");

scanf("%d", &xz);

{ case 1: f1(a); break;

case 3: f3(a); break;

case 5: f5(a); break;

case 0: f=0; break;

}



return 0;

//第4部分 增加学生信息的函数f1

void f1(struct STUD a[]) //增加

int n, i;

scanf("%d", &n);

for(i=number;i<number+n;i++)

printf("请输入学号:");

scanf("%d", &a[i].xh);

scanf("%s", a[i].name);

scanf("%d", &a[i].cj);

number=number+n;

printf("添加成功\n");

//第5部分 查询学生信息的函数f4

int f4(struct STUD a[]) //查询

int flag; int i,x; int xz;

scanf("%d",&x);

for(i=0;i<number;i++)

if(a[i].xh==x)

printf("找到学号为%d的学生,该生信息如下:\n",x) ;

printf("%d %s %d \n", a[i].xh,a[i].name,a[i].cj);

break;

}

if(i>=number)

printf("查无此人\n");

flag=-1;

return flag;

//第6部分 删除学生信息的函数f2

void f2(struct STUD a[]) //删除

int d=f4(a); //先调用f4查找有没有这个学生

if(d==-1)

printf(" 查无此人,无法删除\n");

{

a[d].xh=-1; //直接将学号改成-1

printf("删除成功\n");

}

//第7部分 修改学生信息的函数f3

void f3(struct STUD a[]) //修改

int d=f4(a); //先调用f4查找有没有这个学生

if(d==-1)

printf(" 查无此人,无法修改\n");

{

printf("请输入新的学号、姓名、成绩:\n");

printf("修改成功\n");

}

void f5(struct STUD a[]) //打印

int xz, flag=1, i;

for(i=0;i<number;i++)

if( a[i].xh != -1 ) //把学号不等于-1的信息删除

printf("%d %s %d\n",a[i].xh,a[i].name,a[i].cj);

}

//

至此我们完成了一个具有增删改查及保存功能的学生成绩管理程序。


顶一下()     踩一下()

热门推荐

发表评论
0评