-
学生信息经管体系
添加时间: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[],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<<请输入您想进行的操纵:\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 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 (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 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())<<\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 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<<\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 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的,忽视了机关函数会优先于任何法度履行的特点。)至于析构函数,就简单多了,只负责将学生计数器-1就行,在履行号令进行内存开释后会主动履行,让学生人数-1.
真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》