C语言综合性实验报告1.docx
《C语言综合性实验报告1.docx》由会员分享,可在线阅读,更多相关《C语言综合性实验报告1.docx(14页珍藏版)》请在冰豆网上搜索。
C语言综合性实验报告1
华北科技学院计算机系综合性实验
实验报告
课程名称C程序设计
实验学期至学年第学期
学生所在系部
年级专业班级
学生姓名学号
任课教师
实验成绩
计算机系制
《C程序设计》课程综合性实验报告
开课实验室:
数学应用实验室2010年7月1日
实验题目
《基于链表的学生成绩管理系统》
一、实验目的
1、掌握链表的创建、显示、清除;掌握链表结点的查找、修改、删除;
2、掌握链表结点的排序;
3、掌握链表数据的文件保存、读取;
二、设备与环境
微型计算机、VisualC++6.0
三、实验内容
源程序:
#include
#include
#include
#include
#defineLENsizeof(structxsnode)
structxsnode
{
intxh;
charxm[15];
intgs;
intyy;
intwl;
floatpj;
intmc;
structxsnode*next;
}stu[100];
intlength;/*全局变量*/
FILE*fp=NULL;/*定义指针*/
/*********************成绩录入********************/
structxsnode*luru()
{structxsnode*p1,*p2,*head;
inti,sum=0,flag=1;
system("cls");/*刷屏*/
while(flag==1)
{printf("inputlengthoflist(<100):
");
scanf("%d",&length);
if(length<100)
flag=0;
}
for(i=0;i{p1=(structxsnode*)malloc(LEN);
if(i==0)
head=p2=p1;
else
p2->next=p1;
p2=p1;
printf("No.:
");
scanf("%d",&p1->xh);
printf("name:
");
scanf("%s",&p1->xm);
printf("gscj:
");
scanf("%d",&p1->gs);
printf("yycj:
");
scanf("%d",&p1->yy);
printf("wlcj:
");
scanf("%d",&p1->wl);
sum=p1->gs+p1->yy+p1->wl;
p1->pj=(float)(sum/3.0);
}
p1->next=NULL;
fp=fopen("stud1","w");
for(i=0;iif(fwrite(&stu[i],sizeof(structxsnode),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
return(head);
}
/********************成绩修改********************/
voidxiugai(structxsnode*head)
{structxsnode*p1,*p2;
system("cls");
p1=head;
intxh1,i=0,sum=0;
printf("请输入要修改的学生的学号:
");
scanf("%d",&xh1);
while(xh1!
=p1->xh&&p1->next!
=NULL)
{p2=p1;p1=p1->next;i++;}
if(xh1==p1->xh)
printf("要修改的学生信息为:
\n");
printf("%6d%8s%8d%8d%8d",p1->xh,p1->xm,p1->gs,p1->yy,p1->wl);
printf("\n请重新输入学生信息(学号、姓名、高数成绩、英语成绩、物理成绩):
\n");
scanf("%d%s%d%d%d",&p1->xh,&p1->xm,&p1->gs,&p1->yy,&p1->wl);
sum=p1->gs+p1->yy+p1->wl;
p1->pj=(float)(sum/3.0);
if((fp=fopen("stud1","r"))==NULL)
{printf("文件不能打开!
");
exit(0);
}
fwrite(&stu[i],sizeof(structxsnode),1,fp);
fclose(fp);
}
/********************成绩删除*********************/
voidshanchu(structxsnode*head)
{
intfind;
intxh1,i=0,j=0;
structxsnode*p,*pt;
system("cls");
printf("输入要删除的学生的学号:
");
scanf("%d",&xh1);
pt=head;
p=pt;
if(pt->xh==xh1)
{
p=pt->next;
head=pt=p;
find=1;
}
else
pt=pt->next;
while(pt!
=NULL)
{i++;
if(pt->xh==xh1)
{
p->next=pt->next;
find=1;
}
else
p=pt;
pt=pt->next;
}
if(find!
=1)
printf("Notfound%s",xh1);
p=head;
if((fp=fopen("stud1","r"))==NULL)
{printf("文件不能打开!
");
exit(0);
}
fp=fopen("stud1","w");
for(j=0;ji&&jfwrite(&stu[i],sizeof(structxsnode),1,fp);
fclose(fp);
length--;
}
/***********************成绩查询**************************/
voidchaxun(structxsnode*head)
{
intxh2;
structxsnode*p;
system("cls");
p=head;
printf("输入学号为0表示退出查询:
\n");
printf("所查找学号:
");
scanf("%d",&xh2);
while(p!
=NULL&&xh2!
=0)
{
if(p->xh==xh2)
{
printf("No.namegscjyycjwlcj\n");
printf("%6d%8s%8d%8d%8d",p->xh,p->xm,p->gs,p->yy,p->wl);
}
p=p->next;
printf("\n");
printf("输入学号为0表示退出查询:
\n");
printf("所查找学号:
");
scanf("%d",&xh2);
if(xh2==0)
{
printf("inputerrorandexit!
\n");
getch();
}
}
}
/********************成绩浏览**********************/
voidliulan(structxsnode*head)
{structxsnodest;structxsnode*p;
inti=0,k=1,j;
floatmc[100];
system("cls");
p=head;
if((fp=fopen("stud1","r"))==NULL)
{printf("文件不能打开!
");
exit(0);
}
printf("No.namegscjyycjwlcjpjcj\n");
while(p!
=NULL)
{printf("%6d%8s%8d%8d%8d%8.2f\n",p->xh,p->xm,p->gs,p->yy,p->wl,p->pj);
mc[i]=p->pj;
i++;
p=p->next;
}for(j=0;j{
for(i=0;iif(mc[j]=i)
k=k+1;
printf("学号对应名次如下:
\n");
printf("%d\n",k);
k=1;}
getch();
fclose(fp);
}
voidmain()
{intc,flag=0;structxsnode*head;
printf("\n\n\n\n\t\t\t##################\n");
printf("\t\t\t##\n");
printf("\t\t\t#--欢迎使用学生管理系统--#\n");
printf("\t\t\t\n");
printf("\t\t\t#----计算B101肖圣龙----#\n");
printf("\t\t\t##\n");
printf("\t\t\t##################\n");
getch();
while(flag==0)
{system("cls");
printf("\n\n\n\n");
printf("\t\t\t*****************************************\n");
printf("\t\t\t*1.成绩录入*\n");
printf("\t\t\t**\n");
printf("\t\t\t*2.成绩修改*\n");
printf("\t\t\t**\n");
printf("\t\t\t*3.成绩查询*\n");
printf("\t\t\t**\n");
printf("\t\t\t*4.成绩浏览*\n");
printf("\t\t\t**\n");
printf("\t\t\t*5.成绩删除*\n");
printf("\t\t\t**\n");
printf("\t\t\t*6.退出系统*\n");
printf("\t\t\t*****************************************\n");
printf("\t\t\t请按数字键1~6,进行相应操作:
");
scanf("%d",&c);
fflush(stdin);/*刷新缓冲区*/
switch(c)
{
case1:
head=luru();break;
case2:
xiugai(head);break;
case3:
chaxun(head);break;
case4:
liulan(head);break;
case5:
shanchu(head);break;
case6:
flag=1;break;
default:
printf("\t\t<没有此选项,按任意键重新选择!
>");
getch();break;
}
if(flag==1)break;
}
system("cls");
printf("\n\n\n\n\t\t\t##################\n");
printf("\t\t\t##\n");
printf("\t\t\t#--谢谢使用--#\n");
printf("\t\t\t##\n");
printf("\t\t\t##################\n");
getch();
}四、实验结果及分析
第一步:
运行,出现下面屏幕
第二步:
按回车进入下面屏幕,
(1)成绩录入:
(2)成绩修改:
(3)成绩查询:
(4)成绩浏览:
(5)成绩删除后浏览:
(6)退出系统:
二.(心得)
对整体C语言来讲,它是一门具有很强的严谨性的课程。
首先你的有一个整体的观念,设计好整体的实验功能,比如结构体的运用,链表的运用,成绩录入函数,成绩修改函数,成绩查询函数,成绩浏览函数……
从最开始的打稿,就要做好每个程序的编写,小到一个符号,都要做好认真的检查。
编译过程中,由于程序函数比较多,进行一个一个处理。
每个程序都成功运行,在进行整体合并。
当出现错误时,我就用上我自己学习的设置断点,进行调试。
总体来说,一个程序的完成,是对一个人的一次考验,身体的考验,精神的考验,更加能锻炼人严谨的心。
教师评价
评定项目
A
B
C
D
评定项目
A
B
C
D
算法正确
界面美观,布局合理
程序结构合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规范
题解正确
其他:
评价教师签名:
年月日