<pre id=\"best-answer-content\" class=\"reply-text mb10\">呵呵,就完了,晚上就给你答案哈,你多等等~~~
恩,完工了,你看看吧:
//注:本程序因涉及到引用即“stdio.h
#include stdlib.h
#include string.h
#include conio.h
#include time.h//用来得到当前时间
typedef struct student
{
char stuNumber[20];
char classNumber[20];
double score[10];
struct student *next;
}stuNode,*stuList;
void cre_node(stuList
L=(stuList)malloc(sizeof(stuNode));
L-next=NULL;
for(i=0;i10;i)
L-score=0;
}
void add_node(stuList
prior=L;
p=L-next;
while(p classNumber))
{
prior=p;
p=p-next;
}
while(p classNumber))
{
prior=p;
p=p-next;
}
cre_node(q);
strcpy(q-stuNumber,stuNumber);
strcpy(q-classNumber,classNumber);
q-next=prior-next;
prior-next=q;
p=q;
}
int check_list(stuList L,char stuNumber[])
{
stuList p=L-next;
while(p stuNumber))
p=p-next;
if(p)
{
puts(\"学号不能重复,请重新输入:\");
return 0;
}
return 1;
}
void cre_cla_info(stuList
char classNumber[20],stuNumber[20];
stuList p;
puts(\"开始创建班级信息(输入0结束):\");
while(1)
{
printf(\"\\n请输入第%d个班级班号:\\n\",i 1);
fflush(stdin);
gets(classNumber);
if( !strcmp(classNumber,\"0\"))
break;
printf(\"开始创建%s班的学生信息(输入0结束):\\n\",classNumber);
j=0;
while(1)
{
printf(\"请输入第%d个学生学号:\\n\",j 1);
fflush(stdin);
while(1)
{
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,\"0\"))
break;
add_node(L,stuNumber,classNumber,p);
j;
}
i;
}
p=L-next;
system(\"cls\");
puts(\"班级信息为:\");
while(p)
{
strcpy(classNumber,p-classNumber);
printf(\"%s班:\\n\",classNumber);
while(p classNumber,classNumber))
{
puts(p-stuNumber);
p=p-next;
}
}
puts(\"\\n按任意一个键继续:\");
getch();
}
int get_stu_info(stuList
p=L-next;
while(p stuNumber))
p=p-next;
if( !p)
{
puts(\"无该学生记录,你要增加该学生记录吗?(是则输入Y或y,不是输入则输入其他字符):\");
scanf(\" %c\",
if(ch==\'Y\' || ch==\'y\')
{
puts(\"输入该学生所在班级班号:\");
fflush(stdin);
gets(classNumber);
add_node(L,stuNumber,classNumber,p);
return 2;
}
else
return 0;
}
return 1;
}
void print_cla_info(stuList
int i=0,flag=0;
char ch,stuNumber[20];
stuList p=L-next;
while(p)
{
if( !strcmp(p-classNumber,classNumber))
{
flag=1;
printf(\"学生%s作业完成情况为:\\n\",p-stuNumber);
average=0;
for(i=0;i10;i)
{
average =p-score;
printf(\"第%d次:\\t%g\\n\",i 1,p-score);
}
average/=10;
printf(\"\\n该学生期末成绩为: %g\\n\\n\",average);
}
p=p-next;
}
if( !flag)
{
puts(\"无该班级信息,要创建一个吗?是输入Y或y,不是则输入其他字符:\");
scanf(\" %c\",
if(ch==\'Y\' || ch==\'y\')
{
puts(\"输入该班学生学号,输入0结束:\");
i=1;
while(1)
{
printf(\"请输入第%d个学生学号:\\n\",i);
while(1)
{
fflush(stdin);
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,\"0\"))
break;
add_node(L,stuNumber,classNumber,p);
}
}
}
puts(\"\\n按任意一个键继续:\");
getch();
}
void print(void)
{
puts(\"请选择一个操作进行(输入一个数字):\\n\");
puts(\"(1)录入某位学生某次作业的分数:\\n\");
puts(\"(2)给定学号,显示某位学生的作业完成情况:\\n\");
puts(\"(3)给定某个班级的班号,显示该班学生所有学生的作业完成情况:\\n\");
puts(\"(4)给定某位学生的学号,修改该学生的作业完成情况:\\n\");
puts(\"(5)给定某位学生的学号,删除该学生的作业完成情况:\\n\");
puts(\"(6)提供一些统计各类信息的功能:\\n\");
puts(\"输入其他数字退出:\\n\");
}
void count(stuList L)
{
time_t cur_time;//time_t在time.h头文件中被定义为long型
double average,m;
int n,i,flag1,flag2,sum1,sum2;
stuList p;
char classNumber[20];
cur_time=time(NULL);//得到当前系统时间
FILE *fp;
fp=fopen(\"d:\\\\统计.txt\",\"a \");
fputs(\"\\n\\n
fputs(\"时间格式:星期,月,日,小时:分:秒,年\\n存档时间:\",fp);
fputs(ctime(
while(1)
{
system(\"cls\");
puts(\"统计查询:\");
puts(\"如若显示内容超过窗口所容,你可以到d:\\\\统计.txt文本中查看:\\n\");
puts(\"请选择一个操作进行(输入一个数字):\\n\");
puts(\"(1)显示全部班级学生作业完成情况,并显示总人数:\\n\");
puts(\"(2)显示所有满足某次作业分数不大于m的学生,并显示学生人数(m值由你输入,且范围为0~100):\\n\");
puts(\"(3)显示所有满足某次作业分数不小于m的学生,并显示学生人数(m说明同上)::\\n\");
puts(\"(4)显示满足第i次作业分数不大于m的学生,并显示人数(i范围1~10,m范围0~100):\\n\");
puts(\"(5)显示满足第i次作业分数不小于m的学生,并显示人数(i范围1~10,m范围0~100):\\n\");
puts(\"输入其他数字返回:\\n\");
scanf(\"%d\",
if(n1 || n5)
break;
p=L-next;
if(n==1)
{
system(\"cls\");
while(p)
{
sum1=0;
strcpy(classNumber,p-classNumber);
printf(\"\\n%s班所有学生作业完成情况为:\\n\",classNumber);
fprintf(fp,\"\\n%s班所有学生作业完成情况为:\\n\",classNumber);
while( p classNumber))
{
average=0;
printf(\"\\n学生%s:\\n\",p-stuNumber);
fprintf(fp,\"学生%s:\\n\",p-stuNumber);
for(i=0;i10;i)
{
average =p-score;
printf(\"第%d次作业分数:\\t%g\\n\",i 1,p-score);
fprintf(fp,\"第%d次作业分数:\\t%g\\n\",i 1,p-score);
}
average/=10;
printf(\"该学生期末成绩为: %g\\n\",average);
fprintf(fp,\"该学生期末成绩为: %g\\n\",average);
p=p-next;
sum1;
}
printf(\"\\n~%s班总人数为: %d~\\n\",classNumber,sum1);
fprintf(fp,\"\\n~%s班总人数为: %d~\\n\",classNumber,sum1);
puts(\"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\");
fputs(\"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\",fp);
}
puts(\"\\n按任意一个键继续:\");
getch();
}
else if(n==2 || n==3)
{
system(\"cls\");
puts(\"请输入m值(0~100):\");
fputs(\"\\n请输入m值(0~100):\",fp);
while(1)
{
scanf(\"%lf\",
fprintf(fp,\"%g\\n\",m);
if(m0 || m100)
{
puts(\"输入有误,请重新输入:\");
fputs(\"输入有误,请重新输入:\",fp);
continue;
}
break;
}
if(n==2)
{
printf(\"所有满足某次作业分数不大于%g的学生为:\\n\",m);
fprintf(fp,\"所有满足某次作业分数不大于%g的学生为:\\n\",m);
}
else
{
printf(\"所有满足某次作业分数不小于%g的学生为:\\n\",m);
fprintf(fp,\"所有满足某次作业分数不小于%g的学生为:\\n\",m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p-classNumber);
printf(\"\\n%s班:\\n\",classNumber);
fprintf(fp,\"\\n%s班:\\n\",classNumber);
flag1=0;
sum1=0;
while( p classNumber))
{
flag2=0;
for(i=0;i10;i)
if(n==2 score = m)
{
flag1;
flag2;
if(flag2==1)
{
sum1;
printf(\"\\n学生%s:\\n\",p-stuNumber);
fprintf(fp,\"学生%s:\\n\",p-stuNumber);
}
printf(\"第%d次作业分数: %g\\n\",i 1,p-score);
fprintf(fp,\"第%d次作业分数: %g\\n\",i 1,p-score);
}
else if(n==3 score = m)
{
flag1;
flag2;
if(flag2==1)
{
sum1;
printf(\"\\n学生%s:\\n\",p-stuNumber);
fprintf(fp,\"学生%s:\\n\",p-stuNumber);
}
printf(\"第%d次作业分数: %g\\n\",i 1,p-score);
fprintf(fp,\"第%d次作业分数: %g\\n\",i 1,p-score);
}
p=p-next;
}
if( !flag1)
{
printf(\"NULL:\\n\");
fprintf(fp,\"%NULL:\\n\");
}
printf(\"\\n%s班满足条件人数为:%d\\n\",classNumber,sum1);
fprintf(fp,\"\\n%s班满足条件人数为:%d\\n\",classNumber,sum1);
puts(\"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\");
fputs(\"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\",fp);
sum2 =sum1;
}
printf(\"\\n一共满足条件人数为:%d\\n\",sum2);
fprintf(fp,\"\\n一共班满足条件人数为:%d\\n\",sum2);
puts(\"\\n按任意一个键继续:\");
getch();
}
else if(n==4 || n==5)
{
system(\"cls\");
puts(\"输入i和m的值,用空格键分开(i:1~10,m:0~100):\");
fputs(\"输入i和m的值,用空格键分开(i:1~10,m:0~100):\",fp);
while(1)
{
scanf(\"%d%lf\",
if(i1 || i10 || m0 || m100)
{
puts(\"输入错误,请重新输入:\");
fputs(\"输入错误,请重新输入:\",fp);
continue;
}
break;
}
if(n==4)
{
printf(\"所有满足第%d次作业分数不大于%g的学生为:\\n\",i,m);
fprintf(fp,\"所有满足第%d次作业分数不大于%g的学生为:\\n\",i,m);
}
else
{
printf(\"所有满足第%d次作业分数不小于%g的学生为:\\n\",i,m);
fprintf(fp,\"所有满足第%d次作业分数不小于%g的学生为:\\n\",i,m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p-classNumber);
printf(\"\\n%s班:\\n\",classNumber);
fprintf(fp,\"\\n%s班:\\n\",classNumber);
flag1=0;
sum1=0;
while( p classNumber))
{
if(n==4 score[i-1] = m)
{
flag1;
sum1;
printf(\"学生%s,作业分数: %g\\n\",p-stuNumber,p-score[i-1]);
fprintf(fp,\"学生%s,作业分数: %g\\n\",p-stuNumber,p-score[i-1]);
}
else if(n==5 score[i-1] = m)
{
flag1;
sum1;
printf(\"学生%s,作业分数: %g\\n\",p-stuNumber,p-score[i-1]);
fprintf(fp,\"学生%s,作业分数: %g\\n\",p-stuNumber,p-score[i-1]);
}
p=p-next;
}
if( !flag1)
{
printf(\"NULL:\\n\",classNumber);
fprintf(fp,\"NULL:\\n\",classNumber);
}
printf(\"\\n%s班满足条件人数为:%d\\n\",classNumber,sum1);
fprintf(fp,\"\\n%s班满足条件人数为:%d\\n\",classNumber,sum1);
puts(\"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\");
fputs(\"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\",fp);
sum2 =sum1;
}
printf(\"\\n一共满足条件人数为:%d\\n\",sum2);
fprintf(fp,\"\\n一共班满足条件人数为:%d\\n\",sum2);
puts(\"\\n按任意一个键继续:\");
getch();
}
}
fclose(fp);
}
void destroy_list(stuList
while(p=L-next)
{
L-next=p-next;
free(p);
}
free(L);
}
int main()
{
int m,n,i;
double average;
char stuNumber[20],classNumber[20];
stuList L,p;
cre_node(L);
cre_cla_info(L);
while(1)
{
system(\"cls\");
print();
scanf(\"%d\",
if(n1 || n6)
break;
if(n==1)
{
system(\"cls\");
puts(\"输入该学生学号:\");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf(\"该学生%s所在班级为:%s\\n\",p-stuNumber,p-classNumber);
puts(\"只录入该学生某一次的作业请输入1,要一起录入该学生10次作业请输入其他数字:\");
scanf(\"%d\",
if(m==1)
{
puts(\"录入该学生第几次的作业?\");
while(1)
{
scanf(\"%d\",
if(i1 || i10)
{
puts(\"范围只能是1~10,请重新输入:\");
continue;
}
break;
}
printf(\"该学生第%d次作业分数为:%g,你要修改为?:\\t\",i,p-score[i-1]);
scanf(\"%lf\",score[i-1]);
puts(\"本次操作结果:\");
printf(\"%s班%s学生第%d次作业分数为%g:\\n\",p-classNumber,p-stuNumber,i,p-score[i-1]);
puts(\"\\n按任意一个键继续:\");
getch();
}
else
for(i=0;i10;i)
{
printf(\"第%d次作业分数: \",i 1);
scanf(\"%lf\",score);
}
}
else if(n==2)
{
system(\"cls\");
puts(\"输入该学生学号:\");
fflush(stdin);
gets(stuNumber);
i=get_stu_info(L,stuNumber,p);
if( !i)
continue;
average=0;
if(i==1)
{
printf(\"该学生所在班级班号为:%s,10次作业完成情况为:\\n\",p-classNumber);
for(i=0;i10;i)
{
average =p-score;
printf(\"第%d次作业分数: %g\\n\",i 1,p-score);
}
average/=10;
printf(\"\\n该学生期末成绩为: %g\\n\\n\",average);
}
puts(\"\\n按任意一个键继续:\");
getch();
}
else if(n==3)
{
system(\"cls\");
puts(\"输入班级的班号:\");
fflush(stdin);
gets(classNumber);
print_cla_info(L,classNumber);
}
else if(n==4)
{
system(\"cls\");
puts(\"输入该学生学号:\");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf(\"该学生所在班级班号为:%s,当前作业完成情况为:\\n\",p-classNumber);
for(i=0;i10;i)
printf(\"第%d次作业分数:\\t%g\\n\",i 1,p-score);
while(1)
{
puts(\"要修改第几次作业?(输入数字1~10,输入其他数字结束):\");
scanf(\"%d\",
if(m1 || m10)
break;
printf(\"修改该学生分数%g为:\\t\",p-score[m-1]);
scanf(\"%lf\",score[m-1]);
}
}
else if(n==5)
{
system(\"cls\");
puts(\"输入该学生学号:\");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf(\"该学生所在班级班号为:%s,当前作业完成情况为:\\n\",p-classNumber);
for(i=0;i10;i)
printf(\"第%d次作业分数:\\t%g\\n\",i 1,p-score);
while(1)
{
puts(\"要删除第几次作业?(输入数字1~10,输入其他数字结束):\");
scanf(\"%d\",
if(m1 || m10)
break;
p-score[m-1]=0;
}
}
else
{
system(\"cls\");
count(L);
}
}
destroy_list(L);
puts(\"谢谢使用!按任意键退出:\");
getch();
return 0;
}
哪里不懂可追问:
<h4 class=\"ask\">追问
<pre class=\"replyask-text\" id=\"content-2791261\">哇!~太谢谢了
这么浩大的工程啊~ 不过我现在电脑里没有C 还不能运行试试
你写完运行过吗? 你要是已经运行通过了 告诉我可以我就不试了直接采纳!
太谢谢了 太谢谢了!
|