学生信息经管体系

    添加时间:2013-6-28 点击量:


      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[],intchar[],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<<请输入您想进行的操纵:\n1.增长新的学生信息\n2.批改学生信息\n3.删除学生信息\n4.保存学生信息\n5.显示所有学生信息\n6.遵守学号查找学生信息\n7.遵守名字查找信息\n8.退出\n<<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<<该学生的原始信息为:\n;
    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<<该学生的信息为:\n;
    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 (STU[change-chushihua]);
    149 cout<<改学生信息已删除,返回主菜单,;
    150 system(pause);
    151 system(cls);
    152 break;
    153 }
    154 //删除的非最后一个元素,进步前辈行元素移动,然后将最后的元素掉
    155 forint 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 (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<<学生信息如下:\n分别为:学号,姓名,年级,班级,论文题目,领导教员,论文成绩.\n;
    194 forint 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())<<\n;
    200 }
    201 save.close();
    202 cout<<文件保存成功,保存在c盘根目次下,法度将返回主菜单,<<endl;
    203 //system(explorer /e,c:\,,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<<依次为:\n学号,名字,年级,班级,论文题目,领导教员,论文成绩。<<endl;
    220 forint i = 0;i < Stu_count;i++
    221 {
    222STU[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<<\n该学生信息依次为:\n学号,名字,年级,班级,论文题目,领导教员,论文成绩。\n<<endl;
    250 (STU[i-chushihua]).dis_stu();
    251 cout<<\n\n将返回主菜单;
    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 forint i = 0;i < Stu_count;i++
    272 {
    273 char c_temp[10];
    274STU[i]).Getname(c_temp);
    275 if (strcmp(c_temp,cp) == 0
    276 {
    277 temp++;
    278STU[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的,忽视了机关函数会优先于任何法度履行的特点。)


    至于析构函数,就简单多了,只负责将学生计数器-1就行,在履行号令进行内存开释后会主动履行,让学生人数-1.

    真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
    分享到: