输入形式:
193401060128 小小龙 89 78 73 79
程序代码:
/*代码末尾有成绩单,其中成绩可以任意改动,数据虚拟,不针对任何全体或个人*/
/* 这是一个简单的成绩分析程序
文件存储位置默认为:
D:\\1.txt
注意:1.成绩虚拟 不针对任何团体或个人 特此声明
2.目前只支持30名同学学生成绩统计
3.如有任何疑问或问题 请联系作者
4.感谢使用
*/
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"windows.h"
#include"time.h"
#define N 4
double fun(int x, int y, int z, int q);
void menu();
void caishu();
struct student
{
char xuehao[30];//学号
char name[30];//姓名
int a, b, c, d;//高数 英语 离散 程序
double zongce;//综测
int sum;//总分
}p[30];//调用结构体,结构体中包含三种类型
int main()
{
char h[10];//储存检索的学号和姓名
int i, j, k = 0, n;//用于控制循环
double jidian[30];//绩点的计算
FILE* fp;
struct student temp, temp1, temp2, temp3, temp4, temp5;//定义结构体 用于交换数据
if ((fp = fopen("D:\\1.txt", "r")) == NULL)//打开文件 打开方式为读取 如果为空则输出
{
printf("无法打开文件\n");
getchar();
exit(1);//结束进程
}
for (i = 0; i < 30; i++)
{
fscanf(fp, "%s%s%d%d%d%d", p[i].xuehao, p[i].name, &p[i].a, &p[i].b, &p[i].c, &p[i].d);//学生信息的读取
p[i].sum = p[i].a + p[i].b + p[i].c + p[i].d;//总分的计算
jidian[i] = fun(p[i].a, p[i].b, p[i].c, p[i].d);//绩点的计算
if (jidian[i] > 5.99 && p[i].a > 60 && p[i].b > 60 && p[i].c > 60 && p[i].d > 60)//奖学金的评定 满足条件则进行综测成绩的计算
{
p[i].zongce = (jidian[i] * 5 + 50) * 0.75 + (N * 0.25);//综测
k++;
}
else
{
p[i].zongce = 0;//不满足绩点条件的 综测成绩为0 不参与奖学金的评定
}
}
printf("欢");
Sleep(1000);
printf("迎");
Sleep(1000);
printf("使");
Sleep(1000);
printf("用");
system("cls");
while (1)
{
menu();//调用菜单选项
printf("请选择一个执行项:");
scanf("%d", &n);//功能选择 1-5
system("cls");
if (n == 1)//总成绩的输出
{
printf("\t\t\t\t*总成绩单*\n");
printf("………………………………………………………………………………………………………………\n");
printf("学号 姓名 高数 英语 离散 程序\n\n");
for (i = 0; i < 30; i++)
{
printf("%s %s %d %d %d %d\n", p[i].xuehao, p[i].name, p[i].a, p[i].b, p[i].c, p[i].d);
}
system("pause");
system("cls");
}else
if (n == 2)//学生信息的检索
{
printf("请输入学号或姓名:");//输入学号或姓名
scanf("%s", &h);
for (i = 0; i < 30; i++)
{
if (strcmp(p[i].xuehao, h) == 0 || strcmp(p[i].name, h) == 0)//字符串的比较 相同时输出学生信息
{
printf("学号 姓名 高数 英语 离散 程序 总分\n\n");
printf("%s %s %d %d %d %d %d\n", p[i].xuehao, p[i].name, p[i].a, p[i].b, p[i].c, p[i].d, p[i].sum);
}
}
system("pause");
system("cls");
}else
if (n == 3)//总成绩的排名
{
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30 - 1 - i; j++)
{
if (p[j].sum < p[j + 1].sum)
{
temp1 = p[j];
p[j] = p[j + 1];
p[j + 1] = temp1;
}
}
}//冒泡排序 30组数据的排名
printf("\t\t\t\t*总成绩排序*\n");
printf("………………………………………………………………………………………………………………\n");
printf("学号 姓名 高数 英语 离散 程序 总分 排名\n\n");
for (i = 0; i < 30; i++)
{
printf("%s %s %d %d %d %d %d %d\n", p[i].xuehao, p[i].name, p[i].a, p[i].b, p[i].c, p[i].d, p[i].sum, i + 1);
}
system("pause");
system("cls");
}else
if (n == 4)//奖学金的判定
{
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30 - i - 1; j++)
{
if (p[j].zongce < p[j + 1].zongce)
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}//冒泡排序
printf("\t*满足奖学金要求的名单*\n");
printf("………………………………………………\n");
printf("学号 姓名 排名\n\n");
for (i = 0; i < k; i++)
{
printf("%s %s %2d\n", p[i].xuehao, p[i].name, i + 1);//满足奖学金要求的前 10 名学生的信息
}
printf("………………………………………………\n");
printf("一等奖学金:\n");
printf("………………………………\n");
printf("学号 姓名\n\n");
for (i = 0; i < 1; i++)
{
printf("%s %s \n", p[i].xuehao, p[i].name);//综一成绩学生信息
}
printf("………………………………\n");
printf("二等奖学金:\n");
printf("………………………………\n");
printf("学号 姓名\n\n");
for (i = 1; i < 4; i++)
{
printf("%s %s \n", p[i].xuehao, p[i].name);//综二学生信息
}
printf("………………………………\n");
printf("三等奖学金:\n");
printf("………………………………\n");
printf("学号 姓名\n\n");
for (i = 4; i < k; i++)
{
printf("%s %s \n", p[i].xuehao, p[i].name);//综三学生信息
}
printf("………………………………\n");
system("pause");
system("cls");
}else
if (n == 5)
{
printf(" 学号 姓名 成绩\n");
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30 - i - 1; j++)
{
if (p[j].a < p[j + 1].a)
{
temp2 = p[j];
p[j] = p[j + 1];
p[j + 1] = temp2;
}
}
}
printf("高数最高分\n");
printf(" %s %s %d\n\n", p[0].xuehao,p[0].name,p[0].a);
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30 - i - 1; j++)
{
if (p[j].b < p[j + 1].b)
{
temp3 = p[j];
p[j] = p[j + 1];
p[j + 1] = temp3;
}
}
}
printf("英语最高分\n");
printf(" %s %s %d\n\n", p[0].xuehao, p[0].name, p[0].b);
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30 - i - 1; j++)
{
if (p[j].c < p[j + 1].c)
{
temp4 = p[j];
p[j] = p[j + 1];
p[j + 1] = temp4;
}
}
}
printf("离散最高分\n");
printf(" %s %s %d\n\n", p[0].xuehao, p[0].name, p[0].c);
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30 - i - 1; j++)
{
if (p[j].d < p[j + 1].d)
{
temp5 = p[j];
p[j] = p[j + 1];
p[j + 1] = temp5;
}
}
}
printf("程序最高分\n");
printf(" %s %s %d\n\n", p[0].xuehao, p[0].name, p[0].d);
system("pause");
system("cls");
}else
if (n == 6)
{
caishu();
}else
{
printf("没有该选项\n");//没有选择的功能 输出提示
system("pause");
system("cls");
}
}
fclose(fp);//关闭文件 释放内存
getchar();
return 0;
}/*主函数*/
double fun(int x, int y, int z, int v)
{
double jidian1, jidian2, jidian3, jidian4;//每门成绩的绩点
double jidian;//总绩点
if (x >= 60)
{
jidian1 = (x - 60) * 0.2 + 2;//高数成绩绩点
}
else
{
jidian1 = 0;
}
if (y >= 60)
{
jidian2 = (y - 60) * 0.2 + 2;//英语成绩绩点
}
else
{
jidian2 = 0;
}
if (z >= 60)
{
jidian3 = (z - 60) * 0.2 + 2;//离散成绩绩点
}
else
{
jidian3 = 0;
}
if (v >= 60)
{
jidian4 = (v - 60) * 0.2 + 2;//程序成绩绩点
}
else
{
jidian4 = 0;
}
jidian = (jidian1 * 5 + jidian2 * 6 + jidian3 * 4 + jidian4 * 3) / 18;//总绩点计算
return jidian;//返回主函数 返回值为总绩点
}/*绩点的计算*/
void menu()
{
printf("\t\t\t||--------SHENG YANG HONG KONG HANG TIAN DA XUE--------------||\n");
printf("\t\t\t||\t 1.显示总成绩单 ||\n");
printf("\t\t\t||\t 2.查找学生信息 ||\n");
printf("\t\t\t||\t 3.按总成绩排序 ||\n");
printf("\t\t\t||\t 4.输出奖学金信息 ||\n");
printf("\t\t\t||\t 5.输出最高分 最低分 ||\n");
printf("\t\t\t||\t 6.猜数游戏 ||\n");
printf("\t\t\t||-----------------------------------------------------------||\n\n");
}/*选择菜单*/
void caishu()//猜数游戏
{
int g, m1;
printf("输入0-10的数:");
scanf("%d",&m1);
srand((unsigned)time(NULL));
g = rand() % 10;//生成0-10的随机数
if (g == m1)//判断它们是否相同
{
printf("你猜对了\n");
}
else
{
printf("你猜错了\n");
printf("正确答案为:%d\n", g);
}
system("pause");
system("cls");
}