课程设计实践报告

2022-07-07

报告在当前的社会发展阶段,已经成为常见的事后总结方式,报告的内容,是以严谨、准确为特点的,有效的报告一般都具有哪些要素呢?今天小编为大家精心挑选了关于《课程设计实践报告》,希望对大家有所帮助。

第一篇:课程设计实践报告

C语言课程设计实践报告

北京理工大学珠海学院 C语言程序设计实践报告

2014—2015学年第1学期

学 院: 计算机学院 专业班级: 软件工程5班 学 号: 130202051006 学生姓名: 陈洪阳 指导教师: 戴俊雅

成 绩:

时 间:

2015年 1月5日

实践1.猜数游戏 题目概述:

编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

程序设计概要与分析:

在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。

程序代码:

#include #include #include

int main() {

int n=1; while(n!=0) {

srand((unsigned)time(NULL)); int num,input; int times=0; num=(rand()%100)+1; printf("在1~100间猜一个数 "); scanf("%d",&input); do{

if(input==num){

} else if(input>num){

} else if(input

}

}

} printf("你猜的数太小了,请再猜一个 "); scanf("%d",&input); times++; }while(times<9); if(times>=9)printf("你已经猜了10次都猜不中,你输了 "); printf("继续下一轮新的猜数请按1,退出请按0 "); scanf("%d",&n); return 0; 运行结果示例:

选择继续下一轮新的猜数,猜了10次都没猜中

心得体会:

要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。

实践2.成绩排名次 题目概述:

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求: (1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

程序设计与概要:

定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名

打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title();

void list(student s[]); int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; } //要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; }

void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 "); for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } }

void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { //n表示人数

int i;//rank=1; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

确定录入人数之后,依次输入每个学生的信息

打印出名次表:

输入学生的学号,查询学生信息:

心得体会:

懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。

实践3.单科成绩统计 题目概述:

学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实

现下列功能:(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8(…) ******** 70‐79 7(…) ******* 80‐89 8(…) ******** >=90 4(…) ****

程序设计与概要:

定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n

1、n

2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。

程序代码:

#include #include #define M 30 struct stu { char name[20]; int score; }; stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0; int count=0; void input(stu s[]); void getnotpass(stu s[]);

void getavg(stu s[]); void percent(stu s[]); int main() { /*stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0;*/ input(s); getnotpass(s); getavg(s); percent(s); return 0; } void input(stu s[]) { for(i=0;i

printf("请输入第%d个学生的姓名和成绩 ",i+1);

scanf("%s%d",&s[i].name,&s[i].score);

if(s[i].score<0)

break;

if(s[i].score>=0&&s[i].score<60)

n1++;

if(s[i].score>=60&&s[i].score<70)

n2++;

if(s[i].score>=70&&s[i].score<80)

n3++;

if(s[i].score>=80&&s[i].score<90)

n4++;

if(s[i].score>90)

n5++;

num++;

sum+=s[i].score; } printf("学生信息录入完毕 "); } void getnotpass(stu s[]) { printf("不及格人数为:%d ",n1); printf("不及格人员名单如下: "); for(i=0;i

if(s[i].score>=0&&s[i].score<60)

printf("%s ",s[i].name); } printf(" "); ave=sum/num; } void getavg(stu s[]) { for(i=0;i

if(s[i].score>=ave)count++; } printf("成绩在全班平均分及平均分之上的学生人数为:%d ",count); printf("成绩在全班平均分及平均分之上的学生名单如下: "); for(i=0;i

if(s[i].score>=ave)

printf("%s ",s[i].name); } printf(" "); } void percent(stu s[]) { printf("各分数段的学生人数及所占的百分比如下: "); printf("分段 人数 图形 "); printf("<60 %d(%.0f%%) ",n1,(float)n1/(float)num*100); for(i=0;i=90 %d(%.0f%%) ",n5,(float)n5/(float)num*100); for(i=0;i

运行结果示例:

依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入:

统计不及格人数还有打印不及格学生名单:

统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单:

以直方图方式统计各分数段的学生人数及所占的百分比:

心得体会:

懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。

实践4.函数与文件训练 题目概述:

将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中

包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。

程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title(); void list(student s[]); int save();//输出到文件中 int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; }

//要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } save(); //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 C语言 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; } void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 ");

for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } } int save() {

FILE *fp; fp=fopen("f:student.txt","w"); if(!fp) {

printf("can not open file! ");

exit(1); } char c[]="学号 数学 物理 英语 排名 "; fputs(c,fp); for(int i=0;i

fprintf(fp,"%u %d %d %d %d ",s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank); } fclose(fp); } void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { int i; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

首先输入准备录入的学生人数,然后依次输入每个学生的信息:

打印出按总成绩排序后的学生信息表,以及根据学号查询:

在f盘中找到文件并打开:

心得体会:

懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

实践5. 实践4(1)(2) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

1. 定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。 2. 函数实现从文件中输入信息到定义的数据中。

程序设计与概要:

定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); struct student { int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; float ave;

}; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k; n=readData("f:StudentInfo.txt",stu); m=readDataxy("f:SexInfo.txt",s1); k=readDataco("f:CodeInfo.txt",s2); if(n==-1||n==0)

return 0; if(m==-1||m==0)

return 0; if(k==-1||k==0)

return 0; printStudent(stu,s1,s2,n,m,k);

system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; fp=fopen(filename,"r"); if(!fp) {

printf("error1");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

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

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); }

return i; } void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

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

printf(" "); } }

运行结果示例:

心得体会:

懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体

数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。

实践6.实践4(3)(4)(5) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

3. 函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。 4. 函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。

5. 函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。

程序设计与概要:

同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); void search(struct student *stu,int n); void sortbyname(struct student *stu,int n); void sortbyave(struct student *stu,int n); struct student

{ int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; double ave; }; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k,b; while(1) {

system("cls");

printf("1.显示学生信息 ");

printf("2.姓名升序排序 ");

printf("3.平均成绩降序 ");

printf("4.学号查询学生信息 ");

printf("0.退出 ");

printf(" 输入需要查询的序号:");

scanf_s("%d",&b);

switch(b)

{

case 1:

n=readData("f:StudentInfo.txt",stu);

m=readDataxy("f:SexInfo.txt",s1);

k=readDataco("f:CodeInfo.txt",s2);

if(n==-1||n==0)

return 0;

if(m==-1||m==0)

return 0;

if(k==-1||k==0)

return 0;

printStudent(stu,s1,s2,n,m,k);

break;

case 2:

sortbyname(stu,n);

break;

case 3:

printf("按平均成绩降序排序如下:");

sortbyave(stu,n);

printStudent(stu,s1,s2,n,m,k);

break;

case 4:

search(stu,n);

break;

case 0:

return 0;

} system("pause"); } system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; double sum; fp=fopen(filename,"r"); if(!fp) {

printf("error");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

{

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

sum=stu[i].scores[j];

}

stu[i].ave=sum/10;

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); } return i;

} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

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

printf(" "); } } void search(struct student *stu,int n) { int m,col=0; printf("请输入你要查询学生的学号: "); scanf("%d",&m); for(int i=0;i

if(stu[i].id==m)

{

col=1;

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

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

}

} } if(col==0) printf("不存在该名学生信息 "); } void sortbyname(struct student *stu,int n) { student temp; for(int i=0;i

for(int j=0;j

{

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

{

temp=stu[i];

stu[i]=stu[j];

stu[j]=temp;

}

} } printf("按姓名的升序排序如下! "); for(int i=0;i

printf("%8d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

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

}

printf(" "); } } void sortbyave(struct student *stu,int n) { int i,j,flag; student s; for (j=0;j

flag=0;

for (i=0;i

{

if (stu[i].ave

{

s=stu[i];

stu[i]=stu[i+1];

stu[i+1]=s;

flag=1;

}

}

if(flag==0) break; } }

运行结果示例: 开始的菜单界面:

输入1便会显示文件中所有学生的信息:

输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出:

输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出:

输入4便会实现根据学号查询学生信息:

心得体会:

懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。

参考文献:

[1] 张克军:《程序设计基础》,科学出版社。

第二篇:《数据库设计与实践》课程报告要求

要求:使用access数据库,创建某一实例的数据库,要求在报告中说明:

1、设计目标;

2、列出数据库中的表,指明关键字和属性;

3、标示出表和表之间的关系,画出E-R图;

4、提交出设计好的access数据库文件。

设计目标具体方法如下

设计目标: 【说明设计目标】

系统分析与设计步骤:

一、确定数据库的目的。

二、已知条件。

三、经过调研,画出主要表格。

四、规划数据库中的表,确定表中的字段。

1、从收集到的信息中可直接得出有关数据项。

2、把所有数据项(或称为属性)细分为最小的数据项(即最小的信息单位),并用表格表示。

3、列出不包含推导或计算结果的最小信息单位(即属性)

4、找出它们的完全函数依赖关系:

5、优化设计,表中数据的关系进行优化,使它们满足3NF,即每一个关系既是完全函数依赖关系,关系中又不存在传递函数依赖关系。

6、规划数据库中的表,确定表中的字段

五、确定表中字段的属性(数据类型、长度等)和主键

六、确定表之间的关系

七、创建数据库,创建以上的表和表间关系。

八、输入原始数据和进行测试。

chxg@aqtvu.cn

第三篇:大学计算机基础课程设计实践报告

中南大学

本科生课程设计(实践)任务书、设计报告

(大学计算机基础)

题 目 学生姓名 指导教师 学 院 专业班级 学生学号

课程设计实践报告

计算机基础教学实验中心

2010年12月13日 ⑴任务内容: 本期我们进行了网页制作的实践,我选择做一个关于中华武术的网页.中国的历史贯穿了几千年,留下许多古老而美丽的文明,其中有一些甚至为世界文明作出了重要贡献,为人们所广泛称道.所以我希望把这些不可多得的精神财富展现给大家.恰好这些天我迷上了中国武术,带着这份热忱,我选择了这个主题. 中国武术与古典文学,是同根同源的共生关系,是中华传统文化的双碧,堪称双子星座,同样辉煌,同样灿烂。稍加留意,就会发现,中国武术的滥觞,正是中国古典文学的发轫;文事与武备至少在两三千年以前,就像是一对孪生兄弟携手而行;舞枪弄棒与吟诗作赋,很早就是被我们先民所看重的文化修养的两个方面。历史中,有无数的武术家本身就是文学家,而许许多多文学作品中也洋溢着武术的风采。这在世界文化史上尚无先例,可以说是中华民族独有的文化现象

⑵设计的步骤: 我做的网页包括了中国武术的起源、代表人.少林武术.太极拳.四个方面。 第一个内容是见证中国武术的起源和发展, 武术的起源可以追溯到原始社会,原始人使用棍捧、石器等同野兽搏斗。学会了一些基本的格斗和搏杀技能。原始战争的出现,单人应战技能得以完善。先秦时期,各国诸侯都非常重视培养和训练将士们的搏击技术,剑术得到发展。汉代,带有搏击性质的“角抵”已有广泛的基础,还发明了铁兵器,出现了编排起来的攻防连续套路。到了晋代,练武活动已有“口决要术”,武术初见雏形。唐代,是中国武术的兴盛时期,唐武则天开武举,不少武术人才脱颖而出,天下闻名的少林武术的最早记载也起于唐朝初年。

第二个内容是中华武术的代表——少林武术. 少林武术发源于河南嵩山少林寺。少林武术内容极为丰富,其中少林拳的精华被称为“少林五拳”,系指龙拳、虎拳、豹拳、蛇拳和鹤拳,分为小洪拳、大洪拳、罗汉拳、梅花桩炮捶等几十种少林拳法,还有刀、枪、剑、铲、棒等器械的技击法,并创造出少林易筋功、小武功、阴阳功、混元一气功等气功。少林拳在一千多年的发展中,逐渐分为北派少林拳和南派少林拳。

网页中还有十一张名为“自我介绍”的幻灯片,介绍了一下我自己,以一种非常风趣的风格介绍我的成长,我的成就,和我在一些比赛中的剪影。在首页上,我加入了一个有关下雪的成就的flash,使网页更加唯美,展示方式更多样化.网页一共有四个页面,其中幻灯片独成一页.首页与各个分页之间采用超链接联系起来,形成一个系统的整体. ⑶采取的方法与手段: 我用Powerpoint做好幻灯片.在PPT中,为了让表达效果更好,能更让人有耳目一新的感觉,我在每一页都有不同的处理.如采取不同的页面转换方式,采用不同的动画效果,或者自己绘制动作路线来突出主题和重点.用Frontpage做网页,在网络上收集各类文字与图片信息,来美化自己的网页画面.用Flash做出动画.,使网页动静结合,以动衬静,以静应动,更具美感.

⑷遇到的问题和解决的办法: 进行实践的时候,由于基础不够好,实践机会不够多,我遇到了不少挫折,也花费了大量时间. 在制作过程中,首先我要确定整个网页的主题和基本布局.网页的主题是中华武术,我要通过描述中国武术的博大精深将它们展示出来,利用历史资料为表达载体,各种武术形式来共同表达.首先,我在纸上先计划好网页的框架,确定怎样才能更鲜明地表达主题,怎样安排小标题的顺序才更合理.随后,我上网查找相关图片,思考怎样安排图片的位置和标注内容,凸显网页的美感.框架确定好后,我开始在工作界面上按自己的想法摆放各个需要的元素,并一边思索对文字的处理来进一步美化网页. 操作flash时一些动画处理方式不熟悉,做出来的效果和预期的不一样.我仔细地看了《大学计算机基础》,回忆老师课堂上教学软件上的内容,再在工作界面上反复试验,终于知道了如何调整图片的透明度:单击ɑ,调整上面的数值,0%则全透明,100%则图片颜色全显. 在做PPT时,我想作为背景的图片总是覆盖在文字上面,如果先输入文字再插入图片,图片就会遮挡住文字.我和同学进行交流,发现在图片上单击鼠标右键,选择“置于底层”这一项就解决了.PPT的模板不一定符合我们想做出来的效果.如果没张幻灯片都按模板做,则会显得过于刻板.此时,我们可以新建一个空白文档,就可以随心所欲地插入不同图案,在想插入文字的地方插入水平或竖直的文本框. 在做网页时,我没有办法把超链接做好.本来我先将光标置于要进行超链接的文字之前,单击“插入”中的“超链接”,发现在文字之前出现一排极为不和谐的网址符号,十分影响网页的整体效果.之后我发现用鼠标左键选中那行文字,再进行超链接的插入,文字下方则出现一条笔直的下划线,链接成功了.怎样把PPT插入网页中,这是个困扰了我很久的问题.在插入那一栏中并没有设置这一操作项.与大家探讨后,我通过把PPT“另存为网页”,然后直接在Frpntpage上点击插入超链接,PPT就被引进来了. ⑸感想:

这次实践完成后,我发现计算机最重要的是实践,有了实践,我们才能更明确地了解书上教给我们的内容,巩固自己的知识. 做网页时,一张空白网页就像是一张画纸,需要我们合理地利用它的每一寸空白,需要我们想各种办法去美化它.在画纸上挥洒墨水的同时,我们会遇到不同的问题,这就调动了我们自主学习与合作学习的能力.通过不同的方法解决问题的同时,我们的计算机知识和实践能力也在不知不觉中得到锻炼与提高.而且通过自己摸索所找到的方法,会更深地扎在我们的脑海里,比在课堂中听一百遍理论更有效. 还有一件事我感触很深,那就是没有什么东西我们可以轻松获得.想要获得成功,我们就得通过自己艰难的努力,调动活用自己所学的知识.而通过对自己掌握的知识进行总结概括,进行广泛的迁移,能给自己储备更系统化的技能. 我想,老师安排每位同学进行这次实践,除了让我们更熟悉计算机以外,还旨在培养我们的创新意识和不畏艰难的精神,培养具综合素质的人。做的同时真的学会了很多。

第四篇:《市场营销课程设计》实践课实习报告

指导教师评语

 

成绩

 

系部教研室

意 见

 

第五篇:课程设计项目实践

项目实践、设计与产品制作

本专题实践是专为电气工程专业的高年级学生,进入专业学习前所进行的专题培训,目的是为了更好地使学生适应专业学习和毕业设计,重点培养同学们动手实践和自我规划课题的能力。

专业专题实践分硬件和软件两类。其中硬件类实践是在微机原理与应用、单片机、DSP等课程基础上,结合实际的小项目,通过项目调研、方案设计、实验调试、总结报告,进行具体项目的综合训练。在整个实践过程中,希望同学们有意识地注意以下几个方面的训练:调研,方案设计,系统,控制软件方法设计,调试,总结。

同学们首先要站在宏观角度审视一个具体项目,通过调研,制定技术方案;然后按照所确定的技术路线进行相应的设计、制作、编程、调试和测试,最后进行总结和提高。希望同学们以非常认真的态度,珍惜难得的实践机会,认真完成实践任务。

需要提醒的是,专业专题实践不同于其它课程,它是项目型教学,主要是发挥同学们自己的主观能动性,自主学习性,不要依赖教师。在实践中教师是在宏观上辅导(如帮助分析方案和解答疑惑问题),所起的作用是辅助性的。更多的是需要靠同学们自己主动去调研、设计方案、实验、总结。项目型实践课程与平时的实验课不同,实验课有详细、具体的实验指导书,告诉同学们具体的实验步骤。项目实践课并不给出具体详细实践步骤和方法,需要同学们自己通过调研、与老师或同学讨论、合理分工完成。这里不仅培养同学们的自主学习(自主研发)精神和能力,也培养大家主动型的学习习惯,同时更是培养大家相互协作精神、发现问题和解决问题的能力以及研究性学习的能力。

一、实践要求

1. 每个实验项目3人一组,分工进行,提倡好的合作精神; 2. 专题实践以设计、实践为主,共四周时间;

3. 爱护设备,不随意更换设备,如有要求,请与老师联系;

4. 做硬件实验时,注意断电操作,即所有的接线、改线及拆线操作均应在不带电的状态下进行,严禁带电操作;

5. 坚持复查制度,例如通电前的复查:一人接线另一人检查,重要结果和现象复查实行二人制;

6. 每天实验完毕(包括中午),请恢复桌椅原位,,保持实验室的整洁,关闭所用实验设备电源,再离开实验室;

7. 注意人身、实验仪器和设备安全,防止发生事故。万一发生事故,应立即切断电源,保护人员,保存现场,并立即向教师报告,检查事故原因,总结并吸取教训;

8. 电热设备(如烙铁)用毕必须随手拔下电源插头,以免过热引起火灾;平时注意实验板上的带电情况,测量和调试中防止触电、短路;注意示波器高频探头的地极是通过示波器电源插头的中心端接地的,切勿将该地极与交流电源的火线相接,否则将发生短路事故;

9. 参考文献或芯片、器件手册阅读量要求:20篇以上; 10. 要求每日记录工作日志和实验情况,参见简要工作日志格式。

二、实践报告及成绩评定

1. 以小组(3人名义)形式需要完成3份报告:(1)开题报告;(2)中期报告;(3)结题报告。报告要求见后面要求。 注意:

2. 每人需要完成1份个人小结,第5周五前前提交,延期扣分。报告格式见后面要求。 3. 实施2次检查,(1)中期检查,第2周周5;(2)结题检查,第4周周5。 4. 成绩评定依据:

开题10分;中期考核10分;态度10分; 项目工作完成情况40分:

项目完成的质和量是考核的重点,还要考核同学们专题实践的主动性,项目组成员之间的合作情况,仪器设备、芯片的正确使用情况,项目验收时汇报和答辩情况等; 项目报告30分:

报告质量情况、总结的深度是考核的重点,兼顾认真程度和格式等。建议结题报告按学位论文格式完成,要求有:摘要、综述(文献阅读、任务分析、工作安排等)、正文论述、项目结论、参考文献等。

鼓励同学们自主创新,如有专利、论文等的思路或草稿,可以考虑适当加分。

.结题报告格式(每组只交一份,第2周末交) 要求按毕业设计论文模板书写结题报告。报告包括以下内容: 1. 报告摘要;

2. 课题论述:包括专题实验目的,文献阅读、项目的综述,项目要求、技术要点、难点;

3. 设计方案说明,包括设计方案研究、分析、总体方案思路,所采取的技术路线,工作和时间安排,人员分工;

4. 设计内容,包括具体的项目设计,软硬件设计,调试,讨论;

资源:单片机的选择论述,软件资源的利用等; 硬件:电路原理图、PCB图(如果有的话); 软件:结构、流程、源程序和程序注释; 调试:调试过程、问题的发现和解决;

5. 课题实验、调试记录,完成情况,存在问题及可能的解决方案,工作总结; 6. 项目结论(实验结果和结论、成果、遗憾、后续工作);

7. 附录(包括列出所用软件工具、找到的各种电子参考资料、参考文献等)

个人实践小结(每人交一份),第2周末交

主要写个人对项目的理解、投入、贡献、收获,并对自己的项目工作做简单评估,按五个等级自评:优(90~100),良(80~89),中(79~70),及格(60~69),差(60以下)。请实事求是评价个人工作,过高或过低评价都不推荐。

项目1 微机继电保护的设计与实现

一.实验目的

学习和实践交流信号数据采集和微机保护算法,学习微机保护的软、硬件原理,设计微机保护原理型样机,使用学校现有单片机教学实验箱或实验板完成原理型微机继电保护装置并实现其主要功能。

二.实验任务

1. 学习一种单片机(如Intel80

51、MC、ARM、瑞萨9等)或DSP(240

7、28

12、28335等)原理和使用,学习其编程方法;

2. 学习A/D转换技术,搭建单片机外围模拟交流信号(A/D转换器外围信号)采集环节,用信号发生器模拟继电保护电流信号(互感器输出),测试瞬时性继电保护(如电流速断)动作特性(动作和返回,返回系数0.9); 3. 设计交流信号的数据采集和微机保护算法,设计数字滤波算法,编写继电保护软件,常用有效值算法,例如半周波积分算法、差分算法、傅立叶算法等;

4. 编写实时显示程序,实现显示功能:显示交流信号有效值(折算出虚拟CT原边电流,例如100/5A,5A/2V),如能设计通讯,使用PC机做上位监控计算机实时显示测量值最好;

5. 编写延时过电流保护逻辑的微机保护软件,并实现延时过电流保护; 6. 设计实验电路板(原理图和PCB电路板),并评估。

三.相关资料和实验平台

1. 单片机或DSP实验主板,单片机或DSP资料和datasheet; 2. 继电保护、微机继电保护参考书;

3. 微机继电保护参考文献,软件流程和交流采样算法文献; 4. 实验板、部分外围芯片(如运放)、信号发生器、示波器等 5. C++编程或Lab View界面编程语言。

四.提示

请同学编写继电保护软件,主要是设计交流数据采集策略和算法,让单片机实时显示被采集的交流信号有效值,比较保护定值,决定保护动作(驱动指示灯实时点亮)。

五.选题对象

限已经选修数字和模拟电子电路、单片机课程的同学,学习过微机继电保护最好。 3人一组,合理分工。

项目2 变频器的设计与实现

暂缓

一、实验目的

学习变频调速原理,学习正弦波PWM控制方法,掌握设计和实现变频调试器的方法。 本任务拟采用纸上谈兵方式进行,主要是考核同学们具体任务的分析问题和解决问题的能力。要求给出设计方案、方法、作出设计、以及实现方式。

二. 实验任务

1. 利用IPM设计变频器的主电路;

2. 利用瑞萨单片机、MSP430或DSP设计变频器的控制系统(主要是PWM); 3. 调试变频器的软、硬件系统,最终能带三相小型异步电机;

4. 设计相关的控制算法、控制软件,产生变频PWM信号或功率输出,实现:

(1) 变频器的变频输出、V/F特性(V/F=const);

(2) 电机的起动和停止特性、电机运行中的变频控制、调压控制等; (3) 评估逆变器输出波形。

三. 实验平台和有关资料

1. 变频器样机(供设计参考,该样机资料有限,开放性较差,能开发的余地小); 2. 提供变频器主电路板及相关器件,可在此基础上完成变频器主电路系统;

3. 自选单片机(实验室已有的)做控制平台,依据该单片机Datasheet编写相关控制软件并调试;

4. 相关的一些网站:TI公司 DSP网站上面有许多介绍变频器控制的软件、方法、甚至源代码;三菱公司网站,介绍IPM模块、整流模块;

一些变频器网站介绍变频器:如http://等; 5. 图书馆可借阅一些变频器相关书籍、文献。

四. 选题对象

限已经选修过电力电子、数字和模拟电子电路、单片机课程的同学。

上一篇:建筑设计院建筑图下一篇:建筑劳务派遣方案