有挺多问题的,可以帮忙看一下吗,明天就要交了
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define N 15
struct student{
union{
struct a;//本科生
struct b;//研究生
};
enum{a,b};
struct student *link;
};
struct a{ //本科生
int n;//
int number;//学号
char name[N];//姓名
char sex;//性别
int cla;//班别
char major;//专业
int score[3];//成绩
int sum;//总分
int ave;//平均分
}stu[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;
}stu[N];
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 tongji();//统计
void xjzf();
void bjzf();
void save(int x);//保存
void mainn(){
int choice;
printf("学生成绩管理系统");
while(1){
menu();
printf("请选择:");
scanf("%d",&choice);
if(choice==0){
printf("谢谢使用!");
break;
}
switch(choice){
case 1:
write();
inturn(stu);//为什么这里显示“a”的实参“student”的形参不兼容
save(N);
break;
case 2:
change(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 A;
struct b B;
int choice;
printf("0.本科生 1.研究生\n");
printf("请输入选择:");
scanf("%d",&choice);
if(choice==0){
printf("添加本科生信息");
}
printf("输入本科生人数:",A.n);
scanf("%d",&A.n);
for(i=0;i<A.n;i++){
printf("输入第%d个学生的学号:\n",i+1);
scanf("%d",&A.number);
printf("输入第%d个学生的姓名:\n",i+1);
scanf("%s",A.name[i]);
printf("输入第%d个学生的性别:\n",i+1);
scanf("%d",&A.sex);
printf("输入第%d个学生的专业:\n",i+1);
scanf("%d",&A.major);
printf("输入第%d个学生的班级:\n",i+1);
scanf("%d",&A.cla);
printf("输入第%d个学生的c语言成绩:\n",i+1);
scanf("%f",&A.score[0]);
printf("输入第%d个学生的高数成绩:\n",i+1);
scanf("%f",&A.score[1]);
printf("输入第%d个学生的英语成绩:\n",i+1);
scanf("%f",&A.score[2]);
A.sum=A.score[0]+A.score[1]+A.score[2];
A.ave=A.sum/3.0f;
}
printf("学号\t姓名\t性别\t专业\t班级\tc语言成绩\t高数成绩\t英语成绩\t\n");
printf("%d%s%s%s%d%d%d%d",A.number,A.name[i],A.sex,A.major,A.cla,A.score[0],A.score[1],A.score[2]);
if(choice==1){
printf("添加研究生信息");
}
printf("输入研究生人数:",B.n);
scanf("%d",&B.n);
for(i=0;i<B.n;i++){
printf("输入第%d个学生的学号:\n",i+1);
scanf("%d",&A.number);
printf("输入第%d个学生的姓名:\n",i+1);
scanf("%s",B.name[i]);
printf("输入第%d个学生的性别:\n",i+1);
scanf("%d",&B.sex);
printf("输入第%d个学生的专业:\n",i+1);
scanf("%d",&B.major);
printf("输入第%d个学生的班级:\n",i+1);
scanf("%d",&B.cla);
printf("输入第%d个学生的研究方向:\n",i+1);
scanf("%f",B.yjfx);
printf("输入第%d个学生的导师:\n",i+1);
scanf("%f",B.teacher);
printf("输入第%d个学生的课程综合成绩:\n",i+1);
scanf("%f",&B.score[0]);
printf("输入第%d个学生的论文成绩:\n",i+1);
scanf("%f",&B.score[1]);
B.sum=B.score[0]+B.score[1];
B.ave=B.sum/2.0f;
}
printf("学号\t姓名\t性别\t专业\t班级\t研究方向\t导师\t课程综合成绩\t论文成绩\t\n");
printf("%d%s%s%s%d%s%s%d%d",B.number,B.name[i],B.sex,B.major,B.cla,B.yjfx,B.teacher,B.score[0],B.score[1]);
}
////
////
////
////
void inturn(struct a m[]){
int x;
struct a A;
struct b B;
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(&stu[i],sizeof(struct student),1,fp)!=1)
printf("文件写入错误\n");
fclose(fp);
printf("写入成功\n");
}
///
///
///
int change(int n){ ////修改
struct a A;
struct b B;
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==stu[i].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",A.number,A.name[i],A.sex,A.major,A.cla,A.score[0],A.score[1],A.score[2]);
A.sum=(A.score[0]+A.score[1]+A.score[2]);
A.ave=A.sum/3.0f;
stu[k]=A;
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==stu[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",B.number,B.name[i],B.sex,B.major,B.cla,B.yjfx,B.teacher,B.score[0],B.score[1]);
B.sum=(B.score[0]+B.score[1]);
B.ave=B.sum/2.0f;
stu[k]=B;
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==stu[i].number){
k=i;
break;
}
if(k<0)
printf("输入有误,重新输入");
else{
printf("该学生信息如下:\n");
inputonestudent(k);
printf("删除\n");
c2=getchar();
getchar();
if(c2=='y'){
for(i=k;i<n;i++){
stu[i]=stu[i+1];
n--;
printf("删除成功");
}
c1=getchar();
getchar();
}
}
}
}
save(n);
printf("任意键继续");
getchar();
return(n);
}
void outputonestudent(int i){
struct a A;
struct b B;
printf("学号:%d 姓名:%s 性别:%s 专业:%s 班级:%d\n",A.number,A.name[i],A.sex,A.major,A.cla);
printf("c语言:%d 高数:%d 英语:%d",A.score[0],A.score[1],A.score[2]);
printf("学号:%d 姓名:%s 性别:%s 专业:%s 班级:%d 研究方向:%s 导师:%s\n",B.number,B.name[i],B.sex,B.major,B.cla,B.yjfx,B.teacher);
printf("课程综合成绩:%d 论文成绩:%d",B.score[0],B.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(stu[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(stu[i].number==x){
k=i;
printf("学生%d的信息:\n",j++);
outputonestudent(k);
}
}
}
}
void tongji(){
int x;
printf("进入统计系统\n");
printf("输入所需操作:\n");
printf("1.统计某门课每个班的平均成绩操作\n");
printf("2.某班级某课程不同等级的学生人数操作\n");
printf("0.返回主菜单\n");
printf("输入选择:");
scanf("%d",&x);
while(x>0&&x<4){
switch(x){
case 1:
avecj();
break;
case 2:
dengji();
break;
case 0:
printf("再见\n");
return;
default:
printf("输入错误,重新输入\n");
}
}
}
void xjzf(){
FILE *wj,*fp;
int i,j;
struct a A;
struct b B;
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(stu[i].sum<stu[j].sum){
A=stu[j];
stu[j]=stu[i];
stu[i]=A;
}
if((wj=fopen("student.dat","wb+"))==NULL){
exit(1);
}
else{
for(i=0;i<N;i++)
fwrite(&stu[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(stu[i].sum<stu[j].sum){
B=stu[j]; //////////////////////////////////////////////eorr
stu[j]=stu[i];
stu[i]=B; //////////////////////////////////////////////eorr
}
if((wj=fopen("student.dat","wb+"))==NULL){
exit(1);
}
else{
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(struct student),1,wj);
}
fclose(fp);
fclose(wj);
}
void avecj(){
int i=0;
struct a A;
struct b B;
printf("每门课的每班的平均成绩:\n");
for(i=1;i<N;i++){
if(A.cla==i){
(A.n*A.score[0])/i;
printf("c语言每班的平均成绩:%f",(A.n*A.score[0])/i);
}
}
}