c++课程设计:行政区划管理系统

大一的课程设计基本上除了计算器,就是各种管理系统。(大概吧)

感觉看到题目整个一年的c++好像没学明白似的。基础知识掌握还算可以,真刀真枪的打代码,而且是实现这么些功能,做成一个管理系统,就真正感觉到了自己的弱小和菜。

学了一年的基础知识,突然上来要做一个管理系统,在期末考试和课设的双重重压下,我选择了期末考试,放弃了自主实现课设,选择借鉴上一级的代码,我不知道我这么做可耻不可耻,不过是挺窝囊的。能怎么办呢?唉。为什么要和期末考试安排到一起呢?真正自己做的人,反正你们都比我优秀,我就是个弟弟。唉。第二次叹气。

我拿到了学生管理系统的代码,把每一段都读懂了,然后稍作修改,改成了行政区划管理系统。(描述这一段的时候我的内心是羞愧的。)

暑假这段时间,我会继续学习Java。(上个寒假一直在学。)这个暑假也就是学习加复习,然后我争取利用Java来自己实现一些东西,当然这都是后话了。

我本来就是想把重点放在Java上的,不过学校的安排就是我们大一的课程就是c++,没有办法,有完整一大段的空闲时间只有在假期了。

下面就是我改过之后的代码。把它公开的原因也是因为它本就不属于我,我很羞愧。

 

分为三个cpp文件,两个头文件。

 

district.cpp    

 1 //录入信息
 2 #include<iostream>
 3 #include<string>
 4 #include<fstream>
 5 #include<iomanip>
 6 #include"district.h"
 7 using namespace std;
 8 void district::input()
 9 {
10     cout << "按提示输入:" << endl;
11     cout << "请输入行政区名: ";
12     cin >> name;
13     cout << "请输入人口(万人): ";
14     cin >> count;
15     cout << "请输入土地(平方千米): ";
16     cin >> area;
17     cout << "请输入邮编: ";
18     cin >> postcode;
19     return;
20 }
21 void district::input(ifstream & is)
22 {
23     is  >> name >> count >> area >> postcode ;
24     is.get();  // get是什么函数
25 }
26 //显示信息
27 void district::output()
28 {
29     cout << "行政区基本信息如下:" << endl;
30     cout 
31         << " 行政区名:" << name
32         << " 人口(万人):" << count
33         << " 土地面积(平方千米):" << area
34         << " 邮编:" << postcode
35         << endl << endl;
36 }
37 void district::output(ofstream & os)
38 {
39     os 
40         << setw(15) << name
41         << setw(6) << count
42         << setw(6) << area
43         << setw(6) <<postcode
44         << endl;
45 }


districtmanage.cpp

  1 #include<iostream>
  2 #include<string>
  3 #include<fstream>
  4 #include<iomanip>
  5 #include"district.h"
  6 #include"districtmanage.h"
  7 using namespace std;
  8 
  9 //录入函数
 10 void districtmanage::input()
 11 {
 12     district *p, *p2 = NULL;   //建立两个行政区类指针,并让p2指向null
 13     p = head;                  //让p指向head节点
 14     int n=1;                   //定义一个整数赋值1
 15     while (p->next)  //当p的next节点不为空,p就等于下一个节点
 16         p = p->next;
 17     while (n)
 18     {
 19         p2 = new district;  //将p2指向一个新的行政区类对象
 20         p2->input();       //给p2的数据成员赋值
 21         p->next = p2;      //把p2给p的next节点
 22         p2->next = NULL;  //把p2的next节点赋值null以便下次调用input函数
 23         p = p->next;  //把p的next节点赋给p
 24         districtmanage::setkey(1);   //让key=1
 25         cout << "按1继续,按0返回 : ";
 26         cin >> n;       //按1继续循环,继续输入操作
 27     }
 28 }
 29 
 30 
 31 //子查找函数
 32 int districtmanage::find(district *p1, int postcode1, char *pn)//在found里调用find
 33 {
 34     district *p;
 35     p = head;
 36     while (p->next)     //这一步
 37     {
 38         (*p) = (*p1);
 39         if ((p->next)->getpostcode() == postcode1 || !strcmp((p->next)->getname(), pn))  //如果你输入的邮编
 40             return 1;                      //或你输入的name和这个节点的相同,就返回1,然后继续对下一个节点操作
 41         p = p->next;   //和这一步一起对指针节点们进行了遍历
 42     }
 43     return 0;
 44 }
 45 
 46 
 47 //查找函数
 48 void districtmanage::found()   
 49 {
 50     district *p;   //建立一个行政区类的指针
 51     p = head;      //将p指向head节点
 52     int postcode = -1, n = 9;  
 53     char name[20] = "^";  //默认name的初始值为^
 54     do
 55     {
 56         cout << "1:按邮政编码查找,2:按行政区名查找: ";
 57         cin >> n;
 58     } while (n<1 || n>2);
 59     if (n == 1)
 60     {
 61         cout << "请输入邮编: ";
 62         cin >> postcode;
 63     }
 64     if (n == 2)
 65     {
 66         cout << "请输入行政区名: ";
 67         cin >> name;
 68     }
 69     if (!find(p, postcode, name))
 70     {
 71         cout << "SORRY!找不到你要查找的内容!" << endl;
 72         return;  //在if里return这里是程序结束的意思
 73     }
 74     (p->next)->output();  //如果找到了相应的节点,就把它输出到屏幕上
 75 }
 76 
 77 
 78 //删除函数
 79 void districtmanage::del()  //函数的缺点是只能删掉一个
 80 {
 81     district *p, *p2;  //定义两个行政区类的指针
 82     int postcode;      //定义一个整数postcode
 83     cout << "请输入邮编: "; //输入邮编
 84     cin >> postcode;    
 85     p = head;              //将p指向head节点
 86     if (!find(p, postcode, "^"))   //如果找不到邮编和p指针
 87     {
 88         cout << "SORRY!找不到你要删除的内容!" << endl;  //就输出 SORRY!找不到你要删除的内容! 
 89         return;
 90     }
 91     (p->next)->output();   //调用p的next子对象(p的下一个节点)的输出
 92     p2 = p->next;          //将p的next节点给p2 
 93     p->next = p2->next;     //然后让p的下一个节点等于p2的下一个节点
 94     delete p2;              //删除p2对象
 95     districtmanage::setkey(1);  //给key赋值1
 96 }
 97 //显示函数
 98 void districtmanage::show()  
 99 {
100     district *p;
101     p = head;
102     while (p->next)
103     {
104         (p->next)->output();
105         p = p->next;
106     }
107 }
108 //修改函数
109 void districtmanage::mend()
110 {
111     district *p;     //定义一个行政区类的指针
112     int postcode = -1, n;  //定义两个整数
113     char name[20] = "^";    //将name的默认值定义为^
114     do
115     {
116         cout << "1:按邮编修改,2:按行政区名修改: ";//
117         cin >> n;
118     } while (n<1 || n>2);
119     if (n == 1)
120     {
121         cout << "请输入邮编: ";
122         cin >> postcode;
123     }
124     if (n == 2)
125     {
126         cout << "请输入行政区名: ";
127         cin >> name;
128     }
129     p = head;
130     if (!find(p, postcode, name))
131     {
132         cout << "SORRY!找不到你要修改的内容!" << endl;
133         return;
134     }
135     (p->next)->output();  //p的下一个指针输出
136     (p->next)->input();   //p的下一个节点调用input函数给数据成员赋值
137     districtmanage::setkey(1);  //给key赋值1
138 }
139 //保存函数
140 void districtmanage::save()
141 {
142     district *p;
143     p = head;
144     ofstream os("district.txt", ios::out);
145     if (districtmanage::getkey() == 1)
146     {
147         while (p->next)
148         {
149             (p->next)->output(os);
150             p = p->next;
151         }
152     }
153     cout << "文件已保存! " << endl;
154     districtmanage::setkey(0);
155 }
156 //初始化函数
157 void districtmanage::begin()
158 {
159     district *p, *p2;  //p2只是用来给p以及p的next节点赋值的
160     p = head;
161     clear();
162 
163     ifstream is("district.txt", ios::in);
164     if (!is)
165     {
166         ofstream os("district.txt", ios::out);
167         os.close();
168         return;
169     }
170     int num = -1;
171     while (1)
172     {
173         long t=1;
174         num = -1;
175          is.tellg();   //获取文件长度
176         is >> num;
177         
178         is.seekg(t);  //找到这个文件的第t个字节
179         if (num<0)
180         {
181             is.close();
182             return;
183         }
184         p2 = new district;
185         p2->input();
186         p->next = p2;  //把p2给p的next节点
187         p2->next = NULL; //把p2的next节点赋值null以便下次调用input函数
188         p = p->next;  //把p的next节点赋给p
189     } 
190 }
191 //清空函数 
192 void districtmanage::clear()
193 {
194     district *p, *p2;
195     p = head->next;     
196     while (p)
197     {
198         p2 = p;
199         p = p->next;
200         delete p2;
201     }
202 }
203 
204 //主选菜单函数
205 char districtmanage::mainmenu()
206 {
207     char n[6];
208     cout << "\n\n     ☆☆☆☆欢迎进入吉林省行政区划管理系统☆☆☆☆" << endl << endl;
209     cout << "     * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
210     cout << "     * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
211     cout << "     * *         1:   录入行政区信息                 * *" << endl;
212     cout << "     * *         2:   显示行政区信息                 * *" << endl;
213     cout << "     * *         3:   查找行政区信息                 * *" << endl;
214     cout << "     * *         4:   删除行政区信息                 * *" << endl;
215     cout << "     * *         5:   修改行政区信息                 * *" << endl;
216     cout << "     * *         6:   保存行政区信息                 * *" << endl;
217     cout << "     * *         0:   退出系统                       * *" << endl;
218     cout << "     * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
219     cout << "     * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
220     cout << "                 请选择:";
221     cin >> n;
222     return n[0];
223 }


 

main.cpp

 1 #include"district.h"
 2 #include"districtmanage.h"
 3 #include<iostream>
 4 using namespace std;
 5 void main()
 6 {
 7     districtmanage p;
 8     int k = 1;
 9     char n;
10     p.begin();             //先调用begin函数
11     while (k == 1)
12     {
13         n = p.mainmenu();     // 将p.mainmenu的值赋给n
14         switch (n)
15         {
16         case '1':p.input(); break;
17         case '2':p.show(); break;
18         case '3':p.found(); break;
19         case '4':p.del(); break;
20         case '5':p.mend(); break;
21         case '6':p.save(); break;
22         case '0':
23             if (p.getkey() == 1)     //如果p中key为1
24             {   
25                 cout << "\t\t\t是否保存? 1 : 保存 0:不保存 : ";
26                 cin >> k;           
27                 if (k == 1)
28                     p.save();
29             }
30             p.clear();       //k=0,执行clear函数,清除所有数据
31             k = 0;            //最后将k归零,防止输入了别的数最后k也能为0
32                 break;        //可以选择1或0后跳出while循环
33         }
34     }
35 }

 

 

 

district.h

 1 #pragma once
 2 #include<string>
 3 #include<fstream>
 4 #include<iomanip>
 5 using namespace std;
 6 class district
 7 {
 8 protected:
 9     char name[20];       //    行政区名                  
10     float count;         //    人口
11     float area;          //   土地面积
12     int postcode;           //邮编
13 
14 public:
15     district *next;
16     district(){ }
17     void output();
18     void input();
19     void input(ifstream & is);
20     void output(ofstream & os);
21     char* getname(){ return name; }
22     int getpostcode(){ return postcode; }
23     float getcount(){ return count; }
24     float getarea(){ return area; }
25 
26 };

 

districtmanage.h

 1 #include<string>
 2 #include<fstream>
 3 #include<iomanip>
 4 #include"district.h"
 5 using namespace std;
 6 class districtmanage
 7 {
 8 public:
 9     districtmanage(){ head = new district ; head->next = NULL; key = 0; }
10     ~districtmanage(){ delete head; }
11     void input();                                          //录入函数
12     void mend();                                           //修改函数
13     void del();                                            //删除函数
14     int find(district *p, int postcode1, char *pn = "^");  //子查找函数
15     void found();                                          //查找函数
16     void show();                                           //显示函数
17     void save();                                           //保存函数
18     void begin();                                          //初始化函数
19     void clear();                                          //清空函数
20     char mainmenu();                                       //主菜单函数
21     int getkey(){ return key; }
22     void setkey(int k){ key = k; }
23 private:
24     district *head;
25     int key;
26 };


我们要求在VC6.0上运行,所以emmmm......

不喜勿喷。溜了溜了。

 

posted @ 2019-07-15 15:43  清均qj  阅读(415)  评论(0编辑  收藏  举报