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......
不喜勿喷。溜了溜了。