第一篇:C语言课程设计学生成绩管理系统个人总结
C语言课程设计——学生成绩管理系统
个人心得体会
(徐州工程学院 14计嵌1班 07组 张凯)
这一周以来的课程设计,不仅让我明白了C语言的确是一门很有用的,但是又是不容易的一门课程。起初刚开始做课程设计时,以为这个课程设计不会有多难,只不过是把多个函数组合起来就好了,但是,经过这一星期的编程,发现要完完整整把程序按照要求编出来是一件很不容易的事情。然而在这一周以来的学习中,也对C语言这门课程有了更加的了解和学习。
在整个编程的过程中,可以说遇到了很多难题,但是让我印象最深刻的是在编写从某文件中读取学生信息这个程序时所遇到的困难。起初,程序时编写出来了,在组建时也没有错误,但是就是实现不了这个功能,接着就是整整一天的苦战;终于,能够读取文件中的信息了,可是,新问题又来了,在显示读取的信息时出现了乱序。另外在编写加密代码的时候竟然忘记了将其放在主函数中运行闹了笑话,在指导老师的帮助下最后解决了这个问题。
每天看到一行行代码着实有时让人头大。然而在这个程序完整地编写下来,我觉得编写程序需要很大的耐心,一个稍微大点的程序就有个几百甚至上千行,没有耐心是很难做得成功的。当然细心也很需要,在编程的过程中有很多错误都是自己的粗心造成的,有时甚至自己多次检查都看不出来,这样一来,会造成时间的大量浪费。
这次的课程设计也是一次很好的对自我的检查。它让我知道了自己在C语言的学习上还不够认真刻苦,很多知识点还是没有很好的掌握,甚至有些知识点很生疏,这也许就是我在编写从某文件中读取学生信息这一函数时老碰壁的原因所在!从这一点上来看,发现我对待学习的态度还不够端正,有待加强。
不管怎么说,经过这一次课程设计,在C语言方面的收获最大,让我读代码的能力大大提升了不少,也巩固了很多知识。同时也受到了指导老师刘云、邹文辉的细心指导,非常感谢!
第二篇:语言课程设计-学生成绩管理系统
1、课程设计的目的、任务
《汇编语言》课程设计对于巩固汇编语言理论知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的主要是通过程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
2、软件需求分析和设计
2.1学生成绩管理系统是对学生成绩的管理,其中包括以下几个模块:(1).插入一个数据(插入学生学号以及语数外三个成绩)。(2)修改一个数据。(3)删除学生成绩数据。(4)查找学生成绩。(5)查看学生成绩的排名(6)查看学生成绩分布(7)按esc键退出系统
2.2学生成绩管理系统应该包含以下信息:学号,语文成绩,英语成绩,数学成绩。因此,系统应该提供以下功能:(1)输出显示菜单。(2)输入学生的成绩(3)修改学生成绩(4)删除学生成绩(5)查询学生成绩(6)显示学生成绩排名(7)显示成绩分布统计(8)按esc键退出系统
2.3依据程序的功能需求,该系统的功能结构图如下
系统功能结构图
2.4 程序流程图:
主程序流程图
查找学生成绩
插入学生学号及成绩
修改学生的成绩
显示各个学科各分数段的人数
3、程序实现说明
3.1学生管理系统中各子程序如下:
(1).输入全部学生学号以及语文,英语,数学三科的成绩。子程序名:insert 子程序描述:该子程序为输入字程序。系统在开始的时候是没有数据的,通过该子程序可以初始化系统,将学生的学号及成绩输入系统。
代码:
insert proc near;定义进程子程序:插入学生,学号及 成绩 call input;调用input add n,1 ret insert endp
(2).修改输入的成绩。子程序名:modify 子程序描述:通过子程序修改学生的成绩 代码:
modify proc near;定义进程子程序:修改学生学号,成绩 md1:output mess1;输出mess1 shuru;调用宏shuru:二位数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找输入的学生是否存在
je qq1_1;查到的话,就跳转到qq1_1输入修改的值,也就是重新输入。;结果相等则跳转到qq1_1 add si,1
cmp si,bx jbe md;小于等于则跳转到md output mess;输出mess jmp md1;不相等继续输入学号
qq1_1:;转入修改的值重新输入。mov di,si output mess2 output mess4 mov si,0 mov cx,3
qq3_1:shuruu;cmp dx,78h;
jbe qq2_1;output ts3;jmp qq1_1;qq2_1:mov buf[si],dl output bg;add si,1 loop qq3_1 mov al,buf[0];mov chi[di],al mov al,buf[1]
分别输入语文,英语,数学成绩,并将其放 在缓冲区buf中 比较输入的成绩是否大于120,如果大于120的 话,那么重 新输入成绩 小于等于则转移到qq2_1 输出ts3 跳转到qq1_1 输出空格 将存入buf中的成绩,分别赋值给存放对应科 目的成绩的数组
mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp
(3).删除学生的成绩。子程序名:delete 子程序描述:通过子程序删除学生的成绩 代码:
de proc near;删除某个学生的记录 sc1:output mess1 shuru;调用宏shuru,接受输入的学号 mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查询输入学号的学生信息是否存在,不存在的话,重新输入学号 je sc2;相等则转移到sc2 add si,1 cmp si,bx jbe sc;小于等于则转移到sc output mess;输出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等则转移到sc3 mov cx,bx
sc4:mov dl,chi[si+1] mov chi[si],dl mov dl,eng[si+1] mov eng[si],dl mov dl,mat[si+1] mov mat[si],dl mov dl,xh[si+1] mov xh[si],dl add si,1 loop sc4;loop循环指令,执行操作(cx)<--(cx)-1.若 cx!=0,跳转到标号sc处循环执行;cx=0,则推出
循环,执行loop的下一条指令 sub n,1 sc3: ret de endp
(3).查询学生的成绩。子程序名:find 子程序描述:通过子程序查询学生的成绩 代码:
find proc near;定义进程子程序:查找学生成绩 call sum;求学生的总成绩 call ping;求学生的平均成绩
bj1:output mess1;输出mess1 shuru;二位数数据输入 mov bl,n mov bh,0 mov al,dl
mov si,0
bj: cmp al,xh[si];将输入的学号与输入的学号相比,je i;存在的话,将此学生的成绩输出。je表示结果相
等则转移。add si,1 cmp si,bx jbe bj;output mess jmp bj1 i: output strr2 shuzi xh[si];shuzi output bg;mov al,chi[si] cbw;shuzii ax;shuzii output bg;mov al,eng[si] cbw;shuzii ax;shuzii output bg
mov al,mat[si] cbw shuzii ax output bg;
mov al,pj[si] cbw
小于等于则转移到bj 为二位数据输出 输出空格 将字节变为字
为三位数据输出。输出空格 将字节变为字
为三位数据输出 输出空格的字符串,用于与标题栏对齐
shuzii ax output bg
mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii为三位数据输出
output bg;输出空格的字符串,用于与标题栏对齐 shuzi mc[si];shuzi为二位数据输出 ret find endp
(4).显示学生的成绩排名。子程序名:show 子程序描述:通过子程序显示学生的成绩排名 代码:
show proc near;定义进程子程序:显示结果排名 call sum;调用宏sum call ping;调用宏ping call rank;调用宏rank call shuchu;调用宏shuchu ret show endp
3.2程序运行抓图:
主菜单
修改学生成绩
删除学生成绩
显示各个学科各分数段的人数
4、程序总结
通过两个星期的学习,努力,终于完成了报告。系统可以很好的运行。这两个多星期的时间,几乎每天不是在敲代码,就是在看代码,查书,上网。系统中用到了很多最近才学习的知识,比如宏,子程序。这些都使得代码的运行效率提高了,代码行数减少了。系统还用到了bios的清屏功能。这些功能如果不是做课程设计,我想我很难会接触到这些知识。
由于自己对知识掌握的不是很牢固,其中也会碰到一些困难。每当遇到问题的时候,我会先上网去查找,看看有没有人提过这方面的问题。互联网是强大的,大部分的问题通过网络都可以解决。部分找不到的问题,我就去请教班里学得好的同学。他们对知识的掌握远超过我。这样下来,很多问题都迎刃而解了。
课程设计是一个很好的掌握书本上知识的过程。平时上课之后,自己都不会想着去敲一些代码联系联系。通过做课程设计,将理论与实践结合了起来,对知识的理解更加深入了。
第三篇:C语言课程设计任务书(学生成绩管理系统)
课程设计题目:简单的学生成绩管理的程序
要求:
一、由键盘输入原始数据。原始数据内容如下:
学号姓名C程序设计高等数学英语线性代数
1王..80808080
2张..90909090
注:要求至少有20个学生的原始数据
二、实现以下功能。
程序要求主函数是一个功能选择菜单,其它各功能用函数实现。功能要求如下:
1、原始数据的输入
2、计算每位同学的平均分
3、计算每门课程的平均分
4、计算各分数段(90-100、80-89、60-79、60以下)的人数
5、对这些同学的成绩按平均分排序,给出名次。
6、对原始数据可以进行增、删、改的编辑操作。
7、按学号查询学生。找到则显示该生信息,否则提示未找到。
8、原始数据可以保存为文件,也可以从文件载入。
注:程序统计输出结果如下:
学号姓名C程序设计高等数学英语线性代数平均分名次 1王..80808080802 2张..90909090901
…
各科平均分8585858585
C程序设计高等数学英语线性代数平均分
90-10011111
80-8911111
60-6900000
60以下00000
第四篇:课程设计--成绩管理系统
“成绩管理系统”课程设计指导书
课题名称:学生成绩管理系统
设计目标:按照软件工程的规范,以SQL Server或Oracle为后台数据库,以Visual C++、Delphi等为前端开发工具,设计并实现一个能模拟高等学校学生成绩管理的系统。
需求描述:
学生成绩管理系统中:
1.系统用户
系统的用户是学校的学生、教师和管理员。学生使用本系统查询自己的成绩。教师使用本系统录入和查询自己所授课程的考试成绩。教学管理员可以查询所有课程成绩,并使用本系统进行成绩的统计和生成报表。
2.系统功能
(1)成绩录入:
教师可以查询自己本学期所授课程,并录入学生的考试成绩。录入过
程中,可以暂存已录入的成绩,当录入完成后提交。
(2)成绩维护:
教师在提交前,可以修改已录入或暂存的学生成绩;但提交后,则只
能查询不能再进行任何修改。
教学管理员可以清除教师已提交的成绩。
(3)成绩查询:
教师、教学管理员可以查询学生考试成绩。学生只允许查询自己的考
试成绩,教师只允许查询自己所授课程的成绩。
(4)成绩统计:
教学管理员可以按课程、按学生、按班级等进行成绩统计。
教学管理员根据核算出的总评成绩统计处于优、良、中、及格、不及
格的学生人数以及占总人数的百分比。其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。
按要求输出成绩在优、良、中、及格、不及格各区间的学生学号。
结果形式:
提交课程设计报告、源程序和可演示的软件
课程设计报告要求:详见课程设计模板
课程设计参考思路:
(1)熟悉数据库和开发工具,掌握开发工具与本地数据库的连接方法。
(2)理解系统的信息需求,进行合理的数据库设计,建立各数据库表。
(3)理解系统的功能需求,设计应用软件。结合Delphi 或VC++进行系统界面
(窗体、菜单以及相应控制按钮)的设计、连接与操纵数据库方案的设计,编写程序。
(4)系统运行、调试并完善。
(5)撰写设计报告。
第五篇:C语言课程设计报告-学生成绩管理系统(vc)
一、实践的目的和要求
加深对《C语言》课程所学知识的理解,进一步巩固C语言语法规则。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。
二、实践内容
在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。
三、实践任务 1.欢迎画面
2.学生成绩管理系统(自己设计界面)3.异或加密与解密
(1)文件加密
(2)文件解密 说明:将某一已知文件的内容以字符形式读出,与密钥(用户从键盘输入)的对应字符进行异或操作即可,解密同样如此。如:设原文为ab1234,密钥为56,则有 ab1234 565656
按二进制进行异或操作即可得到密文(乱码)。4.移位加密与解密(1)文件加密(2)文件解密
说明:将某一已知文件的内容(限于英文字母)以字符形式读出,根据密钥k(用户从键盘输入)将对应字符进行移位操作即可,解密时移动方向相反。
如:设原文为abcdef,密钥为5,则有
abcdef 每个字母按字母表向后移动位(注:z后接a)fghijkl 可得到密文(乱码)。5.辅助运算(1)整数N模m的乘法逆t
要求:输入整数N和m,求出t,若t不存在,给出信息。提示:这三个数满足:N*t%m=1,使用穷举法。
例如:当N为11,m为26时,由于(11×19)%26=1,所以11模26的乘法逆为19。(2)统计字母个数
要求:输入一段英文字母,统计各个字母的个数,并按个数从大到小排序输出。
提示:字母大小写等价。输出格式为:字母:个数。(3)OTP加密
要求:输入同等长度的原文x和密钥k(英文字母),根据公式 c=(x+k)%26 得到密文,并输出。
提示:将26个字母按0~25编号,将原文字母和对应位置的密钥字母的编号按上述公式进行计算后得到一个新的字母。
四、设计流程图
流程图另附!
五、相关程序 1 欢迎画面
#include
initgraph(&gd,&gm,“c: urboc2”);Copy();DrawSnow();getch();closegraph();}
void Copy(){
setcolor(0);
setfillstyle(SOLID_FILL,15);fillellipse(200,200,4,4);size=imagesize(196,196,204,204);save1=malloc(size);save2=malloc(size);
getimage(196,196,204,204,save1);getimage(96,96,104,104,save2);}
void Pr(){
int s[15]={0,100,150,200,150,200,250,150,250,300,250,150,100,250,350};setcolor(change/10);settextstyle(0,0,4);
outtextxy(150,200,“Welcome!!”);sound(s[change/10]);}void DrawSnow(){int i;int sx[62];randomize();for(i=0;i<62;i++)sx[i]=(i+2)*10;cleardevice();while(!kbhit()){ Pr();
if(snownum!=100){
snow[snownum].speed=2+random(5);i=random(62);
snow[snownum].x=sx[i];
snow[snownum].y=10-random(100);} for(i=0;i putimage(snow[i].x,snow[i].y,save2,COPY_PUT);Pr(); if(snownum!=100)snownum++;/*delay(300);*/ setfillstyle(SOLID_FILL,15);for(i=0;i snow[i].y+=snow[i].speed; putimage(snow[i].x,snow[i].y,save1,COPY_PUT);if(snow[i].y>500) snow[i].y=10-random(200);} change++;if(change==140)change=10;} nosound();} 2学生成绩管理系统(自己设计界面)#define N 1 struct student {char num[10];char name[10];int score[4];float ave;}stu[N];main() {int i,j,max,maxi,sum;float average;for(i=0;i {printf(“Please input scores of student %d :n”,i+1);printf(“NO.:”); scanf(“%s”,stu[i].num);printf(“name:”); scanf(“%s”,stu[i].name);for(j=0;j<3;j++) {printf(“score %d :”,j+1);scanf(“%d”,&stu[i].score[j]);} } average=0;max=0;maxi=0;for(i=0;i for(j=0;j<3;j++)sum+=stu[i].score[j];stu[i].ave=sum/3.0;average+=stu[i].ave;if(sum>max){max=sum;maxi=i;} } average/=N; printf(“ NO.name score1 score2 score3 averagen”);for(i=0;i {printf(“%5s”,stu[i].num); printf(“%10s”,stu[i].name);for(j=0;j<3;j++) printf(“%9d”,stu[i].score[j]);printf(“%8.2fn”,stu[i].ave);} printf(“average=%6.2fn”,average); printf(“The highest score is : %s,score total :%dn”,stu[maxi].name,max);getch();} 3.异或加密与解密 #include void jiami(char *in,char *pwd,char *out);void main(int argc,char *argv[]){ char in[30];char out[30];char pwd[8];if(argc!=4){ printf(“Input file name:n”);gets(in); printf(“Please enter password:n”);gets(pwd); printf(“Output file name:n”);gets(out); jiami(in,pwd,out);} else { strcpy(in,argv[1]);strcpy(pwd,argv[2]);strcpy(out,argv[3]);jiami(in,pwd,out);} } void jiami(char *in,char *pwd,char *out_file){ FILE *fp1,*fp2;register char ch;int j=0;int k=0; fp1=fopen(in,“rb”);if(fp1==NULL){ printf(“Cannot open in-file!n”);exit(1);} fp2=fopen(out_file,“wb”);if(fp2==NULL){ printf(“Cannot open or create output-file!n”);exit(1);} while(pwd[++k]);ch=fgetc(fp1);while(!feof(fp1)){ fputc(ch^pwd[j>=k?j=0:j++],fp2);ch=fgetc(fp1);} fclose(fp1);fclose(fp2);} 4.移位加密与解密 #include“stdio.h” main(){ int choice=0,k;FILE *fp1,*fp2; char c,filename1[30],filename2[30]; printf(“Please input two deferent filename:”);scanf(“%s%s”,filename1,filename2);printf(“Please input the password :n”);scanf(“%d”,&k); if((fp1=fopen(filename1,“r”))==NULL) printf(“nERROR!CAN NOT OPEN THE FILEn”);else{ fp2=fopen(filename2,“w”); printf(“nChoose:(1-jiami 2-jiemi)”);scanf(“%d”, &choice);switch(choice){ case 1: do{ c=getc(fp1); if(((c>='a')&&(c<='z'-k))||((c>='A')&&(c<='Z'-k)))putc(c+k,fp2); else if(((c>'z'-k)&&(c<='z'))||((c>'Z'-k)&&(c<='Z')))putc(c-(26-k),fp2);else putc(c,fp2);}while(c!=EOF);break;case 2: do{ c=getc(fp1); if(((c>='a'+k)&&(c<='z'))||((c>='A'+k)&&(c<='Z')))putc(c-k,fp2); else if(((c>='a')&&(c<'a'+k))||((c>='A')&&(c<'A'+k)))putc(c+(26-k),fp2);else putc(c,fp2);}while(c!=EOF);break; default: printf(“nYou have choose a wrong number!Please choose again!”);} } fclose(fp1);fclose(fp2);} 5.辅助运算 (1)整数N模m的乘法逆t main(){ unsigned n,m,t=1;int c; printf(“Please enter the number:n”);scanf(“%d,%d”,&n,&m);while(t<65535){ c=n*t%m;if(c==1||c==0)break;t++;} if(t==65535||c==0) printf(“Nicheng number is not exited!n”);if(c==1) printf(“T is : %dn”,t);getch();} (2)统计字母个数 #include “string.h” main(){ int i,j,t; char a[80],b[26];int c[26];char e; printf(“Please enter the letters:n”);gets(a); for(i=0;i<26;i++)b[i]='A'+i;for(i=0;i<26;i++)c[i]=0; for(j=0;j<80;j++){for(i=0;i<26;i++){ if(a[j]==b[i]||a[j]==b[i]+32)c[i]++;} if(a[j]==' ')break;} for(j=0;j<=25;j++){for(i=0;i<=25;i++){if(c[i]>c[i+1]){ t=c[i];c[i]=c[i+1];c[i+1]=t;e=b[i];b[i]=b[i+1];b[i+1]=e;} } } for(i=25;i>=0;i--){if(c[i]!=0) printf(“The %c letter number is %d n”,b[i],c[i]);} getch();} (3)OTP加密 #include “stdio.h” main() {char a[80],b[80],c[80];int i; printf(“Please enter the x :n”);gets(a); printf(“Please enter the k :n”);gets(b); for(i=0;i<80;i++)c[i]=(a[i]+b[i])%26;printf(“The result is :n”);for(i=0;i<80&&c[i]!=' ';i++)printf(“%c”,c[i]);getch();} 六 心得体会 通过此次C语言程序设计实践,本人实在是获益不浅!C语言是上个学期开的课程,所以这个学期并没怎么看过,当要开始设计的时候,还真不知从哪下手!结果,第一次的上机,我只坐了一个下午,什么也没干!回去以后,我想,这样不行,这样下去还得了!我就重新学了一遍我们上个学期的教材,发觉自已有许多都遗忘了!特别是有文件的操作,几乎是一遍空白!温习过后,开始做题!那个欢迎动画是在”C语言之家”找到的,自已改了一下,但并没做多大的改动!之后做出来的第一个程序是”统计字母个数”,因为上个学做过类似的!接着是”乘法逆”,这个我觉得比较简单!再接着是”OTP”加密!而那个学生成绩管理系统是参考了上机手册后做出来的!最后,花了最多时间的是”异或加密与解密”和”移位加解密”,几乎花了我百分之九十的时间,而且还是在一些在其他大学读计科专业的同学的帮助下和在上网查看了大量的资料之后才做出来!最后,想说两句,这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验!七 参考文献 <