设计一个程序,是C语言数据结构

设计一个程序,完成以下功能:
1)建立学生信息管理的数据文件stud.dat;文件中至少包含30个学生的信息;每个学生至少包括:学号、姓名、年龄、课程成绩等5项内容(另2项自定),当程序运行后发现数据文件不存在(如初始运行)、应从键盘输入学生信息数据并创建数据文件;若数据文件已经存在则从该文件中读取数据;
2)可以添加(插入、追加)学生信息;
3)可以修改某个学生的某项信息;
4)能统计并显示某门课程不及格学生的信息。

楼主跟我的C语言程序设计课程要求设计的程序很像,有一点点不同,不过我的程序应该能满足你的要求,代码如下:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 10

struct student{
char name[20];
int cla;
int point1;
int point2;
int point3;
int sum;
int num;
};

void printf_student(struct student stu[]);
void in_student(struct student stu[]);
void look_student(struct student stu[]);

void main(){
student stu[N];
int choice1;

while(choice1!=5){
printf("请选择您要操作的项目:\n");
printf("1.读取数据\n2.录入数据\n3.分析数据\n4.保存数据\n5.退出\n");
scanf("%d",&choice1);
switch(choice1){
case 1:
printf_student(stu);
break;
case 2:
in_student(stu);
break;

case 3:
look_student(stu);
break;
}}
}

void printf_student(struct student stu[]){
FILE *fout;
int i=0;
int j=0;
fout=fopen("stu1.txt","r");
if(fout==NULL){printf("找不到文件");}
else{
while(!feof(fout)){
fscanf(fout,"%s %d %d %d %d",stu[i].name,&stu[i].cla,&stu[i].point1,&stu[i].point2,&stu[i].point3);
i++;
}
printf("已经读取.");
printf("\n姓名\t\t班级\t\t成绩1\t\t成绩2\t\t成绩3\n");
for(j=0;j<i;j++){
printf("%s\t\t",stu[j].name);
printf("%d\t\t",stu[j].cla);
printf("%d\t\t",stu[j].point1);
printf("%d\t\t",stu[j].point2);
printf("%d\t\t",stu[j].point3);}
}

fclose(fout);
}

void in_student(struct student stu[]){
FILE *fp;
student flag;
char ch[50]={0};
fp=fopen("stu1.txt","a+");
int choice=1;
if(fp==0){printf("无法打开文件\n");}
else{
while(choice){
printf("请依次输入姓名,班级,成绩1,成绩2,成绩3\n");
scanf("%s %d %d %d %d",flag.name,&flag.cla,&flag.point1,&flag.point2,&flag.point3);
sprintf(ch,"%s\t%d\t%d\t%d\t%d",flag.name,flag.cla,flag.point1,flag.point2,flag.point3);
/*fwrite(flag.name,20,1,fp);
fwrite("\t",2,sizeof("\t"),fp);
fwrite(&flag.cla,sizeof(flag.cla),1,fp);
fwrite("\t",sizeof("\t"),1,fp);
fwrite(&flag.point1,sizeof(flag.point1),1,fp);
fwrite("\t",2,sizeof("\t"),fp);
fwrite(&flag.point2,sizeof(flag.point2),1,fp);
fwrite("\t",2,sizeof("\t"),fp);
fwrite(&flag.point3,sizeof(flag.point3),1,fp);*/
fwrite(ch,strlen(ch),1,fp);
printf("%s",ch);
printf("若想继续录入,请输入1,若退出,请输入0\n");
scanf("%d",&choice);
}}
fclose(fp);
}

void look_student(struct student stu[]){
FILE *fp;
int i=0;
int sum=0;
student flag;
fp=fopen("stu1.txt","r");
if(fp==0){printf("无法打开文件\n");}
else{
while(!feof(fp)){
fscanf(fp,"%s %d %d %d %d",stu[i].name,&stu[i].cla,&stu[i].point1,&stu[i].point2,&stu[i].point3);
i++;
}}
for(int j=0;j<i;j++){
sum=stu[j].point1+stu[j].point2+stu[j].point3;
stu[j].sum=sum;
sum=0;
}
int t=0;
for(t=1;t<i;t++){
for(j=0;j<i-t;j++){
if(stu[j].sum<stu[j+1].sum){
strcpy(flag.name,stu[j+1].name);
flag.cla=stu[j+1].cla;
flag.point1=stu[j+1].point1;
flag.point2=stu[j+1].point2;
flag.point3=stu[j+1].point3;
flag.sum=stu[j+1].sum;
strcpy(stu[j+1].name,stu[j].name);
stu[j+1].cla=stu[j].cla;
stu[j+1].point1=stu[j].point1;
stu[j+1].point2=stu[j].point2;
stu[j+1].point3=stu[j].point3;
stu[j+1].sum=stu[j].sum;
strcpy(stu[j].name,flag.name);
stu[j].cla=flag.cla;
stu[j].point1=flag.point1;
stu[j].point2=flag.point2;
stu[j].point3=flag.point3;
stu[j].sum=flag.sum;
}
}

}
for(j=0;j<i;j++){
stu[j].num=j+1;
}
fclose(fp);
FILE *creat;
char ch[30]={0};
creat=fopen("stu2.txt","w");
for(j=0;j<i;j++){
sprintf(ch,"%s\t%d\t%d\t%d\t%d\t%d\t%d",stu[j].name,stu[j].cla,stu[j].point1,stu[j].point2,stu[j].point3,stu[j].sum,stu[j].num);
fwrite(ch,30,1,creat);
}
printf("姓名\t班级\t成绩1\t成绩2\t成绩3\t总分\t排名\n");
for(j=0;j<i;j++){
printf("%s\t",stu[j].name);
printf("%d\t",stu[j].cla);
printf("%d\t",stu[j].point1);
printf("%d\t",stu[j].point2);
printf("%d\t",stu[j].point3);
printf("%d\t",stu[j].sum);
printf("%d\n",stu[j].num);
}

fclose(creat);
}

注意一下,我创建的文件时stu1.txt
温馨提示:答案为网友推荐,仅供参考
相似回答