baidu_35141242 2016-05-27 11:32 采纳率: 100%
浏览 1168
已采纳

c语言函数调用不了,小白求解,主要是13.14

#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
#define N 1000
struct student /*学生信息*/
{
char num[20]; /*学号*/
char name[20]; /*姓名*/
char sex; /* 性别,'1'->男, '0'->女*/
short age; /*年龄*/
short score[3]; /*三门课程的成绩*/
short sum; /*总成绩*/
short deptid; /*所在班的班号*/
struct student *next1;
struct student *next2;
}*head;
struct student std[N];

struct department /*班信息,假设总共有3个班*/
{
short id; /*班号*/
char name[20]; /*系名*/
char dean[20]; /*班主任*/
char location[30]; /*班级地址*/
}depa[3]={{1,"计算机系","张三","电教楼505"},{2,"法政系","李四","电教楼404"},{3,"外语系","王五","实验楼401"}};
void menu()
{
printf("\n=========学生信息管理系统========\n");
printf("1. 录入学生信息\n");
printf("2. 显示所有学生信息\n");
printf("3. 按学号查询学生信息\n");
printf("4. 按姓名查询学生信息(支持模糊查询)\n");
printf("5. 按年龄查询学生信息\n");
printf("6. 查询指定学生的所在班的信息(包括系名、班主任、班的地址)\n");
printf("7. 修改学生信息\n");
printf("8. 删除学生信息\n");
printf("9. 追加学生信息\n");
printf("10. 保存学生信息到文件\n");
printf("11. 从文件载入学生信息\n");
printf("12. 按成绩从高到低显示所有学生信息[选作题目]\n");
printf("13. 计算每门课的最高成绩和最低成绩\n");
printf("14. 按性别就每门课男女的平均成绩\n");
printf ("0. 退出系统\n");
}
//录入学生信息
void create()
{
int i,j;
char tmp[30];
struct student p;
head=NULL;
for(i=1;;i++)
{
if(i!=1)
{
printf("是否继续录入(y/n):");
gets(tmp);
if(strcmp(tmp,"n")==0)
break;
}
p=(struct student *)malloc(sizeof(struct student));
printf("\n====请输入第%d个学生信息====\n",i);
printf("学号:");
gets(p->num);
printf("姓名:");
gets(p->name);
printf("性别,('1'->男, '0'->女):");
p->sex=getchar();
getchar();
printf("年龄:");
gets(tmp);
p->age=atoi(tmp);
printf("三门课程的成绩:\n");
p->sum=0;
for(j=0;j {
printf("第%d个成绩:",j+1);
gets(tmp);
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("总成绩:%d\n",p->sum);
printf("所在班的班号[1->计算机系;2->法政系;3->外语系]:");
gets(tmp);
p->deptid=atoi(tmp);
p->next1=head;
head=p;
}
printf("信息录入完毕,按任意键继续……");
getch();
}
//显示所有学生信息
void displayAll()
{
struct student *p;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在班的班号\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,
(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
p=p->next1;
}
printf("信息显示完毕,按任意键继续……");
getch();
}
//按学号查询学生信息
void searchOnNum()
{
int flag;
char tmp[30];
struct student p;
p=head;
printf("请输入学号:");
gets(tmp);
flag=0;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在班的班号\n");
while(p!=NULL)
{
if(strcmp(tmp,p->num)==0)
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,
(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到学号是%s的学生,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//按姓名查询学生信息
void searchOnName()
{
int flag;
char tmp[30];
struct student p;
p=head;
printf("请输入姓名:");
gets(tmp);
flag=0;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在班的系班号\n");
while(p!=NULL)
{
if(strstr(p->name,tmp))
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,
(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//按年龄查询学生信息
void searchOnAge()
{
int flag;
char tmp[30];
struct student p;
p=head;
printf("请输入年龄:");
gets(tmp);
flag=0;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在班的班号\n");
while(p!=NULL)
{
if(atoi(tmp)==p->age)
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,
(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到年龄是%s的学生,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//查询指定学生的所在班的信息
void searchDepa()
{
int i,flag;
char tmp[30];
struct student p;
p=head;
printf("请输入姓名:");
gets(tmp);
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
for(i=0;i {
if(p->deptid==depa[i].id)
{
flag=1;
printf("班名\t\t班主任\t\t班的地址\n");
printf("%s\t\t%s\t\t%s\n",depa[i].name,depa[i].dean,depa[i].location);
}
}
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s,或许%s班号输入时有误,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//修改学生信息
void update()
{
int flag,j;
char tmp[30];
char a;
struct student *p;
p=head;
printf("请输入姓名:");
gets(tmp);
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
flag=1;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在班的班号\n");
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,
(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
printf("\n====请输入新信息====\n");
printf("学号:");
gets(tmp);
if(strcmp(tmp,"")!=0)
strcpy(p->num,tmp);
printf("姓名:");
gets(tmp);
if(strcmp(tmp,"")!=0)
strcpy(p->name,tmp);
printf("性别,'1'->男, '0'->女:");
a=getchar();
if(a!='\n')
p->sex=a;
printf("年龄:");
gets(tmp);
if(strcmp(tmp,"")!=0)
p->age=atoi(tmp);
printf("三门课程的成绩:\n");
p->sum=0;
for(j=0;j {
printf("第%d个成绩:",j+1);
gets(tmp);
if(strcmp(tmp,"")!=0)
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("总成绩:%d\n",p->sum);

printf("所在班的班号[1->计算机系;2->法政系;3->外语系]:");
gets(tmp);
if(strcmp(tmp,"")!=0)
p->deptid=atoi(tmp);
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s!按任意键继续……",tmp);
else
printf("\n修改完毕,按任意键继续……");
getch();
}
//删除学生信息
void delate()
{
int flag;
char tmp[30];
struct student *p,*q;
printf("请输入姓名:");
gets(tmp);
p=head;
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
flag=1;
if(p==head)
head=p->next1;
else
q->next1=p->next1;
free(p);break;
}
q=p;
p=p->next1;
}
if(flag==0)
printf("\n未找到%s,按任意键继续……",tmp);
else
printf("删除完毕,按任意键继续……");
getch();
}
//追加学生信息
void add()
{
int i,j;
char tmp[30];
struct student *p;
for(i=1;;i++)
{
if(i!=1)
{
printf("是否继续追加(y/n):");
gets(tmp);
if(strcmp(tmp,"n")==0)
break;
}
p=(struct student *)malloc(sizeof(struct student));
printf("\n====请输入第%d个追加信息====\n",i);
printf("学号:");
gets(p->num);
printf("姓名:");
gets(p->name);
printf("性别,'1'->男, '0'->女:");
p->sex=getchar();
getchar();
printf("年龄:");
gets(tmp);
p->age=atoi(tmp);
p->sum=0;
for(j=0;j {
printf("第%d个成绩:",j+1);
gets(tmp);
if(strcmp(tmp,"")!=0)
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("总成绩:%d\n",p->sum);
printf("所在班的班号[1->计算机系;2->法政系;3->外语系]:");
gets(tmp);
p->deptid=atoi(tmp);
p->next1=head;
head=p;
}
printf("追加成功,按任意键继续……");
getch();
}
//保存学生信息到文件
void save()
{
FILE *fp;
char filename[20]={"d://qq.dat"};
printf("请输入文件名如%s:",filename);
gets(filename);
while(strcmp(filename,"")==0)
{
printf("文件名不能为空,请重新输入:");
gets(filename);
}
if((fp=fopen(filename,"wb"))==NULL)
{
printf("write file open error!\n按任意键继续……");getch();
return;

}
struct student p;
p=head;
printf("正在保存信息,请耐心等待……\n");
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next1;
}
fclose(fp);
printf("信息保存成功,按任意键继续……");getch();
}
//从文件载入学生信息
void load()
{
char filename[20];
FILE *fp;
printf("请输入文件名:");
gets(filename);
while(strcmp(filename,"")==0)
{
printf("文件名不能为空,请重新输入:");
gets(filename);
}
if((fp=fopen(filename,"rb"))==NULL)
{
printf("read file open error!\n按任意键继续……");getch();
return;
}
struct student *p,*q;
p=(struct student *)malloc(sizeof(struct student));
head=p;
printf("正在从磁盘载入信息,请耐心等待……\n");
while(!feof(fp))
{
if(1!=fread(p,sizeof(struct student),1,fp))
break;
p->next1=(struct student *)malloc(sizeof(struct student));
q=p;
p=p->next1;
}
q->next1=NULL;
fclose(fp);
printf("载入成功,按任意键继续……");getch();
}
//按成绩从高到低显示所有学生信息[选作题目]
void displayInOrder()
{
struct student *head1,*p,*q,*r;
p=(struct student *)malloc(sizeof(struct student));
p=head;
while(p!=NULL)
{
if(p==head)
{
head1=p;
p->next2=NULL;
}
else
{
q=head1;
while(1)
{
if(p->sum>q->sum)
{
if(q==head1)
{
p->next2=head1;
head1=p;break;
}
else
{
r->next2=p;
p->next2=q;break;
}
}
else if(q->next2==NULL)
{
q->next2=p;
p->next2=NULL;break;
}
r=q;
q=q->next2;
}
}
p=p->next1;
}
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在班的班号\n");
p=head1;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,
(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
p=p->next2;
}
printf("信息显示完毕,按任意键继续……");getch();
}

//计算每门课的最高成绩和最低成绩
void result()
{
int i,max1=0,min1=std[1].score[1],max2=0,min2=std[1].score[2],max3=0,min3=std[1].score[3];
for(i=1;i<=1000;i++)
{
if(max1 max1=std[i].score[1];
if(min1>std[i].score[1])
min1=std[i].score[1];
if(max2 max2=std[i].score[2];
if(min2>std[i].score[2])
min2=std[i].score[2];
if(max3 max3=std[i].score[3];
if(min3>std[i].score[3])
min3=std[i].score[3];
}

printf("第一门成绩最高分为%d\n,最低分为%d,第二门成绩最高分为%d\n,最低分为%d,第三门成绩最高分为%d,最低分为%d\n",max1,min1,max2,min2,max3,min3);
}
//按性别求每门课男女的平均成绩
void ave()
{
printf("请输入学生性别:'1'->男, '0'->女");
int i,j,k=1,l=1,sumA=0,sumB=0,sumC=0,sumD=0,sumE=0,sumF=0,ave1,ave2,ave3,ave4,ave5,ave6;
scanf("%d",&i);
if(i==0||i==1)
{if(i=0)
{for(j=1;j<1000;j++)
{if(std[j].sex=1)
{sumA=sumA+std[j].score[1];
sumB=sumB+std[j].score[2];
sumC=sumC+std[j].score[3];
k++;
}}
ave1=sumA/k;
ave2=sumB/k;
ave3=sumC/k;
}
printf("男生第一门平均成绩为%d\n,男生第二门平均成绩为%d\n,男生第三门平均成绩为%d\n",ave1,ave2,ave3);}
{if(i=1)
{for(j=1;j<1000;j++)
{if(std[j].sex=1)
{sumD=sumD+std[j].score[1];
sumE=sumE+std[j].score[2];
sumF=sumF+std[j].score[3];
l++;
}}
ave4=sumD/k;
ave5=sumE/k;
ave6=sumF/k;
}
printf("女生第一门平均成绩为%d\n,女生第二门平均成绩为%d\n,女生第三门平均成绩为%d\n",ave4,ave5,ave6);
}
if(i!=0||i!=1)
printf("输入错误请矫正,按任意键继续");
}

//退出系统,判断是否真的退出
void exitSystem()
{
char x;
printf("你真的要退出系统吗?(Y/N)");
while(1)
{
x=getche();
if(x=='y' || x=='Y' || x=='n' || x=='N' )
break;
printf("\b");
}
if(x=='y' || x=='Y')
{
printf("\n");
exit(0);
}
return;
}

void main()
{
int c;
char choice[3];
while(1)
{
system("cls");
menu();
do
{
printf("请输入功能键:");
gets(choice);
c=atoi(choice);
}while(c>12||c<0);
switch(c)
{
case 1: create();break;
case 2: displayAll();break;
case 3: searchOnNum();break;
case 4: searchOnName();break;
case 5: searchOnAge();break;
case 6: searchDepa();break;
case 7: update();break;
case 8: delate();break;
case 9: add();break;
case 10: save();break;
case 11: load();break;
case 12: displayInOrder();break;
case 13: result();break;
case 14: ave();break;
case 0: exitSystem();
}
}
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-05-27 11:45
    关注
     你的程序用的是链表,可是你写的循环是数组。大概应该这么写
    int min1 = 0;
    while(p!=NULL)
    {
    if (min1 > p->score[0]) min1 = p->score[1];
    p = p->next;
    }
    ...
    其实你好好把人家写的代码看看就会了。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序