C程序训练报告.docx
《C程序训练报告.docx》由会员分享,可在线阅读,更多相关《C程序训练报告.docx(20页珍藏版)》请在冰豆网上搜索。
C程序训练报告
C程序训练报告
题目:
C语言程序设计综合训练
院系:
计算机科学与工程学院
专业班级:
电子信息技术及仪器10-2班
学号:
xxxxxxxxx
学生姓名:
xxx
指导教师:
xxx
2010年12月25日
安徽理工大学程序训练任务书
计算机学院监控与嵌入式技术系
学号
xxxxxxxxx
学生姓名
xxx
专业(班级)
电子信息技术及仪器10-2班
设计题目
学生成绩管理系统
设
计
技
术
参
数
(1)用C语言实现设计任务;
(2)所设计的程序可读性好,执行效率高;
(3)有良好的操作界面;
(4)设计说明书能很好地反映设计内容
设
计
要
求
(1)问题分析及解决方案框架确定
(2)详细设计和编码
(3)上机前编写程序与检查
(4)上机调试程序
(5)完成课程设计报告
工
作
量
要求设计说明书的字数在3000字以上。
工
作
计
划
2010.11.10-11.20根据课程设计大纲的要求,查找相关资料,完成需求分析;
2010.11.21-12.30进行系统的概要设计;
2010.12.01-12.10进行系统的详细设计和源代码的书写;
2010.12.11-12.25对系统进行调试分析,写出程序训练报告。
参
考
资
料
[1]何钦铭.C语言程序设计.北京:
高等教育出版社,2008
[2]颜晖.C语言程序设计实验指导.北京:
高等教育出版社,2008
[3]谭浩强编著.C程序设计(第二版).北京:
清华大学出版社,1999
指导教师签字
教研室主任签字
2010年11月10日
目录
学生成绩管理系统-1-
1设计内容-1-
2解题思路-1-
3调试过程-1-
4程序清单-1-
5测试数据-2-
6小结-2-
学生成绩管理系统
1设计内容
●问题描述
学生成绩管理系统设计:
学生成绩信息包括:
学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:
(1)能按学期、按班级完成对学生成绩的录入、修改
(2)能按班级统计学生的成绩,求学生的总分及平均分
(3)能查询学生成绩,不及格科目及学生名单
(4)能按班级输出学生的成绩单
●输入数据
主要以字符型(char)以及整型(int)作为数据的输入类型
●输出要求
以字符型(char)以及整型(int)作为结果的输出类型
●输入样例
●输出样例
2解题思路
使用结构数组实现对学生信息的输入、删除和查询等功能!
程序框图如下:
3调试过程
(1)某些语句多余或错误致使输出结果或屏幕显示达不到期望值;
(2)中括号配对缺少在调试的时候显示错误信息;
(3)链表方面的知识欠佳,造成编辑和查错过程艰难;
(4)对循环条件选择错误导致无法正常退出;
(5)输入语句经常丢失地址符,使数据无法正常输入。
4程序清单
#include"stdio.h"
#include"stddef.h"
#include"stddef.h"
#include"string.h"
#defineMAX10
typedefstructstudent{/*定义结构体*/
charname[MAX];/*姓名*/
intnum[MAX];/*学号*/
charsex[MAX];/*性别*/
intchinese;/*语文*/
intmathematic;/*数学*/
intenglish;/*英语*/
intcomputer;/*计算机*/
structstudent*next;/*结构体指针*/
}stu;
stu*head;/*头指针*/
voidprint()/*显示或打印函数*/
{
printf("\t\t\t学生成绩管理系统\n");/*成绩管理系统*/
printf("<1>输入数据\n");/*输入数据*/
printf("<2>显示\n");/*显示*/
printf("<3>插入\n");/*插入数据*/
printf("<4>查询\n");/*访问数据*/
printf("<5>历史记录\n");/*以前数据*/
printf("<6>保存\n");/*保留数据*/
printf("<7>修改\n");/*更新数据*/
printf("<8>语文平均成绩\n");/*语文平均成绩*/
printf("<9>数学平均成绩\n");/*数学平均成绩*/
printf("<10>英语平均成绩\n");/*英语平均成绩*/
printf("<11>计算机平均成绩\n");/*计算机平均成绩*/
printf("<12>退出\n");/*退出*/
}
voidcin(stu*p1)/*输入相关数据的函数*/
{
printf("输入姓名:
\n");
scanf("%s",&p1->name);
printf("输入性别:
\n");
scanf("%s",&p1->sex);
printf("输入成绩:
\n");
printf("语文:
\n");
scanf("%d",&p1->chinese);
printf("数学:
\n");
scanf("%d",&p1->mathematic);
printf("英语:
\n");
scanf("%d",&p1->english);
printf("计算机:
\n");
scanf("%d",&p1->computer);
}
stu*cindata()/*其他数据是否继续输入的函数*/
{
stu*p1,*p2;
inti=1;
charch;
p1=(stu*)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf("您想继续吗?
(Y/N)");/*是否继续输入数据*/
ch=getchar();
ch=getchar();
if(ch=='N')
{
i=0;
p1->next=NULL;
}
else
{
p2=p1;
p1=(stu*)malloc(sizeof(stu));
p2->next=p1;
}
}
return(p1->next);
}
stu*lookdata(stu*p1)/*查看数据的函数*/
{
while(p1!
=NULL)
{
printf("Num:
%d\t",p1->num);
printf("Name:
%s\t",p1->name);
printf("Sex:
%s\t",p1->sex);
printf("\n");
printf("Chinese:
%d\t",p1->chinese);
printf("Math:
%d\t",p1->mathematic);
printf("English:
%d\t",p1->english);
printf("Computer:
%d\t",p1->computer);
printf("\n");
p1=p1->next;
}
returnp1;
}
voidinsert()/*通过比较学号来插入数据的函数*/
{
stu*p1,*p3,*p2;
charch;
p1=head;
p3=(stu*)malloc(sizeof(stu));
p3->next=NULL;
if(head==NULL){head=p3;return;}
cin(p3);
while(p1!
=NULL&&(p1->numnum))/*通过学号的比较来插入*/
{
p2=p1;p1=p1->next;}
if(p2==head){p3->next=head;head=p3;return;}
p3->next=p1;
p2->next=p3;
}
}
find(stu*p2)/*通过姓名查找查看数据的函数*/
{
charname[20];
intb=0;
printf("输入学生姓名进行查找:
");/*通过姓名查看*/
scanf("%s",name);
while(p2!
=NULL)
{
if(strcmp(name,p2->name)==0)
{
printf("您想查看的数据为:
\n");
printf("Name:
%s\t",p2->name);
printf("Num:
%d\t",p2->num);
printf("sex:
%s\t",p2->sex);
printf("\n");
printf("Chinese:
%d\t",p2->chinese);
printf("Math:
%d\t",p2->mathematic);
printf("English:
%d\t",p2->english);
printf("Computer:
%d\t",p2->computer);
printf("\n");
b=1;
}
else
if(b==0)
printf("对不起!
无该生记录!
");
p2=p2->next;
}
if(b==1)
{
print();
printf("找到!
\n");}
else
{print();
printf("未找到!
\n");
}
}
voidcaverage()/*求各学生语文平均分、最高和最低分成绩的函数*/
{
stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{
for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->chinese;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{
if(maxchinese)
max=p1->chinese;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese;
}
printf("ChineseAverage:
%f",aver);
printf("ChineseMax:
%f",max);
printf("ChineseMin:
%f",min);
}
voidmaverage()/*求各学生数学平均分、最高和最低分成绩的函数*/
{
stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{
for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->mathematic;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{
if(maxmathematic)
max=p1->mathematic;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic;
}
printf("MatheAverage:
%f",aver);
printf("MatheMax:
%f",max);
printf("MatheMin:
%f",min);
}
voideaverage()/*求各学生英语平均分、最高和最低分成绩的函数*/
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->english;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxenglish)
max=p1->english;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->english)
min=p1->english;
}
printf("EnglishAverage:
%f",aver);
printf("EnglishMax:
%f",max);
printf("EnglishMin:
%f",min);
}
voidcomaverage()/*求各学生计算机平均分、最高和最低分成绩的函数*/
{
stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{
for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->computer;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{
if(maxcomputer)
max=p1->computer;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->computer)
min=p1->computer;
}
printf("ComputerAverage:
%f",aver);
printf("ComputerMax:
%f",max);
printf("ComputerMin:
%f",min);
}
update(stu*p2)/*通过姓名查找来更新数据*/
{
charname[10];/*p2为指向结构体structstudent的指针*/
intb=0;
printf("输入姓名:
");/*输入姓名*/
scanf("%s",name);
while(p2!
=NULL)
{
if(strcmp(name,p2->name)==0)
{
printf("Findyoudata\n");
scanf("Name:
%s",p2->name);
scanf("Num:
%s",p2->num);
scanf("Sex:
%s",p2->sex);
scanf("Chinese:
%d",p2->chinese);
scanf("Math:
%d",p2->mathematic);
scanf("english:
%d",p2->english);
scanf("Computer:
%d",p2->computer);
printf("Success!
");
b=1;
}
elseif(b==0)
printf("SorrynotFinddata!
");
p2=p2->next;}
if(b==0)
{
print();
printf("SorrynotFinddata!
");
}
else
{
print();
printf("Finish!
");
}
}
save(stu*p2)/*保留数据函数*/
{
FILE*fp;
charfile[10];
printf("Enterfilename");/*输入文件名*/
scanf("%s",file);
fp=fopen(file,"w");
while(p2!
=NULL)
{
fprintf(fp,"%s",p2->name);
fprintf(fp,"%s",p2->num);
fprintf(fp,"%s",p2->sex);
fprintf(fp,"%d",p2->chinese);
fprintf(fp,"%d",p2->mathematic);
fprintf(fp,"%d",p2->english);
fprintf(fp,"%d",p2->computer);
p2=p2->next;
}
fclose(fp);
}
charpassword[7]="Y";/*意见*/
voidmain()/*主函数*/
{
intchoice;
stu*p2;
chars[8];
intflag=0,i;
intn=1;
do{printf("是否进入系统(Y/N):
\n");
scanf("%s",s);
if(!
strcmp(s,password))/*进行密码匹配验证*/
{
printf("现在进入系统!
\n\n\n");
flag=1;
break;
}
else{
printf("您选择退出!
\n");
n--;
}
}while(n>0);
if(!
flag)
{
printf("您已经退出!
");
exit(0);/*自动退出*/
}
/*密码验证成功后进入的界面*/
printf("\t\t\t欢迎使用学生成绩管理系统!
\t\n");
printf("作者:
xxx\t班级:
电子信息2班\t学号:
xxxxxxx\n");/*作者,班级和号码*/
printf("===========\t===============\t=============\t===============\n");
print();
while
(1)
{
printf("请选择您想要的操作(1~12):
");
scanf("%d",&i);
if(i<1||i>12)
{
printf("请选择1to12:
\n");/*再从1-12中进行选择*/
scanf("%d",&i);
exit
(1);
}
else
switch(i)
{
case1:
p2=cindata();/*其他数据是否继续输入的函数*/
break;
case2:
p2=lookdata(head);/*查看数据的函数*/
break;
case3:
insert();/*通过比较学号来插入数据的函数*/
break;
case4:
find(head);/*通过姓名查找查看数据的函数*/
break;
case5:
update(head);/*通过姓名查找来更新数据*/
break;
case6:
save(head);/*保留数据函数*/
break;
case7:
print();/*显示或打印函数*/
break;
case8:
caverage();/*求各学生语文平均分、最高和最低分成绩的函数*/
break;
case9:
maverage();/*求各学生数学平均分、最高和最低分成绩的函数*/
break;
case10:
eaverage();/*求各学生英语平均分、最高和最低分成绩的函数*/
break;
case11:
comaverage();/*求各学生计算机平均分、最高和最低分成绩的函数*/
break;
case12:
exit
(1);/*退出*/
break;
}
}
}
5测试数据
姓名:
Zhaodesheng性别:
nan语文:
100数学:
100英语:
100计算机:
100
姓名:
chenjinlong性别:
nan语文:
90数学:
100英语:
100计算机:
85
…….
6小结
通过该计算类的程序设计,使我认识到分析问题以及设计算法的重要性,并基本掌握了C语言的语法,能从自然语言描述中抽象出一个计算问题,继而能通过程序实现,并将计算结果大致还原成对原问题的解答。