【C++】学籍管理系统

摘要:本次课程设计任务是通过编写一个高校学籍管理系统,学习用Visual C++ 6.0开发简单的管理系统。采用Visual C++ 6.0软件为主要开发工具。  本系统主要完成对高校学生学籍信息的管理,包括学生信息的添加、修改、删除等。系统还可以完成对各类信息的浏览、查询、添加、删除、修改等功能。  由于我们还没有学习数据库,所以在有关大量学生信息存储时,此系统显得心有余而力不足。系统的核心是引用I/O流和文本处理来存储和修改学生信息,每一个动作都可能影响到其它的功能,还有数据的改变,当完成对数据的操作时系统会自动地完成数据的修改。

一 系统需求分析

1系统设计的目的与意义

(1)要求学生达到熟练掌握C++语言的基本知识和技能; 
(2)基本掌握面向对象程序设计的基本思路和方法; 
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2 系统功能需求

(1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。
(2)能够将指定的信息从文件中删除。
(3)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。
(4)可以统计全部学生的总成绩,及其在班上的排名。
(5)能够统计各科的平均成绩及及格率。
(6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。
(7)如果检索不到相应的信息应提示用户。

二 总体设计
1 系统功能分析
系统要能够对相应的数据进行很好的测试,系统的统计对每一科的总成绩,平均成绩,及格律都进行了统计;系统数据的录入 除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,包括学号,姓名,民族,政治面貌,身份证号,生日,性别,数学、英语、计算机的成绩;程序中查找运用了两种查找方式即学号查找和姓名查找。

2 系统功能模块划分与设计(系统功能模块图)

三 详细设计
1 类设计
类1:student
数据成员:编号,姓名,性别,籍贯,民族,生日,政治面貌,身份证,高等数学成绩,大学英语成绩,线性代数成绩
class student                           
{
protected:                             
int number;                                //学号
char name[20];                             //姓名
char sex[6];                               //性别
char place[20];                            //籍贯
char nation[6];                            //民族
char birth[20];                            //出生日期
char party[10];                            //政治面貌
char id[20];                               //身份证号
float score[3];                            //成绩

类2:school
成员函数
录入函数input():逐步输入学生信息;
修改函数 mend():按姓名或编号修改学生信息;
统计函数count():统计各科的总成绩,计算平均成绩,统计各科的及格率;
查找函数found():按学号或姓名查找学生的记录;
修改函数mend():修改指定学号学生成绩记录;
删除函数del():删除指定学号学生记录;
输出函数show():输出班级所有学生成绩记录;
class school
{
void input();                                    //录入函数
void mend();                                     //修改函数
void del();                                      //删除函数
int find(student **p,int num,char *pn="^");      //子查找函数
void found();                                    //查找函数
void show();                                     //显示函数
void count();                                    //统计函数
void save();                                     //保存函数
void begin();                                    //初始化函数
void clear();                                    //清空函数
char mainmenu();                                 //主菜单函数

2 学生信息录入模块
void input()
{
int e=1;
cout<<"按提示输入:"< cout<<"请输入编号: ";
cin>>number;
cout<<"请输入姓名: ";
cin>>name;
do
{
  cout<<"请输入性别: ";
  cin>>sex;
  if(strcmp(sex,"男")==0 || strcmp(sex,"女")==0)
  {
    cout<<"请输入籍贯: ";
    cin>>place;
    cout<<"请输入民族: ";
    cin>>nation;
    cout<<"请输入生日[格式xxxx/x/x]: ";
    cin>>birth;
    cout<<"请输入政治面貌: ";
    cin>>party;
    cout<<"请输入身份证号: ";
    cin>>id;
    cout<<"请输入高等高等数学分数: ";
cin>>score[0];
for(;score[0]>100||score[0]<0;)
{
cerr<<"输入错误,请重新输入!"<   cin>>score[0];
}
    cout<<"请输入大学英语分数: ";
    cin>>score[1];
for(;score[1]>100||score[1]<0;)
{
cerr<<"输入错误,请重新输入!"<   cin>>score[1];
}
    cout<<"请输入线性代数分数: ";
    cin>>score[2];
for(;score[2]>100||score[2]<0;)
{
cerr<<"输入错误,请重新输入!"<   cin>>score[2];
}
    e=0;
  }
    else
  {
    cout<<"性别输入错误!重新输入!"<     e=1;
  }
}while(e);
  return ;
}
void input(ifstream & is)                   
{
is>>number>>name>>sex>>place>>nation>>birth>>party>>id
  >>score[0]>>score[1]>>score[2];
is.get();                         
}


3 学生信息显示模块
void output()
{
cout<<"学生基本信息如下:"< cout<<" 编号:"<     <<" 姓名:"<     <<" 性别:"<     <<" 籍贯:"<     <<" 民族:"<     <<" 生日:"<     <<" 政治面貌:"<     <<" 身份证号:"<     <<" 高等高等数学:"<     <<" 大学英语:"<     <<" 线性代数:"<     <<" 总分:"< }
void output(ofstream & os)               
{
os<   <   <   <   <   <   <   <   <   <   < }
};


4 学生信息查找模块
void school::found()
{
student *p;
int num=-1,n=9;
char name[20]="^";
do
{
    cout<<"1:按编号查找,2:按姓名查找: ";
  cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"请输入编号: ";
  cin>>num;
}
if(n==2)
{
cout<<"请输入姓名: ";
cin>>name;
}
if(!find(&p,num,name) )
{
cout<<"SORRY!找不到你要查找的内容!"< return;
}
(p->next)->output();
}


5 学生信息删除模块
void school::del()
{
student *p,*p2;
int num;
cout<<"请输入编号: ";
cin>>num;
if( !find(&p,num,"^") )
{
cout<<"SORRY!找不到你要删除的内容!"< return;
}
(p->next)->output();
p2=p->next;
p->next=p2->next;
delete p2;
school::setkey(1);
}


6 学生信息修改模块
void school::mend()
{
student *p;
int num=-1,n;
char name[20]="^";
do
{
  cout<<"1:按编号修改,2:按姓名修改: ";
  cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"请输入编号: ";
  cin>>num;
}
if(n==2)
{
cout<<"请输入姓名: ";
cin>>name;
}
if( !find(&p,num,name) )
{
cout<<"SORRY!找不到你要修改的内容!"< return;
}
(p->next)->output();
(p->next)->input();
school::setkey(1);
}


7 学生信息统计模块
void school::count()
{
student *p;
p=head;
int n=0;
double g[3]={0,0,0};
float j[3]={0,0,0};
while(p->next)
{
  p=p->next; 
  n++;
  for(int i=0;i<3;i++)
  { 
  g[i]=g[i]+(p->getscore(i) );


}
}
cout<<"高等高等数学总分:"< < <<" 平均分:"< <<"线性代数总分: "< < }


8 学生信息保存模块
void school::save()
{
student *p;
p=head;
ofstream os("d:\\student.txt",ios::out);
if (school::getkey()==1)
{
  while(p->next)
{
    (p->next)->output(os);
    p=p->next;
}
}
cout<<"文件已保存! "< school::setkey(0);
}

四 系统实现
1 欢迎界面

2 录入学生信息界面

3 显示学生信息界面

4 查找学生信息界面

5 删除学生信息界面

6 修改学生信息

7 统计学生信息

五 实习后总结与体会
通过这次的c++课程设计我体会较深的一点是团队互相帮助学习的过程,自己看书学习的经验,以及从网上以及其他各种途径获得信息和知识的经验。理论与实际相结合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,我的各方面经验都得到了极大的丰富。
根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
六 参考文献
[1].《c++语言程序与设计教程与实验第三版》 温秀梅 丁学钧  李建华 清华大学出版社

你可能感兴趣的:(C/C++,小型程序)