关于搬运CSDN上学生信息管理系统的阅读与二次开发

关于本篇博客内容,我大概分成了三个部分进行讲述:对于源代码的解读、二次重开发后程序的介绍和自己在做完对他人代码的解读和重开发后自己的一些感想。

一、  源代码的解读

在本部分的解读中主要分为三部分:该软件的功能解读、实现该功能所使用的程序方法和我认为的软件存在的缺陷之处。当然先说明源代码的来源,来自代码交流网站——CSDN,该处也放出网页地址:https://blog.csdn.net/gl620321/article/details/106985511

1.功能解读

先放出源代码的程序运行主界面:

 

从这张图片中,我们很容易的知道,该程序的主要功能有6条:1)增加学生信息 2)显示学生信息 3)删除学生信息 4)学生信息查找 5)修改学生信息 6)系统安全退出

在进入各个功能中进行实际使用体验:

1)增加学生信息

 

从上图,我们可以看出程序主要对学生的学号、姓名、性别、年龄和系别进行录入。

2)显示学生信息

 

该功能主要将储存的学生信息全部显示。

3)删除学生信息

 

该功能主要对学生姓名进行查找后再将存储信息符合的进行删除,然后再将删除后存储的学生信息进行全部输出显示。

4)学生信息查找

 

此处功能的实现也是通过对学生姓名的查找。从上面截图可以看见,他显示的是请输入要修改的学生的姓名,这是我认为程序存在的缺陷之一,在后面的第三部分会详细讲诉。

5)修改学生信息

 

该功能主要是对上面进行的操作进行保存。

6)系统安全退出

 

该功能主要是对上面进行的操作进行保存,然后退出程序。实际退出时的保存只是文字显示,没有代码对文件进行保存。

2.对应功能所使用的方法

在使用完所有的功能之后,我们可以再次总结出该程序所有的功能:文件读写、界面转换、增加、删除、修改、查询、显示和退出。

上面的功能顺序是按程序运行的顺序进行排列的,所以我们按顺序介绍。

首先文件的读写:

用到文件读写功能主要是程序刚启动程序时文件的读入程序以及修改后信息写入文件。

刚启动程序时文件的读入程序:

 

修改后信息写入文件(对应源程序功能中的修改学生信息):

 

增加功能:

 

上方图片显示的是增加功能所使用的代码。

主要的增加功能在AddItem函数,End是所有学生信息的尾指针,所以新增的信息都会通过input函数增加到尾指针中,然后新建一个指针,新建指针变成尾指针。

删除功能:

 

修改功能:

 

查询功能:

上面删除和修改功能中的FindItem就对应着查找功能,但是程序中没有单独的查询功能。

显示功能:

 

退出功能:

借用界面显示的代码图,退出功能的实现主要是依靠while判断为假,从而退出循环,再退出系统。

总结一下该程序主要用的一些技术:类、switch与case、指针、文件的读写。

3.我认为存在的缺陷

1)增加学生信息没有进行限制,可能会输入相同学号的学生信息,如图:

 

而实际中是不能存在学号相同的情况的。并且性别也没有进行限制,可能会输入“男/女”之外的字符。

2)菜单页中的文字信息与实际功能存在差异,比如查询功能却变成了修改功能。

3)查询的方式是通过姓名进行查找,然而现实中会存在同名的情况,这将使修改信息存在不严谨性,可能出错。

4)程序的保存操作要单独进行,可能会造成操作的丢失

二、  二次重开发后程序的介绍

该部分的内容是对第一部分中提出的缺陷,从而对程序进行的修改和升级。

1) 增加输入学号在存储信息中已存在或输入的性别不为“男/女”,则报错,要求重新输入

 

 

2)修改菜单页面中的选项的对应代码,以实现对应功能

 

3)将查询的方式改成以学号进行查询,并且添加单独查询信息功能(查询方式通过学号、姓名和系别查询)

 

4)将程序的保存操作进行实时保存

 

三、  感想

在经过了此次他人程序的二次开发后,我找到了几点在写代码时十分重要的点:

1.在写代码时,一定要加入注释,否则在别人读代码时,会十分的麻烦,而且不仅仅是别人,甚至你自己过了很长一段时间后,再去看自己的代码,你自己都可能看不懂,所以写代码一定要写注释,写注释,写注释(重要的事情说三遍)!!!

2.我认为写代码,不要只是一个人死扣,可以多问问别人一些建议,这样会使你的相同程序好上很多。

最后,希望你们在这篇博客中有收获,也可以对我修改过的源代码进行再次开发,同时也可以在下方留言和我进行交流。

附:修改后源代码:

  1     #include<iostream>
  2     #include<fstream>
  3     #include<iomanip>
  4     #include<stdlib.h>
  5     #include<Windows.h>
  6     #include<conio.h>
  7     using namespace std ;
  8      
  9     #define HEADER1 "      -------------------------学生信息---------------------- \n"
 10     #define HEADER2 "     |   学号   |   姓名   |   性别   |   年龄   |   系别   |\n"
 11     #define HEADER3 "     |----------|----------|----------|----------|----------|\n"
 12      
 13     int num; //学生总数
 14     class Student             //定义学生类
 15     {
 16     public:
 17         char id[20];//学号 
 18         char name[20] ;//名字
 19         char sex[5] ;//性别
 20         int age ;//年龄
 21         char xibie[20] ;//系别
 22         Student *next ;
 23         void ReadFile(istream & in) ;//读取文件
 24         void show() ;//显示方法
 25         void input(); //修改时的输入学生信息函数
 26     } ;
 27      void Student::ReadFile(istream & in)        //读取文件
 28     {
 29         in>>id>>name>>sex>>age>>xibie ;
 30     }
 31     
 32     void Student::input()     //修改时的输入学生信息函数
 33     {
 34         cout<<"\t\t学号:" ;
 35         cin>>id ;
 36         cout<<"\t\t姓名:" ;
 37         cin>>name ;
 38         char a[]=""; char b[]="";
 39         cout<<"\t\t性别:" ;
 40         y: 
 41         cin>>sex ;
 42         if(strcmp(sex ,a)&&strcmp(sex ,b))
 43         {
 44             cout<<"您输入的性别不存在,请重新输入:";
 45             goto y; 
 46          } 
 47         cout<<"\t\t年龄:" ;
 48         cin>>age ;
 49         cout<<"\t\t系别:" ;
 50         cin>>xibie ;
 51     }
 52      
 53 void Student::show()          //输出学生信息
 54 {
 55     cout<<"     |"<<setw(5)<<id<<"     |"<<setw(5)<<name<<"     |"<<setw(8)<<sex<<"  |"<<setw(6)<<age<<"    |"<<setw(6)<<xibie<<"|"<<endl ;
 56     cout<<"     |----------|----------|----------|----------|----------|\n" ;
 57 }
 58 
 59 class StudentMassage      //定义学生信息类,包含各项处理功能
 60 {
 61 public:
 62     StudentMassage() ;
 63     ~StudentMassage() ;
 64     void ShowMenu() ;
 65     void Display() ;
 66     void AddItem() ;
 67     void save() ;
 68     void ModifyItem() ;
 69     void RemoveItem() ;
 70     void Sort() ;
 71     void shuru(Student *p1); 
 72     void chazhao();
 73 private:
 74     Student *Head , *End ;
 75     ifstream in ;
 76     ofstream out ;
 77     Student *FindId(char *id) ;
 78     void FindId_1(char *id) ;
 79     void FindName(char *name) ;
 80     void Findxibie(char *xibie) ;
 81 } ;
 82 
 83 void StudentMassage::shuru(Student *p1) //输入函数 
 84 {
 85         cout<<"\t\t学号:" ;
 86         x:
 87         cin>>p1->id ;
 88         for(Student *p = Head ; p->next != End ; p = p->next)
 89         if(!strcmp(p->next->id ,p1->id))
 90         {
 91             cout<<"您输入的学号已存在,请重新输入:";
 92             goto x;
 93         }
 94         cout<<"\t\t姓名:" ;
 95         cin>>p1->name ;
 96         char a[]=""; char b[]="";
 97         cout<<"\t\t性别:" ;
 98         y: 
 99         cin>>p1->sex ;
100         if(strcmp(p1->sex ,a)&&strcmp(p1->sex ,b))
101         {                 
102             cout<<"您输入的性别不存在,请重新输入:";
103             goto y; 
104          } 
105         cout<<"\t\t年龄:" ;
106         cin>>p1->age ;
107         cout<<"\t\t系别:" ;
108         cin>>p1->xibie ;    
109 }
110 
111 void StudentMassage::chazhao()
112 {
113     int a; char b[20];
114     cout<<"请输入你要查找的类型(1.学号 2.姓名 3.系别):";
115     x: 
116     cin>>a;
117     switch(a)
118     {
119         case 1:cout<<"请输入您要查找的学号:" ;cin>>b;cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;FindId_1(b);break;
120         case 2:cout<<"请输入您要查找的姓名:" ;cin>>b;cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;FindName(b);break;
121         case 3:cout<<"请输入您要查找的系别:" ;cin>>b;cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;Findxibie(b);break;
122         default: cout<<"输入错误,请重新输入:" ;goto x; 
123     }
124     cout<<"查询结果已显示,按任意键返回...";
125     getch();
126 }
127 
128 Student *StudentMassage::FindId(char *id)
129 {
130     Student *p ;
131     for(p = Head ; p->next != End ; p = p->next)
132         if(!strcmp(p->next->id ,id))
133             return p ;
134     return NULL ;
135 }
136 
137 void StudentMassage::FindId_1(char *id)
138 {
139     Student *p ;int n=0;
140     for(p = Head ; p->next != End ; p = p->next)
141         if(!strcmp(p->next->id ,id))
142         {n=1;p->next->show();}
143     if(n==0) cout<<"系统中无该学生!"; 
144 }
145 
146 void StudentMassage::FindName(char *name)
147 {
148     Student *p ;int n=0;
149     for(p = Head ; p->next != End ; p = p->next)
150         if(!strcmp(p->next->name ,name))
151         {n=1;p->next->show();}
152     if(n==0) cout<<"系统中无该学生!"; 
153 }
154 
155 void StudentMassage::Findxibie(char *xibie)
156 {
157     Student *p ;int n=0;
158     for(p = Head ; p->next != End ; p = p->next)
159         if(!strcmp(p->next->xibie ,xibie))
160         {n=1;p->next->show();}
161     if(n==0) cout<<"系统中无该学生!"; 
162 }
163 
164 StudentMassage::StudentMassage()   //构造函数
165 {
166     Head = new Student ;
167     Head->next = new Student ;
168     End = Head->next ;
169     in.open("学生成绩.txt") ;
170     if(!in)
171         cout<<"\n\t\t这是一个新系统,无学生信息,请先输入。"<<endl ;
172     else
173     {
174         while(!in.eof())
175         {
176             End->ReadFile(in) ;
177             if(End->name[0]=='\0')
178                 break ;
179             End->next = new Student ;
180             End = End->next ;
181         }
182         in.close() ;
183         cout<<"\n\t\t读取学生信息成功!"<<endl ;
184     }
185 }
186 
187 StudentMassage::~StudentMassage()       //析构函数
188 {
189     Student *temp ;
190     save() ;
191     for(temp ; Head->next != End ; )
192     {
193         temp = Head->next ;
194         Head -> next = Head ->next->next ;
195         delete temp ;
196     }
197     delete Head , End ;
198 }
199 
200 void StudentMassage::ShowMenu()                      //显示菜单
201 {
202     cout<<"\n\n\t\t\t\t 主菜单"<<endl<<endl<<endl ;
203     cout<<"\t\t****************************************"<<endl<<endl ;
204     cout<<"\t\t1、增加学生信息          2、显示学生信息"<<endl<<endl ;
205     cout<<"\t\t3、删除学生信息          4、修改学生信息"<<endl<<endl ;
206     cout<<"\t\t5、学生信息查找          0、系统安全退出"<<endl<<endl ;
207     cout<<"\t\t****************************************"<<endl<<endl<<endl ;
208     cout<<"\t\t请选择:" ;
209 }
210 
211 void StudentMassage::Display()            //显示学生信息
212 {
213     Student *p  ;
214     cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;
215     for(p = Head->next ; p != End ; p = p->next)
216         p->show() ;
217     cout<<"\n\n输入任意字符,继续......" ;
218     getch() ;
219 }
220 
221 void StudentMassage::AddItem()      //添加学生信息
222 {
223     shuru(End);
224     End->next = new Student ;
225     End = End->next ;
226     save();
227     cout<<"\n\t\t添加成功!"<<endl ;
228     cout<<"\n输入任意字符,继续......" ;
229     getch() ;
230 }
231 
232 void StudentMassage::ModifyItem()     //修改学生信息
233 {
234     char id[20] ;
235     Student *p = NULL ;
236     cout<<"\n\t\t请输入要修改的学生的学号:" ;
237     cin>>id ;
238     if(p = FindId(id))
239     {
240         cout<<"\n\t\t已找到该学生,请输入新的信息!"<<endl ;
241         p->next->input() ;
242         save();
243         cout<<"\n\t\t修改成功!"<<endl ;
244         Display() ;
245     }
246     else
247     {
248         cout<<"\n\t\t没有找到!"<<endl ;
249         cout<<"\n输入任意字符!继续......." ;
250         getch() ;
251     }
252 }
253 
254 void StudentMassage::RemoveItem()      //删除学生信息
255 {
256     char id[20] ;
257     Student *p = NULL , *temp = NULL ;
258     cout<<"\n\t\t请输入要删除的学生的学号:" ;
259     cin>>id ;
260     if(p = FindId(id))
261     {
262         temp = p->next ;
263         p->next = p->next->next ;
264         delete temp ;
265         save();
266         cout<<"\n\t\t删除成功!"<<endl ;
267         Display() ;
268     }
269     else
270     {
271         cout<<"\t\t没有找到!"<<endl ;
272         cout<<"输入任意字符!继续......" ;
273         getch() ;
274     }
275 }
276 
277 void StudentMassage::save()                    //存入文件
278 {
279     out.open("学生成绩.txt");
280     for(Student *p=Head->next;p!=End;p=p->next)
281         out<<p->id<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<"\t"<<p->xibie<<"\t"<<'\n';
282     out.close();
283 }
284 int main(
285          )
286 {
287     int x ;
288     bool quit = false ;
289     cout<<"\n\n\n\n\n\n\n\n" ;
290     cout<<"\t\t********************************************"<<endl ;
291     cout<<"\t\t         欢迎使用学生信息管理系统!"<<endl ;
292     cout<<"\t\t********************************************"<<endl ;
293     StudentMassage Grade ;
294     Sleep(1000) ;
295     while(!quit)
296     {
297         system("cls") ;
298         Grade.ShowMenu() ;
299         cin>>x ;
300         switch(x)
301         {
302         case 0:quit = true ; break ;
303         case 1:Grade.AddItem() ; break ;
304         case 2:Grade.Display() ; break ;
305         case 3:Grade.RemoveItem(); break ;
306         case 4:Grade.ModifyItem(); break ;
307         case 5:Grade.chazhao(); break ;
308         }
309     }
310     return 0;
311 }

 

posted on 2021-03-09 23:00  时埋  阅读(338)  评论(0编辑  收藏  举报