{printf("%5s",stu[i].num);
printf("%10s",stu[i].name); for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]); printf("%8.2f\n",stu[i].ave); }
printf("average=%6.2f\n",average);
printf("The highest score is : %s,score total :%d\n",stu[maxi].name,max); getch(); }
3.异或加密与解密 #include#include#include#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 FILE\n"); 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')&&(c
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 : %d\n",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]=='\0') 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]!='\0';i++) printf("%c",c[i]); getch(); }
六 心得体会
通过此次C语言程序设计实践,本人实在是获益不浅!C语言是上个学期开的课程,所以这个学期并没怎么看过,当要开始设计的时候,还真不知从哪下手!结果,第一次的上机,我只坐了一个下午,什么也没干!回去以后,我想,这样不行,这样下去还得了!我就重新学了一遍我们上个学期的教材,发觉自已有许多都遗忘了!特别是有文件的操作,几乎是一遍空白!温习过后,开始做题!那个欢迎动画是在”C语言之家”找到的,自已改了一下,但并没做多大的改动!之后做出来的第一个程序是”统计字母个数”,因为上个学做过类似的!接着是”乘法逆”,这个我觉得比较简单!再接着是”OTP”加密!而那个学生成绩管理系统是参考了上机手册后做出来的!最后,花了最多时间的是”异或加密与解密”和”移位加解密”,几乎花了我百分之九十的时间,而且还是在一些在其他大学读计科专业的同学的帮助下和在上网查看了大量的资料之后才做出来!最后,想说两句,这次设计,让我重新掌握了C语言,而且还得到了用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)
循环,执行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的清屏功能。这些功能如果不是做课程设计,我想我很难会接触到这些知识。
由于自己对知识掌握的不是很牢固,其中也会碰到一些困难。每当遇到问题的时候,我会先上网去查找,看看有没有人提过这方面的问题。互联网是强大的,大部分的问题通过网络都可以解决。部分找不到的问题,我就去请教班里学得好的同学。他们对知识的掌握远超过我。这样下来,很多问题都迎刃而解了。
课程设计是一个很好的掌握书本上知识的过程。平时上课之后,自己都不会想着去敲一些代码联系联系。通过做课程设计,将理论与实践结合了起来,对知识的理解更加深入了。