码迷,mamicode.com
首页 > 其他好文 > 详细

学生管理系统

时间:2016-06-01 01:36:40      阅读:506      评论:0      收藏:0      [点我收藏+]

标签:

 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
#define MAX 100
typedef int elemType;
typedef int elemInfo;
typedef struct
{
	elemType num; //学号
	elemType cls; //班级
	char* name;  //名字
	elemType score[10]; //分数
}stuInfo;

typedef struct{
	stuInfo stu[MAX];
	elemType length;  // 存储的个数
}stuType;
void DisplayMenu(){ //选择菜单
	printf("MENU\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("---------*******************************************************---------\n");
}

int  choiceItem(){  //选择菜单
	int choice ;
	do{
		DisplayMenu();
		printf("请选择一个你要执行的功能序号:");
		scanf("%d",&choice);
	}while(choice<0 || choice >10);
	return choice;
}

void Init (stuType *s){
	s->length=0;
}

void inputAInfo(stuInfo* as,stuType* s){    //通过键盘输入某位学生某次的分数
	printf("输入学号:\n");
    int j,num;
	scanf("%d",&num);
	for(j=0;j<s->length;j++){
        if(s->stu[j].num==num){
                printf("学号已存在,请重新输入学号:");
                scanf("%d",&num),j=0;
        }
	}
    as->num=num;
	printf("输入班级:\n");
	scanf("%d",&as->cls);
	as->name=(char*)malloc(30);
	printf("输入姓名:");
	scanf("%s",as->name);
	int i;
	for (i = 0; i < 10; ++i)
	{
		printf("输入该学生第 %d 次的成绩:\n",i+1);
		scanf("%d",&as->score[i]);
	}
}
int printAEqu(stuType s,int index){  // 输出一个学生的信息inidex 学生的平均分
	int i,sum=0;
	for (i = 0; i < 10; ++i)
	{
		sum+=s.stu[index].score[i];
	}
	return (sum/10);
}
void printAInfo(stuType s,int index){  // 输出一个学生的信息
	if(index!=-1)
	{
	    int i,sum=0;
	printf("%-11d%-6s%-6d",s.stu[index].num,s.stu[index].name,s.stu[index].cls);
	for (i = 0; i < 10; ++i)
	{
		printf("%-5d",s.stu[index].score[i]);
		sum+=s.stu[index].score[i];
	}
	printf("%4d\n",sum/10);
	}
	else
		printf("没有这个学生!");
}

void inputAllInfo(stuType *s ,int length){  //输入全部学生的信息
	printf("您正在加入 %d 个学生信息 \n",length);
	int i;
	for (i = 0; i < length; ++i)
	{
		if(s->length==MAX){
			printf("超出限制!\n");
			break;
		}
		inputAInfo(&s->stu[s->length],s);
		s->length++;
	}
}

void printAllInfo(stuType s){ // 输出全部学生信息
	if(s.length==0){
		printf("没有学生信息,请录入!\n");
		return ;
	}
    printf("  学号     姓名  ");
	printf("班级 ");
	int j;
	for(j=0;j<10;j++)
	{
	    printf("%dth  ",j+1);
	}
	printf("平均分");printf("\n");
	int i;
	for ( i = 0; i < s.length; ++i)
	{

		printAInfo(s,i);
	}
}

int search(stuType s){
	int num;
	printf("输入学号:\n");
	scanf("%d",&num);
	int i;
	for (i = 0; i < s.length; ++i)
	{
		if(s.stu[i].num==num)
			return i;
	}
	return -1;
}

void modify(stuType*s ,stuType stu){ //修改学生信息
	int num,scoreIndex,FuckYou=0;
	if(s->length==0)
		printf("没有学生信息!\n");
	else
	{
		printf("输入学号:");
		scanf("%d",&num);
		int i,j;
		for ( i = 0; i <= s->length; ++i)
		{
			if (stu.stu[i].num==num)
			{
				printf("输入你要修改的是第几次成绩:");
				scanf("%d",&scoreIndex);
				printf("新修改的成绩为:");
                scanf("%d",&s->stu[i].score[scoreIndex-1]);
				FuckYou=1;
			}
		}
		if(!FuckYou)
			printf("没有这个学生\n");
	}
}

void del(stuType* s,int index){   //删除学生信息
	if(s->length==0)          //判断存储学生的 stuType stu数组的长度
		printf("没有这个学生 !\n");
	else{
		if(index!=-1) // 在调用 search()函数的时候输入学号 后返回index index为 该学生的小标 该学生表示为 s->stu[index]
            {
                for(;index < s->length;index++)     // 资料 《数据结构教程》 P34 删除数据元素思想 。到从下标 index开始,后一个替代前一个元素。
                    s->stu[index]=s->stu[index+1];
                s->length--;  //  一直向前移动.到 整个数组长度减一 依次实现删除数据。
            }
	}
}
void searchCls(stuType* s){ // 按班级搜索
	int cls,i;
	printf("输入班级:\n");
	scanf("%d",&cls);
	if (!cls)
		printf("没有这个班级\n");
	else
		for (i = 0; i < s->length; ++i)
		{
			if(s->stu[i].cls==cls)
				printAInfo(*s,i);
		}
}

    { // 班级内部分数排序
	int cls,i,k,scoreIndex,passnum=0;
	int a[20];
	printf("输入班级:\n");
	stuInfo ohshit;
	scanf("%d",&cls);
	if (!cls)    //
		printf("没有这个班级\n");
	else
	{
        printf("需要哪次作业成绩排名或者输入111输出平均分排名:");
        scanf("%d",&scoreIndex);
		printf("  名字         学号    ");
		scoreIndex==111?printf("平均分\n"):printf("第%d次\n",scoreIndex);
		int j=0;
		for (i = 0; i < s->length; ++i)  //  对整个存储学生的 stu 进行遍历
		{
			if(s->stu[i].cls==cls)   //判断 学生的 班级cls 是否是要查询的班级
			{
				a[j]=i;             //如果该学生是这个班级的学生 记录下这个学生的下标保存到数组 a[]
				j++;
			}
		}
		j--;  // 遍历以后  数组 a[j] 里面存储的都是 所查询班级的学生的 s->stu[] 下标
		for(i=0;i<j;i++)   // 资料 《数据结构教程》P293 冒泡排序 . 开始
		{
			for(k=j;k>i;k--)
			{
                if((scoreIndex==111)?printAEqu(*s,a[k])> printAEqu(*s,a[k-1]):s->stu[a[k]].score[scoreIndex-1] > s->stu[a[k-1]].score[scoreIndex-1])
                    {
                        ohshit=s->stu[a[k]];
                        s->stu[a[k]]=s->stu[a[k-1]];
                        s->stu[a[k-1]]=ohshit;
                    }
            }
        }
		// 冒泡排序结束
		for(i=0;i<=j;i++){
			if(s->stu[i].score[scoreIndex-1]>=60 || printAEqu(*s,a[i])>=60)
				passnum++;
			printf("%-10s",s->stu[a[i]].name);
            printf("%-14d ",s->stu[a[i]].num);
            printf("%-5d\n",(scoreIndex==111)?printAEqu(*s,a[i]):s->stu[a[i]].score[scoreIndex-1]);
		}
		printf("及格人数为 %d,总人数为 %d\n",passnum,j+1);
	}
}

void allInSort(stuType *s)
{
	int i,j,scoreIndex,passnum=0;
    printf("需要哪次作业成绩排名或者输入111输出平均分排名:");
    scanf("%d",&scoreIndex);
	printf("  名字         学号    ");
	scoreIndex==111?printf("平均分\n"):printf("第%d次\n",scoreIndex);
	stuInfo tmp;
		for(i=0;i<s->length-1;i++)   // 资料 《数据结构教程》P293 冒泡排序 . 开始
		{
			for(j=s->length-1;j>i;j--)
			{
					if((scoreIndex==111)?printAEqu(*s,j)> printAEqu(*s,j-1):s->stu[j].score[scoreIndex-1] > s->stu[j-1].score[scoreIndex-1])
					{
                               tmp=s->stu[j];
                                s->stu[j]=s->stu[j-1];
                                s->stu[j-1]=tmp;
                    }

			}  // 冒泡排序结束
		}
		for(i=0;i<s->length;i++){
			if(s->stu[i].score[scoreIndex-1]>=60 || printAEqu(*s,i)>=60)
				passnum++;
		    printf("%-10s",s->stu[i].name);
            printf("%-14d ",s->stu[i].num);
            printf("%-5d\n",(scoreIndex==111)?printAEqu(*s,i):s->stu[i].score[scoreIndex-1]);
		    }
		printf("及格人数为:%d,总人数为:%d\n",passnum,s->length);
}

int main(){        //主函数
	stuType student;
	student.length=0;
	int choice,index;
	Init(&student);
	int ch;
	do{
		choice=choiceItem();
		switch(choice){
			case 1: printf("输入你要输入学生信息的个数:");
					scanf("%d",&index);
					inputAllInfo(&student,index);break;
			case 2: inputAllInfo(&student,1);break;
			case 3:	printAllInfo(student);break;
			case 4: Init(&student);break;
			case 5:	printAInfo(student,search(student));break;
			case 6:	modify(&student, student);break;
			case 7:	del(&student,search(student));break;
			case 8:	searchCls(&student);break;
			case 9: clsInSort(&student);break;
			case 10:allInSort(&student);break;
		}
        system("pause");  //按任意键继续运行
        }
	while(choice);
	return 0;
}

  

学生管理系统

标签:

原文地址:http://www.cnblogs.com/webers/p/4168427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!