《C语言程序设计》实训报告
课题名称: 学生成绩管理系统
专 业: 软件技术
班 级: 软件A091
学 号:
姓 名:
指导教师:
20##-7-2
目 录
一 课程设计目的…………………………………………… 2
二 课程设计题目…………………………………………… 3
三 课程设计报告内容……………………………………… 3
四 总结……………………………………………………7
五 心得与感想………………………………………………8
六 附录:(源程序)………………………………………… 10
一、课程设计的目的
(1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。
(2)掌握C的基本概念和基础知识。
(3)通过训练能够读懂较为复杂的C语言源程序并具备基本C语言程序设计的能力。
(4)熟练掌握各种常用类的定义,继承,文件的应用,为更好的理解面向对象打下更好的基础。
(5)通过实训,培养自己编写、调试、分析大型应用程序的能力。
(6)掌握面向对象的基本原理,提高学生综合程序设计的能力。
(7)培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。
(8) 培养自己良好的学习兴趣,独立的编程风格。
(9) 通过实训检查自己学习上的不足,达到熟练掌握C语言的基本知识和技能。
(10)《C语言程序设计》是计算机专业重要的课程,C语言功能丰富、表达能力强,使用灵活方便、可以编写实用的应用软件。
(11)灵活使用C语言进行程序编写,巩固有关语句,变量定义、输入、输出、结构体,指针、文件操作等概念和方法。
(12)提高调试程序的技能,提高软件编写的能力。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。
二、课程设计的题目:学生成绩管理系统
三、课程设计报告内容
1.学生成绩数据包括:学号,姓名,语文,数学,英语,总分
2.使用结构体数组存放学生成绩.
typedef struct stud /*学生成绩数据结构*/
{char id[10];
Char name[20];
Int yuwen;
Int shuxue;
Int yingyu
Int totalscore;
}stud;
stud st[N]; /* 学生成绩数组*/
#define N 60
3.实现功能:
● 输入数据
● 删除数据
● 查询数据
● 修改数据
● 显示数据
● 数据可保存在文件中
● 数据可从文件中读出
● 有命令菜单提示
4.编写的程序要求完整实现功能,用户介面友好,程序运行可靠。
5. 设计的步骤
(1)需求分析:了解基本原理,确定软件的基本功能,查找相关资料;
(2)总体设计:确定软件的总体结构、模块关系和总体流程;
(3)详细设计:确定模块内部的流程和实现算法。
(4)上机编码和调试;
(5)实际数据运行测试。
6.各个功能模块和函数命名
7.各个功能模块介绍:
(1).输入成绩
指定班级名称和学期
输入若干条记录
添加存入指定成绩文件尾部
(2).删除某同学的成绩信息
指定班级名称和学期
输入学生的学号
打开该班该学期的成绩文件读入所有数据
查找指定学号的成绩记录,找到则删除该记录
把所有数据写回原数据成绩文件
(3). 查询某学生成绩
指定班级名称和学期
输入学生的学号
打开该班该学期的成绩文件读入所有数据
查找指定学号的成绩记录并显示该记录
(4). 修改某学生成绩
指定班级名称和学期
输入学生的学号
打开该班该学期的成绩文件读入所有数据
查找指定学号的成绩记录,找到显示该记录
输入该生正确的成绩
把所有数据写回原数据成绩文件
(5). 退出系统
8.处理流程
学生成绩系统主界面模块流程图
四.总结
学生成绩管理系统的编写,看似杂乱无头绪,实际上却并不如此。它的每一个功能都能分成模块,有句话说的好,大事化小,小事化了。C语言编程也正式如此,把一个大的程序分为若干相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,这样不仅降低了难度还使得思路清晰,很容易编写出要做的程序,从而为设计一些较大的软件打下了良好的基础。
分析问题:
学生成绩管理的整体功能都包括输入数据、删除数据、查询数据、修改数据、显示数据
五大板块。
设计的数据对象包括整形:各科成绩和总成绩 字符型:姓名、学号。
程序的编译与运行:
(1) 查找错误是一件让人闹心的事,但是要注重技巧,注意平时经验的积累。才能在最快的时间找出错误
(2) 用心去查找,也许你会发现错误并不是很难找
(3) 程序编译成功不要满足现状,要积极测试程序的可用性,对功能不理想,存在缺点的地方,积极的改进,完善。
五.心得与感想
一周的C语言实训,虽然时间略显仓促,但却让我学到了很多实际运用的技能!
首先,在实训中的第一步是编写功能较为单一的小程序,虽然是小程序,但所用的知识却都是我们本学期学习的重点知识。在做题的过程中让我们把这些知识复习了一遍,强化了知识!
其次,这次作中所碰到的题目,在实训中已经接触过,所我们都比较深知这些题目的要求和算法,因次在编写小程序时比较快,而且算法也是比较简化,运算准确。鉴次我明白很多编程题要经过多次编写修改与调试,才会得到最简略的算法。
再次,平时我们学C语言视乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们的将所学知识运用于解决实际问题的机会,让人更有激情,这就是编写软件的在雏形,也让我们感受到了编写软件程序的乐趣。但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用!
虽然我这次是编写一个菜单的程序,但是如果我么留心的话,我们身边有许多电子设备都是内置有程序的,我们也可以在此次专题实训过后,自行确定其他的专题进行编写程序,这样可以让我们的知识更加深化丰富!
这次实训似乎是对我巨大的考验,程序在不慌不忙的进行着,按照我自身的进度,提前完成是没有问题的,但是很多客观条件让我不得不在最后的时间里才上交的作业。每当我把程序写完以后,却由于每一台电脑的识别格式不一样而导致我所写的文件一次次的被损坏,尽管这样,我仍然没有放弃,最后还赶在截止时间到来之前上交了我的作业!
这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好,可是又不轻易的向老师询问,因为好像蛮简单,相信自己能够检查出来,所以我一般都是独立思考的完成的,只有少部分是在老师和与同学讨论下完成的。
在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。没能够使自己编写出来的程序等到想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。
在实训过程中,使我良好的锻炼了自己,首先是兴趣方面,通过编写通讯录管理系统使我更加喜欢编程,使我从以前的迷茫状态中解脱出来,使我了解了编程的真正意义。我想这对我以后的人生有着很大的帮助。其次通过编写通讯录管理系统使我对写程序有了一定的思路,不像以前无从下手,使我理解了算法的意义,使我懂得了模块化思想的好处。
通过一个星期的编写代码,使我对书本上的知识有了更深的理解,甚至有很多不懂的问题在这过程中自然而然的理解了。对期末考试更有了信心。在黄爽老师的悉心指导下,我对C语言有了更深刻的理解,对程序的算法,数据的定义,程序的改错等方面的能力有了很大提高,自身的注意力,耐心,和对编程的兴趣有了很大增长,使我获益匪浅。
六.C语言源程序
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include "ctype.h"
#define N 60
typedef struct stud
{
char id[10];
char name[20];
int yuwen;
int shuxue;
int yingyu;
int totalscore;
}stud;
stud st[N];
int menu_select();
void add_class_term_score();
void class_term(char filename[20]);
int inputscore(stud st[],char filename[]);
void addtotext(stud *st,int i,char filename[20]);
int inputfromtext(stud *st,char filename[20]);
void writetotext(stud *st,int i,char filename[20]);
void delect_a_record();
int queryrecord(stud st[],int n,char num[10]);
void deleterecord(stud st[],int n,int i);
void query_a_record();
void revise_a_record();
void creatfile();
main()
{
for(;;)
{switch (menu_select())
{
case 1:creatfile();break;
case 2:add_class_term_score();break;
case 3:delect_a_record();break;
case 4:query_a_record();break;
case 5:revise_a_record();break;
case 0:printf("\tHave a good luck!Bye-Bye!\n ");
system("pause");
exit(0);
}
}
}
int menu_select()
{
char c;
do
{
system("cls");
printf("\t****学生成绩管理系统****\n");
printf("\t | 1.创建文件 | \n");
printf("\t | 2.输入数据 | \n");
printf("\t | 3.删除数据 | \n");
printf("\t | 4.查询数据 | \n");
printf("\t | 5.修改数据 | \n");
printf("\t | 0.退出 | \n");
printf("\t**************************************\n");
printf("\tGIVE YOUR CHOICE(0-5):");
c=getchar();
}
while (c<'0'||c>'5');
return(c-'0');
}
void add_class_term_score()
{
int number;
stud st[N];
char filename[20];
class_term (filename);
printf("输入若干学生成绩\n");
number=inputscore(st,filename);
addtotext(st,number,filename);
}
void class_term(char filename[20])
{
char class[10],term[2];
printf("\n input classname and term :");
scanf("%s",class);
scanf("%s",term);
strcat(class,"_");
strcpy(filename,class);
}
int inputscore(stud st[],char filename[])
{
int i=0;
char sign='Y';
while(sign!='n'&&sign!='N')
{
printf("\tstudent\'s id:");
scanf("%s",st[i].id);
printf("\tstudent\'s name:");
scanf("%s",st[i].name);
printf("\tstudent\'s yuwen:");
scanf("%s",st[i].yuwen);
printf("\tstudent\'s shuxue:");
scanf("%s",st[i].shuxue);
printf("\tstudent\'s yingyu:");
scanf("%s",st[i].yingyu);
gets(filename);
st[i].totalscore=st[i].yuwen+st[i].shuxue+st[i].yingyu;
printf("\n input any more records?(Y/N)");
scanf("%c",&sign);
i++;
}
return (i);
}
void addtotext(stud *st,int n,char filename[20])
{
int i=0;
FILE *fp;
printf("write records to text file.\n");
if ((fp=fopen(filename,"ab"))==NULL)
{
printf("cann\'t open the file\n");
system("pause");
return;
}
while (i<n)
{
fwrite(&st[i],sizeof(stud),1,fp);
i++;
}
fclose(fp);
printf("successed!\n");
}
int inputfromtext(stud *st,char filename[20])
{
int i=0,num;
FILE *fp;
if((fp=fopen(filename,"rb"))==NULL)
{
printf("cann\'t open the file\n");
system("pause");
return(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d%d",st[i].id,st[i].name,
&st[i].yuwen,&st[i].shuxue,&st[i].yingyu,&st[i].totalscore);
i++;
}
fclose(fp);
printf("successed!\n");
system("pause");
return(i);
}
void writetotext(stud *st,int n,char filename[20])
{
int i=0;
FILE *fp;
if((fp=fopen(filename,"rb"))==NULL)
{
printf("cann\'t open the file\n");
system("pause");
return;
}
fprintf(fp,"%d\\n",n);
while(i<n)
{
fwrite(&st[i],sizeof(stud),1,fp);
i++;
}
fclose(fp);
printf("successed!\n");
}
void delect_a_record()
{
char filename[20],stuid[10],ch;
stud st[N];
FILE *fp;
int n,i;
class_term(filename);
printf("输入删除的学生的学号\n");
scanf("%s",stuid);
n=inputfromtext(st,filename);
i=queryrecord(st,n,stuid);
if (i>=0)printf("确认删除吗?Y\N");
ch=getchar();
if(ch=='Y'||'y')
deleterecord(st,n,i);
writetotext(st,n-1,filename);
}
int queryrecord(stud st[],int n,char num[10])
{
int i=0;
while(strcmp(st[i].id,num)!=0&&i<n) i++;
if (i==n)
{
printf("not find!\n");
return(-1);
}
printf("his(her) name is %s\n",st[i].name);
printf("his(her) score is : yuwen=%5d shuxue=%5d yingyu=%5d totalscore=%d\n",
st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].totalscore);
return(i);
}
void deleterecord(stud stud[],int n,int i)
{
int j;
if(i<1||i>n-1)
{printf("位置错误\n");return;}
for(j=i;j<n-1;j++)
{
strcpy(stud[j].id,stud[j+1].id);
strcpy(stud[j].name,stud[j+1].name);
stud[j].yuwen=stud[j+1].yuwen;
stud[j].shuxue=stud[j+1].shuxue;
stud[j].yingyu=stud[j+1].yingyu;
stud[j].totalscore=stud[j+1].totalscore;
}
printf("delete successed!\n");
return;
}
void query_a_record()
{ char filename[20],stuid[10];
stud st[N];
FILE *fp;
int n,i;
class_term(filename);
printf("输入查找学生的学号\n");
scanf("%s",stuid);
n=inputfromtext(st,filename);
queryrecord(st,n,stuid);
}
void revise_a_record()
{
char filename[20],stuid[10];
stud st[N];
FILE *fp;
int i,n;
class_term(filename);
printf("输入需要修改的学生学号\n");
scanf("%s",stuid);
n=inputfromtext(st,filename);
i=queryrecord(st,n,stuid);
if(i>0)printf("输入正确的成绩\n");
printf("\tstudent\'s id:");
scanf("%s",st[i].id);
printf("\tstudent\'s name:");
scanf("%s",st[i].name);
printf("\tstudent\'s yuwen:");
scanf("%s",st[i].yuwen);
printf("\tstudent\'s shuxue:");
scanf("%s",st[i].shuxue);
printf("\tstudent\'s yingyu:");
scanf("%s",st[i].yingyu);
gets(filename);
st[i].totalscore=st[i].yuwen+st[i].shuxue+st[i].yingyu;
writetotext(st,n,filename);
}
void creatfile()
{
FILE *fp;
if( (fp=fopen( "baibai.txt", "wb"))==NULL)
{
printf( "文件创建失败\n" );
return;
}
fclose( fp );
}来源:(http://blog.sina.com.cn/s/blog_661bd1ad0100j5p5.html) - C语言实训心得体会_青春的记忆_新浪博客
实习报告实习是每一个大学毕业生必须拥有的一段经历,它使我们在实践中了解社会、在实践中巩固知识;实习又是对每一位大学毕业生专业知识的…
模板实训报告建筑工程技术模板实训实习名称模板实训工程指导教师刘福珍实习学生专业班级11建筑302班所在小组学号20xx601302…
训生实训报告题目院业号姓名年月日实学专学学实训报告实训报告目录前面两页按我的模板就行了关于实训时间实训地点的表那一页不用改直接用就…
荆楚理工学院课程实训成绩年级20xx级专业电气工程及其自动化课程低压电气控制技术班级11电工2班姓名志学号20xx401020xx…
湖北轻工职业技术学院Protel实训报告题目单片机最小系统的PCB设计系部信息工程系专业电子信息工程技术班级10电信班姓名学号10…
C语言实训心得10903090113李新程在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。在为…
甘肃机电职业技术学院C语言程序设计实实习时间指导教师学生姓名学号专业班级报告20xx年x月x日至20xx年x月x日止朱七二杨雪曼6…
信息111班潘康乐44号一、实训要求1、实训目的《言程序设计课程实训是三年制高职计算机应用技术、计算机网络技术、软件技术专业的重要…
计算机专业实践教学总结为了进一步增强实践教学效果,提高学生计算机编程能力,更好的理论联系实际,根据我院计算机专业专科实践性教学环节…
设计题目及要求设计题目及要求设计题目及要求设计题目及要求1.综合应用实例——学生成绩管理编写一个菜单驱动的学生成绩管理程序。实现如…
C语言实训报告做完这个课程设计,我们的自信一下子提高了;尽管对于有些人这种程序会很简单,可对我们c语言初学者来说,已经很不容易了。…