#include <stdio.h>
#include "string.h"
#include "stdlib.h"
#include <math.h>
int b=0;
typedef struct student{
char num[20]; //学号
char name[20]; //姓名
char clas[20]; //班级
int scores[3]; //该生在三门课程中所获得的积分
int levels[3]; //三门课程的等级,与scores一一对应
}STUDENT;
typedef struct course{
int num; //课程编号
char name[20]; //课程名称
int item[1000]; //完成相应试题所获取的分值,假设每门课程最多包括1000道试题
}COURSE;
typedef struct problem{
char name[20];
int num[3];
}PROBLEM;
void addstudent_information(STUDENT *P);//录入学生信息
void addclass(COURSE *q);//录入课程
void addproblem(PROBLEM *t);//录入试题
void addscore (STUDENT *p,PROBLEM *t);//更新积分
void student_grade(STUDENT *p);//计算学生等级
void searchfor(STUDENT *p);//查找
void student_sort(STUDENT *p);//排序
void student_print(STUDENT *p);//输出
void student_delect(PROBLEM *t);// 删除某门课程的某个试题
void student_save(STUDENT *p,COURSE *q,PROBLEM *t);//保存功能
void student_import(STUDENT *p,COURSE *q,PROBLEM *t);//导入功能
int main()
{
STUDENT stu[1000];
COURSE cour[1000];
PROBLEM pro[1000];
printf("============\n");
printf("欢迎进入学生信息管理系统\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("============\n");
printf("请选择菜单项\n");//目录
int select;
int i;
printf("请输入'1-11'完成功能\n");
scanf("%d",&select);
if(select>0 && select<12)
{
switch(select)
{
case 1:addstudent_information(stu);break;
case 2:addclass(cour);break;
case 3:addproblem(pro);break;
case 4:addscore(stu,pro);break;
case 5:student_grade(stu);break;
case 6:searchfor(stu);break;
case 7:student_sort(stu);break;
case 8:student_print(stu);break;
case 9:student_delect(pro);break;
case 10:student_save(stu,cour,pro);break;
case 11:student_import(stu,cour,pro);break;
case 0:return 0;
}
}
else
{
printf("输入错误\n");
}
}//主函数
void addstudent_information(STUDENT *p)
{
int b=0;
int n,i=1;;
printf("输入要录入的学生个数:\n");
scanf("%d",&n);
while(n>0)
{
printf("请输入第%d个学生学号:\n",i);
scanf("%s",p[b].num);
printf("请输入第%d个学生姓名:\n",i);
scanf("%s",p[b].name);
printf("请输入第%d个学生班级:\n",i);
scanf("%d",p[b].clas);
b++;
n--;
i++;
}
}
void addclass(COURSE *q)//录入课程
{
int n,i=0,b=0,a;
printf("请输入新增课程数量\n");
scanf("%d",&n);
for(a=1;i<n;i++,b++)
{
printf("请输入第%d个课程名称\n",a);
scanf("%s",q[b].name);
printf("请输入第%d个课程编号\n",a);
scanf("%d",q[b].num);
}
}
void addproblem(PROBLEM *t)//录入试题
{
int b,i=0;
printf("请输入录入试题数量\n");
scanf("%d",&b);
for(i=0;i<b;i++)
{
printf("请输入要录入的试题\n");
scanf("%s",t[i].name);
printf("请输入相应分值\n");
scanf("%d",t[i].num);
}
}
void addscore(STUDENT *p,PROBLEM *t)//更新积分
{
int b=0,s;
for(b=0;b<10;b++)
{
printf("是否完成%s课程,'y'或'n'\n",t[b].name);
scanf("%d",&s);
if(s='y')
{
p[b].scores[3]=t[b].num[20]+p[b].scores[3];
}
else
{
p[b].scores[3]=p[b].scores[3];
}
}
}
void student_grade (STUDENT *p)//计算学生等级
{
int b,i;
printf("请输入学生数量\n");
scanf("%d",&b);
for(i=0;i<b;i++)
{
p[i].levels[3]=log10(p[i].scores[3]+1);
}
}
void searchfor(STUDENT *p)//查找
{
char str[13];
int i,b=0;
printf("请输入要查找学生的学号\n");
scanf("%s",&str);
for(i=0;i<20;i++)
{
if(strcmp(str,p[i].num)==0)
{
break;
}
}
if(i==b)
{
printf("查无此人\n");
}
else
{
printf("该学生积分为:%d,等级为:%d\n",p[i].scores,p[i].levels);
}
}
void student_sort(STUDENT *p)//排序
{
int i,j,b,t;
printf("请输入学生数量:\n");
scanf("%d",&b);
for(i=0;i<b-1;i++)
{
for(j=0;j<b-i-1;j++)
{
if(p[i].scores>p[i+1].scores)
{
t=p[i].scores[3];
p[i].scores[3]=p[i+1].scores[3];
p[i+1].scores[3]=t;
}
}
}
}
void student_print(STUDENT *p)//输出
{
int b,i;
printf("请输入学生数量\n");
scanf("%d",&b);
for(i=0;i<b;i++)
{
printf("学号:%s",p[i].num);
printf("姓名:%s",p[i].name);
printf("班级:%d",p[i].clas);
printf("积分:%d",p[i].scores);
printf("等级:%d",p[i].levels);
}
}
void student_delect(PROBLEM *t)// 删除某门课程的某个试题
{
char pro[20];
int i,j;
for(i=0;i<b;i++)
{
if(strcmp(pro,t[i].name)==0)
{
break;
}
}
if(i==b)
{
printf("无此题目\n");
}
else
{
for(j=i;j<b-1;j++)
{
t[j]=t[j+1];
}
b--;
printf("删除成功\n");
}
}
void student_save(STUDENT *p,COURSE *q,PROBLEM *t)//保存功能
{
FILE *fp;
int i;
if((fp=fopen("d:\\students.dat","r"))==NULL)
{
printf("打开文件失败\n");
exit(0);
}
for(i=0;fread(&p[i],sizeof(STUDENT),1,fp)!=0;i++);
fclose(fp);
}
void student_import(STUDENT *p,COURSE *q,PROBLEM *t)//导入功能
{
int b=0;
FILE *fp;
if((fp=fopen("d:\\students.dat","w"))==NULL)
{
printf("打开文件失败\n");
exit(0);
}
fwrite(p,b*sizeof(p[0]),1,fp);
fclose(fp);
}
```指点。
c语言 为什么有printf却没输出啊
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- X-道至简 2022-12-12 19:46关注
你这个代码栈溢出了,这些数组结构体里面的空间分配太大
STUDENT stu[1000]; COURSE cour[1000]; PROBLEM pro[1000];
student 1000 *8 0 空间
course 至少要分配 1000 * 1000 空间
可以先改小一点试试,比如 cour[2]
如果要这么大 要用 malloc进行堆分配
还有头文件最好改下
#include "string.h" 改成 #include <string.h>
#include "stdlib.h" 改成 #include <stdlib.h>本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 matlab中使用gurobi时报错
- ¥15 WPF 大屏看板表格背景图片设置
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂