用C语言做一个学生成绩统计系统,求帮忙(源代码。。)

要求进入需要密码验证模块,限3次
进入后界面显示6个菜单项:
1学生成绩录入(限人数50)
2显示学生成绩
3 统计总分平均分
4 最高分和最低分
5 统计各分数段人数
6退出

求帮助,谢谢啦,老师留的作业,不会额。。。着急交!!!


/*
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一样了,我不愿意过苦日子,让人看不起,所以我想好好学一门技术,我最感兴趣的也就是编程,努力学习吧!*/

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-12
可以给你。需要点时间。现在在上课。
#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();
}
亲,刚写好了。我没调试。这个仅供参考。自己调试,有错就找找。
第2个回答  2013-11-25
/*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) //然后再来判断上面循环之行玩了之
第3个回答  2013-11-12
你是什么学校的呀

利用c语言开发一个“学生成绩管理系统”谁来帮帮忙
include "string.h" \/*字符串函数*\/ include "conio.h" \/*屏幕操作函数*\/ include "mem.h" \/*内存操作函数*\/ include "ctype.h" \/*字符操作函数*\/ include "alloc.h" \/*动态地址分配函数*\/ define N 3 \/*定义常数*\/ typedef struct z1 \/*定义数据结构*\/ { char no[11];char name[...

【急】求C语言学生成绩管理系统源代码,要能用的
int as;start: printf("\\n\\t\\t\\t欢迎使用学生成绩管理系统\\n");\/*一下为功能选择模块*\/ do { printf("\\n\\t\\t\\t\\t1.录入学员信息\\n\\t\\t\\t\\t2.显示学员信息\\n\\t\\t\\t\\t3.成绩排序信息\\n\\t\\t\\t\\t4.添加学员信息\\n\\t\\t\\t\\t5.删除学员信息\\n\\t\\t\\t\\t6.修改学员信息\\n\\t...

求C语言源代码 题目 学生成绩管理系统
1、数据结构:班级\/学号\/姓名\/数学\/英语\/语文\/C语言\/总分\/平均分2、模块分析:(1)系统主模块:以菜单形式提示用户本系统的功能,并能调用各子模块(2)录入模块:完成学生成绩的录入,同时实现计算每个学生的平均分,完善每个人的信息。(3)统计模块:可提供以下五种统计:① 每班各科的平均分;② 各科及格率、不及格率...

c语言学生管理系统源代码
char c; printf("\\n\\n"); printf(" | 1. 增加学生记录 5.统计信息 |\\n"); printf(" | 2. 查询学生记录 6.打开文件 |\\n"); printf(" | 3. 修改学生记录 7.保存文件 |\\n"); printf(" | 4. 学生纪录排序 8.显示记录 |\\n"); printf(" | 0.退出系统 |\\n"); printf("\\n\\n"); p...

用C语言编写学生成绩管理系统(简单的,不用像计院一样专业) 悬赏...
printf("请问要输入几个学生的成绩: \\n");scanf("%d", x);if ((fout = fopen("d:\\stud.txt", "wb")) == NULL){ printf("不能打开文件! \\n");exit(0);} for (y = 0; y < x; y++, p++){ printf("学号: \\n");scanf("%ld", &p->xuehao);fwrite(&p->xuehao,...

如何用c语言写学生成绩查询?
select sno(学生的学号) from sc(学生选课表)group by sno having count(*)>1 select a.学号,b.姓名,a.cnt as 选修门数 from (select 学号,count(1) as as cnt from 选课表 group by 学号 having count(1)=(select count(1) from 课程表)) a,学生表 b where a.学号=b.学号;...

C语言 看图,学生成绩管理系统菜单用printf函数,
void c();void d();void e();int n;while(n!=6){printf("\\t大学计算机基础成绩管理系统\\n");printf("1:输入一个班学生大学计算机基础成绩记录\\n");printf("2:显示所有成绩记录\\n");printf("3:计算并输出平均成绩,均方差\\n");printf("4:输出成绩与排名\\n");printf("5:结果存入...

...输入一个班全体学生的成绩,把不及格的学生成绩输出,并求几个学生...
b[j++]=a[i]; \/\/将不及格人数及成绩村入b数组中 printf("%d ",a[i]);} } putchar('\\n');for(i=0;i<j;i++) \/\/计算出不及格人数的总成绩 sum+=b[i];ave=(sum*0.1\/j)*10; \/\/计算不及格同学的平均成绩,并将其转换为实型数据 printf("avverage scores is:\\n");printf...

用C语言设计一个学生信息查询系统程序
1、首先创建一个c语言项目。然后右键头文件,创建一个Stu的头文件。2、编写头文件的代码。再将数据结构的增删改查和结构体写入头文件。3、在源文件中创建main源文件和Stu源文件。再main文件中写入int mian()代码。4、然后在mian主函数中,写入while语句无限循环。再写入Init函数。5、在Stu源文件的...

求~~!在TC下的程序源代码!~《学生成绩查询系统》
include "stdlib.h" \/*其它说明*\/ include "string.h" \/*字符串函数*\/ include "conio.h" \/*屏幕操作函数*\/ include "mem.h" \/*内存操作函数*\/ include "ctype.h" \/*字符操作函数*\/ include "alloc.h" \/*动态地址分配函数*\/ struct score { int mingci;char xuehao...

相似回答