跪求学生成绩管理系统设计(C语言程序设计)

自己设计成绩统计 查询和输出程序
1.数据项 学号 姓名 性别 班级 成绩
2.编程序对某门课的成绩进行排序(降序)并输出
3.编程序求某门课成绩比例 90-100 80-89 70-79 60-69 60以下各多少比例
用win-Tc的软件
——5月21日之前要交了——
一定要和提问的相吻合呀,拜托了!还有下面的兄弟,运行了之后有错误呀。。。。。。。。帮改改吧,谢谢!!!!

第1个回答  2008-05-16
这是我在大学时做的,你看看:
/*
程序功能:
能完成每位学生的某门课程的平时成绩和期末考试成绩的录入,
完成每位学生的总评成绩计算(平时成绩*30%+期末考试成绩*70%)并生成数据文件,
生成分数段统计文件(不及格人数,60-69数,70-79人数,80-89人数,90-100人数,及格

率),
通过学生成绩的数据文件查询学生成绩(查询条件自定)。
通过学生成绩的分段统计文件输出学生成绩分段情况和及格率。

程序要求:
(1)能够完成300人以内任何人数的成绩处理。
(2)程序要有主控菜单
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct stud
{
long num;
char name[20];
double score;
};

typedef struct stucode
{
struct stud student ;
struct stucode *next;
}L;

void menu();
void createlist(struct stucode **r);
void out(struct stucode *r);
void search1(struct stucode *r);
void search2(struct stucode *r);
void del(struct stucode **r);
void insert(struct stucode **r);
void sort(struct stucode **r);

void main()
{
char choose;
int flag=1;
struct stucode *r=NULL;

while(flag)
{
system("cls");
menu();
choose=getchar();
switch(choose)
{
case '1':
createlist(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '2':
search1(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '3':
search2(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '4':
del(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '5':
insert(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '6':
sort(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '7':
out(r);
printf("Testing function 7\nPress any key to continue\n");
getchar();
getchar();
break;

case '0':
flag=0;
printf("The end.\n");
break;

default: printf("\nWrong Selection!(选择错误,请重选!)\n");getchar();getchar();
}
}
}

void createlist(struct stucode **r)
{
struct stucode *p,*t;
long n;
char a[20];
double s;
if(*r) *r=NULL;
printf(" \n请输入:\n 学号(请按学号升序排列) 姓名 分数 (若要结束请输入三个为零)

\n");
scanf("%ld%s%lf",&n,a,&s);
if(n==0) return;

p=(L *)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
*r=p;

scanf("%ld%s%lf",&n,a,&s);

while(n)
{
t=p;
p=(L *)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
t->next=p;
scanf("%ld%s%lf",&n,a,&s);
}
}

void search1(struct stucode *r)
{
long x;
if(!r)
{
printf("没有学生信息可查询!\n");
return ;
}
printf(" 请输入要查询的学生信息的学生学号:\n");
scanf("%ld",&x);
while(r&&r->student.num!=x)
r=r->next;
if(r==NULL)
printf("Error! No such student !\n");
else
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
}
void search2(struct stucode *r)
{
char m[20];
if(!r)
{
printf("没有学生信息可查询!\n");
return ;
}

printf(" 请输入要查询的学生信息的学生姓名:\n");
scanf("%s",m);
while(r&&strcmp(r->student.name,m))
r=r->next;
if(r==NULL)
printf("Error! No such student !\n");
else
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
}
void del(struct stucode **r)
{
long k;
struct stucode *p=*r,*t;
if(!(*r))
{
printf("没有学生信息可删除 !\n");
return ;
}
printf(" 请输入要删除的学生信息的学生学号:\n");
scanf("%ld",&k);

if(p->student.num==k)
*r=(*r)->next,free(p);
else
{
while(p->next&&p->next->student.num!=k)
p=p->next;
if(p->next==NULL)
printf("Error! No such student !\n");
else
{
t=p->next;
p->next=p->next->next;
free(t);
}
}

}
void insert(struct stucode **r)
{
long n;
char a[20];
double s;

L *p,*t,*k;
printf(" 请输入要插入的学生信息的学生学号 姓名 分数:\n");
scanf("%ld%s%lf",&n,a,&s);
p=(L *)malloc(sizeof(L));
p->student.num=n;
p->student.score=s;
strcpy(p->student.name,a);
if(!(*r))
{
*r=p;
(*r)->next=NULL;
return ;
}
if(p->student.num<(*r)->student.num)
p->next=(*r),(*r)=p;
else
{
t=*r;
k=t;
while(t->next&&t->next->student.num<=p->student.num)
t=t->next;
p->next=t->next;
t->next=p;
*r=k;
}
}

void sort(struct stucode **r)
{
struct stucode *t,*p,*q,*z;
if(!r)
{
printf("没有学生信息可排序!\n");
return ;
}

if(!(*r)||!(*r)->next)
return;

t=*r;
p=t->next;
t->next=NULL;
while(p)
{
q=p->next;
if(p->student.score>t->student.score)
{
p->next=t;
t=p;
}
else
{
z=t;
while(z->next&&z->next->student.score>=p->student.score)
z=z->next;
p->next=z->next;
z->next=p;
}

p=q;
}
*r=t;

}
void out(struct stucode *r)
{
printf("\n\n");
if(!r)
{
printf("没有学生信息可输出!\n");
return ;
}

while(r)
{
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
r=r->next;
}
printf("\n\n");
}
void menu()
{
printf("\n 学生信息管理系统\n");
printf("\n 菜单\n\n");
printf("\n 1建立链表并显示\n");
printf("\n 2查找某学号的学生信息\n");
printf("\n 3查找某姓名的学生信息\n");
printf("\n 4删除某学号的学生信息\n");
printf("\n 5插入新的学生信息\n");
printf("\n 6按分数降序排列输出\n");
printf("\n 7输出\n");
printf("\n 0退出\n");

printf("\n 请选择您要执行的选项:\n");
}
第2个回答  2008-05-16
如果你会C++的话比较容易点,这个程序我写过,运行的还可以
楼上的也很不错哦

#include<iostream.h>
int readscore(long num[],float score[],int n)
{
int i;
for(i=1;i<=n;i++)
{
cout<<"请输入学号";cin>>num[i];
cout<<"请输入成绩";cin>>score[i];
}
for(i=1;i<=n;i++)
{
cout<<num[i]<<"\t"<<score[i]<<endl;
}
return n;
}
int getfail(long num[],float score[],int n)
{
int sum=0,i;
for(i=1;i<=n;i++)
{
if(score[i]<60)
{
sum=sum+1;
cout<<"学号为"<<num[i]<<"的同学不及格"<<endl;
}
}
cout<<"不及格人数为"<<sum<<endl;
return sum;
}
float getaver (float score[],int n)
{
int i;
float sum=0.0,aver=0.0;
for(i=1;i<=n;i++)
{
sum=sum+score[i];
}
aver=sum/n;
cout<<"平均值为"<<aver<<endl;
return aver;
}
void getabover(long num[],float score[],int n)
{
int i;
float sum=0.0,aver=0.0;
for(i=1;i<=n;i++)
{
sum=sum+score[i];
}
aver=sum/n;
for(i=1;i<n;i++)
{
if(score[i]>aver)
{
cout<<"学号为"<<num[i]<<"成绩:"<<"\t"<<score[i]<<endl;
}
}

}
void getdetail(float score[],int n)
{
int i;
int stu[6]={0,0,0,0,0,0};
for(i=1;i<n;i++)
{
if(score[i]<60)
{
stu[0]++;
}
}
for(i=1;i<n;i++)
{
if(score[i]>=60&&score[i]<=69)
{
stu[1]++;
}
}
for(i=1;i<n;i++)
{
if(score[i]>=70&&score[i]<=79)
{
stu[2]++;
}
}
for(i=1;i<n;i++)
{
if(score[i]>=80&&score[i]<=89)
{
stu[3]++;
}
}
for(i=1;i<n;i++)
{
if(score[i]>=90&&score[i]<=99)
{
stu[4]++;
}
}
for(i=1;i<n;i++)
{
if(score[i]==100)
{
stu[5]++;
}
}
cout<<"60以下同学人数为"<<stu[0]<<endl;
cout<<"60-69分数段的人数为"<<stu[1]<<endl;
cout<<"70-79分数段的人数为"<<stu[2]<<endl;
cout<<"80-89分数段的人数为"<<stu[3]<<endl;
cout<<"90-99分数段的人数为"<<stu[4]<<endl;
cout<<"100分数段的人数为"<<stu[5]<<endl;

}

void main()
{ char Y,N,goon;
int n,i;
const max=30;
long num[max];
float score[max];
cout<<"请输入全班人数的数目:"<<endl;cin>>n;
readscore(num,score,n);
do
{
cout<<"进行不及格人数统计:1"<<endl;
cout<<"进行平均分计算:2"<<endl;
cout<<"进行超过平均分人数统计:3"<<endl;
cout<<"进行超过平均分人数统计:4"<<endl;
cout<<"请做出你的选择"<<endl;cin>>i;
switch(i)
{
case 1: getfail(num,score,n); break;
case 2: getaver ( score,n); break;
case 3: getabover(num,score,n); break;
case 4: getdetail(score,n); break;

}
cout<<"如果你还要进行其他运算请按:Y"<<endl;cin>>goon;
}while(goon=='Y');
}
第3个回答  2008-05-16
还可以吧
相似回答