武汉科技大学C语言毕业课程设计实验报告.docx
- 文档编号:7207444
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:21
- 大小:369.74KB
武汉科技大学C语言毕业课程设计实验报告.docx
《武汉科技大学C语言毕业课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《武汉科技大学C语言毕业课程设计实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
武汉科技大学C语言毕业课程设计实验报告
(此文档为word格式,下载后您可任意编辑修改!
)
二○一二~二○一三学年第一学期
电子技术学院
课程设计报告书
课程名称:
C程序课程设计
班级:
电信DB2011级1102班
学号:
XXXXXXXXX
姓名:
XXXX
指导教师:
陈彬
二○一二年九月
一、需求分析
1、题目二学生成绩管理程序
任务:
自学C语言中相关知识,设计出学生成绩管理程序。
要求如下所述:
◆录入学生信息,每位学生录入的信息有:
姓名、学号、性别、班级、和三门功课(数学,英语,计算机)的成绩。
以文件(myfile.txt)的形式保存每个学生的所有信息。
(实验中:
假设3个班,每个班学生人数不得少于5人)
学号姓名性别班级数学英语计算机
1101王鹏男1班705898
1102李燕女2班688895
1103赵亚芳女3班584896
◆增加学生记录,并将增加的信息以文件的(myfile.txt)的形式保存。
◆删除学生记录,以“学号”、“姓名”为关键字删除记录,若要删除的记录不存在,给出必要的提示信息;
◆统计各班级学生每门课程的班级平均分,并由高到低排序。
◆按学号或者姓名查询记录并显示其三门功课成绩;
◆能浏览显示全部学生成绩,若无记录可以显示,给出必要的提示信息;
2、系统功能需求分析
该程序中需要有存储、读取外部文件的命令实现将信息储存于指定文件中。
程序中需要有建立、修改链表的命令实现数据的动态链表存储方式。
程序还需要一系列的提示命令使程序的易用性提高。
因为需要对数据进行统计或查询显示,所以需要有对链表数据统计和对链表指定数据进行查找的功能。
二、概要设计
三、详细设计
1、建立结构体
structstudent
{
intnum;
charname[10],sex[10];
intClass,math,english,computer;
structstudent*next;
};
intn;
2、成绩单建立模块
Y
N
Y
N
structstudent*creat(void)
{
structstudent*head,*p1,*p2;
n=0;
p1=p2=(structstudent*)malloc(LEN);
printf("请输入学生信息(按学号顺序输入)\n");
printf("学号:
");scanf("%d",&p1->num);
printf("姓名:
");scanf("%s",p1->name);
printf("性别:
");scanf("%s",p1->sex);
printf("班级:
");scanf("%d",&p1->Class);
printf("数学:
");scanf("%d",&p1->math);
printf("英语:
");scanf("%d",&p1->english);
printf("计算机:
");scanf("%d",&p1->computer);
head=NULL;
while
(1)
{
n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(structstudent*)malloc(LEN);
printf("\n请输入学生信息(按学号顺序输入)[当不再输入时在学号处输入\"0\"结束]\n");
printf("学号:
");scanf("%d",&p1->num);
if(p1->num==0)break;
else
printf("姓名:
");scanf("%s",p1->name);
printf("性别:
");scanf("%s",p1->sex);
printf("班级:
");scanf("%d",&p1->Class);
printf("数学:
");scanf("%d",&p1->math);
printf("英语:
");scanf("%d",&p1->english);
printf("计算机:
");scanf("%d",&p1->computer);
}
p2->next=NULL;
return(head);
}
3、数据增加模块
structstudent*insert(structstudent*head,structstudent*stud)
{
structstudent*p0,*p1,*p2;
p1=head;p0=stud;
if(head==NULL){head=p0;p0->next=NULL;}
else
{
while((p0->num>p1->num)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}
if(p0->num<=p1->num)
{
if(head==p1)head=p0;
elsep2->next=p0;
p0->next=p1;
}
else{p1->next=p0;p0->next=NULL;}
}
n++;
printf("\n增加成功!
\n");
return(head);
}
4、数据删除模块
Y
Y
N
structstudent*del1(structstudent*head,intnum)
{
structstudent*p1,*p2;
if(head==NULL){printf("\n表格不存在!
\n");return(head);}
p1=head;
while((num!
=p1->num)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}
if(num==p1->num)
{
if(p1==head)head=p1->next;
elsep2->next=p1->next;
printf("\n删除成功!
\n");
n--;
}
elseprintf("\n找不到该数据!
\n");
return(head);
}
structstudent*del2(structstudent*head,char*name)
{
structstudent*p1,*p2;
if(head==NULL){printf("\n表格不存在!
\n");return(head);}
p1=head;
while((strcmp(name,p1->name)!
=0)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}
if(strcmp(name,p1->name)==0)
{
if(p1==head)head=p1->next;
elsep2->next=p1->next;
printf("\n删除成功!
\n");
n--;
}
elseprintf("\n找不到该数据!
\n");
return(head);
}
5、数据查找模块
N
Y
Y
N
Y
voidfind1(structstudent*head,intnum)
{
structstudent*p=head;
if(head!
=NULL)
{
do
{
if(num==p->num)
{
printf("\n学号姓名性别班级数学英语计算机\n");
printf("\n");
printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);
break;
}
elsep=p->next;
}while(p!
=NULL);
if(p==NULL)printf("\n未找到相应信息!
\n");
}
elseprintf("\n成绩单为空!
\n");
}
voidfind2(structstudent*head,char*name)
{
structstudent*p=head;
if(head!
=NULL)
{
do
{
if(strcmp(name,p->name)==0)
{
printf("\n学号姓名性别班级数学英语计算机\n");
printf("\n");
printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);
break;
}
elsep=p->next;
}while(p!
=NULL);
if(p==NULL)printf("\n未找到相应信息!
\n");
}
elseprintf("\n成绩单为空!
\n");
}
voidprint(structstudent*head)
{
structstudent*p;
p=head;
if(head!
=NULL)
{
printf("学号姓名性别班级数学英语计算机\n");
printf("\n");
do
{
printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);
p=p->next;
}while(p!
=NULL);
}
elseprintf("无信息!
\n");
}
6、数据显示模块
Y
N
Y
N
voidprint(structstudent*head)
{
structstudent*p;
p=head;
if(head!
=NULL)
{
printf("学号姓名性别班级数学英语计算机\n");
printf("\n");
do
{
printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);
p=p->next;
}while(p!
=NULL);
}
elseprintf("无信息!
\n");
}
7、成绩对比模块
N
Y
Y
N
Y
N
Y
voidcompare(structstudent*head)
{
structstudent*p;
p=head;
floatsum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;
printf("◎数学班级平均分◎\n");
printf("--\n");
while(p!
=NULL)
{
if(p->Class==1){sum1=sum1+p->math;n1++;}
if(p->Class==2){sum2=sum2+p->math;n2++;}
if(p->Class==3){sum3=sum3+p->math;n3++;}
p=p->next;
}
average1=sum1/n1;average2=sum2/n2;average3=sum3/n3;
if((average1>=average2)&&(average1>=average3))
{
if(average2>=average3)
printf("1班:
%.2f2班:
%.2f3班:
%.2f\n",average1,average2,average3);
else
printf("1班:
%.2f3班:
%.2f2班:
%.2f\n",average1,average3,average2);
}
else
{
if((average2>=average1)&&(average2>=average3))
{
if(average1>=average3)
printf("2班:
%.2f1班:
%.2f3班:
%.2f\n",average2,average1,average3);
else
printf("2班:
%.2f3班:
%.2f1班:
%.2f\n",average2,average3,average1);
}
else
{
if(average1>=average2)
printf("3班:
%.2f1班:
%.2f2班:
%.2f\n",average3,average1,average2);
else
printf("3班:
%.2f2班:
%.2f1班:
%.2f\n",average3,average2,average1);
}
}
p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;
printf("\n◎英语班级平均分◎\n");
printf("--\n");
while(p!
=NULL)
{
if(p->Class==1){sum1=sum1+p->english;n1++;}
if(p->Class==2){sum2=sum2+p->english;n2++;}
if(p->Class==3){sum3=sum3+p->english;n3++;}
p=p->next;
}
average1=sum1/n1;average2=sum2/n2;average3=sum3/n3;
if((average1>=average2)&&(average1>=average3))
{
if(average2>=average3)
printf("1班:
%.2f2班:
%.2f3班:
%.2f\n",average1,average2,average3);
else
printf("1班:
%.2f3班:
%.2f2班:
%.2f\n",average1,average3,average2);
}
else
{
if((average2>=average1)&&(average2>=average3))
{
if(average1>=average3)
printf("2班:
%.2f1班:
%.2f3班:
%.2f\n",average2,average1,average3);
else
printf("2班:
%.2f3班:
%.2f1班:
%.2f\n",average2,average3,average1);
}
else
{
if(average1>=average2)
printf("3班:
%.2f1班:
%.2f2班:
%.2f\n",average3,average1,average2);
else
printf("3班:
%.2f2班:
%.2f1班:
%.2f\n",average3,average2,average1);
}
}
p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;
printf("\n◎计算机班级平均分◎\n");
printf("--\n");
while(p!
=NULL)
{
if(p->Class==1){sum1=sum1+p->computer;n1++;}
if(p->Class==2){sum2=sum2+p->computer;n2++;}
if(p->Class==3){sum3=sum3+p->computer;n3++;}
p=p->next;
}
average1=sum1/n1;average2=sum2/n2;average3=sum3/n3;
if((average1>=average2)&&(average1>=average3))
{
if(average2>=average3)
printf("1班:
%.2f2班:
%.2f3班:
%.2f\n",average1,average2,average3);
else
printf("1班:
%.2f3班:
%.2f2班:
%.2f\n",average1,average3,average2);
}
else
{
if((average2>=average1)&&(average2>=average3))
{
if(average1>=average3)
printf("2班:
%.2f1班:
%.2f3班:
%.2f\n",average2,average1,average3);
else
printf("2班:
%.2f3班:
%.2f1班:
%.2f\n",average2,average3,average1);
}
else
{
if(average1>=average2)
printf("3班:
%.2f1班:
%.2f2班:
%.2f\n",average3,average1,average2);
else
printf("3班:
%.2f2班:
%.2f1班:
%.2f\n",average3,average2,average1);
}
}
}
8、数据保存模块
voidsave(structstudent*head)
{
structstudent*p;
FILE*fp;
fp=fopen("myfile.txt","wb");
p=head;
while(p!
=NULL){fwrite(p,LEN,1,fp);p=p->next;}
fclose(fp);
printf("保存成功!
\n");
}
9、数据读取模块
structstudent*load()
{
structstudent*head,*p1,*p2;
FILE*fp;
n=0;head=NULL;
fp=fopen("myfile.txt","rb");
head=p2=p1=(structstudent*)malloc(LEN);
while(fread(p1,LEN,1,fp)==1)
{
p2=p1;
p1=(structstudent*)malloc(LEN);
p2->next=p1;
n++;
}
p2->next=NULL;
fclose(fp);
printf("读取成功!
\n");
return(head);
}
10、主函数
voidmain()
{
system("color0B");
structstudent*head=NULL,*stu;
intnum,choice;
charname[10];
while
(1)
{
system("pause");
system("cls");
printf("########################\n");
printf("##\n");
printf("#☆★☆学生成绩管理系统菜单☆★☆#\n");
printf("##\n");
printf("#1.创建学生成绩单#\n");
printf("##\n");
printf("#2.增加学生信息#\n");
printf("##\n");
printf("#3.删除学生信息#\n");
printf("##\n");
printf("#4.查看学生信息#\n");
printf("##\n");
printf("#5.显示所有学生信息#\n");
printf("##\n");
printf("#6.班级成绩对比#\n");
printf("##\n");
printf("#7.保存至文件#\n");
printf("##\n");
printf("#8.从文件中读取信息#\n");
printf("##\n");
printf("#9.退出系统#\n");
printf("##\n");
printf("########################\n");
printf("\n请选择所需功能:
");
scanf("%d",&choice);
printf("\n");
switch(choice)
{
case1:
head=creat();break;
case2:
stu=(structstudent*)malloc(LEN);
printf("请输入学生信息\n");
printf("学号:
");scanf("%d",&stu->num);
printf("姓名:
");scanf("%s",stu->name);
printf("性别:
");scanf("%s",stu->sex);
printf("班级:
");scanf("%d",&stu->Class);
printf("数学:
");scanf("%d",&stu->math);
printf("英语:
");scanf("%d",&stu->english);
printf("计算机:
");scanf("%d",&stu->computer);
while
(1)
{
head=insert(head,stu);
printf("请继续输入学生信息(按\"0\"退出)\n");
stu=(structstudent*)malloc(LEN);
printf("学号:
");scanf("%d",&stu->num);
if(stu->num==0)break;
printf("姓名:
");scanf("%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉 科技大学 语言 毕业 课程设计 实验 报告