主函数的函数调用那里为什么说参数n没有定义
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define N 15
struct a{ //本科生
int n;//
int number;//学号
char name[N];//姓名
char sex;//性别
int cla;//班别
char major;//专业
int score[3];//成绩
int sum;//总分
int ave;//平均分
}stu1[N];
struct b{ //研究生
int n;//
int number;//
char name[N];//
char sex;//
int cla;//
char major;//
char yjfx;//研究方向
char teacher;//导师
int score[2];
int sum;
int ave;
}stu2[N];
struct student{
union{
struct a benkesheng;//本科生
struct b yanjiusheng;//研究生
}xuesheng;
enum{benkesheng,yanjiusheng}type;
struct student *link;
};
void menu();
void write(); //添加信息
int change(int n);//修改信息
int del(int n);//删除信息
void outputonestudent(int i);//查询一个学生信息
void searchmenu(int n);//查询信息操作
void searchnumber(int n);//按学号查询
void searchname(int n);//按姓名查询
void inturn(struct a c[]);//排序
void inturn(struct b c[]);//排序
void saveallstudent(int n);//保存全部学生信息
void tongji();//统计
void xjzf();
void bjzf();
void avecj();
void save(int x);//保存
void main(){ //主函数
int choice;
printf("学生成绩管理系统");
while(1){
menu();
printf("请选择:");
scanf("%d",&choice);
if(choice==0){
printf("谢谢使用!");
break;
}
switch(choice){
case 1:
write();
inturn(stu1);//
save(N);
break;
case 2:
change(n); //为什么说n没定义
break;
case 3:
del(n);
break;
case 4:
searchmenu(n);
break;
case 5:
tongji();
case 0:
printf("谢谢使用!再见。");
default:
printf("按键错误,请重新选择!");
}
}
}
void menu(){
printf("请输入所需选择\n");
printf("1.添加学生信息\n");
printf("2.修改学生信息\n");
printf("3.删除学生信息\n");
printf("4.查询学生信息\n");
printf("5.统计学生信息\n");
printf("0.退出系统\n");
}
void write(){ //
int i;
struct a c ;
struct b d;
int choice;
printf("0.本科生 1.研究生\n");
printf("请输入选择:");
scanf("%d",&choice);
if(choice==0){
printf("添加本科生信息");
}
printf("输入本科生人数:",c.n);
scanf("%d",&c.n);
for(i=0;i<c.n;i++){
printf("输入第%d个学生的学号:\n",i+1);
scanf("%d",&c.number);
printf("输入第%d个学生的姓名:\n",i+1);
scanf("%s",c.name[i]);
printf("输入第%d个学生的性别:\n",i+1);
scanf("%d",&c.sex);
printf("输入第%d个学生的专业:\n",i+1);
scanf("%d",&c.major);
printf("输入第%d个学生的班级:\n",i+1);
scanf("%d",&c.cla);
printf("输入第%d个学生的c语言成绩:\n",i+1);
scanf("%f",&c.score[0]);
printf("输入第%d个学生的高数成绩:\n",i+1);
scanf("%f",&c.score[1]);
printf("输入第%d个学生的英语成绩:\n",i+1);
scanf("%f",&c.score[2]);
c.sum=c.score[0]+c.score[1]+c.score[2];
c.ave=c.sum/3.0f;
}
printf("学号\t姓名\t性别\t专业\t班级\tc语言成绩\t高数成绩\t英语成绩\t\n");
printf("%d%s%s%s%d%d%d%d",c.number,c.name[i],c.sex,c.major,c.cla,c.score[0],c.score[1],c.score[2]);
if(choice==1){
printf("添加研究生信息");
}
printf("输入研究生人数:",d.n);
scanf("%d",&d.n);
for(i=0;i<d.n;i++){
printf("输入第%d个学生的学号:\n",i+1);
scanf("%d",&d.number);
printf("输入第%d个学生的姓名:\n",i+1);
scanf("%s",d.name[i]);
printf("输入第%d个学生的性别:\n",i+1);
scanf("%d",&d.sex);
printf("输入第%d个学生的专业:\n",i+1);
scanf("%d",&d.major);
printf("输入第%d个学生的班级:\n",i+1);
scanf("%d",&d.cla);
printf("输入第%d个学生的研究方向:\n",i+1);
scanf("%f",d.yjfx);
printf("输入第%d个学生的导师:\n",i+1);
scanf("%f",d.teacher);
printf("输入第%d个学生的课程综合成绩:\n",i+1);
scanf("%f",&d.score[0]);
printf("输入第%d个学生的论文成绩:\n",i+1);
scanf("%f",&d.score[1]);
d.sum=d.score[0]+d.score[1];
d.ave=d.sum/2.0f;
}
printf("学号\t姓名\t性别\t专业\t班级\t研究方向\t导师\t课程综合成绩\t论文成绩\t\n");
printf("%d%s%s%s%d%s%s%d%d",d.number,d.name[i],d.sex,d.major,d.cla,d.yjfx,d.teacher,d.score[0],d.score[1]);
}
////
////
////
////
void inturn(struct a m[]){
int x;
struct a c;
struct b d;
printf("输入所需操作:\n");
printf("1.校级按总分排序操作\n");
printf("2.班级按总分排序操作\n");
printf("0.返回主菜单\n");
printf("输入选择:");
scanf("%d",&x);
while(x>0&&x<4){
switch(x){
case 1:
xjzf();
break;
case 2:
bjzf();
break;
case 0:
printf("再见\n");
return;
default:
printf("重新输入");
}
}
}
////
///
///
void save(int x){
FILE *fp;
int i;
if((fp=fopen("student.dat","rb+"))==NULL){
printf("不能打开\n");
exit(1);
}
for(i=0;i<N;i++)
if(fwrite(&stu1[i],sizeof(struct student),1,fp)!=1) //////////////
printf("文件写入错误\n");
fclose(fp);
printf("写入成功\n");
}
///
///
///
int change(int n){ ////修改
struct a c;
struct b d;
int choice;
int k=-1,x,i;
char c1='y',c2;
printf("0.本科生 1.研究生\n");
printf("输入选择:",choice);
scanf("%d",&choice);
if(choice==0){
printf("修改本科生信息\n");
}
while(c1=='y'){
c2='y';
printf("输入要修改的学生的学号:");
scanf("%d",&x);
for(i=0;i<n;i++){
if(x==c.number){
k=i;
break;
}
if(k<0)
printf("输入有误,重新输入");
else{
printf("输入修改后的信息:\n");
printf("学号\t姓名\t性别\t专业\t班级\tc语言成绩\t高数成绩\t英语成绩\t\n");
scanf("%d%s%s%s%d%d%d%d",c.number,c.name[i],c.sex,c.major,c.cla,c.score[0],c.score[1],c.score[2]);
c.sum=(c.score[0]+c.score[1]+c.score[2]);
c.ave=c.sum/3.0f;
stu1[k]=c;
printf("修改成功");
break;
}
saveallstudent(k);
c1=getchar();
getchar();
return(n);
}
printf("任意键继续");
getchar();
}
if(choice==1){
printf("修改研究生信息\n");
}
while(c1=='y'){
c2='y';
printf("输入要修改的学生的学号:");
scanf("%d",&x);
for(i=0;i<n;i++){
if(x==stu2[i].number){
k=i;
break;
}
if(k<0)
printf("输入有误,重新输入");
else{
printf("输入修改后的信息:\n");
printf("学号\t姓名\t性别\t专业\t班级\t研究方向\t导师\t课程综合成绩\t论文成绩\t\n");
scanf("%d%s%s%s%d%s%s%d%d",d.number,d.name[i],d.sex,d.major,d.cla,d.yjfx,d.teacher,d.score[0],d.score[1]);
d.sum=(d.score[0]+d.score[1]);
d.ave=d.sum/2.0f;
stu2[k]=d;
printf("修改成功");
break;
}
saveallstudent(k);
c1=getchar();
getchar();
}
printf("任意键继续");
getchar();
}
}
////
///
///
//删除函数
int del(int n){
int i,k=-1,x;
char c1='y',c2;
while(c1=='y'){
c2='n';
printf("输入要删除的学生学号:\n");
scanf("%d",&x);
for(i=0;i<n;i++){
if(x==stu1[i].number){
k=i;
break;
}
if(k<0)
printf("输入有误,重新输入");
else{
printf("该学生信息如下:\n");
outputonestudent(k);
printf("删除\n");
c2=getchar();
getchar();
if(c2=='y'){
for(i=k;i<n;i++){
stu1[i]=stu1[i+1];
n--;
printf("删除成功");
}
c1=getchar();
getchar();
}
}
}
}
save(n);
printf("任意键继续");
getchar();
return(n);
}
void outputonestudent(int i){
struct a c;
struct b d;
printf("学号:%d 姓名:%s 性别:%s 专业:%s 班级:%d\n",c.number,c.name[i],c.sex,c.major,c.cla);
printf("c语言:%d 高数:%d 英语:%d",c.score[0],c.score[1],c.score[2]);
printf("学号:%d 姓名:%s 性别:%s 专业:%s 班级:%d 研究方向:%s 导师:%s\n",d.number,d.name[i],d.sex,d.major,d.cla,d.yjfx,d.teacher);
printf("课程综合成绩:%d 论文成绩:%d",d.score[0],d.score[1]);
}
////
/////////////////
//////////////////
/////////////////
void searchmenu(int n){ //查询
int selet;
while(1){
printf("进入查询功能\n");
printf("1.按姓名查询\n");
printf("1.按学号查询\n");
printf("输入所需操作:\n");
scanf("%d",&selet);
getchar();
switch(selet){
case 1:
searchname(n);
break;
case 2:
searchnumber(n);
case 0:
return;
default:
printf("输入错误,重新输入\n");
}
}
}
void searchname(int n){
int i,j,k;
char xname[N],c='y';
while(c=='y'){
k=-1;
printf("输入学生姓名:");
gets(xname);
for(i=0,j=1;i<n;i++){
if(strcmp(stu1[i].name,xname)==0){
k=i;
printf("学生%d的信息:\n",j++);
outputonestudent(k);
}
}
}
}
void searchnumber(int n){
int i,j,k,x;
char c='y';
while(c=='y'){
k=-1;
printf("输入学生学号:\n");
scanf("%d",&x);
for(i=0,j=1;i<n;i++){
if(stu1[i].number==x){
k=i;
printf("学生%d的信息:\n",j++);
outputonestudent(k);
}
}
}
}
void tongji(){
int x;
printf("进入统计系统\n");
printf("输入所需操作:\n");
printf("1.统计某门课每个班的平均成绩操作\n");
printf("0.返回主菜单\n");
printf("输入选择:");
scanf("%d",&x);
while(x>0&&x<3){
switch(x){
case 1:
avecj();
break;
case 0:
printf("再见\n");
return;
default:
printf("输入错误,重新输入\n");
}
}
}
void xjzf(){
FILE *wj,*fp;
int i,j;
struct a c;
struct b d;
if((fp=fopen("student.dat","wb"))==NULL){
exit(1);
}
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(stu1[i].sum<stu1[j].sum){
c=stu1[j];
stu1[j]=stu1[i];
stu1[i]=c;
}
if((wj=fopen("student.dat","wb+"))==NULL){
exit(1);
}
else{
for(i=0;i<N;i++)
fwrite(&stu1[i],sizeof(struct student),1,wj);
}
fclose(fp);
fclose(wj);
if((fp=fopen("student.dat","wb"))==NULL){
exit(1);
}
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(stu2[i].sum<stu2[j].sum){
d=stu2[j]; //////////////////////////////////////////////eorr
stu2[j]=stu2[i];
stu2[i]=d; //////////////////////////////////////////////eorr
}
if((wj=fopen("student.dat","wb+"))==NULL){
exit(1);
}
else{
for(i=0;i<N;i++)
fwrite(&stu2[i],sizeof(struct student),1,wj);
}
fclose(fp);
fclose(wj);
}
void avecj(){
int i=0;
struct a c;
struct b d;
printf("每门课的每班的平均成绩:\n");
for(i=1;i<N;i++){
if(c.cla==i){
(c.n*c.score[0])/i;
printf("c语言每班的平均成绩:%f",(c.n*c.score[0])/i);
}
}
}
void saveallstudent(int n)/*保存全部学生信息*/
{
FILE *fp;
if((fp=fopen("student.dat","wb"))==NULL)/*以二进制写方式打开文件*/
{
printf("文件打开失败!\n");
exit(1);
}
fwrite(stu1,sizeof(struct student),n,fp);/*将数组stu中全部学生信息写入文件*/
fclose(fp);
}