一级实践环节报告

一级实践环节报告

课题名称: 软件学院一级课题实践 专 业: 班 级: 学 号: 学生姓名: 指导教师:

2016年 2 月 12 日

目录

第1章 概述 ....................................................................................................................... 3 第2章任务与实现 ................................................................................. 错误!未定义书签。 2.1计算机辅助系统 .............................................................................. 错误!未定义书签。 2.2 日期转换 .......................................................................................... 错误!未定义书签。 2.3学生成绩管理系统V6.0 .................................................................................................... 4 第3章 总结 ........................................................................................................................... 23 参考文献: ............................................................................................................................. 24

第1章 概述

寒假期间采用C语言过程化程序设计方法,设计实现以下程序

1. 课本P143页实验题(2):小学生计算机辅助教学系统六个任务全部完成,

采用模块化程序思想,使用必要的自定义函数。 2. 课本P370页 学生成绩管理系统V6.0(选作)。 设计开发工具:Microsoft Visual c++ 6.0 程序设计语言:C语言 我完成的主要设计任务有:

学生成绩管理系统V6.0

2.3学生成绩管理系统V6.0

1. 题目要求

(1). 退 出 (2). 成 绩 录 入 (3). 计算每门课程的总分和平均分 (4). 计算每个学生的总分和平均分 (5). 按每个学生的总分由高到低排出名次表 (6). 按每个学生的总分由低到高排出名次表 (7). 按 学 号 由 小 到 大 排 出 成 绩 表 (8). 按姓名的字典顺序排出成绩表 (9). 按学号查询学生排名及其考试成绩 (10). 按姓名查询学生排名及其考试成绩 (11). 对学生进行分类 (12). 输 出 全 部 (13). 将每个学生的记录信息写入文件 (14). 从文件中读出每个学生的记录并显示 2. 设计思路

首先设计一个菜单界面,然后给定一个要输入的人数界限,根据自己要输入的人数和科目进行输入.系统会提示你输入学生的信息,其中包括学号、姓名、各科目的分数.再输入信息后根据自己的要求进行相应计算、排序输出、读取,查询功能用switch函数构建主程序,功能模块及其流程图

实现

代码

#include

#include

#include

#define MAX_STUDENT 30

#define MAX_COURSE 6

typedef struct student

{

long studentID;

char studentname[20];

int score[MAX_COURSE];

int total;

float aver;

}STUDENT;

void menu();

void Add(int *pm,int*pn);

void Inputscore(STUDENT stu[],int m,int n);

void Calate2(STUDENT stu[],int m,int n);

void Calate1(STUDENT stu[],int m,int n);

void print(STUDENT stu[],int n);

void Sumsortdecen(STUDENT stu[],int n);

void Sumsortascen(STUDENT stu[],int n);

void Denumber(STUDENT stu[],int m,int n);

void Dicts(STUDENT stu[],int m,int n);

void Searchbynum(STUDENT stu[],int m ,int n);

void Searchbyname(STUDENT stu[],int m ,int n);

void Statistis(STUDENT stu[],int m,int n);

void List(STUDENT stu[],int m,int n);

void Writetofile(STUDENT stu[],int m,int n);

void Readfromfile(STUDENT stu[],int *m,int *n);

void Printscore(STUDENT stu[],int m,int n);

int main()

{

int k;

int n,m;

int *pm=&m,*pn=&n;

STUDENT stu[MAX_STUDENT];

printf("\t\t***************欢迎使用

*******************\n");

do//设置循环可以重复显示菜单

{ 学生成绩管理系统 3.

menu(); printf("Please enter your choice:\n"); scanf("%d",&k); switch(k) { case 1: Add(&m,&n); Inputscore(stu,m,n); break; case 2: Calate1(stu,m,n); break; case 3: Calate2(stu,m,n); print(stu,n); break; case 4: Calate2(stu,m,n); Sumsortdecen(stu,n); break; case 5: Calate2(stu,m,n); Sumsortascen(stu,n); break; case 6: Denumber(stu,m,n); break; case 7: Dicts(stu,m,n); break; case 8: Calate2(stu,m,n); Searchbynum(stu,m,n); break; case 9: Calate2(stu,m,n); Searchbyname(stu,m,n); break; case 10: Statistis(stu,m,n); break; case 11: List(stu,m,n); Calate1(stu,m,n);

break;

case 12:

Calate2(stu,m,n);

Writetofile(stu,m,n);

break;

case 13:

Readfromfile(stu,&m,&n);

Printscore(stu,m,n);

break;

case 0:

exit(0);

default :

printf("Invalib operator!\n");

}

}while(k!=0);

return 0;

}

void menu()//菜单函数

{

printf("

||**********************************************************************

||\n");

printf(" ||1.Input record ||\n");

printf(" ||2.Caculate total and average score of every course || \n");

printf(" ||3.Caculate total and average score of every student ||\n");

printf(" ||4.Sort in decending order by total score of every student ||\n");

printf(" ||5.Sort in ascending order by total score of every student ||\n");

printf(" ||6.Sort in ascending order by number ||\n");

printf(" ||7.Sort in ascending order by name ||\n");

printf(" ||8.Search by number ||\n");

printf(" ||9.Search by name ||\n");

printf(" ||10.Statistic analysis for every course ||\n");

printf(" ||11.List record ||\n");

printf(" ||12.Write to file ||\n");

printf(" ||13.Read from a file ||\n");

printf(" ||0.Exit ||\n");

printf("

||**********************************************************************

**\n");

}

void Add(int *pm,int*pn)//输入学生人数和考试科目

{

printf("请输入考试科目");

scanf("%d",pm);

printf("请输入学生人数");

scanf("%d",pn);

}

void Inputscore(STUDENT stu[],int m,int n)//1、输入学生的 学号,姓名,及考试成

{

int i,j;

for(i=0;i

{

printf("Input record%d\n",i+1);

printf("请输入学生学号");

scanf("%ld",&stu[i].studentID);

printf("请输入学生姓名");

scanf("%s",&stu[i].studentname);

printf("请输入学生成绩");

for(j=0;j

{

scanf("%ld",&stu[i].score[j]);

}

}

}

void Calate2(STUDENT stu[],int m,int n)//3、计算每个学生的平均分及总分

{

int i,j;

int sum[MAX_STUDENT];

for(i=0;i

{

sum[i]=0;

for(j=0;j

{

sum[i]=sum[i]+stu[i].score[j];

}

stu[i].total=sum[i];

stu[i].aver=(float)sum[i]/m;

}

}

void Calate1(STUDENT stu[],int m,int n)//2、计算每门课目的平均分及总分

{

int sum[MAX_COURSE];

float aver[MAX_COURSE];

int i,j;

for(j=0;j

{

sum[j]=0;

for(i=0;i

{

sum[j]=sum[j]+stu[i].score[j];

}

aver[j]=(float)sum[j]/m;

}

printf("Sumofcourse\t");//打印

for(j=0;j

{

printf("%4d\t",sum[j]);

}

printf("\nAverofcourse\t");

for(j=0;j

{

printf("%f\t",aver[j]);

}

printf("\n");

}

void Sumsortdecen(STUDENT stu[],int n)//4按总分由高到低排出名次表

{

int i=0,j=0,k;

STUDENT t;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(stu[j].total>stu[k].total)

{

k=j;

}

}

if(k!=i)

{

t=stu[k];

stu[k]=stu[i];

stu[i]=t;

}

}

for(i=0;i

{

printf("ID:%ld,NAME:%s,TOTAL:%d\n",stu[i].studentID,stu[i].studentname,stu[i].total);

}

}

void Sumsortascen(STUDENT stu[],int n)//5按总分由低到高排出名次表

{

int i=0,j=0,k;

STUDENT t;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(stu[j].total

{

k=j;

}

}

if(k!=i)

{

t=stu[i];

stu[i]=stu[k];

stu[k]=t;

}

}

for(i=0;i

{

printf("ID:%ld,NAME:%s,TOTAL:%d\n",stu[i].studentID,stu[i].studentname,stu[i].total);

}

}

void Denumber(STUDENT stu[],int m,int n)//6

{

int i,j,k;

STUDENT t;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(stu[k].studentID>stu[j].studentID)

{

k=j;

}

if(k!=i)

{

t=stu[k];

stu[k]=stu[i];

stu[i]=t;

}

}

}

for(i=0;i

{

printf("\tID:%ld,\tname:%s\n",stu[i].studentID,stu[i].studentname);

for(j=0;j

{

printf("\t\tProject%d,score:%d\n",j+1,stu[i].score[j]); }

}

}

void Dicts(STUDENT stu[],int m,int n)//7对学生姓名按字典顺寻排序

{

int i,j,k;

STUDENT t;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(strcmp(stu[i].studentname,stu[j].studentname)>0)

{

k=j;

}

if(k!=i)

{

t=stu[k];

stu[k]=stu[i];

stu[i]=t;

}

}

}

for(i=0;i

{

printf("\tID:%ld,\tname:%s\n",stu[i].studentID,stu[i].studentname);

for(j=0;j

{

printf("\t\tProject%d,score:%d\n",j+1,stu[i].score[j]); }

}

}

void Searchbynum(STUDENT stu[],int m ,int n)//8通过学号查询学生信息

{

int i,j,c=1,find=0,k=0;

long x;

printf("请输入要查找的学号");

scanf("%ld",&x);

for(i=0;i

{

if(stu[i].studentID==x)

{

k=i;

find=1;

break;

}

}

if(find==0)

printf("NOT FIND\n");

else

{

for(j=0;j

{

if(stu[j].total>stu[k].total)

c++;

}

printf("ID:%ld,NAME:%s\n",stu[k].studentID,stu[k].studentname);

for(j=0;j

printf("Prjoect:%d,score%d\n",j+1,stu[k].score[j]);

printf("All score :%d,Order:%d\n",stu[k].total,c);

}

}

void Searchbyname(STUDENT stu[],int m ,int n)//9通过名字查询学生信息

{

int i,j,c=1,find=0,k=0;

char name[30];

printf("请输入要查找的学生姓名");

scanf("%s",name);

for(i=0;i

{

if(strcmp(stu[i].studentname,name)==0)

{

k=i;

find=1;

break;

}

}

if(find==0)

printf("NOT FIND\n");

else

{

for(j=0;j

{

if(stu[j].total>stu[k].total)

c++;

}

printf("ID:%ld,NAME:%s\n",stu[k].studentID,stu[k].studentname);

for(j=0;j

printf("Prjoect:%d,score%d\n",j+1,stu[k].score[j]);

printf("All score :%d,Order:%d\n",stu[k].total,c);

}

}

void print(STUDENT stu[],int n)

{

int i;

for(i=0;i

{

printf("\tID:%ld,\tNAME:%s,\tTOTAL:%d,\tAVER:%f\n",stu[i].studentID,stu[i].studentname,stu[i].total,stu[i].aver);

}

}

void Statistis(STUDENT stu[],int m,int n)//函数功能分层统计学生成绩并打印出学生比例

{

int a=0,b=0,c=0,d=0,e=0,i,j;

double A,B,C,D,E;

for(j=0;j

{

int a=0,b=0,c=0,d=0,e=0;

for(i=0;i

{

if(stu[i].score[j]>=90)

a++;

else if(stu[i].score[j]>=80)

b++;

else if(stu[i].score[j]>=70)

c++;

else if(stu[i].score[j]>=60)

d++;

else

e++;

}

A=(double)a/n*100;

B=(double)b/n*100;

C=(double)c/n*100;

D=(double)d/n*100;

E=(double)e/n*100;

printf("Prject:%d\n",j+1);

printf("优秀人数:%d,百分比:%f%%\n",a,A);

printf("良好人数:%d,百分比:%f%%\n",b,B);

printf("中等人数:%d,百分比:%f%%\n",c,C);

printf("及格人数:%d,百分比:%f%%\n",d,D);

printf("不及格人数:%d,百分比:%f%%\n",e,E);

}

}

void List(STUDENT stu[],int m,int n)

{

int i,j;

for(i=0;i

{

printf("\tID:%ld,\tname:%s\n",stu[i].studentID,stu[i].studentname);

for(j=0;j

{

printf("\t\tProject%d,score:%d\n",j+1,stu[i].score[j]);

}

}

}

void Writetofile(STUDENT stu[],int m,int n)//输出n个学生的信息到文件score.txt中 {

FILE *fp;

int i,j;

if((fp=fopen("score.txt","w"))==NULL)//以写的方式打开文件

{

printf("Failure to open score.txt!\n");

exit(0);

}

fprintf(fp,"%d\t%d\n",n,m);//

for(i=0;i

{

fprintf(fp,"%10ld%8s",stu[i].studentID,stu[i].studentname);

for(j=0;j

{

fprintf(fp,"%4d",stu[i].score[j]);

}

fprintf(fp,"%4d",stu[i].total);

fprintf(fp,"%6.1f\n",stu[i].aver);

}

fclose(fp);

}

void Readfromfile(STUDENT stu[],int *m,int *n)//从文件中读取学生的信息到结构体数组stu中

{

FILE *fp;

int i,j;

if((fp=fopen("score.txt","r"))==NULL)//以只读方式打开文本文件

{

printf("Failure to open score.txt!\n");

exit(0);

}

for(i=0;i

{

fscanf(fp,"%10ld",&stu[i].studentID);

fscanf(fp,"%8s",&stu[i].studentname);

for(j=0;j

{

fscanf(fp,"%4d",&stu[i].score[j]);

}

fscanf(fp,"%4d",&stu[i].total);

fscanf(fp,"%f\n",&stu[i].aver);//不能使用%6.1f格式

}

}

void Printscore(STUDENT stu[],int m,int n)//输出n个学生的信息到屏幕上

{

int i,j;

for(i=0;i

{

printf("%10ld%8s",stu[i].studentID,stu[i].studentname);//打印学号姓名 for(j=0;j

{

printf("%4d",stu[i].score[j]);

}

printf("%4d",stu[i].total);

printf("%6.1f\n",stu[i].aver);

}

}

实现

第3章 总结

第3章总结

通过课题我收获的东西很多,我也更加认识到了自己的不足。我的课题不能让我非常满意,因为我只用简单的文件写出来了,而对于我一直有兴趣的链表却没有写出来。只用链表写出来了一个输入函数。

我先来说一说自己的收获,在假期通过以及课题我将学校中学的东西简单的综合起来了,在假期通过上网查找资料,自己翻阅课本,让自己对C语言的认识深刻了一些,我发现编程如此有趣,原来C语言可是实现这么多功能,让我看到编程的世界是那么有趣,面对好多疑难问题,有的时候不知道自己该干什么,那么无助那么纠结但是在家中自己查阅资料,终于克服困难那种心情,是一种说不出的畅快,没有什么事比看到自己的编写的程序功能正确运行更让人开心。一级课题几乎用到了全本的知识,刚开始在看任务书时我有一点费解,为什么学校如此重视一级课题,我也不明白为什么一级课题对引导我们向专业程序员过渡有那么大的功效,通过完成一级课题我发现确实是那样,一级课题有它不能取代原因,虽然一级课题只是设计一个简单的程序,但对于初入门的我们来说仍然是一个不小的挑战,对于刚入门的我们来说理解不了模块化程序设计,我只知道模块化程序设计好处多多,且对它的实现不是多理解,不知道哪里不明白,就是感觉不懂,朦朦胧胧的感觉。如果没有一级课题我不知道自己还要迷茫多久,让我对程序设计有了基本的认识,成功地完成一级课题对我的自信心也是一种很好的鼓舞,尽管这是一个很简单的东西,但是通过自己的努力很久写出来,也意味着我们向向专业的程序员迈进了一大步,上机训练不容忽视。通过实际编程,我看到了自己在c语言知识上的不足与漏洞。不仅学到了以前不懂的知识,而且对学过知识点有了深一步的理解。对于c语言的学习方法也有了一定的改进。学习C语言知识要有系统的,不能零零散散。应增加动手实践,不能只学理论知识。只有动手能力得到了提高,编写C语言程序和分析C语言问题的能力才能有所提高。。

一级课题也提高了自己独立解决问题的能力,有的问题需要自己思考,自己思索寻求答案的过程对自身能力的提升,是一种提升,对于一个程序员来说,总有一些东西需要自己思考明白算法如何实现,知道自己该干什么,要将书本上的转化为实际应用。把知识转换为能力。通过这次课题设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动

手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握不够牢固一定要养成良好的编程习惯通过,平时写程序注意语法规范格式控制,格式规范了,出了错误也容易找到出错的地方,这是C语言的基础;后期的重点要转移到掌握编程的思路和基本算法上来。课后多做习题,找一些经典例子尝试自己编写,写程序切忌半途而费,想到一个思路,就要按自己思路把它写完,就算错了,也可以让自己了解为什么这样做会错?错在哪里?会出什么结果?以后自己也很难在这个地方犯同样的错误。当学到一个新的知识点,就试着把它运用到以前做的习题上,不但巩固了以前学的内容,也更加能加强新知识的理解。

在另一方面,我更加发现自己缺乏算法思想,在做一个程序时,我不能有一个很好的思路,不能明明白白的做不清楚每一不该干什么自己以前练的太少了,听缑老师说企业最缺少的就是算法能力强具有算法思想的学生,所以我的这个缺点一定要赶紧改。我们这个专业培养的是应用型人才,所以我们要注重能力。在接下来的学习中,我会多了解有关我这个专业的东西,我们学院的教学模式就是做中学,在实践中学习,在实践中提高。所以接下来我会重点提升自己的专业课。通过这次做一级课题,我们认识到自己还有很多的知识没学好,基础知识没理清,而且许多东西还要去翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。 还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。 首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多弄出几套方案,多锻炼自己结局问题的能力和与同学合作的能力。 总之,这一切都成为我记忆里面的一个篇章,更是在C语言编程上的一个里程碑。

对函数的调用有了更深一部的了解,但是还是发现有些知识点掌握不是很劳,所以我会努力学习,掌握所学知识。 在实训中,我发现其实错误并不可怕,而且他是通往成功的必经之路

以后我会更认真地学习,学无止境,谢谢老师给我答疑,前行路上的指路人谢谢你们!

参考文献:

1. 童爱红. Visual C#.NET应用教程[M]. 北京:人民邮电出版社,2004.3

2. [2] 李兰友 杨晓光. Visual C#.NET程序设计[M] 北京:清华大学出版社,2004.5


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn