当前位置: 代码迷 >> C语言 >> [开源]学C两个月写出的学生成绩管理系统,不学习学习也来凑凑热闹啊!
  详细解决方案

[开源]学C两个月写出的学生成绩管理系统,不学习学习也来凑凑热闹啊!

热度:264   发布时间:2007-07-30 17:48:34.0
[开源]学C两个月写出的学生成绩管理系统,不学习学习也来凑凑热闹啊!

写一个程序,满足下列要求:
a.外部定义一个name结构模板,它含有两个成员:一个字符串用于存放名字,另一个字符串用于存放姓氏。
b.外部定义一个student结构模板,它含有3个成员:一个name结构,一个存放3个整数分数的grade数组,以及一个存放这3个分数的平均分的变量。
c.使main()函数声明一个具有CSIZE(CSIZE=3)个student结构的数组,使函数来执行d、e、f以及g部分所描述的任务。
d.请求用户输入学生姓名和分数,以交互地获取每个学生的成绩。将分数放到相应结构的grade数组成员中。您可以自主选择在main()或一个函数中实现这个循环。
e.为每个结构计算平均分,并把这个值赋给合适的成员。
f.输出每个结构中的信息。
g.输出结构的每个数值成员的班级平均分。
h.按平均分由大到小的顺序输出。

#include "stdio.h"
#define CSIZE 3
struct name {
char firstname[15];
char lastname[15];
};
//定义名字结构
struct student {
int num;
struct name n;
int grade[3];
float ave;
};
//定义学生信息结构
void sort(struct student stu[CSIZE],
struct student *pt[CSIZE],
int n);
//排序并输出
int main(void)
{
int i,j;
float sum;
struct student stu[CSIZE],*pt[CSIZE];
int sum1,sum2,sum3;
float ave1,ave2,ave3,sum_ave,ave_ave;

sum1=sum2=sum3=0;
sum_ave=0.0;

for(i=0;i<CSIZE;i++)
{
stu[i].num=i+1;
puts("Enter the first name: ");
scanf("%s",stu[i].n.firstname);
fflush(stdin);
puts("Enter the last name: ");
scanf("%s",stu[i].n.lastname);
fflush(stdin);
puts("Now enter the three grades: ");
for(sum=0,j=0;j<3;j++)
{
scanf("%d",&stu[i].grade[j]);

sum+=stu[i].grade[j];
}
stu[i].ave=sum/3;
//计算每个学生的平均分,任务e
sum1+=stu[i].grade[0];
sum2+=stu[i].grade[1];
sum3+=stu[i].grade[2];
sum_ave+=stu[i].ave;
if(i+1==CSIZE)continue;
//消除最后一个"Next student."
puts("Next student.");
}
//接受输入的学生成绩
ave1=(float)sum1/CSIZE;
ave2=(float)sum2/CSIZE;
ave3=(float)sum3/CSIZE;
ave_ave=sum_ave/CSIZE;
//计算班级平均分
puts("\nStudents' information:");
for(i=0;i<CSIZE;i++)
printf("%2d %-8s %-8s %-4d %-4d %-4d %-4.1f\n",
stu[i].num,stu[i].n.firstname,stu[i].n.lastname,
stu[i].grade[0],stu[i].grade[1],stu[i].grade[2],
stu[i].ave);
printf("Class Average: %-4.1f %-4.1f %-4.1f %-4.1f\n",
ave1,ave2,ave3,ave_ave);
//输出学生信息
puts("\nStudents' information sorted in order of average point:");
sort(stu,pt,CSIZE);
//输出处理过的学生信息

return 0;
}

void sort(struct student stu[CSIZE],
struct student *pt[CSIZE],
int n)
{
int i,j;
struct student *temp;

for(i=0;i<n;i++)
pt[i]=&stu[i];
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(pt[i]->ave<pt[j]->ave)
{
temp=pt[i];
pt[i]=pt[j];
pt[j]=temp;
}
}
//按平均分由大到小的顺序排序
for(i=0;i<n;i++)
printf("%2d %-8s %-8s %-4d %-4d %-4d %-4.1f\n",
i+1,pt[i]->n.firstname,pt[i]->n.lastname,
pt[i]->grade[0],pt[i]->grade[1],pt[i]->grade[2],
pt[i]->ave);
}
运行结果示例:

这是个功能很简单的程序,但是展示了基本的学生成绩管理系统的框架。一个不足之处是每次运行程序都要重新输入学生信息,因为没有文件存储的功能。鉴于来这里的兄弟新手比较多,加之本人是比较懒的那种,那也就算了。希望兄弟们多多指教。有疑问可以提,这里的高手也是很多的

[此贴子已经被作者于2007-7-30 17:50:34编辑过]

搜索更多相关的解决方案: 系统  学生  开源  凑热闹  学习  

----------------解决方案--------------------------------------------------------

赞,学C两个月,楼主继续努力!


----------------解决方案--------------------------------------------------------
现在怎么都学两个月C就上手了啊,惨愧ing...
----------------解决方案--------------------------------------------------------
以下是引用星星鱼虾蟹在2007-7-30 20:17:09的发言:
现在怎么都学两个月C就上手了啊,惨愧ing...

这位兄弟你学了几个月?
还没上手吗?


----------------解决方案--------------------------------------------------------

说真的确实让人惭愧啊,我在学校上了一个学期的课,就学会了一些基本的功能


----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
北大青鸟的学生吧```
你的学员管理系统实在一般``
----------------解决方案--------------------------------------------------------
以下是引用wang__在2007-8-1 10:18:32的发言:
北大青鸟的学生吧```
你的学员管理系统实在一般``

哈哈,我自学的,难入高手法眼,
不过我写这个东西的初衷就是写给菜鸟看的,

因为前面有位仁兄发了个帖子,400多行的程序,
跟贴的说几声牛人云云,
真正去看程序,调试的有几人?

所以我发个能看懂的程序上来,
不过没什么人看,哎......


----------------解决方案--------------------------------------------------------
以下是引用wang__在2007-8-1 10:18:32的发言:
北大青鸟的学生吧```
你的学员管理系统实在一般``

不是,我是自学的呵呵.
我写的是一般,因为我写这个东西的初衷就是写给菜鸟看的

前面有位大虾写了个400多行的程序,
跟贴的是不少,可也只是牛,吊人云云,
会去分析程序,调试程序的有几个人?

我写的东西就是希望能让人看懂,可惜看的人不多哎


----------------解决方案--------------------------------------------------------
...
----------------解决方案--------------------------------------------------------
  相关解决方案