《最新c--学生成绩管理系统分析.doc》由会员分享,可在线阅读,更多相关《最新c--学生成绩管理系统分析.doc(93页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datec-学生成绩管理系统分析c-学生成绩管理系统分析1系统概述1.1功能简介本软件是一个简单的学校学生信息管理系统,软件窗口为DOS页面。学生信息管理系统的功能主要是实现学校学生的信息化管理。通过学生信息管理系统,教学管理人员可以实现对学生信息的增加、删除、修改和查询等操作。本系统最大的优点就是操作简便快捷等。1.2设计思路将学生信息定义为一个student类,在类中包含
2、私有数据成员char stuNo10; /学号char name20; /姓名int age; /年龄float Math; /数学float English; /英语float Physics; /物理float total; /总成绩然后定义了一个( ) 菜单函数,使功能菜单显示在运行窗口以提示用户如何进行操作。主函数是一个程序必不可少的,在主函数中,使用一个switch语句来选择调用主菜单中的各个功能函数。1.3 结构图 主菜单查看某个学生成绩查看成绩单修改学生成绩登记学生成绩查找学生信息浏览学生信息删除学生信息修改学生信息创建或录入学生信息2系统功能的分析和设计2.1初始录入功能此函数
3、实现的功能主要是,对学生信息的初始化录入功能,在初始时,文件中没有任何数据,可以通过此函数输入任意个学生的信息,输入信息之前需先输入学生的个数在此函数中使用文件处理的方式,先建立一个文件输出流对象,以写的方式打开stu.txt文件,使输入的学生信息都写入文件。2.2添加函数此函数实现的功能主要是,添加学生的信息,调用一次这个函数可以选择添若干个学生的信息。在此函数中也使用文件处理的方式,但使用的是以追加的方式打开文件,使输入的学生信息写在文件里原有信息的后面。2.3删除函数 此函数实现的功能主要是,删除一个学生的信息。在此函数中,先以读的方式打开文件,读出文件里的信息在显示在屏幕上,用户再根据
4、提示信息输入想要删除第几个人的信息,关闭文件。再以写的方式打开文件,以一个if条件语句控制,再重新将学生信息写入文件(除了打算删除的那个学生的信息),由于是以写的方式打开的文件,所以文件里原有的输入就都没有了,存入的新的数据。2.4修改函数 此函数实现的功能主要是,修改一个学生的信息。此函数的设计方法和删除函数的设计思想相类似,应用的思想都是将学生信息重新写入文件的方法,将原有数据覆盖。2.5查询函数 在查询功能中,可以按多条件查询,本系统分为两个查询条件,即按学号查询和按姓名查询。使用if语句来选择查询条件。 2.5.1按学号查询 根据提示信息输入学号后,然后使用一个for循环语句,从第一个
5、学生开始检索,如果该学生的学号和输入的学号相等,则输出该学生的信息,由于学生的学号是唯一固定的,所以并使用break语句跳出循环。 当无查询结果时,会输出一条提示信息“无此人信息!” 。 2.5.2按姓名查询 根据提示信息输入姓名后,然后使用一个for循环语句,从第一个学生开始检索,如果该学生的姓名和输入的姓名一样,则输出该学生的信息,由于学生的姓名有可能重复出现,所以不能使用break语句跳出循环,应该从第一个学生开始检索直到最后一名学生。 当无查询结果时,会输出一条提示信息“无此人信息!” 。2.6显示函数 此函数实现的功能主要是,显示所有学生的信息。先是从文件中读取学生信息,然后在输出到
6、显示窗口中。用一个for循环语句,来把所有学生的信息都输出。2.7退出系统 当输入“0”时,就能退出系统,这是通过while语句来控制实现的。3调试及运行结果3.1 主菜单3.2创建或录入学生信息3.3修改学生信息3.4删除学生信息3.5浏览学生信息3.6查找学生信息3.7登记成绩3.8修改成绩3.9查看成绩单3.10查看某个学生成绩总结4.1遇到的问题及解决方法 首先,是对文件的处理不够熟练,通过看书和搜集一些资料解决了这个问题;其次,是在编写程序的过程中出现了一些语法错误,后通过调试逐一解决。4.2收获和体会此次c+面向对象课程设计,在指导教师的精心教导下,我们学会了如何用C+编写一个简单
7、的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的菜单界面,将各个功能集中出现在主菜单中,便于调用。根据C+课程所学的概念、理论和方法,按照C+程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C+语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。参考文献 1元芳,王亮编著c+程序设计,北京,清华大学出版社,2013年。附录#includeiostream#i
8、ncludeiomanip/它是I/O流控制头文#includestdio.h#includestdlib.h/包含了C语言的一些函数#includestring.h# define SPACE using namespace std;struct studentRecord char stuNo20; /学号 char name20; /姓名 int age; /年龄 float Math; /数学 float English; /英语 float Physics; /物理 float total; /总成绩*p;void shujucharu ();/数据插入void shujuxiuga
9、i ();/数据修改void shujushanchu ();/数据删除void shujuliulan ();/数据浏览(按学号排序)void chengjidengji ();/学生成绩登记void chengjixiugai ();/学生成绩修改void viewTable ();/学生成绩查看(按成绩排名)void inquiry ();/成绩查询void write ();/文件写入void read ();/文件读取int line ();/文件中记录学生的数目int i,n;bool y;void main()int a,b;coutSPACE-欢迎登陆学生成绩管理系统-endl
10、endlendl;cout请选择功能模块:endl;coutendl;cout=endl;coutendl; coutSPACE 1 创建或录入学生信息 endl;coutSPACE 2 修改学生信 息 endl;coutSPACE 3 删除学生信 息 endl;coutSPACE 4 浏览学生信 息 endl;coutSPACE 5 查找学生信 息 endl;coutSPACE 6 登 记 成 绩 endl;coutSPACE 7 修 改 成 绩 endl;coutSPACE 8 查 看成 绩 单 endl; coutSPACE 9 查看某个学生成绩 endl; coutSPACE 0 退出
11、 endl;cout-endl;couta;system(cls);if(a=1|a=0) y=1; if(y=0) cout请先录入学生信息,才能进行下面的操作!endl;a=1;y=1;while(a)switch(a)case 1: shujucharu(); break; case 2: shujuxiugai (); break; case 3: shujushanchu (); break; case 4: cout=endl;coutendl;coutSPACE 1、按学号排序浏览 endl;coutSPACE 2、按成绩排序浏览 endl;coutSPACE 3、退出 endl
12、;cout-b;system(cls);while(b!=3)switch(b)case 1: shujuliulan(); break;case 2: viewTable(); break;default: cout请输入1-3之内的数!endl;coutendlendl按任意数字键返回浏览界面.k;system(cls);cout=endl;coutendl;coutSPACE 1、按学号排序浏览 endl;coutSPACE 2、按成绩排序浏览 endl;coutSPACE 3、退出 endl;cout-b;system(cls);break;case 5: inquiry (); br
13、eak; case 6: chengjidengji(); break;case 7: chengjixiugai (); break; case 8:cout=endl;coutendl;coutSPACE 1、按学号排序浏览 endl;coutSPACE 2、按成绩排序浏览 endl;coutSPACE 3、退出 endl;cout-b;system(cls);while(b!=3)switch(b)case 1: shujuliulan(); break;case 2: viewTable(); break;default: cout请输入1-3之内的数!endl;coutendlend
14、l按任意数字键返回浏览界面.k;system(cls);cout=endl;coutendl;coutSPACE 1、按学号排序浏览 endl;coutSPACE 2、按成绩排序浏览 endl;coutSPACE 3、退出 endl;cout-b;system(cls);break;case 9: inquiry (); break;default: cout输入无效,请输入0-9之内的数!endl;coutendlendl按任意数字键返回菜单界面.k;system(cls);cout=endl;coutendl; coutSPACE 1 创建或录入学生信息 endl;coutSPACE 2
15、修改学生信 息 endl;coutSPACE 3 删除学生信 息 endl;coutSPACE 4 浏览学生信 息 endl;coutSPACE 5 查找学生信 息 endl;coutSPACE 6 登 记 成 绩 endl;coutSPACE 7 修 改 成 绩 endl;coutSPACE 8 查 看成 绩 单 endl; coutSPACE 9 查看某个学生成绩 endl; coutSPACE 0 退出 endl;cout-endl;couta;system(cls);/1.文件写入void write ()FILE * fp;if(fp=fopen(stu.txt,w)!=NULL)
16、for(i=0;in;i+)fprintf(fp,%s %s %d %f %f %f %fn,pi.stuNo,pi.name,pi.age,pi.Math,pi.English,pi.Physics,pi.total);fclose(fp);elseprintf(文件打开或创建发生错误。n);/2.文件读取void read ()FILE * fp;if(fp=fopen(stu.txt,r)!=NULL)n=line();p=new struct studentRecord n;for(i=0;in;i+)fscanf(fp,%s %s %d %f %f %f %f,pi.stuNo,pi
17、.name,&pi.age,&pi.Math,&pi.English,&pi.Physics,&pi.total);fclose(fp);elsecout文件打开或创建发生错误!endl;/3.文件中记录学生的数目int line ()char c; int h=0;FILE * fp; if(fp=fopen(stu.txt,r)!=NULL) while(c=fgetc(fp)!=EOF)if(c=n)h+;fclose(fp);elsecout文件打开或创建发生错误n;return h;/4.成绩查询void inquiry ()read();char b20;int m;cout请选择
18、查询方式endl;coutSPACE1.学号查询endl;coutSPACE2.姓名查询m;if(m=1|m=2)if(m=1)coutb;system(cls);for(i=0;in;i+)if(strcmp(pi.stuNo,b)=0) coutendl 学号:pi.stuNon 姓名:pi.namen 年龄:pi.agen 数学:pi.Mathn 英语:pi.Englishn 物理:pi.Physicsn 总分:pi.totalendl;break;if(m=2)coutendlSPACEb;system(cls);for(i=0;in;i+) if(strcmp(pi.name,b)=
19、0)coutendl 学号:pi.stuNon 姓名:pi.namen 年龄:pi.agen 数学:pi.Mathn 英语:pi.Englishn 物理:pi.Physicsn 总分:pi.totalendl;elsecout输入错误,请输入1或2endl;/5.数据插入void shujucharu ()FILE * fp;if(fp=fopen(stu.txt,a+)!=NULL)/以追加方式打开stu.txt文档int n;coutn;p=new struct studentRecord n;/建立新节点if(n=0)coutSPACE没有进行数据插入endl;for(int i=0;i
20、n;i+)cout请输入插入的第i+1pi.stuNo; coutendlSPACEpi.name; coutendlSPACEpi.age; pi.Math=0;pi.English=0; pi.Physics=0; pi.total=0;for(i=0;in;i+) /输出fprintf(fp,%s %s %d %f %f %f %fn,pi.stuNo,pi.name,pi.age, pi.Math,pi.English,pi.Physics,pi.total);fclose(fp);delete p;/程序用delete 删除数组并释放内存elseprintf(文件打开或创建时发生错误
21、.n);/6.数据修改void shujuxiugai ()read();shujuliulan();char b20;coutendlSPACEb;for(i=0;in;i+)if(strcmp(pi.stuNo,b)=0) / 判断字符串b和字符串pi.stuNo是否相等cout该学生原始信息如下:endl; coutendlpi.stuNot姓名:pi.namet数学成绩:pi.Matht英语成绩:pi.Englisht物理成绩:pi.Physicst总分:pi.totalendl;coutendl请重新输入该学生的信息:endl;coutendlSPACEpi.stuNo;couten
22、dlSPACEpi.name;coutendlSPACEpi.age;cout修改成功!=n&(strcmp(pi.stuNo,b)!=0)coutendlSPACE该学号不存在!endl;coutendlSPACE请输入需要修改信息学生的姓名进行查找修改!endl; /按姓名查找进行修改coutendlSPACEb;for(i=0;in;i+)if(strcmp(pi.name,b)=0) coutendlSPACE该学生原始信息如下:endl; coutendlpi.stuNot姓名:pi.namet数学成绩:pi.Matht英语成绩:pi.Englisht物理成绩:pi.Physicst
23、总分:pi.totalendl;coutendl请重新输入该学生的信息:endl;coutendl pi.stuNo; coutendlSPACEpi.name; coutendlSPACEpi.age; coutendlSPACEpi.Math; coutendlSPACEpi.English; coutendlSPACEpi.Physics; pi.total=pi.Math+pi.English+pi.Physics;cout修改成功!=n&(strcmp(pi.stuNo,b)!=0)coutendlSPACE该学生姓名不存在!endl;write();/7.按学号排序进行数据浏览vo
24、id shujuliulan()read ();for(i=0;in-1;i+) int k=i;for(int j=i+1;j0)k=j;struct studentRecord t;t=pi;pi=pk;pk=t; coutsetw(20)学号setw(20)姓名setw(6)年龄setw(6)数学setw(6)英语setw(6)物理setw(8)总分endl;for(i=0;in;i+)coutsetw(15)pi.stuNosetw(18)pi.namesetw(6)pi.agesetw(6)pi.Math setw(6)pi.Englishsetw(6)pi.Physicssetw(
25、8)pi.totalendl;if(i+1)%10=0)coutendlSPACE按任意数字键继续显示下一屏.endly;system(cls);/8.学生成绩登记void chengjidengji () read();for(i=0;in;i+)coutendlendlpi.stuNotsetw(20)pi.nametpi.Math; coutendlttttpi.English; coutendlttttpi.Physics; pi.total=pi.Math+pi.English+pi.Physics;if(i+1)%3=0)system(cls);if(i+1)%5=0)couten
26、dl是否停止输入Y/Nc; if(c=Y|c=y) break; if (c=N|c=n) ;write(); /9.成绩修改void chengjixiugai() read();shujuliulan();char b20;coutendlb;for(i=0;in;i+)if(strcmp(pi.stuNo,b)=0)cout该学生的原有成绩如下:endlendl;coutendlpi.stuNotpi.namet数学成绩:pi.Matht英语成绩:pi.Englisht物理成绩:pi.Physicsendl;coutendlpi.Math; coutendl pi.English; coutendl 物理成绩:;