用C语言做一个学生成绩统计系统,求帮忙(源代码。。) 10
要求进入需要密码验证模块,限3次进入后界面显示6个菜单项:1学生成绩录入(限人数50)2显示学生成绩3统计总分平均分4最高分和最低分5统计各分数段人数6退出求帮助,谢谢啦...
要求进入需要密码验证模块,限3次
进入后界面显示6个菜单项:
1学生成绩录入(限人数50)
2显示学生成绩
3 统计总分平均分
4 最高分和最低分
5 统计各分数段人数
6退出
求帮助,谢谢啦,老师留的作业,不会额。。。着急交!!! 展开
进入后界面显示6个菜单项:
1学生成绩录入(限人数50)
2显示学生成绩
3 统计总分平均分
4 最高分和最低分
5 统计各分数段人数
6退出
求帮助,谢谢啦,老师留的作业,不会额。。。着急交!!! 展开
4个回答
展开全部
/*
2013年11月13日
学生成绩信息统计,比较程序
*/
# include <stdio.h>
# include <malloc.h>
# include <string.h>
# include <stdlib.h>
struct student //定义一个结构体,两个成员name,score(当然自己也可以加性别啊,家庭住址等等,程序就相对这个复杂一点了)
{
char name[50];
float score;
};
void input (struct student * p, int a); //这些都是函数声明
void output (struct student * p, int a);
void avg (struct student * p, int a);
void num (struct student * p, int a);
void hightandlow (struct student * p, int a);
int main(void)
{
int a, b, d = 0, e = 3;
char m[15], password[15] = {"1234"}, c; //定义密码
struct student * std = (struct student *)malloc(100*sizeof(struct student)); //定义动态结构体数组(结合以前自学知识)
printf("请输入密码:");
while (e) //这是一个密码验证程序,我也是现学现用的,e不是0,所以会一直循环
{
gets_s(m,15); //gets_s是一个字符串输入函数,除非出入回车,要不然它会一直接收输入的任何字符(数字也是)
if(strcmp(password,m) == 0) //strcmp是字符串比较函数,比较相等就会返回0,大则正数,小则负数
{
printf("密码正确!!!\n");
break; //密码输入正确了就会跳出循环了,继续下面的语句
}
else
{
printf("你还有%d次机会:", --e); //如果密码不对,就会减少循环一次,如果3次都输入错了,那么就会停止循环了
}
}
if (e == 0) //然后再来判断上面循环之行玩了之后是不是密码错误次数过多而结束的,如果是,那么退出程序
exit(1);
printf("\t\t\t1.学生成绩录入\n\t\t\t2.显示学生成绩\n\t\t\t3.统计总分平均分\n\t\t\t4.最高分最低分\n\t\t\t5.统计各分数段人数\n\t\t\t6.退出\n");
do
{
printf("请输入序号:"); //要求输入序列号
scanf_s("%d",&a);
while (getchar() != '\n'); //这个是接收空字符的循环,如果在输入序列号的时候还输入了别的字符,那就会吸收第一个以后的所有字符,直到为回车
switch (a) //这个时候用switch就很方便了,因为大多都是自定义函数,看起来程序也清晰
{
case 1:
printf("请输入学生人数");
scanf_s("%d", &b);
input(std,b);
break;
case 2:
output(std,b);
break;
case 3:
avg(std,b);
break;
case 4:
hightandlow(std,b);
break;
case 5:
num(std,b);
break;
case 6:
exit(1);
}
printf("是否继续操作(Y/N):");
scanf_s(" %c", &c,1);
}while (c == 'y'|| c =='Y'); //每选择一次就让用户输入是否继续;
return 0;
}
void input (struct student * p, int a) //自定义输入学生信息函数
{
if (NULL == p) //内存分配失败退出程序
{
printf("内存分配失败!");
exit(-1);
}
printf("请输入学生姓名,成绩(以空格隔开):\n");
for (int i = 0; i < a; i++) //循环赋值给结构体数组
{
scanf_s("%s %f",&p[i].name,50, &p[i].score,10);
};
return;
}
void output (struct student * p, int a) //学生信息输出函数
{
if (NULL == p)
{
printf("错误:请先输入学生信息!");
return;
}
for (int i = 0; i < a; i++) //循环输出结构体数组内存
{
printf("姓名:%s,成绩:%f\n", p[i].name, p[i].score);
}
return;
}
void avg(struct student * p, int a) //求平均值函数
{
float b = 0;
if (NULL == p)
{
printf("错误:请先输入学生信息!");
exit(-1);
}
for (int i = 0; i < a; i++) //让b变量统计总分
{
b += p[i].score;
}
printf("总分:%f \t 平均分:%f\n", b, b/a); //输出总分,平均分(总分除以人数就是平均分)
return;
}
void hightandlow(struct student * p, int a) //最高分,最低分函数(比较结构体数组中最大数和最小数)
{
char s[50];
float n;
if (NULL == p)
{
printf("错误:请先输入学生信息!");
exit(-1);
}
for (int i = 0; i < a - 1; i++) //我用了冒泡排序,其实根本不用这么复杂(一层循环就可以比较出来),我也在学C 所以我想多练练复杂的东西
{
for (int b =i + 1; b < a; b++)
{
if(p[i].score < p[b].score)
{
strcpy_s(s,p[i].name); //换值的时候,字符串不能同数字一样直接换,要用到strcpy拷贝函数
strcpy_s(p[i].name,p[b].name);
strcpy_s(p[b].name,s);
n = p[i].score;
p[i].score = p[b].score;
p[b].score = n;
}
}
}
printf("最高成绩:%f \t 最低成绩:%f\n", p[0].score, p[a-1].score); //输出最高和最低分数
return;
}
void num(struct student * p, int a) //分数段是最简单的了
{
int sum1 = 0,sum9 = 0,sum8 = 0,sum7 = 0,sum6 = 0,sum = 0; //变量定义的有点多。。。。
for (int i = 0; i < a; i++)
{
switch((int)p[i].score/10) //把分数除以十在转换成整形那么就把尾数去了,就可以很简单的判断分数段了
{
case 10:
sum1++;
break;
case 9:
sum9++;
break;
case 8:
sum8++;
break;
case 7:
sum7++;
break;
case 6:
sum6++;
break;
default:
sum++;
break;
}
}
printf("100分数段有%d人\n90分数段有%d人\n80分数段%d人\n70分数段有%d人\n60分数段有%d人\n不及格%d人\n",sum1, sum9, sum8, sum7, sum6, sum);
return;
}
/*我已经调试好了,昨天看到你的问题要下班了。。。 密码1234 你去试试吧!自己把它格式整理一下,百度这个把格式弄乱了,写程序一定要规范,清晰;
我也在自学,快一个月了,C语言不难,只要你愿意动脑筋,很简单的东西;我们都不笨,
只要你自己愿意学就很简单,老实说,你还是好好学点东西吧,要不走出社会真的好苦,我就是典型的在学校玩,现在知道没知识就跟SB一样了,我不愿意过苦日子,让人看不起,所以我想好好学一门技术,我最感兴趣的也就是编程,努力学习吧!*/
展开全部
可以给你。需要点时间。现在在上课。
#include <stdio.h>
void main()
{
int Password =0,i=0,sum=0;
clrscr();
printf("\n===请输入密码!====\n");
while(Password != 1234)
{
if(i>3)
{
printf(" 密码错误!\n ");
return;
}
i++;
printf(" 请输入密码!\n");
}
//以上为三次密码部分,密码默认1234。
int k=0,b=0;
int stu[50];
loop:
printf("1. 学生成绩录入(限人数50)\n");
printf("2. 显示学生成绩\n");
printf("3. 统计总分平均分\n");
printf("4. 最高分和最低分\n");
printf("5. 统计各分数段人数\n");
printf("6. 退出\n");
abc:
scanf("%d",&k);
switch(k)
{
case 1:
printf("请输入50个学生成绩:\n");
for(i=0;i<50;i++)
{
scanf("%d",&stu[i]);
b=i;
}
printf("请选择下一个选项:\n");
goto abc;
case 2:
if(b == 50)
{
printf(" 显示学生成绩:\n");
for(i=0;i<50;i++)
printf(" %d ",stu[i]);
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 3:
if(b == 50)
{
printf(" 显示学生总分:\n");
for(i=0;i<50;i++)
sum += stu[i];
printf(" %d ",sum);
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 4:
if(b == 50)
{
printf(" 显示学生最大分,最小分:\n");
min = stu[0];
max = stu[49];
for(i=0;i<50;i++)
if(min > stu[i])
min = stu[i];
for(i=0;i<50;i++)
if(max < stu[i])
max = stu[i];
printf(" %d %d ",max ,min);
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 5:
if(b == 50)
{
printf(" 统计各分数段人数:\n");
// ************************************
// 哥们,这里你自己来写好吗?我给点提示,把及格,不及格写出来。细分分数段,你自己来吧。
int x=0,y=0;
for(i=0;i<50;i++)
if (stu[i]>=60)
x++;
else
y++;
printf(" 及格人数 %d 人,不及格人数 %d 人\n",x,y);
// ***********************************
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 6:
break;
default:
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
//switch语句结束。
getch();
}
亲,刚写好了。我没调试。这个仅供参考。自己调试,有错就找找。
#include <stdio.h>
void main()
{
int Password =0,i=0,sum=0;
clrscr();
printf("\n===请输入密码!====\n");
while(Password != 1234)
{
if(i>3)
{
printf(" 密码错误!\n ");
return;
}
i++;
printf(" 请输入密码!\n");
}
//以上为三次密码部分,密码默认1234。
int k=0,b=0;
int stu[50];
loop:
printf("1. 学生成绩录入(限人数50)\n");
printf("2. 显示学生成绩\n");
printf("3. 统计总分平均分\n");
printf("4. 最高分和最低分\n");
printf("5. 统计各分数段人数\n");
printf("6. 退出\n");
abc:
scanf("%d",&k);
switch(k)
{
case 1:
printf("请输入50个学生成绩:\n");
for(i=0;i<50;i++)
{
scanf("%d",&stu[i]);
b=i;
}
printf("请选择下一个选项:\n");
goto abc;
case 2:
if(b == 50)
{
printf(" 显示学生成绩:\n");
for(i=0;i<50;i++)
printf(" %d ",stu[i]);
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 3:
if(b == 50)
{
printf(" 显示学生总分:\n");
for(i=0;i<50;i++)
sum += stu[i];
printf(" %d ",sum);
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 4:
if(b == 50)
{
printf(" 显示学生最大分,最小分:\n");
min = stu[0];
max = stu[49];
for(i=0;i<50;i++)
if(min > stu[i])
min = stu[i];
for(i=0;i<50;i++)
if(max < stu[i])
max = stu[i];
printf(" %d %d ",max ,min);
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 5:
if(b == 50)
{
printf(" 统计各分数段人数:\n");
// ************************************
// 哥们,这里你自己来写好吗?我给点提示,把及格,不及格写出来。细分分数段,你自己来吧。
int x=0,y=0;
for(i=0;i<50;i++)
if (stu[i]>=60)
x++;
else
y++;
printf(" 及格人数 %d 人,不及格人数 %d 人\n",x,y);
// ***********************************
printf("请选择下一个选项:\n");
goto abc;
}
else
{
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
case 6:
break;
default:
clrscr();
printf("========================\n");
printf(" 请先输入50个学生成绩:\n");
goto loop;
}
//switch语句结束。
getch();
}
亲,刚写好了。我没调试。这个仅供参考。自己调试,有错就找找。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*2013年11月13日学生成绩信息统计,比 较程序*/# include <stdio.h># include <malloc.h># include <string.h># include <stdlib.h>struct student //定义一个结构 体,两个成员name,score(当然自己也 可以加性别啊,家庭住址等等,程序就相 对这个复杂一点了){char name[50];float score;};void input (struct student * p, int a); //这些都是函数声明void output (struct student * p, int a);void avg (struct student * p, int a);void num (struct student * p, int a);void hightandlow (struct student * p, int a);int main(void){int a, b, d = 0, e = 3;char m[15], password[15] = {"1234"}, c; //定义密码struct student * std = (struct student *)malloc(100*sizeof(struct student)); //定义动态结构体数组(结合以前自学知 识)printf("请输入密码:"); while (e) //这 是一个密码验证程序,我也是现学现用 的,e不是0,所以会一直循环 {gets_s(m,15); //gets_s是一个字符串输入 函数,除非出入回车,要不然它会一直接 收输入的任何字符(数字也是) if(strcmp(password,m) == 0) //strcmp是 字符串比较函数,比较相等就会返回0, 大则正数,小则负数{printf("密码正 确!!!\n");break; //密码输入正确了就 会跳出循环了,继续下面的语句}else {printf("你还有%d次机会:", --e); //如果 密码不对,就会减少循环一次,如果3次 都输入错了,那么就会停止循环了}} if (e == 0) //然后再来判断上面循环之行玩了之
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是什么学校的呀
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询