新手 求指教 C++

YJ627150889 2012-05-13 07:19:39
为什么我输入科目 分数 后 选择4的时候 读不出结构体里的数据呢? 刚学C++ 老师让我们做个成绩管理系统 新手求大家指点一下 ;





#include<stdio.h>
#include"stdlib.h"
#include<string.h >
struct grades_list{
char sub[100];
int grade;
int credit;
};
int Count=0;
struct grades_list l[100];
char sub[10];

void dispMenu(); /*自定义菜单*/
void func(int n); /*选择菜单栏*/
void new_list(struct grades_list l[] ); /*成绩输入并保存到文件*/
void search_sub(struct grades_list l[],char*sub); /*科目查询*/
void dele_data(struct grades_list l[],char*sub ); /*科目删除*/
void aver(); /*平均分计算*/

int main(void)
{ int choice;
dispMenu();
printf("请输入你的选择序号:");
scanf("%d",&choice);
func(choice);

}

void new_list(struct grades_list l[] ) /*成绩输入并保存到文件*/
{
int choice;
FILE *fp;
struct grades_list e;

if((fp=fopen("c:\\test\\f.txt","a"))==NULL)
{
printf("file open error!\n");
exit(0);
}

printf("请输入学科");
scanf("%s",e.sub);
printf("请输入分数");
scanf("%d",&e.grade);
printf("请输入学分");
scanf("%d",&e.credit);
fprintf(fp,"%s %d %d\n",e.sub,e.grade,e.credit);
l[Count]=e;
Count++;
fclose(fp);
printf("%d",l[0].grade);
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);

}

void search_sub(struct grades_list l[],char*sub) /*科目 查询*/
{
int i,choice,flag=0;
if(Count==0)
{
printf("此表是空的!\n");

}
for(i=0;i<Count;i++)
if(strcmp(sub,l[i].sub)==0)
{
flag=1;
break;
}
if(flag)
{
printf("科目:%s\t",l[i].sub);
printf("分数:%d\t",l[i].grade);
printf("学分:%d\n",l[i].credit);
}
else
printf("找不到你所选的科目!\n");
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);
}


void dele_data(struct grades_list l[],char*sub )
{
int i,choice,k=0,flag=0;

FILE *fp=fopen("c:\\test\\f.txt","w");
if(Count==0)
{
printf("此表是空的!\n");

}
for(i=0;i<Count;i++)
{
if(!strcmp(sub,l[i].sub)==0)
{

fwrite(l[i].sub ,sizeof(int), 1, fp);
fwrite(&l[i].grade ,sizeof(int), 1, fp);
fwrite(&l[i].credit ,sizeof(int), 1, fp);


}
}
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);

}


void dispMenu() /*自定义菜单*/
{
printf("=== 菜单 ================\n");
printf("==1 成绩输入 ==============\n");
printf("==2 成绩查询 ==============\n");
printf("==3 成绩删除 ==============\n");
printf("==4 平均分计算 ==============\n");
printf("==0 返回选择菜单 ==============\n");
printf("==-1 退出系统 ==============\n");
}


void func(int n) /*选择菜单栏*/
{

if(n==-1)
{
exit(0);
}
while(n!=-1)
{
if(n==1)
{
new_list(l);

}
if(n==2)
{
printf("输入查询的科目:");
scanf("%s",sub);
search_sub(l,sub);
}
if(n==3)
{
printf("请输入要删除的科目:");
scanf("%s",sub);
dele_data(l,sub);
}
if(n==4)
{
void aver();
}
}
}


void aver() /*平均分计算*/
{
int choice;
int sum=0,GPA=0;
FILE *fp;
if((fp=fopen("c:\\test\\e.txt","r"))==NULL)
{
printf("file open error!\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s",l[0].sub);
printf("%s\n",l[0].sub);
};
if(fclose(fp))
{
printf("can not close the file!\n");
exit(0);
}
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);
}
...全文
101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
星星x 2012-05-15
  • 打赏
  • 举报
回复
晕你看看你写入数据的文件时那个文件,你读的文件又是那个???不一个文件能读到数据吗。。。。。
YJ627150889 2012-05-15
  • 打赏
  • 举报
回复
大家 很抱歉 因为有点事 我回晚了 谢谢大家的建议
某大一菜鸟 2012-05-14
  • 打赏
  • 举报
回复
建议把书多看几次..
话说你程序是C风格的..
fox_liucx 2012-05-13
  • 打赏
  • 举报
回复
问题是啥?
hen_hao_ji 2012-05-13
  • 打赏
  • 举报
回复
有哪些问题?
YJ627150889 2012-05-13
  • 打赏
  • 举报
回复
#include<stdio.h>
#include"stdlib.h"
#include<string.h >

struct grades_list{
char sub[100];
int grade;
int credit;
};
int Count=0;
struct grades_list l[100];
char sub[10];

void aver(); /*平均分计算*/
void dispMenu(); /*自定义菜单*/
void func(int n); /*选择菜单栏*/
void new_list(struct grades_list l[] ); /*成绩输入并保存到文件*/
void search_sub(struct grades_list l[],char*sub); /*科目查询*/
void dele_data(struct grades_list l[],char*sub ); /*科目删除*/
void input();


int main(void)
{ int choice;
dispMenu();
printf("请输入你的选择序号:");
scanf("%d",&choice);
func(choice);

}

void new_list(struct grades_list l[] ) /*成绩输入并保存到文件*/
{
int choice;
FILE *fp;
struct grades_list e;

if((fp=fopen("c:\\test\\f.txt","a"))==NULL)
{
printf("file open error!\n");
exit(0);
}

printf("请输入学科");
scanf("%s",e.sub);
printf("请输入分数");
scanf("%d",&e.grade);
printf("请输入学分");
scanf("%d",&e.credit);
fprintf(fp,"%s %d %d\n",e.sub,e.grade,e.credit);
l[Count]=e;
Count++;
fclose(fp);
printf("%d",l[0].grade);
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);

}

void search_sub(struct grades_list l[],char*sub) /*科目 查询*/
{
int i,choice,flag=0;
if(Count==0)
{
printf("此表是空的!\n");

}
for(i=0;i<Count;i++)
if(strcmp(sub,l[i].sub)==0)
{
flag=1;
break;
}
if(flag)
{
printf("科目:%s\t",l[i].sub);
printf("分数:%d\t",l[i].grade);
printf("学分:%d\n",l[i].credit);
}
else
printf("找不到你所选的科目!\n");
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);
}


void dele_data(struct grades_list l[],char*sub )
{
int i,choice,k=0,flag=0;

FILE *fp=fopen("c:\\test\\f.txt","w");
if(Count==0)
{
printf("此表是空的!\n");

}
for(i=0;i<Count;i++)
{
if(!strcmp(sub,l[i].sub)==0)
{

fwrite(l[i].sub ,sizeof(int), 1, fp);
fwrite(&l[i].grade ,sizeof(int), 1, fp);
fwrite(&l[i].credit ,sizeof(int), 1, fp);
input();

}
}
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);

}


void dispMenu() /*自定义菜单*/
{
printf("=== 菜单 ================\n");
printf("==1 成绩输入 ==============\n");
printf("==2 成绩查询 ==============\n");
printf("==3 成绩删除 ==============\n");
printf("==4 平均分计算 ==============\n");
printf("==0 返回选择菜单 ==============\n");
printf("==-1 退出系统 ==============\n");
}


void func(int n) /*选择菜单栏*/
{

if(n==-1)
{
exit(0);
}
while(n!=-1)
{
if(n==1)
{
new_list(l);

}
if(n==2)
{
printf("输入查询的科目:");
scanf("%s",sub);
search_sub(l,sub);
}
if(n==3)
{
printf("请输入要删除的科目:");
scanf("%s",sub);
dele_data(l,sub);
}
if(n==4)
aver();

}
}


void aver() /*平均分计算*/
{
FILE *fp;

int i=0,k=0,choice;
float c=0,GPA=0;
if((fp=fopen("c:\\test\\f.txt","r"))==NULL)
{
printf("file open error!\n");
exit(0);
}
while(!feof(fp))
{
for(i=0;i<Count;i++)
{
fscanf(fp,"%s %d %d",l[i].sub,&l[i].grade,&l[i].credit);
printf("%-10s %d %d\n",l[i].sub,l[i].grade,l[i].credit);
}

};
if(fclose(fp))
{
printf("can not close the file!\n");
exit(0);
}
for(k=0;k<Count;k++)
{
c=(l[k].grade/10-5)+c;
}
GPA=c/(k-1);
printf("学分绩点为GPA:%f ",GPA);
printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);
}


void input()
{
FILE *fp;
int choice;
int grade,credit;
if((fp=fopen("c:\\test\\f.txt","r"))==NULL)
{
printf("file open error!\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s %d %d",sub,&grade,&credit);
printf("%-10s %d %d\n",sub,grade,credit);
};
if(fclose(fp))
{
printf("can not close the file!\n");
exit(0);
}

printf("请继续选择功能序号:");
scanf("%d",&choice);
func(choice);
}




求改善 我的很不完善呢? 明天我会回复的 谢谢大家了
YJ627150889 2012-05-13
  • 打赏
  • 举报
回复
好吧 我试试 刚学这东西 真有点难啊 !
W170532934 2012-05-13
  • 打赏
  • 举报
回复
单步调试吧。我这没有文件,调试到那就退出了

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧