当前位置:天才代写 > C++/C代写 > 学生成绩管理系统,C++控制台,链表,完整报告文档

学生成绩管理系统,C++控制台,链表,完整报告文档

2017-09-07 08:00 星期四 所属: C++/C代写 浏览:62

学生信息管理系统
一、 系统设计目标及功能介绍
程序主要目标是实现学校对学生信息的管理,输入学生基本信息,包括姓名,性别,联系方式,成绩等。并将信息写入文件中保存,替换信息,查找、删除某个学生的信息。而且能实现统计每个学生的的总成绩,各科成绩的及格率,并将其显示在dos界面上。
1. 创建文件 创建并打开一个记事本students.txt。
2. 学生信息管理 主要是从键盘输入学生的信息,在输入学生的性别时,只能输入w或者m,否则将再次输入,知道输入正确为止,并将其读入到记事本中保存。其中可以完成从记事本中读出信息,在记事本中删除、替换学生信息等操作。
3、成绩管理 从键盘输入各科成绩,包括语文、数学、英语,能够统计每个学生的总成绩和平均成绩,并将其显示出来。系统也能实现各科的及格率。
4、退出 退出学生信息管理系统的界面
二、 详细设计
1、包括一个结构体:score结构体。包括学生的姓名,各科的成绩。
struct score
{char name[10];//学生的名字
double yuwen,shuxue,yingyu,sum;//语文、数学
、英语成绩以及总成绩
}sco[10]={"0",0,0,0,0};
2、包括两个类:Student类,notebook类。类的详细说明如下:
Student类:void srbh()//用于输入学生基本信息的函数
void scxx()//用于显示学生基本信息的函数
char num[5];//学生的编号
char sex;//学生的性别
char shengri[10];//学生的出生日期
char minzu[5];//学生的民族
char nation[10];//学生的国籍
char xueli[5];//学生的学历
char zhuanye[10];//学生的专业
char classname[5];//学生的班级
char gradename[5];//学生的年级
char address[15];//学生的地址
char tele[10];//学生的电话
notebook类:
creat( )//用于创建一个记事本文件
display()//从记事本文件中读取信息,并将其显示在dos界面上
seek()//用于查找某个学生的信息
average()//用于求各科的平均成绩
sum2()//全部学生的总成绩
repl()//用于在记事本中替换某个学生的信息
dele()//在记事本中删除某个学生的信息
3、主函数
定义一个notebook类的对象
在界面上输出:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~ 学生信息管理系统 ~~

~~ 1.创建文件 2.输入信息 ~~

~~ 3.替换信息 4.查找信息 ~~

~~ 5.显示信息 6.删除信息 ~~

~~ 7.学生总成绩 8.成绩的及格率 ~~

~~              0.退出系统 ~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
选择(0~8)
利用switch,case的结构,提供给用户的各项操作;
三、 流程图、类图、运行图
1.流程图

2、类图:

Student
– sex:char
– shengri[10]:char
-minzu[5]: char
-nation[10]:char
-xueli[5]:char
-zhuanye[10]:char
-classname[5]:char
– gradename[5]:char
– address[15]:char
-tele[10]:char
+srbh():void
+scxx():void
notebook
-filename[20]:char
– f:fstream
– s:Student
-countp:int
+creat( ):void
+display():void
+seek():void
+average():void
+sum2():void
+repl():void
+dele():void

3. 运行图

四、 遇到的问题及创新点
在编写这个程序时,两个难题就是,在文件中删除某个学生的信息和替换某个学生的信息。当时就是没有思路该怎么解决这个问题,通过问老师,查询书籍,上网查询资料等手段,逐一把它们都解决了。尤其是在记事本中删除某个学生的信息时,应该是把所有学生的信息先读出来,保存在记事本中。然后再将除了要删除的那个学生之外的所有学生的信息重新写进原来的记事本中,这样就完成删除操作。有时候也出现代码正确,去执行不了,有可能是上次执行的dos界面还没有关闭,这只是我个人遇到的问题。还有就是统计每个学生的总成绩和计算每个学科的平均成绩时,出现点麻烦。该怎么统计总人数,你不知道一共有多少人。后来突然想到用静态成员,那么问题就迎刃而解了。还有就是我用到结构体,来记录每个学生的各课成绩,这样就不会出现只能保存一个学生的成绩的问题了。
五、 心得体会
通过这次课程设计,我深切的感受到要想把一件事做好是多么的困难。刚开始时,一想编程应该是很轻松的一件事,可是真正到了自己操作的时候,就完全不是当初想象的那个样子了。不是缺符号,就是打字时出错,因此要反反复复的输入,运行。而且其中也有很多知识自己不熟悉,这就要靠自己的自学能力,查书,向老师请教。当我把一个非常困难的问题解决时,心里真的非常轻松和愉快。而且在课程设计时,我也掌握了许多以前不知道的知识,对以前的知识也起到了加深和巩固,真的受益匪浅。在实践过程中马钦老师给了我很大的帮助,深表感谢。同时我也深刻的了解到自己在编程方面还有很多不足的地方,自己知识的还有很多漏洞,实践经验还是比较缺乏,理论联系实际的能力还急需提高,然而我不会放弃的,我会更加努力学习,更上一层楼。对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆! 51-论文-网-欢迎您
附录(主要程序代码及简要系统说明):
Student类
class Student
{
public:
~Student(){};                     //析构函数
void srbh()            //输入学生信息的函数,定义为公有函数
{cout<<"请输入学生编号:";cin>>num;
cout< while(sex!='w'||sex!='m')
{cout<学生姓名:"<学生性别:"<
f<<"学生生日:"<学生民族:"<学生国籍:"<学生学历:"<
f<<"学生专业:"<学生班级:"<学生年级:"<
f<<"家庭住址:"<手机号码:"<

}

f.close();
}
display()//从文件中读出学生信息,并将其显示出来
{
char p[200];//定义一个一维数组,用于存放学生的各项信息
int i;
ifstream infile(filename,ios::in);
if(!infile)
{
cout<<"文件不能打开!"<
return false;
}
else
{

for(i=0;i<10
;i++)
{
infile.getline(p,200);
cout< }
}
infile.close();
f.close();
}
seek()//主要完成查找学生的信息
{
int x,i;
char q[200];//定义一个一维数组,存放学生的信息
cout<<"请输入要查找学生的编号:";cin>>x;//输入要查找的学生的编号
ifstream infile(filename,ios::in);
if(!infile)
{cout<<"不存在这个学生!"<
return false;}
else

for(i=0;i
infile.getline(q,195); //从文件中读取信息,并将其存放在一位数组中
if(infile.eof())
{
cout<<"没有这个学生的信息!"<
return false;
}
else
cout<
infile.close();}
average()//完成计算每科成绩的平均分,和各科的及格率
{
int i=0;
double m=0,n=0,p=0;
double sum3=0,sum4=0,sum5=0;//sum3是语文的总成绩;sum4是数学的总成绩;sum5是英语的总成绩
for(i=0;i
{
sum3+=sco[i].yuwen;
sum4+=sco[i].shuxue;
sum5+=sco[i].yingyu;
if(sco[i].yuwen>=60)
m++;
if(sco[i].shuxue>=60)
n++;
if(sco[i].yingyu>=60)
p++;
}
cout<<"语文的平均成绩为:"<
cout<<"数学的平均成绩为:"<
cout<<"英语的平均成绩为:"<

}

sum2()//统计全部学生的总成绩
{int i=0,j;
double sum1=0;
for(i=0;i
{
sum1+=sco[i].sum;

}

cout<<"全部学生的总成绩为:"<

}

bool repl()//替换某个学生的信息
{
int x,ln,i;
int temp;
fstream f2;
char p[100][200];
cout << "请输入要替换第几位学生的信息:" ;
cin>>x;
cout <
cout<<"请输入替换后的学生信息:"<
s.srbh();
f.open(filename, ios::in);
if(!f){
cerr<<"文件不能打开!"<
return false;
}
else{ f.seekg(0);
ln = 0;
while(!f.eof())
{
f.getline(p[ln],200);
ln++;
}
ln–;
if((x-1)>ln){
cout<<"没有这条记录!"<
return false;
}
else{
strcpy(p[x-1],"学生编号:");
strcat(p[x-1],s.getnum());
strcat(p[x-1],"学生姓名:");
strcat(p[x-1],s.getname());
strcat(p[x-1],"学生性别:");
temp=strlen("学生性别");
p[x-1][temp]=s.getsex();
p[x-1][temp+1]='\0';
strcat(p[x-1],"学生生日:");
strcat(p[x-1],s.getshengri());
strcat(p[x-1],"学生民族:");
strcat(p[x-1],s.getminzu());
strcat(p[x-1],"学生国籍:");
strcat(p[x-1],s.getnation());
strcat(p[x-1],"学生学历:");
strcat(p[x-1],s.getxueli());
strcat(p[x-1],"学生专业:");
strcat(p[x-1],s.getzhuanye());
strcat(p[x-1],"学生班级:");
strcat(p[x-1],s.getclassname());
strcat(p[x-1],"学生年级:");
strcat(p[x-1],s.getgradename());
strcat(p[x-1],"家庭住址:");
strcat(p[x-1],s.getaddress());
strcat(p[x-1],"手机号码:");
strcat(p[x-1],s.gettele());

f.close();

f2.open(filename, ios::out);
if(!f2)
{ cerr<<"文件不能打开!"<
}
else
{i =0; while(i
{
f2< i++;}
}}

}
f2.close();
cout<<"替换后的学生信息:"<
char m[200];
int k;
ifstream infile(filename,ios::in);
if(!infile)
{
cout<<"文件不能打开!"<
return false;
}
else
{

for(k=0;k<10
;k++)
{
infile.getline(m,195);
cout<
}
}

f.close();
}
dele()//在记事本中删除某个学生的信息
{   int x,ln,i=0,j=0;
int temp;
char p[100][200];
cout<<"请输入要删除的学生的编号:";cin>>x;
cout<
ifstream os(filename, ios::in);
if(!os){
cerr<<"文件不能打开!"<
return false;
}
else{
for(i=0;i<10;i++)
os.getline(p[i],200);

}
os.close();
ofstream of(filename,ios::binary|ios::trunc);
while(j<5)
{   if(j!=(x-1))
of.write((char *)&p[j],230);
j++;}
of.close();

}
};
int notebook::countp=0;//给类的静态成员赋值

sum2()//全部学生的总成绩
{int i=0,j;
double sum1=0;
for(i=0;i {
sum1+=sco[i].sum;

}

cout<<"全部学生的总成绩为:"<

bool repl()
{
int x,ln,i;
int temp;
fstream f2;
char p[100][200];
cout << "请输入要替换第几位学生的信息:" ;
cin>>x;
cout < cout<<"请输入替换后的学生信息:"< s.srbh();
f.open(filename, ios::in);
if(!f){
cerr<<"文件不能打开!"< return false;
}
else{ f.seekg(0);
ln = 0;
while(!f.eof())
{
f.getline(p[ln],200);
ln++;
}
ln–;
if((x-1)>ln){
cout<<"没有这条记录!"< return false;
}
else{
strcpy(p[x-1],"学生编号:");
strcat(p[x-1],s.getnum());
strcat(p[x-1],"学生姓名:");
strcat(p[x-1],s.getname());
strcat(p[x-1],"学生性别:");
temp=strlen("学生性别");
p[x-1][temp]=s.getsex();
p[x-1][temp+1]='\0';
strcat(p[x-1],"学生生日:");
strcat(p[x-1],s.getshengri());
strcat(p[x-1],"学生民族:");
strcat(p[x-1],s.getminzu());
strcat(p[x-1],"学生国籍:");
strcat(p[x-1],s.getnation());
strcat(p[x-1],"学生学历:");
strcat(p[x-1],s.getxueli());
strcat(p[x-1],"学生专业:");
strcat(p[x-1],s.getzhuanye());
strcat(p[x-1],"学生班级:");
strcat(p[x-1],s.getclassname());
strcat(p[x-1],"学生年级:");
strcat(p[x-1],s.getgradename());
strcat(p[x-1],"家庭住址:");
strcat(p[x-1],s.getaddress());
strcat(p[x-1],"手机号码:");
strcat(p[x-1],s.gettele());

f.close();

f2.open(filename, ios::out);
if(!f2)
{ cerr<<"文件不能打开!"< }
else
{i =0; while(i {
f2< i++;}
}}

}
f2.close();
cout<<"替换后的学生信息:"< char m[200];
int k;
ifstream infile(filename,ios::in);
if(!infile)
{
cout<<"文件不能打开!"< return false;
}
else
{

for(k=0;k<10
;k++)
{
infile.getline(m,195);
cout< }
}

f.close();
}
dele()
{   int x,ln,i=0,j=0;
int temp;
char p[100][200];
cout<<"请输入要删除的学生的编号:";cin>>x;
cout< ifstream os(filename, ios::in);
if(!os){
cerr<<"文件不能打开!"< return false;
}
else{
for(i=0;i<10;i++)
os.getline(p[i],200);

}
os.close();
ofstream of(filename,ios::binary|ios::trunc);
while(j<5)
{   if(j!=(x-1))
of.write((char *)&p[j],230);
j++;}
of.close();

}
};
int notebook::countp=0;
int main()
{
int w;
notebook b ("students.txt");
while(true)
{
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"~~ 计算机科学与技术学生信息管理系统by土丁多杰 ~~"< cout<<" "< cout<<"~~ 1.添加文件 "<<" 2.添加功能 ~~"< cout<<" "< cout<<"~~ 3.编辑功能 "<<" 4.查询功能 ~~"< cout<<" "< cout<<"~~ 5.显示功能 "<<" 6.删除功能 ~~"< cout<<" "< cout<<"~~ 7.统计成绩 "<<" 8.统计及格率 ~~"< cout<<" "< cout<<"~~ 0.退出系统 ~~"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<" 选择(0~8) "< cin>>w;
switch(w)
{
case 1:
b.creat();break;
case 2:
b.append();break;
case 3:
b.repl();break;
case 4:
b.seek();break;
case 5:
b.display();break;
case 6:
b.dele();break;
case 7:
b.sum2();break;
case 8:
b.average();break;
default: exit(1);break;
}

}
return 0;
}
//Edit by 2017.7.3 right by 土丁多杰

 

    关键字:


天才代写-代写联系方式