最新版武汉科技大学C语言毕业课程设计实验报告.docx

上传人:b****6 文档编号:4304321 上传时间:2022-11-29 格式:DOCX 页数:21 大小:369.70KB
下载 相关 举报
最新版武汉科技大学C语言毕业课程设计实验报告.docx_第1页
第1页 / 共21页
最新版武汉科技大学C语言毕业课程设计实验报告.docx_第2页
第2页 / 共21页
最新版武汉科技大学C语言毕业课程设计实验报告.docx_第3页
第3页 / 共21页
最新版武汉科技大学C语言毕业课程设计实验报告.docx_第4页
第4页 / 共21页
最新版武汉科技大学C语言毕业课程设计实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

最新版武汉科技大学C语言毕业课程设计实验报告.docx

《最新版武汉科技大学C语言毕业课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《最新版武汉科技大学C语言毕业课程设计实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

最新版武汉科技大学C语言毕业课程设计实验报告.docx

最新版武汉科技大学C语言毕业课程设计实验报告

二○一二~二○一三学年第一学期

电子技术学院

课程设计报告书

 

课程名称:

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("%s",stu->name);

prin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1