C++课程设计报告
C语言课程设计报告学生成绩管理系统(广工)

一、课程设计题目:学生成绩管理二、需求分析给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名、性别以及各科成绩组成。
对学生的考试成绩进行有关统计:按总数高低次序,打印出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。
三、概要设计程序要有的功能:1。
输入记录2。
用指定格式显示全部记录3。
根据姓名查找记录4。
根据姓名删除记录5. 保存记录到文件6。
按序号显示记录7。
按姓名由小到大的顺序排序程序运行当中,通过选择对应的功能序号来实现所需功能。
对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“您输入的数据有误,请核实!”。
再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要保存数据。
在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。
最后,在程序可以正确运行的基础上,再增加一些功能,如在排列的时候,自动输出最高分与最低分。
与及格成绩作比较,输出及格人数等相关信息。
流程图:四、详细设计源程序:#include ”stdio。
h”#include "stdlib.h”#include "string。
h”int shoudsave=0;/* */struct student{char num[10];/*学号*/char name[20];char sex[4];int cgrade;int mgrade;int egrade;int totle;int ave;char neartime[10];/*最近更新时间*/};typedef struct node{struct student data;struct node *next;}Node,*Link;void menu(){printf(”*********************************主菜单*****************************************”);printf(”\t1登记学生资料\t\t\t\t\t2删除学生资料\n”);printf(”\t3查询学生资料\t\t\t\t\t4修改学生资料\n”);printf(”\t5保存学生资料\t\t\t\t\t0退出系统\n”);printf(”********************************************************************************\n");}void printstart(){printf(”-————---—-——————--——----———-—-—-————--————--—--—--—-————---—-—————--———\n”);}void Wrong(){printf(”\n=====>提示:输入错误!\n”);}void Nofind(){printf("\n=====〉提示:没有找到该学生!\n");}void printc()/*本函数用于输出中文*/printf(”学号\t 姓名性别英语成绩数学成绩C语言成绩总分平均分\n”); }void printe(Node *p)/* 本函数用于输出英文*/{printf("%—12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p—〉data。
学生成绩管理系统c语言课程设计报告

学生成绩管理系统c语言课程设计报告一、引言学生成绩管理系统是一个为学校或教育机构提供学生学业成绩管理的重要工具。
通过该系统,可以方便地记录和查询学生的各项成绩,帮助教师和学生了解学生的学业表现,及时作出教学和学习的调整和改进。
本文将介绍一个基于C语言的学生成绩管理系统的设计与实现。
二、需求分析1. 学生信息管理:包括学生基本信息的录入、修改和删除。
2. 成绩信息管理:包括成绩的录入、修改和删除。
3. 成绩查询与统计:可以按照学生学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份:能够将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
三、系统设计1. 学生信息管理模块:设计一个结构体来存储学生的基本信息,包括学号、姓名、性别、年龄等。
通过菜单选择,可以实现学生信息的录入、修改和删除功能。
2. 成绩信息管理模块:设计一个结构体来存储学生的成绩信息,包括科目名称和成绩。
通过菜单选择,可以实现成绩信息的录入、修改和删除功能。
3. 成绩查询与统计模块:通过学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份模块:设计文件操作函数,将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
四、系统实现1. 使用C语言编写程序代码,通过结构体和数组等数据结构实现学生信息和成绩信息的存储。
2. 利用文件操作函数实现数据的读取和存储,包括学生信息和成绩信息的存储和备份。
3. 设计菜单界面,通过用户选择来实现各个功能模块的调用。
五、系统测试与优化1. 针对各个功能模块进行测试,验证系统的正确性和稳定性。
2. 根据测试结果优化程序代码,提高系统性能和用户体验。
3. 完善系统功能,考虑异常情况的处理,提高系统的容错性和健壮性。
六、总结与展望通过本次课程设计,我们成功实现了一个基于C语言的学生成绩管理系统。
该系统能够方便地记录和查询学生的成绩信息,帮助教师和学生进行教学和学习的分析和改进。
C语言程序设计课程设计报告---汉诺塔问题

XXXX大学计算机科学与技术学院课程设计报告2012 — 2013学年第一学期课程名称C/C++高级语言程序设计课程设计设计题目小游戏和图形处理汉诺塔问题学生姓名XXX学号XXXXXXX专业班级XXXXXXXXXXX指导教师XX2012 年X 月XX 日目录一、课程设计问题描述 (1)1、课程设计题目 (1)2、设计任务要求 (1)二、总体设计 (1)1、设计思路 (1)2、汉诺塔求解流程图 (2)三、详细设计 (2)1、汉诺塔问题描述 (2)2、算法分析 (3)3、实现递归的条件 (4)4、用C语言实现 (4)四、程序运行结果测试与分析 (4)1、打开Microsoft Visual C++ 6.0操作平台输入以下的源代码 (4)2、编译源代码 (5)3、组建 (5)4、执行 (5)5、运行结果 (6)6、按任意键结束程序 (7)五、结论与心得 (7)六、参考文献 (8)七、附录:程序源代码 (8)一、课程设计问题描述1、课程设计题目汉诺塔问题2、设计任务要求输入盘子数(2个以上有效),移动速度,开始演示汉诺塔移动的步骤,要求:盘子A,B,C柱需要自己绘制,初始时盘子在A柱上通过B柱最终移动到C 柱上,显示出盘子在几个柱之间的移动过程。
二、总体设计1、设计思路对于一个类似的这样的问题,任何一个人都不可能直接写出移动盘子的每一个具体步骤。
可以利用这样的统筹管理的办法求解:我们假设把该任务交给一个僧人,为了方便叙述,将他编号为64。
僧人自然会这样想:假如有另外一个僧人能有办法将63个盘子从一个座移到另一个座,那么问题就解决了,此时僧人A B C64只需这样做:(1).命令僧人63将63个盘子从A座移到C座(2).自己将最底下的最大的一个盘子从A座移到C座(3).再命令僧人63将63个盘子从B座移到C座为了解决将63个盘子从A座移到B座的问题,僧人63又想:如果能再有一个僧人62能将62个盘子移动到另一座,我就能将63个盘子从A座移动到B座。
C语言程序课程设计实验报告(用一个字符数组保存一个英文句子)

河南城建学院《高级语言程序设计》课程设计报告设计题目:用一个字符数组保存一个英文句子专业:计算机科学与技术班级:设计人员:指导教师:计算机科学与工程学院2015年06 月25日一、课程设计题目13.用一个字符数组保存一个英文句子。
二、设计要求1)删除该英文句子中的前导空格,后导空格,并删除句子中多余的空格(单词之间只留一个空格);2)统计该句子中,单词出现的频率;3)查找并替换某个单词。
三、程序介绍1.去除字符组中间空格。
void zhongjian(char a[]){int i,j,k; /*定义整形变量i,j,k。
i,j 作为函数内循环的控制变量。
定义k用于字符组长度存放。
*/ k=strlen(a); /*将字符组a的长度存放于k 中。
(字符组a即待处理的字符组)*/for(i=0;i<k;) /*循环控制,从第一位循环到字符组结束。
*/if(a[i]!=' 'i++; /*条件控制,若当前字符不为空格,跳到下一位再进行循环。
*/else if(a[i]==' ')if(a[i+1]==' ') /*当连续出现两个空格,需要去除一个空格*/{k=k-1; /*字符串总长度减一。
*/ for(j=i;j<k;j++)a[j]=a[j+1]; /*从第一个空格开始,后续所有字符前提一位,即去除第一个空格。
*/a[k]='\0'; /*去除空格后字符组长度减一,原字符组最后一位需要变为\0。
*/continue; /*去除空格后,继续从该位检测,直至不符合该循环条件。
*/}elsei++; /*若不是连续两个空格,则跳到下个字符再进行循环。
*/printf("%s\n",a); /*输出处理后的字符组。
*/ }2.导入及导出函数void daoru(){FILE *p; /*定义一个指针函数,用于指向需要打开的文件。
C语言课程设计-书店管理系统精选全文

计算机程序设计(C语言)课程设计报告题目:图书管理系统学院:专业:班级:学号:姓名:指导教师:设计日期:2013年06月24日一、选题背景:设计一个图书管理系统,管理员通过登陆账号来进行下一步,使用错误账号和密码会被视为非法登陆。
图书信息包括:每种图书都有书名、ISBN、一名或多名作者(译者)、出版社、定价和内容简介等;读者信息包括:借书证记录有借阅者的姓名、密码、所在单位和类别等;读者凭借书证借书二、设计思想:(1)整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while()和选择语句swithch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。
主要实现了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。
(2)、Cbook();这是一个指针函数,它主要实现了链表的创建,并且在创建过程中从文件读取信息到链表中,以用于后面其他函数的操作。
它返回的时一个单向链表的头。
其他函数调用时只需调用它返回的头即可。
(3)、mainmenu();、menu1();、glm enu();、cxmenu();、jhmenu();这五个函数时整个图书管理系统的全部菜单函数,mainmenu();为系统主界面,进入时可选择进入程序和退出程序。
menu1();为进程序时显示的功能菜单,在此菜单可以选择录入、保存图书信息,也可选择进入其他子系统。
glmenu();此菜单为进入图书管理系统的菜单,在此可以选择添加、删除、修改图书等操作。
cxmenu();为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。
jhmenu();为借书还书的子菜单,在此可以选择借书还书操作。
操作完成后按提示信息进行文件的保存操作。
三、程序流程图会员登陆系统系统管理界面收银系统管理系统报表系统退出系统四、主要解决问题的方法及技术关键通过自己定义的函数和声明一个结构,主要方法是先使用int函数定义,不同的选择进入不同的定义函数,通过for语句进行判断,然后使用heart数组的各种方式打开此文件,然后通过while函数和for函数关闭文件,在不同的取用数值里,分别使用for,while语句进行判断是否进行下条语句。
C语言课程设计报告:职工信息管理系统程序设计

1.课程论文题目职工信息管理系统程序设计一、题目要求职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单的方式工作。
(2)职工信息录入功能(职工信息用文件保存)。
(3)职工浏览功能。
(4)职工信息查询功能,查询方式可按学历查询或者工号查询。
(5)职工信息的删除、修改功能(可选项)。
2.程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。
3.功能模块图5.算法设计1.主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
2浏览模块【分析】该模块的功能是浏览职工的全部信息3排序模块4查询模块【分析】该模块的功能是根据输入的职工按照工号和学历查找对应的记录,找到以后,可进行继续查找或修改信息的操作。
流程图如下:5修改模块【分析】该模块的功能是显示所有职工的信息,考虑到记录较多,建议采用分屏显示。
显示完所有记录后,输入要修改的职工的工号,根据工号查到职工的记录,并提示用户修改该记录的哪部分信息,根据用户做的选择修改相应信息。
流程图如下:6.程序代码#include<stdio.h>#define N 50struct worker{char id[50];char name[20];char sex[10];char age[10];char edu[20];char salary[10];char address[20];char tel[20];}worker[N];void save(int n) //保存函数,保存n个记录{ FILE *fp;int i;if((fp=fopen("worker.txt","wb"))==NULL) //以只写方式为输出打开一个二进制文件{ printf("\nCannot open file\n");}for(i=0;i<n;i++)if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)printf("file write error\n");fclose(fp);}int load() //加载函数{ FILE *fp;int i;if((fp=fopen("worker.txt","rb"))==NULL){printf("\nCannot open file\n");return NULL;}for(i=0;!feof(fp);i++)fread(&worker[i],sizeof(struct worker),1,fp);fclose(fp);return(i-1);}void no_input(int i,int n) //工号输入函数,i表示第i个职工的信息,n 表示比较到第n个职工{ int j,k,w1;do{w1=0;printf("工号:");scanf("%s",worker[i].id);for(j=0;worker[i].id[j]!='\0';j++)if(worker[i].id[j]<'0'||worker[i].id[j]>'9') //判断工号是否为数字{puts("请重新输入!\n");w1=1;break;}if(w1!=1)for(k=0;k<n;k++) //比较到第N个职工if(k!=i&&strcmp(worker[k].id,worker[i].id)==0) //判断职工号是否有雷同{puts("请重新输入!\n");w1=1;break;}}while(w1==1);}void input(int i) //输入一个记录的函数{ no_input(i,i);printf("姓名:");scanf("%s",worker[i].name);printf("性别:");scanf(" %s",&worker[i].sex);printf("年龄:");scanf("%s",&worker[i].age);printf("工资:");scanf("%s",worker[i].salary);printf("学历:");scanf("%s",&worker[i].edu);printf("住址:");scanf("%s",worker[i].address);printf("电话:");scanf("%s",worker[i].tel);}void printf_one(int i) //显示一个记录的函数{printf("%10s %10s %5s %5s %8s %6s %10s %10s\n",worker[i].id,worker[i].name,worker[i].sex,worker[i].age,worker[i].salary,worker[i].edu,worker[i].address,worker[i].tel); }void printf_back() //一个任务结束后选择是好似浏览还是返回{ int k,w;printf("\n\n\tSuccessful^-^.\n\n");printf("接下来做什么?\n\n\t1).浏览全部\t2).返回: [ ]\b\b");scanf("%d",&w);if(w==1)browse();else menu();}modify_data(int i,int n) //修改函数{ int c,w1;do{puts("\nmodify by=>\n\n 1).工号 2).姓名 3).性别 4).年龄 5).工资6).学历 7).地址 8).电话 9).取消");printf("请选择?:[ ]\b\b");scanf("%d",&c);if(c>9||c<1){puts("\nChoice error!please again!");getchar();}}while(c>9||c<1);do{switch(c){case 1:no_input(i,n);break;case 2:printf("name:");scanf("%s",worker[i].name);break;case 3:printf("sex:");scanf("%s",worker[i].sex);break;case 4:printf("age:");scanf("%s",worker[i].age);break;case 5:printf("salary:");scanf("%s",worker[i].salary);break;case 6:printf("edu:");scanf("%s",worker[i].edu);break;case 7:printf("address:");scanf("%s",worker[i].address);break;case 8:printf("tel:");scanf("%s",worker[i].tel);break;case 9:menu();break;}puts("\nNow:\n");printf_face();printf_one(i);printf("\n确定?\n\n\t1).是2).否,重新修改3).不保存退出[ ]\b\b");scanf("%d",&w1);if(w1==1)save(n);}while(w1==2);return(w1);}printf_face() //显示数据结构项目{ printf("\n\t工号姓名性别年龄工资学历地址电话号码\n"); }void enter() //输入模块{ int i,n;printf("输入多少个职工信息(0-%d):",N-1);scanf("%d",&n);printf("\n 请输入职工信息\n\n");for(i=0;i<n;i++)input(i);if(i!=0)save(n);printf_back();}browse() //浏览模块{ int i,j,n;n=load();printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)){printf("\n\n按任意键显示下一页...");getch();puts("\n\n");}printf_one(i);}printf("\t这里有 %d 条记录.\n",n);printf("\n按任意键返回...");getch();menu();}modify() //修改模块{struct worker s;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) //目的是分屏显示{printf("\n\n记住要修改的工号.按任意键显示下一页");getch();puts("\n\n");}printf_one(i); //调用显示一个记录的函数}do{printf("\n\n输入要修改的职工工号! 工号:");scanf("%s",s.id); //输入要修改的IDfor(i=0;i<n;i++) //查找要修改的数据if(strcmp(s.id,worker[i].id)==0){k=i; //找到要修改的记录s=worker[i]; //把worker[i]备份,以便恢复}if(k==-1)printf("\n\n未找到请重输");}while(k==-1); //当k=-1表示没有找到printf_face(); //调用显示数据结构项目的函数printf_one(k); //调用显示一个记录的函数w1=modify_data(k,n); //修改记录并返回保存控制值w1,w1=1表示用户已确认修改if(w1==1){printf("\Successful^_^.\n\n修改另一个?\n\n\t1).是 2).否,保存退出\t[ ]\b\b");scanf("%d",&w0);w2=1; //用来控制保存,使w2=1是标记已有过修改}else{w0=0;if(w2==1)worker[k]=s;}if(w0!=1&&w2==1)save(n);}while(w0==1);menu();}search() //查询模块{ int c,w1;do{puts("\nsearch by=>\n\n1).工号 2}.学历 3).取消并返回"); printf("Which you needed?:[ ]\b\b");scanf("%d",&c);if(c>3||c<1){ puts("\nchoice error!please again!");getchar();}}while(c>3||c<1);{switch(c){case 1:search1();break;case 2:search2();break;case 3:menu();break;}}}search1() //按工号查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n输入要查询的工号! id:");scanf("%s",s.id);printf_face();for(i=0;i<n;i++)if(strcmp(s.id,worker[i].id)==0){k=i;printf_one(k);break;}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search1();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}search2() //按学历查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n请输入你要查询的学历:\n");scanf("%s",);printf_face();for(i=0;i<n;i++)if(strcmp(,worker[i].edu)==0){k=i;printf_one(k);}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search2();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}menu(){int n,w1;do{puts("\t\t*******************菜单*******************\n\n");puts("\t\t\t\t1.录入职工信息");puts("\t\t\t\t2.浏览职工信息");puts("\t\t\t\t3.查询职工信息");puts("\t\t\t\t4.修改职工信息");puts("\t\t\t\t5.退出");puts("\t\t****************************************\n\n");printf("请选择(1~5): [ ]\b\b");scanf("%d",&n);if(n<1||n>5) //对选择的数字作判断{w1=1;getchar();}else w1=0;} while(w1==1);switch(n){case 1:enter();break; //录入 case 2:browse();break; //浏览 case 3:search();break; //查询 case 4:modify();break; //修改 case 5:exit(0); //退出}}main(){menu();}7.程序运行结果下面是各个模块的的界面截图(1)、主菜单(2)、输入模块(3)、浏览模块(3)、查找模块(4)、修改模块8.编程中遇到的困难及解决方法温故而知新,可以为师矣。
c语言成绩管理系统课程设计报告

c语言成绩管理系统课程设计报告一、引言:成绩管理系统是一种可以有效管理学生课程成绩的工具。
通过该系统,教师可以方便地录入、修改和查询学生的成绩,而学生和家长也可以方便地查看自己的成绩情况。
本次课程设计旨在设计一个基于C语言的成绩管理系统,实现对学生课程成绩的录入、修改和查询等功能。
二、系统设计:1. 数据结构设计:为了实现成绩管理系统的各项功能,需要设计相关的数据结构。
对于学生信息,可以设计一个结构体,包含学号、姓名、性别等字段;对于课程成绩,可以设计一个结构体,包含学号、课程名称、成绩等字段。
2. 功能设计:(1) 学生信息录入功能: 教师可以通过输入学生的学号、姓名、性别等信息,将学生信息录入系统中。
(2) 成绩录入功能: 教师可以通过输入学生的学号和课程名称,将学生的课程成绩录入系统中。
(3) 成绩修改功能: 教师可以根据学生的学号和课程名称,修改学生的课程成绩。
(4) 成绩查询功能: 学生和家长可以通过输入学生的学号,查询学生的课程成绩。
三、系统实现:1. 用户界面设计:使用C语言中的控制台窗口,通过菜单的方式显示系统功能选项,用户可以通过键盘输入选择对应的功能。
2. 数据存储设计:使用文件存储学生信息和课程成绩。
通过读取和写入文件的方式,实现数据的持久化存储。
3. 功能实现:(1) 学生信息录入功能的实现: 用户输入学生的学号、姓名、性别等信息后,将学生信息写入文件。
(2) 成绩录入功能的实现: 用户输入学生的学号、课程名称和成绩后,将成绩信息写入文件。
(3) 成绩修改功能的实现: 用户输入学生的学号、课程名称和新的成绩后,根据学号和课程名称找到对应的成绩信息并修改。
(4) 成绩查询功能的实现: 用户输入学生的学号后,根据学号在文件中查找对应的成绩信息并显示在控制台窗口。
四、系统测试:对于每一个功能,设计相应的测试用例,验证系统的正确性和稳定性。
例如,录入一个学生信息后,查询该学生的信息是否正确;录入一门课程成绩后,修改该成绩并查询是否修改成功等。
c语言课程设计—数据加密解密

吉林工程技术师范学院《C语言程序》课程设计报告书设计题目:数据加密解密专业:班级:学生姓名:学号:指导教师:2010年06月信息工程学院目录摘要 (2)第一章绪论 (3)1 .1 C语言概述 (3)1 .2 C语言出现的历史背景 (3)第二章开发环境及相关技术的介绍 (4)2 .1 开发环境的介绍 (4)2 .2 有关开发环境的技术 (4)第三章总体设计与详细设计 (6)3 .1 本程序解决的有关技术问题 (6)3 .2 本程序流程图 (9)第四章编码实现 (12)4 .1 程序的总体实现与使用方法 (12)4 .2 实现本程序的关键C技术 (13)第五章调试与测试 (16)第六章总结与心得 (19)附录: 参考文献 (20)源代码 (21)摘要作为保障数据安全的一种方式,对于信息的加密技巧起源于欧洲,公元前2000年,埃及人是最先使用象形文字作为信息编码的人。
随着时间推移,巴比伦、美索不达米亚和希腊文明都开始使用一些方法来保护他们的书面信息(明文)。
后来,被Julias Caesar(凯撒大帝)使用,也曾用于历次战争中,包括美国独立战争、美国内战和两次世界大战。
最广为人知的编码机器是德国的German Enigma,在第二次世界大战中德国人利用它创建了加密信息系统,从而解决军事信息的保密通讯问题。
此后,由于Alan Turing和Ultra计划以及其他工程技术人员的不泄努力,盟军终于对德国人的密码成功破译了,进而导致第二次世界大战结束。
当初,美国人对于计算机的研究,主要目的是用于破解德国人的通讯密码,这在当时,人们并没有意识到计算机技术此后的发展会影响世界历史进程,从而在全球引发了一场信息革命。
随着计算机的发展,运算能力的增强,传统的密码知识和技能都变得十分简单了而很容易被人破解,于是人们又不断地研究出了新的数据加密方式,如私有密钥算法和公共密钥算法。
可以说,是计算机技术的飞速发展在推动了数据加密技术的发展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象编程技术》课程设计实验报告——————坦克二班级:软124姓名:张景东学号:129074282指导教师:胡增涛设计完成时间:2013/12/24目录一、程序名称二、设计目的三、程序设计的意义四、功能介绍五、开发平台六、课程设计总体规划1、处理流程图2、结构模块分析七、主要代码八、运行效果抓图九、创新和难点十、课程设计中目前存在的问题十一、心得体会一、程序名称以《坦克大战》游戏为题材,自己动手,从零开始,写出简单坦克小游戏-----坦克二。
二、设计目的1、进一步掌握C++进行类的定义和操作方法;2、学习和掌握C++程序设计方法以及上机调试技巧,为以后学校其他专业课程打好基础;3、能够培养我们独立分析问题、解决问题、查阅资料以及自学的能力,以适应计算机只是日新月异发展的形式;4、程序设计的目的不单单是课堂上的学习,我觉得最重要的是让我们学生掌握程序设计的思想与方法。
在课程设计的过程中,我们充分运用我们课堂上学习到的知识,并且复习C语言中的函数等知识点。
在这个过程中,我们能够不断提高对C++面向对象程序设计的理解,最终能够独立自主解决一些问题。
三、程序设计的意义大学最重要无疑是动手能力与自学能力的培养,课程设计明显给了我们这样的一个机会。
遇到瓶颈的时候,我们需要去图书馆查阅书籍,代码错误的时候我们需要反复的调试,在这个过程中,我们的动手能力以及自学能力都在不知不觉中得到了很大的提升。
回顾起此次课程设计,我还是感慨颇多,从理论到实践,在这几乎一个学期的时间里(课程设计是C++第一次上课的时候提出来的),我学到了很多很多的东西,不仅巩固了以前所学过的C语言方面的知识,而且自己也去图书馆查阅资料学到了很多。
通过这次的课程设计使我懂得了理论与实际结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践结合起来,从理论中得出结论,才是自己真正掌握了的,属于自己的知识,才能提高自己的实际动手能力和独立思考的能力。
在课程设计的过程中遇到了各种各样的问题,同时在设计的过程中也发现了自己的不足之处,对以前所学的知识理解的不够深刻,掌握的不够牢固,通过这次课程设计,把以前所学的知识重新温故,巩固了所学的知识。
四、功能介绍在坦克二程序中,小坦克能够上下左右自由移动,飞机能够左右移动,并且能够发射子弹,飞机每次只能发一颗子弹但是坦克可以多发子弹连续发射,在坦克子弹打中飞机或者飞机子弹打中坦克之后,游戏结束。
五、开发平台操作系统:win 7开发软件:Mirosoft Visual C++ 6.0六、课程设计总体规划1、处理流程图开始是否开始游戏使用方法开始游戏主要事项Y坦克移动发射子弹N坦克被打死或者飞机被打死游戏结束YN2、结构模块分析Tankwar类Bullet类Tank类Plane类Tankwar类是Bullet类、Tank类、Plane类的服务类,Tankwar 类内部只有几个函数。
七、主要代码/*子弹类*/class Bullet{public:void showTankBullet(){printf("T");}void showPlaneBullet(){printf("F");}Bullet(int X,int Y){x=X;y=Y;next=NULL;}Bullet(){x=36;y=23;next=NULL;}void setlocationBullet(int X,int Y){ x=X;y=Y;}void move_up(){gotoxy(x,y);printf(" ");//setlocationBullet(x,y-1);if(y!=0){y--;gotoxy(x,y);showTankBullet();}}int getX(){return x;}int getY(){return y;}~Bullet(){}Bullet *next; private:int x,y;};//飞机类class Plane{ public:void showPlane(){gotoxy(x,y-2);printf("Y");gotoxy(x,y-1);printf("Y");gotoxy(x-1,y);printf("YYY");gotoxy(x,y+1);printf("Y");}Plane(int X=1,int Y=2){x=X;y=Y;mmm=0;}void setlocationPlane(int X,int Y){x=X;y=Y;}void move(){if(mmm==2){int X=x,Y=y;mmm=0;deletePlane(X,Y);if(X==78) X=0; //飞机如果到达最右边,则返回最左边setlocationPlane(X+1,Y);showPlane();}mmm++;}void deletePlane(int x_myplane,int y_myplane){ gotoxy(x_myplane,y_myplane-2);printf(" ");gotoxy(x_myplane,y_myplane-1);printf(" ");gotoxy(x_myplane-1,y_myplane);printf(" ");gotoxy(x_myplane,y_myplane+1);printf(" ");}int getX(){return x;}int getY(){return y;}~Plane(){}int judge_bulletoftank_plane(Bullet *head);private:int x,y,mmm;};int Plane::judge_bulletoftank_plane(Bullet *head){Bullet *p1;int a,b;p1=head;while(p1!=NULL){a=p1->getX();b=p1->getY();if((a==(x-1)&&b==y)||(a==x&&b==(y+1))||(a==x+1&&b==y)||(a==x &&b==y))return 1;p1=p1->next;}return 0;}/*TANK类*/class Tank{public:void showTank(){gotoxy(x+1,y-1);printf("W");gotoxy(x,y);printf("WWW");}void setLocationofTank(int X,int Y){ x=X;y=Y;}Tank(int X=35,int Y=24){x=X;y=Y;}int getX(){return x;}int getY(){return y;}~Tank(){}void deleteTank(int x_myTank,int y_myTank){ gotoxy(x_myTank+1,y_myTank-1);printf(" ");gotoxy(x_myTank,y_myTank);printf(" ");}void move_to_left(){int X=x,Y=y;if(X==0) X++;setLocationofTank(X-1,Y);deleteTank(X,Y);// gotoxy(x_myTank-1,y_myTank);showTank();}Bullet* creat_bullet(Bullet *head,Bullet *bullet); void bullet_fired(Bullet *head);Bullet* destroy_bullet(Bullet *head);int judge_bullet_of_plane_tank(Bullet *head,int x_plane_bullet,int y_plane_bullet);void move_to_right();void move_to_up();void move_to_down();void move(char ch);private:int x,y;};int Tank::judge_bullet_of_plane_tank(Bullet *head,int x_plane_bullet,int y_plane_bullet){Bullet *p1;int a,b;p1=head;while(p1!=NULL){a=p1->getX();b=p1->getY();if(a==x_plane_bullet&&b==y_plane_bullet)return 1;p1=p1->next;}return 0;}Bullet* Tank::destroy_bullet(Bullet *head) {Bullet *p1,*p2;if(head==NULL)return head;elsep1=head;while(0!=p1->getY()&&p1->next!=NULL) {p2=p1;p1=p1->next;}if(0==p1->getY()){if(p1==head){gotoxy(p1->getX(),p1->getY());printf(" ");head=p1->next;delete p1;}else{gotoxy(p1->getX(),p1->getY());printf(" ");p2->next=p1->next;delete p1;}}return head;}void Tank::bullet_fired(Bullet *head){Bullet *p1;p1=head;if(p1!=NULL){p1->move_up();while(p1->next!=NULL){p1=p1->next;p1->move_up();}}}Bullet* Tank::creat_bullet(Bullet *head,Bullet *bullet) {Bullet *p0,*p1;p1=head;p0=bullet;if(head==NULL){head=p0;p0->next=NULL;}else if(head!=NULL){if(p1->next==NULL){p1->next=p0;p0->next=NULL;}else{while(1){p1=p1->next;if(p1->next==NULL){p1->next=p0;p0->next=NULL;break;}}}}return head;}void Tank::move_to_right(){int X=x,Y=y;if(X==77) X--;setLocationofTank(X+1,Y);deleteTank(X,Y);// gotoxy(x_myTank+1,y_myTank);showTank();}void Tank::move_to_up(){int X=x,Y=y;if(Y==5) Y++;setLocationofTank(X,Y-1);deleteTank(X,Y);// gotoxy(x_myTank,y_myTank-1);showTank();}void Tank::move_to_down(){int X=x,Y=y;if(Y==24) Y--;setLocationofTank(X,Y+1);deleteTank(X,Y);showTank();}void Tank::move(char ch){if(ch=='a')//左移动move_to_left();else if(ch=='d')//右移动move_to_right();else if(ch=='w')//上移动move_to_up();else if(ch=='s')//下移动move_to_down();}//坦克大战处理类class tankwar{public:int cover();void showsuccess(int x_myplane,int y_myplane);void showfailure(int x,int y);void the_picture_of_success(int temp,int count);//void delay(DWORD dur);void show_unexpected(int x_plane_bullet,int y_plane_bullet);void initialization(){gotoxy(35,24);myTank.showTank();myPlane.showPlane();}private:void the_way_to_play_game();void attention_place();Tank myTank;Plane myPlane;};int tankwar:: cover(){printf("\n\n\n");cout<<"********************************************"<<en dl;cout<<"** 设计者:张景东**"<<endl;cout<<"** 设计时间:2013/10/25 **"<<endl;cout<<"****"<<endl;cout<<"** 欢迎使用!!!**"<<endl;cout<<"********************************************"<<en dl;cout<<"Do you want to start the game?(y or n)"<<endl;char ch;cin>>ch;if(ch=='y'||ch=='Y'){while(1){system("cls");printf("\n\n\n");cout<<"********************************************"<<en dl;cout<<"** 1.使用方法**"<<endl;cout<<"** 2.注意事项**"<<endl;cout<<"** 3.开始游戏**"<<endl;cout<<"**请选择:**"<<endl;cout<<"********************************************"<<en dl;int n;scanf("%d",&n);if(n==3) return 1;if(n==1){system("cls");the_way_to_play_game();}if(n==2){system("cls");attention_place();}}}if(ch=='n'||ch=='N') return 0;}void tankwar::the_way_to_play_game(){printf("\n\n\n");cout<<"********************************************"<<en dl;cout<<"** W 上**"<<endl;cout<<"** ASD 左下右J发射子弹**"<<endl;cout<<"****"<<endl;cout<<"** 注意:按空格键可以中途退出游戏**"<<endl;cout<<"********************************************"<<endelay(3000);}void tankwar::attention_place(){printf("\n\n\n");cout<<"************************************************* *******************************"<<endl;cout<<" 1. 你不打飞机的话,飞机也不会打你的"<<endl;cout<<" 2. 最开始你发两颗子弹飞机才会打你一次,把握住这个机会消灭飞机"<<endl;cout<<" 3. 在打飞机的过程中,你移动的越频繁飞机发射子弹打你的次数会越多"<<endl;cout<<"************************************************* *******************************"<<endl;delay(6000);}void tankwar:: showsuccess(int x_myplane,int y_myplane)int i=15;while(i--){gotoxy(x_myplane,y_myplane-2);printf("-");gotoxy(x_myplane,y_myplane-1);printf("-");gotoxy(x_myplane-1,y_myplane);printf("---");gotoxy(x_myplane,y_myplane+1);printf("-");delay(100);gotoxy(x_myplane,y_myplane-2);printf("*");gotoxy(x_myplane,y_myplane-1);printf("*");gotoxy(x_myplane-1,y_myplane);printf("***");gotoxy(x_myplane,y_myplane+1);printf("*");delay(100);}void tankwar::showfailure(int x_myTank,int y_myTank) {system("cls");int i=15;while(i--){gotoxy(x_myTank-1,y_myTank);printf("+");gotoxy(x_myTank,y_myTank);printf("+");gotoxy(x_myTank+1,y_myTank);printf("+");gotoxy(x_myTank,y_myTank-1);printf("+");delay(90);gotoxy(x_myTank-1,y_myTank);printf("-");gotoxy(x_myTank,y_myTank);printf("-");gotoxy(x_myTank+1,y_myTank);printf("-");gotoxy(x_myTank,y_myTank-1);printf("-");delay(90);}}void tankwar::the_picture_of_success(int temp,int count){if(temp==1){printf("\n\n\n\n");printf(" 恭喜你成功打掉灰机!!!!您的命中率为百分之%.2f!!!!\n继续加油哈,亲。