zoukankan      html  css  js  c++  java
  • 学生信息管理系统

      1 #include <iostream>
      2 //#include "stu.h"
      3 #include <iomanip>
      4 #include <fstream>
      5 #include <stdio.h>
      6 
      7 using namespace std;
      8 
      9 
     10 int Stu_count = 0;//用于总的学生人数计数
     11 int chushihua = 2010;//学生编号从哪里开始起,依次往上加
     12 
     13 class GStudent
     14 {
     15 public:
     16     //输入数据
     17     void Regester_stu(char[],int,char[],char[],char[],int);
     18     //获取数据
     19     int Getnum(void);
     20     void Getname(char name[]);
     21     int GetGrade(void);
     22     void GetBanji(char banji[]);
     23     void GetLwtittle(char lwtittle[]);
     24     void GetT_name(char t_name[]);
     25     int Getmark(void);
     26     GStudent(){Stu_num = Stu_count+chushihua;Stu_count++;};
     27     ~GStudent(){Stu_count--;};
     28     void dis_stu(void);
     29 private:
     30     int Stu_num;//学生编号
     31     char Name[10];//学生名字
     32     int Grade;//学生年级
     33     char Banji[10];//学生班级
     34     char Lwtittle[20];//学生论文题目
     35     char Teach_name[10];//学生指导老师
     36     int Mark;//学生成绩
     37 };
     38 
     39 int main()
     40 {
     41     int choice_1 = 1;
     42     while(choice_1 != 0)
     43     {
     44         GStudent *STU[100];
     45         cout<<"请输入您想进行的操作:
    1.增加新的学生信息
    2.修改学生信息
    3.删除学生信息
    4.保存学生信息
    5.显示所有学生信息
    6.按照学号查找学生信息
    7.按照名字查找信息
    8.退出
    "<<endl;
     46         cin>>choice_1;
     47         switch(choice_1)
     48         {
     49             //增加学生信息
     50           case 1:
     51               {
     52                   system("cls");
     53                   char name[10],banji[10],lwtittle[20],t_name[10];
     54                   int grade,mark;
     55                   cout<<"请输入学生名称           ";
     56                   cin>>name;
     57                   cout<<"请输入学生年级           ";
     58                   cin>>grade;
     59                   cout<<"请输入学生班级           ";
     60                   cin>>banji;
     61                   cout<<"请输入学生论文题目       ";
     62                   cin>>lwtittle;
     63                   cout<<"请输入论文指导老师名字   ";
     64                   cin>>t_name;
     65                   cout<<"请输入学生论文成绩       ";
     66                   cin>>mark;
     67                   STU[Stu_count-1] = new GStudent;
     68                   (*STU[Stu_count-1]).Regester_stu(name,grade,banji,lwtittle,t_name,mark);
     69                   cout<<"学生信息已录入,";
     70                   system("pause");
     71                   system("cls");
     72                   break;
     73               }
     74             //修改学生信息
     75           case 2:
     76               {
     77                   system("cls");
     78                   if(Stu_count == 0)
     79                   {
     80                       cout<<"无学生,请返回主菜单加入学生信息"<<endl;
     81                       system("pause");
     82                       system("cls");
     83                       break;
     84                   };
     85                   int change;
     86                   cout<<"请输入要修改的学生的学号,"<<chushihua<<""<<chushihua+Stu_count-1<<"之间的数字(包括首尾)"<<endl;
     87                   cin>>change;
     88                   if (change > chushihua+Stu_count-1 || change < chushihua)
     89                   {
     90                       cout<<"无效输入,将返回主菜单"<<endl;
     91                       system("pause");
     92                       system("cls");
     93                       break;
     94                   }
     95                   cout<<"该学生的原始信息为:
    ";
     96                   (*STU[change-chushihua]).dis_stu();
     97                   char name[10],banji[10],lwtittle[20],t_name[10];
     98                   int grade,mark;
     99                   cout<<"请输入学生名称           ";
    100                   cin>>name;
    101                   cout<<"请输入学生年级           ";
    102                   cin>>grade;
    103                   cout<<"请输入学生班级           ";
    104                   cin>>banji;
    105                   cout<<"请输入学生论文题目       ";
    106                   cin>>lwtittle;
    107                   cout<<"请输入论文指导老师名字   ";
    108                   cin>>t_name;
    109                   cout<<"请输入学生论文成绩       ";
    110                   cin>>mark;
    111                   (*STU[change-chushihua]).Regester_stu(name,grade,banji,lwtittle,t_name,mark);
    112                   cout<<"修改完毕,将返回主菜单";
    113                   system("pause");
    114                   system("cls");
    115                   break;
    116               }
    117               //删除学生信息
    118           case 3:
    119               {
    120                   system("cls");
    121                   if(Stu_count == 0)
    122                   {
    123                       cout<<"无学生,请返回主菜单加入学生信息"<<endl;
    124                       system("pause");
    125                       system("cls");
    126                       break;
    127                   };
    128                   int change;
    129                   cout<<"请输入要删除的学生的学号,"<<chushihua<<""<<chushihua+Stu_count-1<<"之间的数字(包括首尾)"<<endl;
    130                   cin>>change;
    131                   if (change > chushihua+Stu_count-1 || change < chushihua)
    132                   {
    133                       cout<<"无效输入,将返回主菜单"<<endl;
    134                       system("pause");
    135                       system("cls");
    136                       break;
    137                   }
    138                   cout<<"该学生的信息为:
    ";
    139                   (*STU[change-chushihua]).dis_stu();
    140                   cout<<"确定要删除?y/n     ";
    141                   char temp = 'n';
    142                   cin>>temp;
    143                   if(temp == 'y')
    144                   {
    145                       //如果删除的是最后一个元素
    146                       if (change == chushihua+Stu_count-1)
    147                       {
    148                           delete(STU[change-chushihua]);
    149                           cout<<"改学生信息已删除,返回主菜单,";
    150                           system("pause");
    151                           system("cls");
    152                           break;
    153                       }
    154                       //删除的非最后一个元素,先进行元素移动,然后将最后的元素delete掉
    155                       for (int i = change;i < chushihua+Stu_count-1;i++)
    156                       {
    157                           char temp_name[10],temp_banji[10],temp_lw[20],temp_tname[10];
    158                           (*STU[i-chushihua+1]).GetBanji(temp_banji);(*STU[i-chushihua+1]).GetLwtittle(temp_lw);
    159                           (*STU[i-chushihua+1]).Getname(temp_name);(*STU[i-chushihua+1]).GetT_name(temp_tname);
    160                           (*STU[i-chushihua]).Regester_stu(temp_name,(*STU[i-chushihua+1]).GetGrade(),temp_banji,temp_lw,temp_tname,(*STU[i-chushihua+1]).Getmark());
    161                       }
    162                       delete(STU[Stu_count-1]);
    163                       cout<<"改学生信息已删除,返回主菜单,";
    164                       system("pause");
    165                       system("cls");
    166                           break;
    167                   }
    168                   cout<<"取消删除或者无效输入,将返回主菜单,";
    169                   system("pause");
    170                   system("cls");
    171                   break;
    172               }
    173               //保存学生信息
    174           case 4:
    175               {
    176                   system("cls");
    177                   if(Stu_count == 0)
    178                   {
    179                       cout<<"无学生,请返回主菜单加入学生信息"<<endl;
    180                       system("pause");
    181                       system("cls");
    182                       break;
    183                   };
    184                   fstream save;
    185                   if (!save)
    186                   {
    187                       cout<<"文件保存失败,返回主菜单,";
    188                       system("pause");
    189                       system("cls");
    190                       break;
    191                   }
    192                   save.open("c:\save.txt",ios::out);
    193                   save<<"学生信息如下:
    分别为:学号,姓名,年级,班级,论文题目,指导老师,论文成绩.
    ";
    194                   for (int i = 0;i < Stu_count;i++)
    195                   {
    196                       char temp_name[10],temp_banji[10],temp_lw[20],temp_tname[10];
    197                       (*STU[i]).GetBanji(temp_banji);(*STU[i]).GetLwtittle(temp_lw);
    198                           (*STU[i]).Getname(temp_name);(*STU[i]).GetT_name(temp_tname);
    199                       save<<((*STU[i]).Getnum())<<"   "<<temp_name<<"   "<<((*STU[i]).GetGrade())<<"   "<<temp_banji<<"   "<<temp_lw<<"   "<<temp_tname<<((*STU[i]).Getmark())<<"
    ";
    200                   }
    201                   save.close();
    202                   cout<<"文件保存成功,保存在c盘根目录下,程序将返回主菜单,"<<endl;
    203                   //system("explorer /e,c:\,select,save.txt");
    204                   system("pause");
    205                    system("cls");
    206                   break;
    207               }
    208               //显示所有学生信息
    209           case 5:
    210               {
    211                   system("cls");
    212                   if(Stu_count == 0)
    213                   {
    214                       cout<<"无学生,请返回主菜单加入学生信息"<<endl;
    215                       system("pause");
    216                       system("cls");
    217                       break;
    218                   };
    219                   cout<<"依次为:
    学号,名字,年级,班级,论文题目,指导老师,论文成绩。"<<endl;
    220                   for (int i  = 0;i < Stu_count;i++)
    221                   {
    222                       (*STU[i]).dis_stu();
    223                   }
    224                   system("pause");
    225                   system("cls");
    226                   break;
    227               }
    228               //按照学号查找信息
    229           case 6:
    230               {
    231                   system("cls");
    232                   if(Stu_count == 0)
    233                   {
    234                       cout<<"无学生,请返回主菜单加入学生信息"<<endl;
    235                       system("pause");
    236                       system("cls");
    237                       break;
    238                   };
    239                   cout<<"请输入"<<chushihua<<""<<chushihua+Stu_count-1<<"之间的数字(包括首尾)"<<endl;
    240                   int i = 0;
    241                   cin>>i;
    242                   if (i > chushihua+Stu_count-1 || i < chushihua)
    243                   {
    244                       cout<<"无效输入,将返回主菜单"<<endl;
    245                       system("pause");
    246                       system("cls");
    247                       break;
    248                   }
    249                   cout<<"
    该学生信息依次为:
    学号,名字,年级,班级,论文题目,指导老师,论文成绩。
    "<<endl;
    250                   (*STU[i-chushihua]).dis_stu();
    251                   cout<<"
    
    将返回主菜单";
    252                   system("pause");
    253                    system("cls");
    254                   break;
    255               }
    256               //按照名字查找信息
    257           case 7:
    258               {
    259                   system("cls");
    260                   if(Stu_count == 0)
    261                   {
    262                       cout<<"无学生,请返回主菜单加入学生信息"<<endl;
    263                       system("pause");
    264                       system("cls");
    265                       break;
    266                   };
    267                   cout<<"请输入学生名字      "<<endl;
    268                   char cp[10];
    269                   int temp = 0;
    270                   cin>>cp;
    271                   for (int i = 0;i < Stu_count;i++)
    272                   {
    273                       char c_temp[10];
    274                       (*STU[i]).Getname(c_temp);
    275                       if (strcmp(c_temp,cp) == 0)
    276                       {
    277                           temp++;
    278                           (*STU[i]).dis_stu();
    279                       }
    280                   }
    281                   if (temp == 0)
    282                   {
    283                       cout<<"没有查找到该学生的相应信息"<<endl;
    284                   }
    285                   system("pause");
    286                   system("cls");
    287                   break;
    288               }
    289               //退出
    290           case 8:
    291             return 0;
    292             //无效输入
    293           default :
    294              system("cls");
    295             cout<<"无效输入,请输入1-6的数字"<<endl;
    296             break;
    297         }
    298     }
    299     return 0;
    300 }
    301 
    302 void GStudent::Regester_stu(char name[10],int grade,char banji[10],char lwtittle[20],char t_name[10],int mark)
    303 {
    304     Grade = grade;Mark = mark;
    305     strcpy(Name,name);strcpy(Banji,banji);strcpy(Lwtittle,lwtittle);strcpy(Teach_name,t_name);
    306 }
    307 int GStudent::Getnum()
    308 {
    309     return Stu_num;
    310 }
    311 
    312 void GStudent::Getname(char name[10])
    313 {
    314     strcpy(name,Name);
    315 }
    316 
    317 int GStudent::GetGrade()
    318 {
    319     return Grade;
    320 }
    321 
    322 void GStudent::GetBanji(char banji[10])
    323 {
    324     strcpy(banji,Banji);
    325 }
    326 void GStudent::GetLwtittle(char lwtittle[20])
    327 {
    328     strcpy(lwtittle,Lwtittle);
    329 }
    330 void GStudent::GetT_name(char t_name[10])
    331 {
    332     strcpy(t_name,Teach_name);
    333 }
    334 int GStudent::Getmark()
    335 {
    336     return Mark;
    337 }
    338 void GStudent::dis_stu()
    339 {
    340     cout<<Stu_num<<"   "<<Name<<"   "<<Grade<<"   "<<Banji<<"   "<<Lwtittle<<"   "<<Teach_name<<"   "<<Mark<<endl;
    341 }
    View Code


    主要是通过设计一个学生类,然后通过类函数进行操作,设计了两个全局变量,一个用来统计生成的学生对象数,另一个为学号起始数。里面最主要的是加深了对析构函数和构造函数的理解,在下面一段代码中,进行分析。

    GStudent(){Stu_num = Stu_count+chushihua;Stu_count++;};
    ~GStudent(){Stu_count--;};


    这段代码我们可以看到是构造函数和析构函数,里面分别对全局变量——学生计数变量进行了操作,每创建(销毁)一个学生对象就会将计数器+1(-1),在调用时我们这样来看

    1 GStudent *STU[100];
    2 STU[Stu_count-1] = new GStudent;
    3 (*STU[Stu_count-1]).Regester_stu(name,grade,banji,lwtittle,t_name,mark);

    首先定义了一个学生类的数组指针,用来进行分配内存,便于空间管理。第二句创建了一个学生对象。但是这个时候我们看到sut_count原本为
    0的,但是创建了一个学生对象后,变为1,这个时候将数组指针的STU[1],进行了动态内存分配,而不是STU[0]。(原本以为是先执行完了第二句,也就是跟STU[0]分配了空间才+1的,但是调试的时候发现STU[0]没有被分配空间,反倒是从STU[1]开始的.经过思考发现,原来是忽略了构造函数会优先于任何程序执行的特点。)

    至于析构函数,就简单多了,只负责将学生计数器-1就行,在执行delete命令进行内存释放后会自动执行,让学生人数-1.

  • 相关阅读:
    学习Extjs4 (21) 简单窗口
    C#启动外部程序的几种方法以及等待外部程序关闭的方法
    linux驱动学习(3)同步、信号量和自旋锁
    andoird webiew使用有道辞典实例
    Linux程序设计——用getopt处理命令行参数(转)
    git,github在windows上的搭建
    sparc芯片验证
    睡了一下午
    UNIX/Linux里统计文件里某个字符出现的次数(转)
    linux和单片机的串口通信
  • 原文地址:https://www.cnblogs.com/color-my-life/p/3161777.html
Copyright © 2011-2022 走看看