Ideas
Ingrese al archivo de carga, muestre el menú y seleccione la función. Si no elige salir, use binario para leer y escribir el archivo en el bucle while para implementar las funciones de agregar, ver a todos los estudiantes y buscar estudiantes .
Display_Menu()菜单
Load_File()加载文件
Add_Student()新增学生方法:
使用二进制追加读和写打开
判断是否有相同的学号,没有的话写入数据到文件中。
Student_Information()查看全部学生信息:
使用while读取,读取数量不为0则一直读取输出打印。
Lookup_Student()查找学生
使用循环读取数据,在循环中判断输入的学号是否与文件中的学号相同,相同则不写入文件中,不相同即写入文件中。
representaciones
Barra de menús
void Display_Menu(){
printf("=================================================\n");
printf("= 1.新增学生 =\n");
printf("= 2.查看全部学生 =\n");
printf("= 3.查找学生 =\n");
printf("= 4.重新加载文件 =\n");
printf("= 5.退出 =\n");
printf("=================================================\n");
}
función principal
int main() {
FILE *fp;
char option;
char szPath[20];
printf("请输入需要加载的文件:");
scanf("%s",&szPath);
getchar();
fp = fopen(szPath,"ab+");
if(fp == NULL){
printf("打开失败\n");
exit(0);
}
Display_Menu();
scanf("%c",&option);
while(option != '5'){
switch (option) {
case '1':
Add_Student(szPath);break;
case '2':
Student_Information(szPath);break;
case '3':
Lookup_Student(szPath);
break;
case '4':
printf("请输入需要加载的文件:");
scanf("%s",szPath);
Load_File(szPath);
break;
case '5':
fclose(fp);
exit(0);
default:
exit(0);
}
Display_Menu();
getchar();
scanf("%c",&option);
}
fclose(fp);
return 0;
}
Carga de archivos
int Load_File(char filename[20]){
FILE *fp;
fp = fopen(filename,"ab+");
if(fp == NULL){
printf("打开失败\n");
}else{
printf("加载成功\n");
}
fclose(fp);
return 0;
}
Agregar nuevo estudiante
fopen(filename,"ab+") utiliza lectura y escritura de anexos binarios para abrir
Check_Student(st->no,filename) para determinar si existen los mismos ID de estudiante. De lo contrario, escriba los datos en el archivo.
int Add_Student(char *filename){
struct Student st;
FILE *fp = fopen(filename,"ab+");
printf("==新增学生界面==\n");
printf("请输入学生信息\n");
printf("学号:");
scanf("%d",&st.no);
printf("姓名:");
scanf("%s",st.name);
getchar();
printf("性别(F:女,M:男):");
scanf("%c",&st.sex);
printf("年龄:");
scanf("%d",&st.age);
if(Check_Student(st.no,filename)){
fwrite(&st,sizeof(struct Student),1,fp);
printf("成功\n");
fclose(fp);
return 0;
}else{
printf("该学生已经存在\n");
fclose(fp);
return 0;
}
}
Ver todos los estudiantes
Utilice while para leer. Si el número de lecturas no es 0, lea la siguiente línea de datos.
int Student_Information(char *filename){
struct Student *st;
FILE *fp = fopen(filename,"rb+");
rewind(fp);
while (fread(st, sizeof(struct Student),1,fp) != 0){
printf("%s-%d-%d-%s\n", st->name, st->no, st->age, st->sex == 'F' ? "女" : "男");
}
fclose(fp);
return 0;
}
encontrar estudiantes
Utilice un bucle para leer datos y determine si el número de estudiante ingresado es el mismo que el número de estudiante en el archivo. Si son iguales, no se escribirán en el archivo.
int Lookup_Student(char *filename){
int szNo;
struct Student *st;
printf("请输入要查找的学生学号:");
scanf("%d",&szNo);
FILE *fp = fopen(filename,"rb+");
while (fread(st, sizeof(struct Student),1,fp) != 0){
if(st->no == szNo){
printf("%s-%d-%d-%s\n", st->name, st->no, st->age, st->sex == 'F' ? "女" : "男");
}
}
fclose(fp);
return 0;
}