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)。
课程设计(论文)任务书软件学院学院软件+信息工程专业09- 02 班一、课程设计(论文)题目学生信息管理系统二、课程设计(论文)工作自2010 年 6 月 21 日起至 2010 年 6 月 25 日止。
三、课程设计(论文) 地点: 电子商务实验室四、课程设计(论文)内容要求:1.本课程设计的目的(1)使学生掌握C++编程的基本工作原理;(2)培养学生基本掌握C++应用编程的基本思路和方法;(3)使学生掌握C++应用调试的基本技能;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求1)基本要求:(1)分析应用的功能构成;(2)分析数据对象及其关联;(3)实现系统的类的设计;(4)对所设计应用进行调试。
2)创新要求:在基本要求达到后,可进行创新设计,增加功能、改进界面和性能。
3)课程设计论文编写要求(1)要按照书稿的规格打印誊写设计论文(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等(3)论文装订按学校的统一要求完成4)答辩与评分标准:(1)系统功能分析:25分;(2)完成设计过程:25分;(3)完成调试:25分;(4)回答问题:25分。
5)参考文献:1. 刘觉夫王更生等编著《C++程序设计》,北京邮电大学出版社2. 曾辉王更生李广丽等编著《C++程序设计实训教程》,北京邮电大学出版社3. 谭浩强编著《C++面向对象程序设计》,北京清华大学出版社4. 百度文库(寻找C++课程设计的模版及简易源代码)6)课程设计进度安排内容天数地点构思及收集资料1图书馆设计与调试2实验室撰写论文1图书馆学生签名:2010 年6 月21 日课程设计(论文)评审意见(1)完成原理分析(25分):优()、良()、中()、一般()、差();(2)设计分析(25分):优()、良()、中()、一般()、差();(3)完成调试(25分):优()、良()、中()、一般()、差();(4)回答问题(25分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否()评阅人:职称:2010 年6 月26 日摘要:随着科学技术的发展,计算机领域不断取得新的研究成果。
计算机在代替和延伸脑力劳动方面发挥越来越重要的作用,不仅在工业方面而且在日常生活中也越来越离不开计算机。
尤其是在学校里,要处理大量的学生数据。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用.作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,有着手工管理所无法比拟的优点。
学生成绩管理系统能方便用户迅速、准确处理学生的成绩,得到想要的数据并能将学生的信息以文档保存。
本文介绍了简易学生成绩管理系统在Microsoft Visual C++ 6.0环境下的实现过程:系统的分析,功能模块的设计,系统的调试和测试。
此系统的主要管理的信息有:学生的班级,学号,姓名和三(可以更改)门课的成绩。
本系统的主要功能有学生成绩的添加、删除、插入、显示,能对学生成绩按分数或学号进行排序,可以根据用户的要求按班级,姓名,学号查询学生的成绩信息,计算每位学生的总分,分类汇总统计每门课的的总分均分能保存信息到文件以及从文件中读取信息等功能。
关键词:学生成绩管理系统;功能模块(函数);指针;结构;链表;文件保存及读取。
目录1 需求分析 (5)1.1功能需求分析: (5)1.11学生成绩的读入和写出模块 (5)1.12学生成绩输入删除模块 (5)1.13学生成绩的查询模块 (5)1.14学生成绩的分类汇总模块 (5)1.2 环境需求分析: (5)1.3 方法需求分析 (5)2概要设计 (6)2.1 系统功能模块图 (6)2.2 设计思想: (6)3详细设计 (7)3.1 设计原理 (7)3.2程序详细代码描述 (7)3.3系统界面 (21)4调试与操作说明 (21)4.1调试过程 (21)4.2操作说明 (23)总结 (24)致谢 (25)1 需求分析1.1功能需求分析:简易学生成绩管理系统主要有4个大的模块:学生成绩从文件读入和写入,学生成绩的输入和删除,学生成绩信息的查询,以及学生成绩的分类汇总。
1.11学生成绩的读入和写出模块主要功能是读出要管理的成绩文档,保存修改后的成绩文档。
实际生活中学生成绩的文件主要以word或excel保存,为了方便操作我在调式本系统中成绩文件采用了txt的文档格式保存,当然以word文档形式保存也是可以的。
1.12学生成绩输入删除模块主要功能是输入、追加、删除学生成绩的操作。
添加操作是根据用户的要求实现的。
例如用户可以输入要删除学生的学号删除学生的信息。
此程序输入学生成绩时就计算个人的总分,并保存到数据结构中相应的变量中。
1.13学生成绩的查询模块主要功能是按照用户的要求查询学生的成绩。
其中用户可以选择查询单个学生的成绩还是某个班级的成绩,成绩查询中包括个人学生的总分,。
1.14学生成绩的分类汇总模块统计主要功能是某个班级的每门学科的总分。
1.2 环境需求分析:操作系统:Windows XP开发软件: Visual C++ 6.01.3 方法需求分析由于数组存放数据的时候要先确定数组的规模,不能动态的分配内存空间,而单链表是非连续存放的,可以对内存空间进行动态分配,此系统是用单链表完成的。
然后定义链表的结点类型为结构就可以实现对学生学号、姓名、成绩、班级等学保存。
每次只要返回头指针,就可以对整个链表进行操作,因此选链表来存放学生信息。
2概要设计2.1 系统功能模块图2.2 设计思想:学生成绩管理系统是用面向对象的方法设计,由于数组的存放是连续的,而单链表是非连续存放的,是动态分配内存空间,因此此系统采用单链表来完成。
各个功能模块的实现主要转变到对单链表的遍历,添加和删除结点。
3详细设计3.1 设计原理学生成绩管理系统以菜单选择,通过调用各个函数,对单链表的遍历,实现不同的功能,不同函数处理后返回的只是一个头结点,但是通过头结点可以找到所有链表中的信息,只要有函数,找到头指针就能进行相应的操作,所以模块化的程序方便以后添加或者删除某些功能,程序中通过system(“cls”)清屏函数实现界面的转换,主函数中的循环保证程序不会退出,一个循环和一个清屏函数实现了主菜单和各子画面的切换(子函数)。
这样的话各个子函数都可以调用一开始输入的数据,这样就实现了各个不同函数调用时都能使用整个系统连续起来了。
作为一个学生成绩管理系统,增加了文件的读入和写出功能,增加了程序的实用性。
3.2程序详细代码描述#include<iostream>#include<iomanip>#include<fstream>#include<string>using namespace std;#define max 100;class student{public:student *next;public:string name;//姓名long num;//学号int x,y,z;//数学,计算机,英语int AA;//总分void play(){cout<<name<<"学生的学号是"<<num<<",数学:"<<x<<",计算机:"<<y<<",英语:"<<z<<",总分:"<<AA<<endl;};student(string sname,long snum,int sx,int sy,int sz) {name=sname;num=snum;x=sx;y=sy;z=sz;}};class cla{public:cla()//构造函数{stu=0;sload();}~cla()//析构函数{student *p;p=stu;while(p){p=p->next;delete stu;stu=p;}stu=0;}void sadd(); //添加void sremove(); //删除void samend(); //修改void ssearch(); //查询void staxis(); //排序void ssave(); //保存void sload(); //读取//排序函数void pxh();void psx();void pyw();void pyy();void pAA();private:student *stu; //头接点};void cla::sadd()//添加{student *q;string name1;long num1;int x1,y1,z1;system("cls");cout<<"\n **增加的学生** \n"<<endl;cout<<"请输入学生的(中间用空格间隔) "<<endl;cout<<"姓名学号数学成绩计算机成绩英语成绩:"<<endl; cin>>name1>>num1>>x1>>y1>>z1;q=new student(name1,num1,x1,y1,z1);q->next=0;q->AA=x1+y1+z1;if(stu){student *t;t=stu;if(t->num==num1){cout<<"学号已存在,请重新输入"<<endl;return;}while(t->next){if(t->num==num1){cout<<"学号已存在,请重新输入"<<endl;return;}t=t->next;}t->next=q;}else{stu=q;}cout<<"输入完毕"<<endl;}void cla::sremove()//删除{system("cls");int num1;cout<<"\n** 删除学生信息**\n";cout<<"请输入想要删除学生的学号:";cin>>num1;//查找要删除的结点student *p1,*p2;p1=stu;while(p1){if(p1->num==num1)break;else{p2=p1;p1=p1->next;}}//删除结点if(p1!=NULL)//若找到结点,则删除{p1->play();cout<<"确定删除吗?[Y/N]"<<endl;char c;cin>>c;if(toupper(c)!='Y') return;if(p1==stu) //若要删除的结点是第一个结点{stu=p1->next;delete p1;}else //若要删除的结点是后续结点{p2->next=p1->next;delete p1;}cout<<"找到学号为"<<num1<<"的学生,并删除\n"; }else //未找到结点cout<<"未找到想要删除的学生!\n";}void cla::samend()//修改{system("cls");long num1;cout<<"\n** 修改学生信息**\n";cout<<"输入要修改学生的学号";cin>>num1;//查找要修改的结点student *p1,*p2;p1=stu;while(p1){if(p1->num==num1)break;else{p2=p1;p1=p1->next;}}if(p1!=NULL){cout<<"学号是"<<num1<<"的学生的信息"<<endl;cout<<"姓名"<<p1->name<<"数学"<<p1->x<<"计算机"<<p1->y<<"英语"<<p1->z<<endl; cout<<"请输入修改后的信息:姓名数学成绩计算机成绩英语成绩"<<endl;cin>>p1->name>>p1->x>>p1->y>>p1->z;p1->AA=p1->x+p1->y+p1->z;cout<<"修改成功"<<endl;}else //未找到接点cout<<"未找到!\n";}void cla::ssearch()//查询{system("cls");cout<<"\n** 查询学生信息**\n"<<endl;cout<<"请输入查询方式:"<<endl;cout<<"1.按学号查询"<<endl;cout<<"2.按姓名查询"<<endl;cout<<"3.返回"<<endl;char c; cin>>c;switch (c){case '1':{long num1;cout<<"要查询的学号"<<endl;cin>>num1;//查找要查询的结点student *p1,*p2;p1=stu;while(p1){if(p1->num==num1)break;else{p2=p1;p1=p1->next;}}if(p1!=NULL){cout<<"学号是"<<num1<<"的学生的信息"<<endl;cout<<"姓名:"<<p1->name<<" 数学:"<<p1->x<<" 计算机:"<<p1->y<<" 英语:"<<p1->z<<endl; cout<<"查询完毕...";}cout<<"未找到!\n";break;}case '2':{string name1;cout<<"要查询的学生姓名"<<endl;cin>>name1;//查找要查询的结点student *p1,*p2;p1=stu;while(p1){if(p1->name==name1)break;else{p2=p1;p1=p1->next;}}if(p1!=NULL){cout<<name1<<"的学生的信息"<<endl;cout<<"学号:"<<p1->num<<" 数学:"<<p1->x<<" 计算机:"<<p1->y<<" 英语:"<<p1->z<<endl; cout<<"查询完毕...";}else //未找到接点cout<<"未找到!\n";break;}case '3': return;}}void cla::pxh() //按学号排序{student *p1,*p2;int n;p1=stu;n=1;while(p1->next){ n++; p1=p1->next; }int i;p1=stu;for(i=1;i<n;i++){p1=stu;if (p1->num>p1->next->num) // 如果头结点大于第二个的{p2=p1->next;p1->next=p1->next->next;p2->next=p1; //头结点交换stu=p2;}p1=stu;while(p1->next->next) //中间的交换{p2=p1;p1=p1->next;if(p1->num>p1->next->num){p2->next=p1->next;p1->next=p1->next->next;p2->next->next=p1;p1=p2->next; //交换}}}p1=stu;do{p1->play();p1=p1->next;}while(p1);}void cla::psx()//按数学成绩排序{student *p1,*p2;int n;p1=stu;n=1;while(p1->next){ n++; p1=p1->next; }cout<<"共有"<<n<<"条信息..."<<endl;int i;for(i=1;i<n;i++){ p1=stu;if (p1->x>p1->next->x) // 如果头结点大于第二个的{ p2=p1->next;p1->next=p1->next->next;p2->next=p1; //头结点交换stu=p2;}p1=stu;while(p1->next->next) //中间的交换{ p2=p1;p1=p1->next;if(p1->x>p1->next->x){p2->next=p1->next;p1->next=p1->next->next;p2->next->next=p1;p1=p2->next; //交换}}}p1=stu;do{ p1->play();p1=p1->next;}while(p1);}void cla::pyw()//按语文成绩排序{student *p1,*p2;int n;p1=stu;n=1;while(p1->next){ n++; p1=p1->next; }cout<<"共有"<<n<<"条信息..."<<endl;int i;p1=stu;for(i=1;i<n;i++){ p1=stu;if (p1->y>p1->next->y) // 如果头结点大于第二个的{ p2=p1->next;p1->next=p1->next->next;stu=p2;}p1=stu;while(p1->next->next) //中间的交换{ p2=p1;p1=p1->next;if(p1->y>p1->next->y){p2->next=p1->next;p1->next=p1->next->next;p2->next->next=p1;p1=p2->next; //交换}}}p1=stu;do{ p1->play();p1=p1->next;}while(p1);}void cla::pyy()//按英语成绩排序{student *p1,*p2;int n;p1=stu;n=1;while(p1->next){ n++; p1=p1->next; }cout<<"共有"<<n<<"条信息..."<<endl;int i;p1=stu;for(i=1;i<n;i++){ p1=stu;if (p1->z>p1->next->z) // 如果头结点大于第二个的{ p2=p1->next;p1->next=p1->next->next;p2->next=p1; //头结点交换stu=p2;}p1=stu;while(p1->next->next) //中间的交换{ p2=p1;p1=p1->next;p2->next=p1->next;p1->next=p1->next->next;p2->next->next=p1;p1=p2->next; //交换}}}p1=stu;do{ p1->play();p1=p1->next;}while(p1);}void cla::pAA()//按总分排序{student *p1,*p2;int n;p1=stu;n=1;while(p1->next){ n++; p1=p1->next; }cout<<"共有"<<n<<"条信息..."<<endl;int i;p1=stu;for(i=1;i<n;i++){ p1=stu;if (p1->AA>p1->next->AA) // 如果头结点大于第二个的{ p2=p1->next;p1->next=p1->next->next;p2->next=p1; //头结点交换stu=p2;}p1=stu;while(p1->next->next) //中间的交换{ p2=p1;p1=p1->next;if(p1->AA>p1->next->AA){p2->next=p1->next;p1->next=p1->next->next;p2->next->next=p1;p1=p2->next; //交换}p1=stu;do{ p1->play();p1=p1->next;}while(p1);}void cla::staxis()//排序{system("cls");char c;cout<<"请选择以何种方式排序:"<<endl;cout<<"1……以学号排序"<<endl;cout<<"2……以数学成绩排序"<<endl;cout<<"3……以计算机成绩排序"<<endl;cout<<"4……以英语成绩排序"<<endl;cout<<"5……以总分排序"<<endl;cout<<"6……返回"<<endl;cout<<"请选择(1-6)"<<endl;cin>>c;switch (c){case '1':pxh(); break;case '2':psx(); break;case '3':pyw(); break;case '4':pyy(); break;case '5':pAA(); break;case '6':return;}}void cla::ssave() //保存到文件{system("cls");char c;cout<<"\n保存学生信息(将覆盖原文件),是否继续?[Y/N]:"; cin>>c; if(toupper(c)!='Y') return;ofstream tfile("date.txt",ios_base::binary);student *p=stu;tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z; tfile<<endl;p=p->next;}tfile.close();cout<<"保存完毕..."<<endl;}void cla::sload() //读取{student *p;p=stu;while(p){stu=p->next;delete p;p=stu;}ifstream tfile("date.txt",ios_base::binary);string name1;long num1;int x1,y1,z1;tfile>>name1>>num1>>x1>>y1>>z1;while(tfile.good()){//创建学生接点student *s;s=stu;s=new student(name1,num1,x1,y1,z1);s->next=0;s->AA=x1+y1+z1;if(stu) //若已经存在结点{student *p2;p2=stu;while(p2->next) //查找尾结点{p2=p2->next;}p2->next=s; //连接else //若不存在结点(表空){stu=s; //连接}tfile>>name1>>num1>>x1>>y1>>z1;}tfile.close();cout<<"\n学生信息已经装入...\n";}void main(){char c;cla a;do{cout<<"\n 学生成绩管理系统\n";cout<<"**************************************\n"; cout<<" 作者:09软件+信息(2)班:\n";cout<<" 1……增加学生\n";cout<<" 2……删除学生\n";cout<<" 3……修改学生\n";cout<<" 4……查询学生信息\n";cout<<" 5……排序\n";cout<<" 6……保存信息\n";cout<<" 7……读取信息\n";cout<<" 8……退出\n";cout<<"**************************************\n"; cout<<"请选择(1-8):";cin>>c;switch(c){case '1': a.sadd();break;case '2': a.sremove();break;case '3': a.samend();break;case '4': a.ssearch();break;case '5': a.staxis();break;case '6': a.ssave();break;case '7': a.sload();break;}}while(c!='8');3.3系统界面系统主菜单列出了该程序的所有功能,学生个人的总分在输入创建链表是就计算好并储存好了,同时显示学生信息是就一起显示出来了,使用时该适当的使用第一个初始化链表的功能,否则可能出现意想不到的错误。