c语言程序设计题 跪求高人的复杂版~ 慢步不要紧 主要是要对~

[复制链接]
查看11 | 回复2 | 2011-3-29 07:35:11 | 显示全部楼层 |阅读模式
题目:作业管理系统

[题目描述]
设计一个学生作业完成情况管理系统。
假设某门课一学期要留10次作业,每次老师要进行批改,给出分数后还要进行登记。学期末要根据每次作业的成绩计算出最终的平时成绩(满分100分)。
该程序应该具有下列功能:
(1)录入某位学生某次作业的分数;
(2)给定学号,显示某位学生的作业完成情况;
(3)给定某个班级的班号,显示该班学生所有学生的作业完成情况;
(4)给定某位学生的学号,修改该学生的作业完成情况;
(5)给定某位学生的学号,删除该学生的作业完成情况;
(6)提供一些统计各类信息的功能。

[题目要求]
(1)按照分析、设计、编码、调试和测试的软件开发过程完成这个应用系统;
(2)作业登记信息应该包括学号、姓名和10次作业的完成情况;
(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。

[输入要求]
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。

[输出要求]
(1)应用程序运行后,要在屏幕上显示一个菜单;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。

[提示]
设计一个结构类型和一维数组类型,用来保存学分信息。

事情紧急 真心求教 多谢各位高手~~ 坐等神人出现
回复

使用道具 举报

千问 | 2011-3-29 07:35:11 | 显示全部楼层
<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 还不能运行试试
你写完运行过吗? 你要是已经运行通过了 告诉我可以我就不试了直接采纳!
太谢谢了 太谢谢了!
回复

使用道具 举报

千问 | 2011-3-29 07:35:11 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-2805903\">当然啦,我还没试过不要运行程序就能把程序写出来,因为调试肯定要运行程序来看程序是否对路的~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行