⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 040530513.cpp

📁 学生成绩管理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "conio.h"
#include<malloc.h>

typedef struct lesson{
	char cause[11];//course
	int score;
	char teacher[11];
    struct lesson *next;
}lesson1;

typedef struct student{
	char ID[20];
	char name[20];
	int  age;
	char sex;   //m表示男生 ,f表示女生
	int num;   //记录课程数目
		int flag; 
    struct lesson *next;
}list;

typedef struct  hash    // 定义哈希表          
{                               
	list elem[11];
	int length;
}hash;

typedef struct 
{ 
	int key;
	int age;
}sqlist;

typedef struct{
  int age;       //年龄
  char key[17];  //班级里的学号
  int mark;      //学生的平均成绩
  int num;       //几门课
}info;
typedef struct{//构造存储学生学号信息的结构体
	info r[11];//学号
	int  length;//学生个数
}st;
int change(char ID[])  //提取学号后三位
{
	int I=0,t1=0,t2=0,t3=0;
	t1=ID[6]-48;
	t2=ID[7]-48;
	t3=ID[8]-48;	
	I=100*t1+10*t2+t3;
	return I;
}

int adress(hash *stu,char *ID)//生成地址
{
	int i,j=0,I;
	I=change(ID);
	i=I%11;
	if(stu->elem[i].age!=-1)
	{
		j=i+1;
		if(j>11)
		   j=j-11;
		for(;stu->elem[j].age!=-1;)
		{
			j++;
		    if(j>=11)
			   j=j-11;
		}
	}
	
	if(j!=0)
	    return j;
	else
		return i;
}

hash *inithash(hash *stu)
{
	int n,i,j,q;
    lesson1 *s,*t;
	char m[17];    ///学号
	printf("输入学生数目: ");
	scanf("%d",&n);
	stu->length=11;    //
		printf("\n\n");
	for(i=0;i<11;i++)   ///
		stu->elem[i].age=-1;
	for(i=0;i<n;i++)
	{
	    printf("   学号\t");
		printf("   姓名\t");
		printf("   年龄\t");
		printf("   性别\t\n");
		scanf("%s",m);
		q=adress(stu,m);
		strcpy(stu->elem[q].ID,m);
		scanf("%s",stu->elem[q].name);		
		scanf("%d",&stu->elem[q].age);		
		scanf(" %c",&stu->elem[q].sex);  	 
	/*	if(stu->elem[q].sex!='m'&&stu->elem[q].sex!='f') ////判断输入性别合法是否
		{
			printf("输入有误,请重新输入:");
			scanf("%c",&x);
			stu->elem[q].sex=x; 
			printf("\n");
		}*/
        printf("请输入课程数目: ");	 
		    scanf("%d",&stu->elem[q].num);
			printf("\n");
		printf("请输入该同学的课程信息:\n");
		printf("课程\t");
	    printf("分数\t");
		printf("教师\n");
		stu->elem[q].next=(lesson1*)malloc(sizeof(lesson1));
		s=stu->elem[q].next;
		for(j=0;j<stu->elem[q].num;j++)
		{	
		     
			 scanf("%s %d %s",s->cause,&s->score,s->teacher); 
			 s->next=(lesson1*)malloc(sizeof(lesson1));
			 t=s;
			 s=s->next;
		}
		free(s);
		t->next=NULL;
     	printf("\n");
	}
	return stu;
}

// 输出全部信息
void print(hash *stu)
{
	int i;
	//int z;  //看是否有信息
    lesson1 *s;
	printf("\n\n");
	printf("   学号 \t姓名  \t年龄  \t性别 \t");
	printf(" 课程  \t  分数 \t 教师\n");
	printf("\n\n");
	for(i=0;i<stu->length;i++)
	{	
		if(stu->elem[i].age!=-1)
		{	 
		 printf(" %s\t",stu->elem[i].ID);		
		 printf("%s\t",stu->elem[i].name);		
		 printf(" %d\t",stu->elem[i].age);	   
		 printf(" %c\t",stu->elem[i].sex);  
		 s=stu->elem[i].next;
         while(s)
		 {
			 printf("%-6s",s->cause);		
		     printf("\t   %-d\t",s->score);		
		     printf(" %s\n",s->teacher);	 
		     s=s->next;
			 printf("\n");
             printf("\t\t\t\t\t");
			 
		 }
		 printf("\n");
		}
	}
}

//判断输入学号是否合法
int judge1(char *num){  
	int i;
	for(i=0;i<=8;i++)
		if(num[i]=='#')	
			return 0;//输入不合法
	return 1;
}
//按学号查找
void xuehao(hash*stu)
{
	char id[9];
	int i;
    lesson1 *s;
    printf("\n");
	printf("请输入要查找的学生的学号: ");
	scanf("%s",id);
	printf("\n");
	if(judge1(id)==0)
		printf("学号输入有误");
	for(i=0;i<stu->length;i++)
	if(stu->elem[i].age!=-1)
	{
	   if(strcmp(id,stu->elem[i].ID)==0)  ///chazhao dao xuehao 
	   {
		 printf("   学号 \t姓名  \t年龄  \t性别 \t");
	     printf(" 课程  \t  分数 \t 教师\n\n");
		 printf(" %s\t",stu->elem[i].ID);		
		 printf("%s\t",stu->elem[i].name);		
		 printf(" %d\t",stu->elem[i].age);	   
		 printf(" %c\t",stu->elem[i].sex);  
		 s=stu->elem[i].next;
         while(s)
		 {
			 printf("%-6s",s->cause);		
		     printf("\t   %-d\t",s->score);		
		     printf(" %s\n",s->teacher);	 
		     s=s->next;
			 printf("\n");
             printf("\t\t\t\t\t");
			 
		 }   	
	     printf("\n");
	     break;
	   } 
	}
	if(i==stu->length)
	{
        system("cls");
		printf("没有查到该学号学生的信息\n");
	}
}

//按姓名查找
void xingming(hash*stu)
{
	int i;
	char name[11];
    lesson1 *s;
	printf("\n");
	printf("请输入要查找的学生的姓名:");
	scanf("%s",name);
	printf("\n");
	for(i=0;i<stu->length;i++)
	if(stu->elem[i].age!=-1)
	{
	   if(strcmp(name,stu->elem[i].name)==0)  ///chazhao dao xuehao 
	   {
		 printf("   学号 \t姓名  \t年龄  \t性别 \t");
	     printf(" 课程  \t  分数 \t 教师\n\n");
		 printf(" %s\t",stu->elem[i].ID);		
		 printf("%s\t",stu->elem[i].name);		
		 printf(" %d\t",stu->elem[i].age);	   
		 printf(" %c\t",stu->elem[i].sex);  
		 s=stu->elem[i].next;
         while(s)
		 {
			 printf("%-6s",s->cause);		
		     printf("\t   %-d\t",s->score);		
		     printf(" %s\n",s->teacher);	 
		     s=s->next;
			 printf("\n");
             printf("\t\t\t\t\t");			 
		 }   	
		 break;
	   } 
	}
	printf("\n");
	if(i==stu->length)
		printf("没有查到该学生的信息\n");
   
}
int judge2(char sex)  //判断输入性别是否合法
{	if(sex=='m'||sex=='f')
	    return 1;
	else 
		return 0;
}
void nannv(hash*stu)
{

    int i,j=0;
	char sex;
	lesson1 *s;
	printf("\n");
	printf("请输入要查找的学生的性别:  ");	
	scanf("%s",&sex);	
	printf("\n");
	if(judge2(sex)==0)
		printf("输入错误\n");	
	else 
	{
	
		printf("   学号 \t姓名  \t年龄  \t性别 \t");
	    printf(" 课程  \t  分数 \t 教师\n");
	  for(i=0;i<stu->length;i++)
      if(stu->elem[i].age!=-1)
	  {		  
		if(stu->elem[i].sex==sex)
		{	
			printf("\n");
			printf(" %s\t",stu->elem[i].ID);		
		    printf("%s\t",stu->elem[i].name);		
		    printf(" %d\t",stu->elem[i].age);	   
		    printf(" %c\t",stu->elem[i].sex);  
		    s=stu->elem[i].next;
			j++;		
			s=stu->elem[i].next;         
			while(s)
			{			 
			    printf("%-6s",s->cause);		
		        printf("\t   %-d\t",s->score);		
		        printf(" %s\n",s->teacher);	 
		        s=s->next;
			    printf("\n");
                printf("\t\t\t\t\t");	 
			}		
		}
	  }		
	}  
}


void nanji(hash*stu)   /// 某年级的全部课程
{
	int i,l,j=0,m=0; 
	char *c[17];     //一个年级所开课程不超过17门
	char s[4];         //年级的代码
	lesson1 *p;
	for(i=0;i<10;i++)
	{
		c[i]=(char *)malloc(17*sizeof(char));
		c[i]="*******";
	}
	printf("\n");
	printf("输入所要查找的年级: ");
	    scanf("%s",s);
	for(i=0;i<stu->length;i++)
	if(stu->elem[i].age!=-1)//	
	{
		if(s[3]==stu->elem[i].ID[3])
		{
			p=stu->elem[i].next;
	     	while(p)
			{			
				c[j]=p->cause;		
				p=p->next;
				j++;
			}
		}
	}
	printf("\n\n");
	printf("大学%d年级的全部课程为:",7-s[3]+48);
	for(i=0;i<10&&c[i]!="*******";i++)
	{
		for(j=0,l=0;j<i;j++)
			if(strcmp(c[i],c[j])!=0)
				l++;
		if(l==i)
			printf("\t%s",c[i]);
	}
	printf("\n\n\n");
}

// 听某教师讲授课的全部学生
void teacher(hash*stu)  
{
    char m[7];
	int i,j=0;  ///j标记是否查到
	lesson1 *s;
	printf("\n");
    printf("请输入教师的姓名: ");
	scanf("%s",m);
	printf("\n");
    printf("该教师的学生: ");
	for(i=0;i<stu->length;i++)
	if(stu->elem[i].age!=-1)
	{
	    s=stu->elem[i].next;
		while(s)
		{
		if(strcmp(s->teacher,m)==0)
		{
			printf("%s\t",stu->elem[i].name);
			j++;
			break;
		}
		    s=s->next;
		}
	}
	printf("\n\n\n");
	if(j==0)
		printf("没有查到该教师的学生!\n");
}
void kecheng(hash*stu)  ///选修某门课程的全部学生
{
	char g[17];	
	int i,j=0;
	lesson1 *s;
	printf("\n");
    printf("输入所要查找的课程:");
	scanf("%s",g);
	printf("\n");
	printf("学习有该课程的学生: ");
	for(i=0;i<stu->length-1;i++)
	if(stu->elem[i].age!=-1)
	{
	    s=stu->elem[i].next;
		while(s)
		{
		if(strcmp(s->cause,g)==0)
		{
			printf("%s\t",stu->elem[i].name);
			j++;
			break;
		}		
		s=s->next;
		}
	}
	printf("\n\n");
	if(j==0)
		printf("没有查到学习该课程的学生!\n\n");
}	


int chaxun(hash*stu)
{
	int i;
	while(1)
	{
        printf("\n\n\n");
		printf(	"1:按学号查找\n\n2:按姓名顺序查找\n\n3:按男/女生查找\n\n4:某年级的全部课程\n\n5:听某教师讲授课的全部学生\n\n6:选修某门课程的全部学生\n\n7:返回\n\n8:退出系统\n\n");
	    printf("请选择操作: ");
		scanf("%d",&i);
		printf("\n");
    	switch(i)
		{	
		case 1: 	
			system("cls");
			xuehao(stu);	
			break;
	
		case 2:
			system("cls");
			xingming(stu);	
		    break;
		case 3: 
			system("cls");
			nannv(stu);	
		    break;  
		case 4: 
			system("cls");
			nanji(stu);	
		    break;
		case 5: 
			system("cls");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -