对学生成绩管理系统的介绍

  程序新手小狼报道。

  今天给大家带来一篇学生成绩管理系统,也希望大家能够多多指教(注意:this is for 小白!!)

  先看程序注释,注释这玩意有好有坏,要看你怎么用,用少用多,一个适当的位置如果加上了一段合适的注释,简直就是在你越塔杀人时候队友突然给你追个buff。怎么来看那人你能不能强杀,我给大家介绍下...咳咳,说程序,跟游戏没关系。注意开头是一定要有对这篇程序的介绍,就跟电视里反角出来时都要先自我介绍一下,“哈哈!小羊们,本大王来了”(。。。),对这篇程序的介绍,重要的事说三遍(嗯?我好像丢了什么东西...)。

  变量声明也是有学问的,不能随随便就声明一个,(比如刚开始写程序时,用n,a,b,q,都用吐了,也不是说不能用,而是要根据那个变量具体的作用,比如在一个小循环中,我就可以用i来申明一下,简单高效,而遇到一个具体的,比如学生学号用studentID申明,很直接的看出,哦,这就是学生学号)

  在程序中我加入了账号密码系统,纯粹为了装逼,没其他屁用,但要注意字符串比较不能用==号,正确做法请看程序。

  其中出现几次system("CLS");,这句代码是用来清屏的,是为了使用户界面更为清洁。

  其实感觉我的这篇程序还是有点乱的,一个程序的代码整洁度很是反应代码员的能力的。

  程序基本的一些知识我也不会说什么,在这里推荐一本C语言入门学习的书《C语言程序设计(第3版)》,是苏小红等大佬编写的,推荐原因是书上基础知识很全,例题也比较多。给大家分享下我初学C的经验,主要是看书上的知识点,看烦了就打开电脑敲上几行。相信我,敲代码要比你光看爽多了,而且你一段代码最多敲上三遍就能记差不多了(你没听错,是差不多,千万别强求自己记住,因为没用的。有句话说的好,我们不生产代码,我们只是代码的搬运工)。其实敲代码时候还是重视感觉,你没有必要记住所有东西,只要敲多了有感觉,你的手指自动就将接下来的代码写出来了(这里就有必要鄙视一下一指禅的了,就你那一个一个找到再摁下去的鳖速,能养出来什么手感算我输)。

   至此,我的第一篇博客结束了,感觉这段程序都是比较基础的东西,挺适合新手练习的

   在此感谢我的一个王学长(偷偷告诉大家,小狼也姓王哦),在平时的学习中给了我很多指导帮助

  以后呢,小狼也希望多学些新的知识,能给大家带来一些真正的干货

   欢迎大家的批评指点>_<

  皮皮虾,我们走,得儿,驾...

/*****
*文件名称:学生信息管理系统
*内容摘要:对于学生成绩信息和联系方式信息管理
*其他说明:无
*当前版本:2.0
*版本信息:1.在上一版本基础上进一步稳固
	   2.实现在外存文件中存储数据
	   3.将名称由学生成绩管理系统改为学生信息管理系统
*作者:小狼
*完成日期:2017.4.25
*****/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define N 40

typedef struct date
{
	int year;
	int month;
	int day;
}DATE;

typedef struct student
{
	long studentID;
	char studentName[10];
	char studentSex[10];
	DATE birthday;
	int score[10];
}STUDENT;

void InputScore(STUDENT stu[],int n,int m);
void CourtScore(STUDENT stu[],int n,int m);
void StudentScore(STUDENT stu[],int sum2[],float aver[],int n);
void DescendingSort(STUDENT stu[],int sum2[],int n);
void LookSort(STUDENT stu[],int sum2[],int n);
void CheckSort(STUDENT stu[],int n,int m);
void PrintScore(STUDENT stu[],int sum2[],float aver[],int n,int m);

int reat(int n);
int gcd(int x,int y);

int main()
{
	char p[20],q[20],z[20],s[20];
	char ch1,ch2;
	int n,m;
	STUDENT stu[N];
	float aver[N];
	int sum2[N];
	int i,j;
	int k;
	int c,d;
	float e,f;
	float x,y,a;
	int magic,guess,counter=0,ret;
	char reply;

	printf("申请账号密码。。。。。。\n");
	printf("注册账号\n");
	gets(p);
	printf("注册密码\n");
	gets(q);
	system("CLS");//实施清屏,并需要添加上方stdlib.h
	printf("现在确认你的身份\n");
	printf("请输入账号\n");
	gets(z);
	printf("请输入密码\n");
	gets(s);
	system("CLS");//实施清屏,并需要添加上方stdlib.h
	if(strcmp(p,z) == 0&&strcmp(q,s) == 0)
		printf("欢迎登陆理工大学官网\n");
	else
	{
		printf("身份错误,即将对你进行逮捕\n");
		exit(0);
	}
	printf("A.教务系统\n");
	printf("B.实用工具\n");
	printf("C.娱乐小游戏\n");
	printf("Z.退出\n");
	printf("请输入你的选择\n");
	scanf(" %c",&ch1);//注意%前有空格,原因自己想
	system("CLS");//实施清屏,并需要添加上方stdlib.h
	switch(ch1){
	case'A':
	case'a':
		printf("首先进行学生信息录入\n");
		printf("有多少个学生?");
		scanf("%d",&n);
		printf("有多少门课程?");
		scanf("%d",&m);
		InputScore(stu,n,m);
		for(i = 0; i < n; i ++)//计算每个学生的总分和平均分
		{
			sum2[i] = 0;
			for(j = 0; j < m; j ++)
			{
				sum2[i] = sum2[i] + stu[i].score[j];
			}
			aver[i] = (float)sum2[i] / m;
		}
		printf("1.计算每门课程的总分和平均分\n");
		printf("2.计算每个学生的总分和平均分\n");
		printf("3.学生成绩表\n");
		printf("4.按学号查询学生成绩及排名\n");
		printf("5.每门课的每类人数百分比\n");
		printf("6.学生信息表\n");
		printf("0.退出\n");
		printf("请输入你的选择\n");
		scanf(" %c",&ch2);
		switch(ch2){
		case'1':
			CourtScore(stu,n,m);
			break;
		case'2':
			StudentScore(stu,sum2,aver,n);
			break;
		case'3':
			DescendingSort(stu,sum2,n);
			break;
		case'4':
			LookSort(stu,sum2,n);
			break;
		case'5':
			CheckSort(stu,n,m);
			break;
		case'6':
			PrintScore(stu,sum2,aver,n,m);
			break;
		case'0':
			break;
		default:
			printf("输入错误!");
		}
		printf("感谢您的使用!");
		break;
	case'B':
	case'b':
		printf("1.求N的阶乘\n");
		printf("2.求最大公约数\n");
		printf("0.退出\n");
		printf("请输入你的选择\n");
		scanf(" %c",&ch2);
		system("CLS");//实施清屏,并需要添加上方stdlib.h
		switch(ch2){
		case'1':
			printf("请输入值:\n");
			scanf("%d",&k);
			printf("%d != %d\n",k,reat(k));
			break;
		case'2':
			printf("输入两个任意整数");
			scanf("%d%d",&c,&d);
			printf("两个数的最大公约数为%d",gcd(c,d));
			break;
		case'0':
			break;
		default:
			printf("输入错误!");
		}
		printf("感谢您的使用!");
		break;
	case'C':
	case'c':
		printf("1.编写爱心\n");
		printf("2.猜数字游戏\n");
		printf("0.退出\n");
		printf("请输入你的选择\n");
		scanf(" %c",&ch2);
		system("CLS");//实施清屏,并需要添加上方stdlib.h
		switch(ch2){
		case'1':
			printf("请输入心的高度");
			scanf("%f",&e);
			printf("请输入心的宽度");
			scanf("%f",&f);
			for(y = e; y > -e; y -= e/20)
			{
				for(x = -f; x < f; x += f/40)
				{
					a = x*x + y*y - 1;
					putchar(a*a*a - x*x*y*y*y <= 0.0 ? '*' : ' ');	
				}
				putchar('\n');
			} 
			break;
		case'2':
			srand(time(NULL));
			do{ 
				counter = 0; 
				magic = rand()%100 + 1;
				do{
					printf("请猜一个任意数(1-100):");
					ret = scanf("%d",&guess);
					while(ret != 1)
					{
						while(getchar() != '\n');//清除输入缓冲区的非法字符 
						printf("请重新猜一个数值");
						ret = scanf("%d",&guess);
					}
					counter ++;
					if(guess > magic)
					printf("错了,太大了!");
					else if(guess < magic)
						printf("错了,太小了!"); 
					else
						printf("正确!");
				}while(guess != magic && counter < 10);
			printf("counter =% d\n",counter); 
			do{
				printf("你想要继续吗?(Y/N or y/n)");
				scanf(" %c",&reply);
			}while(reply != 'y' && reply != 'n' && reply != 'Y' && reply != 'N');
			}while(reply == 'Y'||reply == 'y');
			break;
		case'0':
			break;
		default:
			printf("输入错误!");
		}
		printf("感谢您的使用!");
		break;
	case'Z':
	case'z':
		printf("感谢您的使用!");
		break;
	default:
			printf("输入错误!");
	}
	return 0;
}

/*输入n个学生学号,姓名,性别,出生日期,以及m个课程的成绩*/
void InputScore(STUDENT stu[],int n,int m)
{
	int i,j;
		printf("请输入学生学号,姓名,性别(男/女),出生日期(1999/01/08),以及m个课程的成绩\n");
	for(i = 0; i < n; i ++)
	{
		printf("Input record %d:\n",i+1);
		scanf("%ld",&stu[i].studentID);
		scanf("%s",stu[i].studentName);
		scanf("%s",stu[i].studentSex);
		scanf("%d",&stu[i].birthday.year);
		scanf("%d",&stu[i].birthday.month);
		scanf("%d",&stu[i].birthday.day);
		for(j = 0; j < m; j ++)
		{
		scanf("%d",&stu[i].score[j]);
		}
	}
}

/*计算各门课程总分和平均分*/
void CourtScore(STUDENT stu[],int n,int m)
{
	int i,j,sum1[N];
	float aver1[N];
	for(i = 0; i < m; i ++)
	{
		sum1[i] = 0;
		for(j = 0; j < n; j ++)
		{
			sum1[i] = sum1[i] + stu[j].score[i];	
		}
		aver1[i] = (float)sum1[i] / n;
		printf("课程%d的总分为%d,平均分为%.2f\n",i + 1,sum1[i],aver1[i]);
	}
}

/*计算各个学生的总分和平均分*/
void StudentScore(STUDENT stu[],int sum2[],float aver[],int n)
{
	int i;
	printf("学号\t姓名\t总分\t平均分\n");
	for(i = 0;i < n; i ++)
	{
		printf("%d\t%s\t%d\t%.2f\n",stu[i].studentID,stu[i].studentName,sum2[i],aver[i]);
	}
}

/*函数功能:选择法实现数组降序*/
void DescendingSort(STUDENT stu[],int sum2[],int n)
{
	int i,j,k,temp;
	STUDENT stu2;
	for(i = 0; i < n - 1; i ++)
	{
		k = i;
		for(j = i + 1; j < n; j ++)
		{
			if(sum2[j] > sum2[k])
				k = j;
		}
		if(k != i) 
		{
			stu2 = stu[k];
			stu[k] = stu[i];
			stu[i] = stu2;
			temp = sum2[k];
			sum2[k] = sum2[i];
			sum2[i] = temp;
		}
	}
	printf("名次,学号,姓名,总分\n");
	for(i = 0; i < n; i ++)
	{
		printf("第%d名:%10ld%8s",i+1,stu[i].studentID,stu[i].studentName);
		printf("%d\n",sum2[i]);
	}
}

/*按学号查询学生成绩及排名*/
void LookSort(STUDENT stu[],int sum2[],int n)
{
	int i,a,xiu = 1;
	printf("请输入学生学号:");
	scanf("%d",&a);
	for(i = 0; i < n; i ++)
	{
		if(stu[i].studentID == a)
		{
			printf("学号:%10ld姓名:%8s",stu[i].studentID,stu[i].studentName);
			printf("总分:%d",sum2[i]);
			if(sum2[i] < sum2[i])
				xiu ++;
		}
	}
	printf("排名:%d",xiu);
}

/*每门课的每类人数百分比*/
void CheckSort(STUDENT stu[],int n,int m)
{
	int i,j;
	float a,b,c,d,e;
	printf("课程\t优秀\t良好\t中等\t及格\t不及格\n");
	for(i = 0; i < m; i ++)
	{
		printf("课程%d:",i + 1);
		a = 0;
		b = 0;
		c = 0;
		d = 0;
		e = 0;
		j = 0;
		for(j = 0; j < n; j ++)
		{
			if(stu[j].score[i] >= 90&&stu[j].score[i] <= 100)
				a ++;
			else if(stu[j].score[i] >= 80&&stu[j].score[i] < 90)
				b ++;
			else if(stu[j].score[i] >= 70&&stu[j].score[i] < 80)
				c ++;
			else if(stu[j].score[i] >= 60&&stu[j].score[i] < 70)
				d ++;
			else
				e ++;
		}
		printf("\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\n",a,b,c,d,e);
		printf("\t%.2f%%\t%.2f%%\t%.2f%%\t%.2f%%\t%.2f%%",a/n*100,b/n*100,c/n*100,d/n*100,e/n*100);
		printf("\n");
	}
}

/*输出n个学生的学号,姓名,性别,出生日期,以及m门课程成绩*/
void PrintScore(STUDENT stu[],int sum2[],float aver[],int n,int m)
{
	int i,j;
	printf("Results:\n");
	printf("学生学号,姓名,性别,出生日期,%d个课程的成绩,总分,平均分\n",m);
	for(i = 0; i < n; i ++)
	{
		printf("%10ld%8s%3s%6d/%02d/%02d",stu[i].studentID,
										  stu[i].studentName,
										  stu[i].studentSex,
										  stu[i].birthday.year,
										  stu[i].birthday.month,
										  stu[i].birthday.day);
		for(j = 0; j < m; j ++)
		{
			printf("%4d",stu[i].score[j]);
		}
		printf("	%d",sum2[i]);
		printf("%6.2f\n",aver[i]);
	}
}
/*计算阶乘*/
int reat(int n)
{
	int i,result = 1;
    for(i = 1; i <= n; i ++)
    {
		result = result * i;
    }
    return result;
}
/*计算最大公约数*/
int gcd(int x,int y)
{
	return y == 0 ? x : gcd(y,x%y);
}

  

  

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值