怎么样获取学生数量呢,在我的getStuFromStruct()中,会不会是我比较数组是否为空出问题有关系呢
#include <stdio.h>
#include <stdlib.h>
#define max 10
struct Student {
char name[10];
int yw;
int sx;
int yy;
} student[10],temp;//建立一个结构体数组,我这里设置的是里面最多存十个题目
void addStudent() { //增加学生
FILE* fp = fopen("student.txt", "a+");
if(NULL == fp) { //确保成功打开文件,否则退出系统
printf("数据获取失败!即将退出系统...");
Sleep(3000);
exit(0);
}
printf("请输入要添加的学生名字:");
scanf("%s", temp.name);
fwrite(&(temp), sizeof(struct Student),1, fp);
fclose(fp);
printf("信息添加成功!\n");
}
void research() { //查询某位学生成绩
//查找
FILE* fp = fopen("student.txt", "r");
if(NULL == fp) {
printf("数据获取失败!即将退出系统...");
Sleep(3000);
exit(0);
}
//2 读取问文件内容并存到容器中
int r, num = 0;
r = fread(&student[num], sizeof(struct Student),1, fp);
while(r) {
num++;
r = fread(&student[num], sizeof(struct Student),1, fp);
}
//3 关闭文件
fclose(fp);
char name[10]; //这个数组用来接收用户输入的题目
int count = 0;
printf("请输入学生名字\n");
scanf("%s", name);
while(count <= num) {
if(strcmp(student[count].name, name) == 0){ //字符串的比较用strcmp();
printf("名字:%s \n 语文:%d 数学:%d 英语:%d \n", student[count].name, student[count].yw, student[count].sx, student[count].yy);
break;
}
else {
count++;
}
}
if(count > num) {
printf("未找到该学生!\n");
}
}
void lookthroughAll() { //查看全部
FILE* fp = fopen("student.txt", "r");
if(NULL == fp) {
printf("数据获取失败!即将退出系统...");
Sleep(3000);
exit(0);
}
//2 读取问文件内容并存到容器中
int r, num = 0;
r = fread(&student[num], sizeof(struct Student),1, fp);
while(r) {
num++;
r = fread(&student[num], sizeof(struct Student),1, fp);
}
//3 关闭文件
fclose(fp);
int count = 0;
while(count <= num) {
printf("名字:%s --语文:%d 数学:%d 英语:%d \n", student[count].name, student[count].yw, student[count].sx, student[count].yy);
count++;
}
}
void reviseInformation(){ //登记成绩
FILE *fp = fopen("student.txt", "r");
if(NULL == fp) {
printf("数据获取失败!即将退出系统...");
Sleep(3000);
exit(0);
}
//2 读取问文件内容并存到容器中
int r, num = 0;
r = fread(&student[num], sizeof(struct Student),1, fp);
while(r) {
num++;
r = fread(&student[num], sizeof(struct Student),1, fp);
}
//3 关闭文件
fclose(fp);
char name[10]; //接收输入的名字
int count = 0;
printf("请输入要登记成绩的学生名字:\n");
scanf("%s", name);
while(count <= num) {
if(strcmp(student[count].name ,name) == 0){ //字符串的比较用strcmp();
printf("请输入成绩(xx xx xx):");
int yw,sx,yy;
scanf("%d", &yw);
scanf("%d", &sx);
scanf("%d", &yy);
student[count].yw = yw;
student[count].sx = sx;
student[count].yy = yy;
printf("登记成功!\n");
printf(":%d :%d :%d ",student[count].yw,student[count].sx,student[count].yy);
break;
}
count++;
}
if(count > num) {
printf("未找到该学生!\n");
}
fp = fopen("student.txt", "w");
//写入数据
count = 0;
while(count <= num) {
fwrite(&student[count], sizeof(struct Student),1, fp);
count++;
}
fclose(fp);
}
void deleteCourse() { //删除学生
FILE* fp = fopen("student.txt", "r");
if(NULL == fp) {
printf("数据获取失败!即将退出系统...");
Sleep(3000);
exit(0);
}
//2 读取问文件内容并存到容器中
int r, num = 0;
r = fread(&student[num], sizeof(struct Student), 1, fp);
while(r) {
num++;
r = fread(&student[num], sizeof(struct Student),1, fp);
}
fclose(fp);
char name[10];
int count=0;
printf("请输入想要删除的学生:");
scanf("%s", &name);
while(count <= num) {
if(strcmp(student[count].name, name) == 0) { //字符串的比较用strcmp();
for(; count < num; count++) {
strcpy(student[count].name, student[count + 1].name );
student[count].yw = student[count + 1].yw;
student[count].sx = student[count + 1].sx;
student[count].yy = student[count + 1].yy;
}
printf("删除成功!\n");
break;
} else {
count++;
}
}
if(count > num) {
printf("未找到该学生信息!\n");
}
fp = fopen("student.txt", "w");
//写入数据
count = 0;
getStuFromStruct();
while(count < (getStuFromStruct()-1) ) {
fwrite(&student[count], sizeof(struct Student),1, fp);
count++;
}
fclose(fp);
}
int getStuFromStruct(){ //获取学生个数
int i,j=0;
char f[10];
for(;i<max;i++){
if ( strcmp(student[i].name, f)==0) {
printf("%d无学生 ",i);
}else{
j++;
}
}
printf("\n学生数为:%d\n",j);
return j;
}
int main()
{
int i;
while(1){
printf(" 请输入模式:");
scanf("%d",&i);
switch (i){
case 1:
addStudent(); //添加 一个学生姓名
break;
case 2:
research(); //查询某位学生成绩
break;
case 3:
lookthroughAll();//查看全部学生内容
break;
case 4:
reviseInformation();////给学生添加成绩
break;
case 5:
deleteCourse(); //删除某个学生
break;
case 6:
getStuFromStruct();//获取学生个数
}
}
}