第一篇:C語(yǔ)言課程設(shè)計(jì)報(bào)告-學(xué)生成績(jī)管理系統(tǒng)(vc)
一、實(shí)踐的目的和要求
加深對(duì)《C語(yǔ)言》課程所學(xué)知識(shí)的理解,進(jìn)一步鞏固C語(yǔ)言語(yǔ)法規(guī)則。學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)模谜Z(yǔ)言程序,從而具備解決綜合性實(shí)際問(wèn)題的能力。
二、實(shí)踐內(nèi)容
在熟練掌握C語(yǔ)言的基本知識(shí):數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等);程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));大程序的功能分解方法(即函數(shù)的使用)等。進(jìn)一步掌握各種函數(shù)的應(yīng)用,包括時(shí)間函數(shù)、繪圖函數(shù),以及文件的讀寫操作等。
三、實(shí)踐任務(wù) 1.歡迎畫面
2.學(xué)生成績(jī)管理系統(tǒng)(自己設(shè)計(jì)界面)3.異或加密與解密
(1)文件加密
(2)文件解密 說(shuō)明:將某一已知文件的內(nèi)容以字符形式讀出,與密鑰(用戶從鍵盤輸入)的對(duì)應(yīng)字符進(jìn)行異或操作即可,解密同樣如此。如:設(shè)原文為ab1234,密鑰為56,則有 ab1234 565656
按二進(jìn)制進(jìn)行異或操作即可得到密文(亂碼)。4.移位加密與解密(1)文件加密(2)文件解密
說(shuō)明:將某一已知文件的內(nèi)容(限于英文字母)以字符形式讀出,根據(jù)密鑰k(用戶從鍵盤輸入)將對(duì)應(yīng)字符進(jìn)行移位操作即可,解密時(shí)移動(dòng)方向相反。
如:設(shè)原文為abcdef,密鑰為5,則有
abcdef 每個(gè)字母按字母表向后移動(dòng)位(注:z后接a)fghijkl 可得到密文(亂碼)。5.輔助運(yùn)算(1)整數(shù)N模m的乘法逆t
要求:輸入整數(shù)N和m,求出t,若t不存在,給出信息。提示:這三個(gè)數(shù)滿足:N*t%m=1,使用窮舉法。
例如:當(dāng)N為11,m為26時(shí),由于(11×19)%26=1,所以11模26的乘法逆為19。(2)統(tǒng)計(jì)字母?jìng)€(gè)數(shù)
要求:輸入一段英文字母,統(tǒng)計(jì)各個(gè)字母的個(gè)數(shù),并按個(gè)數(shù)從大到小排序輸出。
提示:字母大小寫等價(jià)。輸出格式為:字母:個(gè)數(shù)。(3)OTP加密
要求:輸入同等長(zhǎng)度的原文x和密鑰k(英文字母),根據(jù)公式 c=(x+k)%26 得到密文,并輸出。
提示:將26個(gè)字母按0~25編號(hào),將原文字母和對(duì)應(yīng)位置的密鑰字母的編號(hào)按上述公式進(jìn)行計(jì)算后得到一個(gè)新的字母。
四、設(shè)計(jì)流程圖
流程圖另附!
五、相關(guān)程序 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學(xué)生成績(jī)管理系統(tǒng)(自己設(shè)計(jì)界面)#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.輔助運(yùn)算 (1)整數(shù)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)統(tǒng)計(jì)字母?jìng)€(gè)數(shù) #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]=='