c学生成绩管理系统分析.docx
《c学生成绩管理系统分析.docx》由会员分享,可在线阅读,更多相关《c学生成绩管理系统分析.docx(27页珍藏版)》请在冰豆网上搜索。
c学生成绩管理系统分析
1 系统概述
1.1 功能简介
本软件是一个简单的学校学生信息管理系统,软件窗口为DOS页面。
学生信息管理系统的功能主要是实现学校学生的信息化管理。
通过学生信息管理系统,教学管理人员可以实现对学生信息的增加、删除、修改和查询等操作。
本系统最大的优点就是操作简便快捷等。
1.2 设计思路
将学生信息定义为一个student类,在类中包含私有数据成员charstuNo[10];//学号
charname[20];//姓名
intage;//年龄
floatMath;//数学
floatEnglish;//英语
floatPhysics;//物理
floattotal;//总成绩
然后定义了一个main()菜单函数,使功能菜单显示在运行窗口以提示用户如何进行操作。
主函数是一个程序必不可少的,在主函数中,使用一个switch语句来选择调用主菜单中的各个功能函数。
1.3结构图
2 系统功能的分析和设计
2.1 初始录入功能
此函数实现的功能主要是,对学生信息的初始化录入功能,在初始时,文件中没有任何数据,可以通过此函数输入任意个学生的信息,输入信息之前需先输入学生的个数
在此函数中使用文件处理的方式,先建立一个文件输出流对象,以写的方式打开stu.txt文件,使输入的学生信息都写入文件。
2.2 添加函数
此函数实现的功能主要是,添加学生的信息,调用一次这个函数可以选择添若干个学生的信息。
在此函数中也使用文件处理的方式,但使用的是以追加的方式打开文件,使输入的学生信息写在文件里原有信息的后面。
2.3 删除函数
此函数实现的功能主要是,删除一个学生的信息。
在此函数中,先以读的方式打开文件,读出文件里的信息在显示在屏幕上,用户再根据提示信息输入想要删除第几个人的信息,关闭文件。
再以写的方式打开文件,以一个if条件语句控制,再重新将学生信息写入文件(除了打算删除的那个学生的信息),由于是以写的方式打开的文件,所以文件里原有的输入就都没有了,存入的新的数据。
2.4 修改函数
此函数实现的功能主要是,修改一个学生的信息。
此函数的设计方法和删除函数的设计思想相类似,应用的思想都是将学生信息重新写入文件的方法,将原有数据覆盖。
2.5 查询函数
在查询功能中,可以按多条件查询,本系统分为两个查询条件,即按学号查询和按姓名查询。
使用if语句来选择查询条件。
2.5.1 按学号查询
根据提示信息输入学号后,然后使用一个for循环语句,从第一个学生开始检索,如果该学生的学号和输入的学号相等,则输出该学生的信息,由于学生的学号是唯一固定的,所以并使用break语句跳出循环。
当无查询结果时,会输出一条提示信息“无此人信息!
”。
2.5.2 按姓名查询
根据提示信息输入姓名后,然后使用一个for循环语句,从第一个学生开始检索,如果该学生的姓名和输入的姓名一样,则输出该学生的信息,由于学生的姓名有可能重复出现,所以不能使用break语句跳出循环,应该从第一个学生开始检索直到最后一名学生。
当无查询结果时,会输出一条提示信息“无此人信息!
”。
2.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 总结
4.1 遇到的问题及解决方法
首先,是对文件的处理不够熟练,通过看书和搜集一些资料解决了这个问题;其次,是在编写程序的过程中出现了一些语法错误,后通过调试逐一解决。
4.2 收获和体会
此次c++面向对象课程设计,在指导教师的精心教导下,我们学会了如何用C++编写一个简单的应用程序。
首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。
程序实现上,设计了简单的菜单界面,将各个功能集中出现在主菜单中,便于调用。
根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。
理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。
我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
参考文献
[1] 元芳,王亮编著《c++程序设计》,北京,清华大学出版社,2013年。
附录
#include"iostream"
#include"iomanip"//它是I/O流控制头文
#include"stdio.h"
#include"stdlib.h"//包含了C语言的一些函数
#include"string.h"
#defineSPACE""
usingnamespacestd;
structstudentRecord
{
charstuNo[20];//学号
charname[20];//姓名
intage;//年龄
floatMath;//数学
floatEnglish;//英语
floatPhysics;//物理
floattotal;//总成绩
}*p;
voidshujucharu();//数据插入
voidshujuxiugai();//数据修改
voidshujushanchu();//数据删除
voidshujuliulan();//数据浏览(按学号排序)
voidchengjidengji();//学生成绩登记
voidchengjixiugai();//学生成绩修改
voidviewTable();//学生成绩查看(按成绩排名)
voidinquiry();//成绩查询
voidwrite();//文件写入
voidread();//文件读取
intline();//文件中记录学生的数目
inti,n;
booly;
voidmain()
{
inta,b;
cout<cout<<"请选择功能模块:
"<cout<cout<<"==================================<菜单>=============================="<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<<"-----------------------------------------------------------------------"<cout<<"请输入您的选择:
";
cin>>a;
system("cls");
if(a==1||a==0)y=1;
if(y==0){cout<<"请先录入学生信息,才能进行下面的操作!
"<while(a)
{
switch(a)
{
case1:
shujucharu();break;
case2:
shujuxiugai();break;
case3:
shujushanchu();break;
case4:
{
cout<<"==============================<浏览学生信息>=============================="<cout<cout<cout<cout<cout<<"---------------------------------------------------------------------------"<cin>>b;system("cls");
while(b!
=3)
{
switch(b)
{
case1:
shujuliulan();break;
case2:
viewTable();break;
default:
cout<<"请输入1-3之内的数!
"<}
cout<>k;system("cls");
cout<<"==============================<浏览学生信息>=============================="<cout<cout<cout<cout<cout<<"---------------------------------------------------------------------------"<cin>>b;system("cls");
}
};
break;
case5:
inquiry();break;
case6:
chengjidengji();break;
case7:
chengjixiugai();break;
case8:
{
cout<<"==============================<查看成绩单>=============================="<cout<cout<cout<cout<cout<<"---------------------------------------------------------------------------"<cin>>b;system("cls");
while(b!
=3)
{
switch(b)
{
case1:
shujuliulan();break;
case2:
viewTable();break;
default:
cout<<"请输入1-3之内的数!
"<}
cout<>k;system("cls");
cout<<"==============================<查看成绩单>=============================="<cout<cout<cout<cout<cout<<"---------------------------------------------------------------------------"<cin>>b;system("cls");
}
};break;
case9:
inquiry();break;
default:
cout<<"输入无效,请输入0-9之内的数!
"<}
cout<>k;system("cls");
cout<<"==================================<菜单>=============================="<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<<"-----------------------------------------------------------------------"<cout<<"请输入您的选择:
";
cin>>a;system("cls");
}
}
//1.文件写入
voidwrite()
{FILE*fp;
if((fp=fopen("stu.txt","w"))!
=NULL)
{for(i=0;ifprintf(fp,"%s%s%d%f%f%f%f\n",p[i].stuNo,p[i].name,p[i].age,p[i].Math,p[i].English,p[i].Physics,p[i].total);
fclose(fp);
}
else
printf("文件打开或创建发生错误。
\n");
}
//2.文件读取
voidread()
{FILE*fp;
if((fp=fopen("stu.txt","r"))!
=NULL)
{
n=line();
p=newstructstudentRecord[n];
for(i=0;ifscanf(fp,"%s%s%d%f%f%f%f",p[i].stuNo,p[i].name,&p[i].age,&p[i].Math,&p[i].English,&p[i].Physics,&p[i].total);
fclose(fp);
}
else
cout<<"文件打开或创建发生错误!
"<}
//3.文件中记录学生的数目
intline()
{charc;
inth=0;
FILE*fp;
if((fp=fopen("stu.txt","r"))!
=NULL)
{while((c=fgetc(fp))!
=EOF)
{
if(c=='\n')
h++;
}
fclose(fp);
}
else
cout<<"文件打开或创建发生错误\n";
returnh;
}
//4.成绩查询
voidinquiry()
{read();
charb[20];
intm;
cout<<"请选择查询方式"<cout<cout<cin>>m;
if(m==1||m==2)
{
if(m==1)
{
cout<<"请输入学号:
";
cin>>b;system("cls");
for(i=0;i{
if(strcmp(p[i].stuNo,b)==0)
{cout<"<
<<"姓名:
"<
<<"年龄:
"<
<<"数学:
"<
<<"英语:
"<
<<"物理:
"<
<<"总分:
"<
break;
}
}
}
if(m==2)
{
cout<";
cin>>b;system("cls");
for(i=0;i{
if(strcmp(p[i].name,b)==0)
{cout<"<
<<"姓名:
"<
<<"年龄:
"<
<<"数学:
"<
<<"英语:
"<
<<"物理:
"<
<<"总分:
"<
}
}
}
}
else
cout<<"输入错误,请输入1或2"<}
//5.数据插入
voidshujucharu()
{FILE*fp;
if((fp=fopen("stu.txt","a+"))!
=NULL)//以追加方式打开stu.txt文档
{intn;
cout<<"请输入需要插入的学生数目:
";
cin>>n;
p=newstructstudentRecord[n];//建立新节点
if(n==0)
cout<for(inti=0;i{cout<<"请输入插入的第"<
";//输入
cin>>p[i].stuNo;
cout<";
cin>>p[i].name;
cout<";
cin>>p[i].age;
p[i].Math=0;
p[i].English=0;
p[i].Physics=0;
p[i].total=0;
}
for(i=0;ifprintf(fp,"%s%s%d%f%f%f%f\n",p[i].stuNo,p[i].name,p[i].age,
p[i].Math,p[i].English,p[i].Physics,p[i].total);
fclose(fp);
delete[]p;//程序用delete[]删除数组并释放内存
}
else
printf("文件打开或创建时发生错误.\n");
}
//6.数据修改
voidshujuxiugai()
{read();
shujuliulan();
charb[20];
cout<";//按学号查找进行修改
cin>>b;
for(i=0;i{if(strcmp(p[i].stuNo,b)==0)//判断字符串b和字符串p[i].stuNo是否相等
{cout<<"该学生原始信息如下:
"<cout<"<
"<
"<
<<"\t"<<"物理成绩:
"<
"<
cout<"<cout<";
cin>>p[i].stuNo;
cout<";
cin>>p[i].name;
cout<";
cin>>p[i].age;
cout<<"修改成功!
"<break;
}
}
if(i>=n&&(strcmp(p[i].