程序新手小狼报道。
今天给大家带来一篇学生成绩管理系统,也希望大家能够多多指教(注意: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);
}