426GYY9826 2021-05-13 20:42 采纳率: 50%
浏览 19

C语言做的简陋学生管理系统,帮忙看一下问题和漏洞?

#include <stdio.h>
#include <malloc.h> 
#include <math.h>
#include <stdlib.h>
struct Stu{
	char name[20];
	char num[10];
	int score;
	struct stu *next;
};
int n; 
int main(){//主函数中的n没有在子函数中定义和调用 
	void scorec();//学号成绩查询
	void scorep();//成绩由高到低排名
	void nump();//学号由小到大排名
	void grade();//学生的总成绩和平均成绩
	void link();//成绩的类别以及所占比例和人数
	void scan();//录入学生信息
	//void print(struct stu);//输出学生的成绩
	//int n; 
	
	int a;
	void menu();
	menu();
	printf("请输入1-7的数字"); 
	scanf("%d",&a);
	switch(a){//?????
		case 1:  scan(NULL);break;
		case 2:  scorec(NULL);break;
		case 3:  scorep(NULL);break;
		case 4:  nump(NULL);break;
		case 5:  grade(NULL);break;
		case 6:  link(NULL);break;
		case 7:  break;
	}
	
	 
	
}
menu(){
	printf("**************学生信息管理系统**************\n");
		printf("**************1.录入学生信息****************\n");
		printf("**************2.成绩查询********************\n");
		printf("**************3.成绩排名********************\n");
		printf("**************4.学号排名********************\n");
		printf("**************5.学生总成绩和平均成绩********\n");
		printf("**************6.成绩分析********************\n");
		printf("**************7.退出************************\n");
} 

scan(struct Stu stu){//输入学生的成绩 
    
	struct Stu *p;
	printf("请输入要录入学生信息的人数:(<=30)");
	scanf("%d",&n);
	int i;
	for(i=0;i<n;i++){//依次录入学生成绩 
		p=(struct Stu *)malloc(sizeof(struct Stu));//开辟结构体大小的空间 
		printf("name:");
		gets(p->name);
		printf("\nnum");
		gets(p->num);
		printf("\nscore");
		scanf("%d\n",&p->score);
	}
	struct Stu *next=NULL;	
}
//学生成绩查询
scorec(struct Stu stu){
	struct Stu *k;
	char x[10];
	int i;
	printf("请输入学生的学号:");
	gets(x);
	for(i=0;i<n;i++){
		if(k->num==0){
			printf("name:%s\nnum:%s\nscore:%d\n",k->name,k->num,k->score);
		}
	}
	printf("没有找到该学生的相关信息!"); 
}
//学生成绩排名(由高到低)
scorep(struct Stu stu){//???
	struct Stu *q;
	int i,j,s;
	for(i=0;i<n-1;i++){
		for(j=0;j<n;j++){
			if((q+i)->score<(q+j)->score){//??交换两个结构体 
				(q+i)->next=(q+j+1);
				(q+j)->next=(q+i);
			}
		}
	}
	printf("成绩排名为:\n");
	for(i=0;i<n;i++){
		s=i+1;
		printf("%s\t%s\t%d\t%d\n",(q+i)->name,(q+i)->num,s,(q+i)->score);
	}
} 
//学号排名????
nump(struct Stu stu){
	struct Stu *q;
	int i,j;
	for(i=0;i<n-1;i++){
		for(j=0;j<n;j++){
			if((q+i)->num>(q+j)->num){//??交换两个结构体 
				(q+i)->next=(q+j+1);
				(q+j)->next=(q+i);
			}
		}
	}
	printf("学生的学号排名:"); 
	for(i=0;i<n;i++){
		printf("%s\n%s\n%d\n\n",q->name,q->num,q->score);
	}
} 
//学生总成绩和平均成绩
grade(struct Stu stu){
	int aver,sum=0;
	int i;
	struct Stu *w;
	for(i=0;i<n;i++){
		sum=sum+((w+i)->score);
	}
	aver=sum/n;
	printf("学生的总成绩和平均成绩分别为:");
	printf("%d\t%d\t",sum,aver);
}
//学生成绩分析
link(struct Stu stu){
	struct Stu *r;
	int i;
	int a=0,b=0,c=0,d=0,e=0;
	int aa,bb,cc,dd,ee;
	for(i=0;i<n;i++){
		if((r+i)->score>=90 && (r+i)->score<=100){
			a=a+1;
		}
		if((r+i)->score>=80 && (r+i)->score<=89){
			b=b+1;
		}
		if((r+i)->score>=70 && (r+i)->score<=79){
			c=c+1;
		}
		if((r+i)->score>=60 && (r+i)->score<=69){
			d=d+1;
		}
		if((r+i)->score>=0 && (r+i)->score<=59){
			e=e+1;
		}
	}
	aa=a/n;
	bb=b/n;
	cc=c/n;
	dd=d/n;
	ee=e/n;
	printf("优秀:%d人\n良好:%d\n中等:%d\n及格:%d\n不及格:%d\n\n",a,b,c,d,e);
	printf("优秀占比:%d\n良好占比:%d\n中等占比:%d\n及格占比:%d\n不及格占比:%d\n",aa,bb,cc,dd,ee);
}
  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2021-05-13 20:54
    关注

    不是有没有漏洞,是有沒有对的地方。指针问题,返回问题,函数定义问题等等。代码也没写完

    评论

报告相同问题?

悬赏问题

  • ¥15 wifi后台管理页面点了网络连接off,怎样再重启
  • ¥15 C++显示超限兔子集结
  • ¥15 sql server 2012的下载出错
  • ¥15 图像识别用户软件开发
  • ¥20 类原生rom lineageos
  • ¥15 有没有会做中专,云计算,卷子的,有偿一百块
  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv